【操作系统】操作系统的启动过程

问题一:计算机在开机时候发生了什么?

首先,了解计算机的思想,最早计算机的思想:图灵机

图灵机思想

图灵机的过程决定了计算机执行的方式,计算机如何执行:取指执行

所以当打开电源后,计算机首先取出一条指令执行。

打开电源后计算机做了什么

BIOS:basic input output system

IP:指令指针寄存器

CS:代码段寄存器

在Intel结构下一个地址由两部分组成,即IP和CS,形成一个地址:CS << 4 +IP

磁盘中0磁道0扇区为操作系统的引导扇区:是操作系统中的第一段代码

通过设置CS和IP,指向0x7c00处的代码,并执行。

读入的引导扇区

引导扇区中存放的程序为bootsect.s(s代表汇编),该程序的作用为将操作系统的如下部分依次读入执行。

操作系统启动盘

首先读入执行setup模块:

此时,执行setup模块后会将microsoft的logo以及loading system打印在屏幕上,并接着读入操作系统的system模块。

问题回顾:计算机开机时候bootsec如何工作?

操作系统在硬盘上,计算机的的工作原理就是取指执行。

所以操作系统的引导扇区(即bootsec.s程序)完成这个功能:将操作系统从磁盘上加载到内存里,之后才可以取指执行。即首先读入setup(将操作系统的logo打印在屏幕上),然后将system模块读入。

setup详解:

1.读入光标位置,扩展内存数(即内存的大小),显卡参数,根设备号。

2.移动代码,最后使得内存中从0地址开始是操作系统,之后的内存才存放其他内容。

3.从16位模式进入到保护模式(32位模式),因为16位模式能表示的地址数不够了。此时意味着CPU的地址解释方式变化。

4.通过调整CS和IP(使用新的解释方式)使得指到0地址,即跳到system模块执行。

所以操作系统的顺序必须为:

bootsec-->setup-->system

system模块详解:

第一部分代码为head.s,该代码进行初始化 ,设置页表,GDT表(全局描述表),IDT表(中断描述符表,记录了0~255的中断号和调用函数之间的关系。)

makefile文件用于控制程序的执行规则

然后从head.s跳转到执行main.c函数(为c语言的函数)

此时进入main.c函数,用于初始化参数

main函数永远没有返回,在main函数中进行一系列的初始化,其中包括内存 初始化即mem_init:

从该程序可以看出页表的每一块的大小为4k,将没使用的内存全部置为0。


总结

操作系统启动时候做的事:

1.将操作系统读入内存

2.初始化(操作系统管理硬件,对硬件结构进行初始化,获得硬件参数等)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一 预备 在8086系统CPU中,有两个寄存器CS和IP用于保存CPU接下来需要执行的指令地址,具体计算方法为 C...
    清雨季阅读 2,782评论 0 1
  • 大家好我是猪猪!今天给大家说一下linux启动流程,linux系统启动开机过程指的是从打开计算机电源直到LINUX...
    俗人_0342阅读 1,069评论 0 1
  • 实验一内容: 阅读《Linux内核完全注释》的第6章,对计算机和Linux0.11的引导过程进行初步的了解; 按照...
    寒夏凉秋阅读 7,049评论 1 8
  • 前面应该有一章,“一:操作系统的概述”,懒得写,但是很重要,最好去看下视频,如果有人看的话,以后有空再补 首先我们...
    Wcdaren阅读 1,774评论 0 1
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,603评论 28 53