操作系统启动过程

2023年 8月 13日 50.6k 0

  • BIOS读入硬盘第1磁道,第一扇区的程序,一共512字节,读取到内存0x7c00到位置。这部分内容是源码中boot/bootsect.s的内容,CPU将从0x7c00处开始执行bootsect.s中的指令。此时CPU处于实模式。
  • image.png

  • 执行bootsect.s代码,会将0x7c00 - 0x7e00的内容,也即是整个bootsect.s内容拷贝到0x90000 - 0x90200。然后跳转到新区域继续执行bootsect.s的代码
  • image.png

  • 继续执行bootsect.s代码的时候,CPU会继续从磁盘读入后续4个扇区的内容,也即是boot/setup.s的程序,一共 4 * 512字节,然后写入到0x90200 - 0x90a00区域。紧接着继续从磁盘读入 system 模块,写入到内存0x10000 - 0x90000区域(不一定占满全部,只是假设了system模块大小不会超过0x80000的大小,即512KB)。bootsect.s就执行完了,准备开始执行setup.s
  • image.png

  • 执行setup.s代码的时候,系统会通过BIOS获取机器的一些参数信息,比如说内存大小,显存信息等,这些数据放置在0x90000 - 0x90200区域内。也就是说把bootsect.s的代码给覆盖了。
  • 操作系统启动过程-1

    具体这块区域中记录了什么,如下图

    image.png

  • 继续执行setup.s,系统会将system模块整体移动到0x00000 - 0x80000 的区域。然后开启CPU保护模式,将程序指针跳转到0x00000,开始执行system中的代码
  • image.png

  • system的开头是boot/head.s的程序,主要做了CPU保护模式下一些寄存器的初始化,页表初始化等操作。最后跳转至/init/main.c中 的main函数,操作系统从此开始进行自身的初始化工作,开始运行。
  • image.png

    参考

  • www.oldlinux.org/Book-Lite/
  • www.bilibili.com/video/BV19r…
  • time.geekbang.org/opencourse/…
  • 相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论