最近在看操作系统,对操作系统启动过程尤为感兴趣,因此查阅相关资料之后总结如下,以后有空准备写写鼠标,键盘的驱动程序和linux的图形界面练练手,话不多说,直接开搞:
1.基础知识:
1.为什么要用计算机,计算机有什么用?
--这个问题,额,还用问,当然是玩游戏,追剧,下软件呗,当然这是一般用途,归结起来就是满足我们的相关需求,帮助我们解决一些实际问题,就像冰箱是拿来储存食物一样,没啥特别的.
2.为什么要用操作系统,搞这么麻烦?
额,我们设想不用操作系统OS,假如你要打一串字符"hello,saber"到屏幕上(别问我为什么要打字符),那么不用OS,你的过程是这样的:给发出指令(我要打字到屏幕上)-cpu给内存通话,叫他把0x700位置处的指令取出来放在显存里面,同理一直挨着,如果不出差错的话(这个概率和中彩票差不多,因为你得知道诸多代码还不搞错?),屏幕上出现hello,saber,ok,是不是费时费力,假如有了OS,只需要一条指令-printf"hello,saber",那么hello,saber就如期而遇,也就是说OS帮助我们使用硬件-这里是指显示器.
回到为什么要打hello,saber这个问题,本质上我们是利用计算机提高生产力,诸如word,ppt等无需多言.
综上,OS帮助我们更简单,高效,正确的使用硬件和软件,最大程度保证不出错,提高我们生产力.
3.计算机是什么?
这-还用回答吗?是的,你别跟我说就是一堆CPU,内存条,键盘,鼠标的收纳箱,你说的这个是裸机,或者你会说计算机是硬件加软件的集合,你说的太官方了,没有掌握到精髓,那么你不服气的问,那计算机是什么?
----我认为计算机就是一个模型的实现,怎么说,我们从历史的角度来看看:
最开始图灵提出了一种模型,想我们炒菜都有一个流程,就那番茄炒蛋来说吧,那么把步骤写出来,照搬到计算机里面,那么枯燥重复的工作不就计算机帮我们完成了么,想法不错,于是有了控制器(cpu前身)来执行炒菜,纸带写入步骤,于是简单的可以运行的计算机就成型了,后来人们想你这个只能炒番茄炒蛋,那我要是茄子鸡丁呢?于是想到的办法就是修改逻辑,以前的逻辑是番茄鸡蛋,现在的逻辑是番茄鸡蛋+茄子鸡丁,就可以炒2个菜了,同理,事先输入N个逻辑,就实现了N个菜,听着怎么这么耳熟?对了就是冯诺依曼的存储程序概念,上面说的菜谱就是一个程序,输入qq信息,打开qq,得到qq信息,就这么简单,所以说计算机是一个逻辑,一个模型的实现.
2.OS开机过程:
如下:
Step1:首先插上电源,电源按钮打开,随后你会看见一段代码在飞速奔跑,美其名曰BIOS(Basic Input Output System)-基本输入输出系统,你说有什么用?直观的作用就是开机检查,检查什么?-内存条是不是查好了?线是不是插紧了?内存条是不是坏了?为什么要检查?不检查你内存条坏了进入系统岂不是白忙活一场?
-----官方流程:开机-BIOS-寻地址-开机自检-中断调用-载入引导扇区进入0x7c00处.
-----为什么?寻址--取指执行,你得有地址吧,于是进入固定的地方开始开机,查找地址.
自检?---检查有啥毛病没?线是不是都插好了?
中断调用?--进入BIOS (一般快捷键为F9)适用于参数设置比如开机磁盘,查看系统信息---尤其是用于U盘重装系统.
载入引导扇区?--为后续OS做准备.
Step2:BOOT (BOOTSEC.S)-load_setup-OK_read
----作用:1.将BIOS从0X7C00移动到0X9000-为啥?---便于为操作系统腾出空间
2.加载LOAD模块,13号中断,指出BIOS读扇区中断扇区位置
Step3:OK_load_SETUP---作用1:显示字符,什么字符?--没错就是你开机的那个移动的进度条上面的那个图标--WINDOWS XP
----相关代码参数:mov cx #24--字符数字
msg1.ascii"WINDOWS XP"
作用2:交出控制权,读入setup,读入system模块.
Step4:SETUP.S-作用:初始化参数,成表,移动代码到0x0000处,进入保护模式.
---初始什么参数?--初始化系统参数比如你电脑是几GB的等等.
---成表?--也就是数据结构,存储上述信息.
------移动代码?--操作系统在0x0000开始的地方等你,你不过去?
------进入保护模式?--也就是地址翻译与前面的实模式不一样,实模式是cs<<4+ip表示内存地址,现在是cs+ip,不过现在的cs是查找所谓的全球描述表-GDT,然后进行合成找到地址.---为什么要这么做?因为cs<<4+ip最多表示20位,现在要32位(因为现在内存地址>1M,一般是1G,4G)所以必须采取新的地址翻译方式.
Step5:System模块-Linux Makefile-Head.s
disk:image--树状结构
Step6:进入main.c函数:
也就是开始内存,中断,设备,时钟,cpu等初始化,拿初始化内存为例,初始化内存就是初始化内存表--一个存放内存使用信息的内存数组,4K/组.
Step7:熟悉的Windows Xp桌面.
总结:OS开机就做了两件事情:首先把在磁盘中的操作系统载入内存取指执行,然后进行初始化,也就是setup,system,main.c.