本文引用《Linux0.11 引导启动与初始化》,这里向作者致谢,总结的不错。
前言
本文并不会特别详细的说明PC开机的完整流程,因为整个过程涉及到的知识点太多了,一篇文章也讲不好,我们沿着《x86汇编语言:从实模式到保护模式》的顺序来分析PC的开机流程,然后以linux0.11为例进行分析。这里要向《x86汇编语言:从实模式到保护模式》的作者致敬,写的太棒了。
PC启动流程
在前面的文章电脑启动过程小结中是从大的节点来分析的,这里再从程序的角度来做下总结:
- 1、上电,CPU自动执行BIOS代码。
- 2、BIOS实现外围设备自检,提供服务(显示、键盘)调用,然后从磁盘中读取MBR,即主引导记录。
- 3、MBR的主要工作有3点:由实模式到保护模式的准备(GDT)、切换到保护模式、从硬盘中加载操作系统。注意:之前的代码都是在实模式下进行的,不是在保护模式
- 4、MBR还会开启内存分页,我们基本上可以认为,没有内存分页功能的保护模式,意义并不大,因为操作系统支持多任务的前提条件,最核心的就是对于内存的管理,也就是需要 内存分页机制。
- 5、操作系统加载到内存后,CPU控制权交给操作系统,操作系统在CPU保护模式下运行,通过内存分页机制来管理内存,给应用程序分配线性地址、内存空间,进而实现应用程序的加载和调度。
- 6、操作系统通过专业的任务调度算法,实现任务的动态加载和调度。
我们不妨将intel的CPU当成一个功能强大的单片机来看,作为程序员,对于单片机的开发,也涉及到两种开发方式:裸机开发和基于操作系统开发。对于PC CPU来讲,它就是为了多任务而生的,所以不会被拿来做裸机开发,但是,但是,但是,即便是基于操作系统开发,那么对于CPU刚刚启动时,对于CPU是不可能上来就直接跑操作系统的,这里面有个空档期,就是CPU上电,到操作系统运行之间的空档期,这个空档期本质上就是裸机跑程序,实现各种的准备工作。
上图中就代表了这个空档期的工作,在没有开启内存分页功能之前,对于物理内存的管理,还是相对简单的,但是不开启内存分页机制,linux和windows都是无法发挥他们的强大管理能力的。
Linux0.11启动流程
Linux0.11的启动流程其实也是符合上图中的描述的,接下来我们就简单的分析一下Linux0.11的启动流程。
1、执行程序顺序
小结
(1)先有CPU的架构,实模式、保护模式等,然后再有操作系统的,当然CPU的架构设计也会考虑多用户、多进程设计需求,可以简单的说,CPU提供了一座大楼的框架,而操作系统基于这个框架做了各种定制化装修,对于应用程序来说,因为有了操作系统,不需要研究和看到CPU框架。
(2)可以说,操作系统将CPU的保护模式用到了极致,保护模式也是操作系统的根基之一。
(3)操作系统实现多任务加载、运行、调度,最核心的条件是基于CPU提供的保护模式和内存分页管理,保护模式使得多程序管理更加安全,内存分页 管理带来了虚拟内存的概念,实现内存利用最大化,少量的内存,就能实现多程序共用。