操作系统的启动

来源:互联网 发布:2016淘宝怎么注册 编辑:程序博客网 时间:2024/06/05 06:33
当按下电源的时候操作系统都干了些什么?
要搞清楚都干了些什么就要搞清楚操作系统是如何启动的。
那么就要从最基本的常识来入手。
认识图灵机


通用图灵机模型中 控制器首先从纸带上面读取控制动作比如到底是加法还是减法啊,到底是做炒鸡蛋啊还是做炒土豆啊。这就好像是我们现在电脑的应用程序了。cpu读取动作,决定到底是QQ啊还是浏览器啊。然后再根据动作来处理数据对象。

认识冯诺依曼存储程序思想

把程序存放在内存中然后用一个指针指向它,自动取指执行。那么按下电源计算机执行的第一段指令是什么呢?
首先得知道两个寄存器 CS 16位的段寄存器  IP 16位的偏移寄存器。处理器执行的指令地址为 
CS<<4 + IP 
 那么开机的时候CS和IP指向哪里呢?
开机时 CS = 0xFFFF  IP = 0x0000
那么开机的时候处理器将寻址 0xFFFF<<4 + 0x0000 = 0xFFFF0
这个地址寻访着我们的ROM BIOS。
这个地方是计算机启动的时候内存唯一有指令的地方。也是固化在硬件中的程序。
执行这个指令干什么呢?首先要检查RAM,显示器,键盘,磁盘等。
然后读取磁盘(就是硬盘)中的0扇区0磁道的512字节的程序。这个扇区就是传说中的引导扇区。
读取引导扇区放在内存中,那么放在哪里呢?不可能随便放。放在了0x7c00处,同时将CS设为0x07c0
IP设为0x0000.
接下来处理器将从0x7c00处开始执行引导扇区的代码,也就是bootsect.s
bootsect.s执行完成后开始执行setup。
bootsect 将操作系统从硬盘上读进来(注:是从硬盘读到内存的0地址开始处,用户使用操作系统时它一直都在内存中取指执行
setup对系统进行初始化。 它读取了一下硬件参数,移动了操作系统,执行了一个关键操作 jmpi 8 0
系统从实模式进入保护模式,实模式只能寻指一M的大小,到了保护模式原来的CS就不是段寄存器了,它编程选择子,通过它去查表gdt,所以在保护模式寻指执行就编程了  cs查表+ip。
这个表gdt初始值也是在setup中的head.s中给的。 

一个操作系统的源码经过编译一定长成下面这个样子。


最后内存的状态应该是这样:


0 0