全网最硬核解读计算机启动原理( 四 )


其实我们可以按照之前的思路猜测,BIOS 用很少的代码就把 512 字节的启动区内容加载到了内存,并跳转过去开始执行 。那按照这个套路,这 512 字节的启动区代码,是不是也可以把更多磁盘中存储的操作系统程序,加载到内存的某个位置,然后跳转过去呢?
没错,就是这个套路 。所以 BIOS 负责加载了启动区,而启动区又负责加载真正的操作系统内核,这配合默契吧?
由于用于启动盘的磁盘是人家写操作系统的厂商制作的,俗称制作启动盘,所以他也肯定知道操作系统的核心代码存储在磁盘的哪个扇区,因此启动区就把这个扇区,以及之后的好多好多扇区(具体取决于操作系统有多大)都读到内存中,然后跳转到开始的程序开始的位置 。跳转到哪里呢?这个就不像 0x7c00 这个数那么经典了,不同的操作系统肯定也不一样,也不用事先规定好,反正写操作系统的人给自己定一个就好了,别覆盖其他关键设备用到的区域就好 。
八、操作系统内核写了啥好了现在经过好几轮跳跳跳,终于跳到内核代码啦,我们来一起回顾一下:

按下开机键,CPU 将 PC 寄存器的值强制初始化为 0xffff0,这个位置是 BIOS 程序的入口地址(一跳)该入口地址处是一个跳转指令,跳转到 0xfe05b 位置,开始执行(二跳)执行了一些硬件检测工作后,最后一步将启动区内容加载到内存 0x7c00,并跳转到这里(三跳)启动区代码主要是加载操作系统内核,并跳转到加载处(四跳)
经过这连续的四次跳跃,终于来到了操作系统的世界了,剩下的内容,可以说是整个操作系统课程所讲述的原理,分段、分页、建立中断、设备驱动、内存管理、进程管理、文件系统、用户态接口等等 。
这些名次在操作系统的课程中你可能都或多或少听过,如果你好好学了的话也一定知道大概的原理,不过像笔者这样从头到尾研读过 linux 内核源码的硬核狗来说,这些概念不只是书本上枯燥无味的概念,而是活灵活现在操作系统的每一行代码上,有的展现了作者无比的智慧,有的让我看到了作者由于硬件设定不得已做出的屈服,建议你也找时间读一读,与我交流一下感悟哈哈 。
九、参考资料好了,这回我真的要结束了,相信如果你真的看完了全文,计算机的启动过程,可以说有了比较具象的了解 。如果你想深入细节,也就是了解整个过程的每一点,那可要下功夫了 。
转载自:https://www.cnblogs.com/flashsun/p/13972241.html




推荐阅读