操作系统其实是一个取指执行的过程.
其中的指就是指针,PC(program count程序计数器)指针,然后从内存找到命令找到地址给cpu处理执行.
以x86 windowx操作系统为例
计算机开机时
(1) 让cpu处于实战模式.
cpu模式分两种,实战模式和保护模式,两种模式的寻址不同,实战模式是CS<<4+IP寻址.
(2)寻址
CS=0xFFF;IP=0x000 寻址找到0xFFF0 (ROM BIOS映射区) 只读内存 Base Input/Output System,这里面有一段代码.
(3)检查
因为前面读取的那段内存会执行一段代码,检查硬件(RAM,键盘,显示器,软硬磁盘)所以有时候电脑出故障了就会开不了机.
(4)读取磁盘
将磁盘0磁道0扇区读入0x7c00处.512字节为一个扇区,0磁道0扇区就是引导扇区bootsect.s,也就是操作系统的第一段代码
(5)bootsect
bootsect叫引导扇区其实就是起一个引导作用,输出开机画面,并且转入0x9002 setup的地盘.
(6)进入setup
setup占四个扇区,做了很多重要的事情,这里重点说5个
1.知道你计算机长啥样,进行一些参数的获取(光标位置,扩展内存数,显卡参数,根设备号...)
2.将操作系统的system模块移动到内存的0地址处.
3.初始化gdt表(全局描述符表)
4.进入cpu保护模式也就是将PE修改成1,也就是让cpu的电路改一下更改cpu寻址操作.此时保护模式寻址CS的含义为索引从gdt中查表,然后加上IP进行寻址(CS所以叫选择子)
5.寻址进入system模块.
为什么进入保护模式呢,原因是如果是实战模式的寻址计算操作最多表示20位也就是1M的内存大小,但计算机的内存是很大的所以要换一种寻址计算操作.
(7)进入到system模块.
也就是到了模块的第一部分代码head.s,head.s又会初始化一遍gpt表.然后进入main.c(是通过函数是方式,压栈进入)
(8)main.c进入
main.c是一个死循环,里面是一些init初始化函数:内存,中断,设备,时钟,cpu... 如果main.c断了,栈弹出然后栈顶为head.s设置的一个中断,然后死机.
最后一个鲜活的桌面诞生了.
总结
所以宏观的说操作系统一开始在磁盘,然后从磁盘转入内存,然后进行一些初始化的操作
操作系统的故事从现在开始!