操作系统:计算机开机背后的故事(预备篇)

各位粉爷们,实在不好意思,断更这么多天,先给大家道个歉。说一个最近的经历,和小伙伴一起面试了一家不错的外企,包括基本问答和手撕代码。幸运的是,我们都通过了面试顺利拿到offer,但不幸的是,我的月薪资比小伙伴低400块,属于第二档工资,总共的话应该有至少四档工资。说实话,刚开始知道的时候心里肯定很不是滋味,但仔细想想面试过程,手撕代码环节表现确实很nice,但基本问答中确实有两三个涉及底层的问题没回答上来,具体细节如果大家感兴趣的话随后抽时间单独分享。现在只想说:加油,就是干!

近阶段打算借助哈工大李治军老师的操作系统课,打一下操作系统的基础,所以最近可能主要以操作系统作为分享的主要内容。但我会把该部分内容写成一个系列,通过多个故事来深入操作系统,做到能够修改操作系统的CPU管理、屏幕输出、系统接口和内存管理等。

今天主要从我们平时操作过无数遍的开机场景进行梳理,主要来看看我们按下计算机的开机按钮后,具体发生了哪些故事?


预备:什么是操作系统?

在开始进行故事分享前,先简单总结下操作系统的具体概念:

  • 操作系统是计算机硬件和应用软件之间的一层软件,主要负责管理计算机硬件(包括CPU管理、内存管理、终端管理、磁盘管理、文件管理、网络管理和多核管理等)并为上层的应用软件提供访问接口。

从打开电源开始……

打开电源时,计算机的开机界面背后到底发生着什么样的故事?

我们都知道,打开电源后计算机就开始工作了,那么计算机到底是怎么工作的?这就是第一个故事。

还记得冯·诺依曼吗?他提出了存储程序的思想,将程序和数据都存放在计算机内部的存储器中,计算机在程序的控制下一步一步进行处理。

那么计算机具体是怎么处理程序和数据的呢?看下图

指令指针(Instruction Pointer,IP)永远指向存储器中将要访问的第一条指令,控制器从存储器中获取指令,借助运算器进行执行,这个过程就是我们常说的「取指执行」,第一个故事的谜底到此揭晓。

既然已经明白计算机是取指执行,那么就有了第二个故事:打开电源后,计算机执行的第一条指令是什么?


第一条指令的故事……

先来思考一下,计算机开机执行的第一条指令存放在哪里

计算机主要有硬盘、RAM和ROM可以用来存储数据。硬盘是可以更换的,试想一下如果指令存放在硬盘中,那岂不需要任何一个硬盘厂家都要在硬盘中划分出一块区域来存放开机需要执行的指令,还必须要求这块区域不能被用户格式化,那平时我们格式化硬盘为什么不会影响计算机的正常开机呢?所以,第一条指令肯定不是存放在硬盘中的。RAM为随机存取存储器,如计算机内存,其掉电不保存,无法满足要求。只剩只读存储器ROM了,掉电也可保证数据不会丢失,这也是计算机刚上电时,内存唯一有代码的地方。

重装过系统的朋友应该有所体会,即便计算机未安装操作系统,在开始时也会有一定的响应,还可以使用BIOS(Basic Input Output System)设置来控制从硬盘、U盘或光盘启动。也就是说,计算机开机执行的第一条指令肯定和BIOS有关。

到这里就可以给出答案了,第一条指令存放在ROM BIOS映射区,地址0xFFFF0处

在此以Intel的x86结构PC为例,看一下启动过程:

  • x86结构PC刚开机时CPU处于实模式,寻址CS:IP的方式为CS左移4位+IP
  • 开机时,CS=0xFFFF,IP=0x0000
  • 寻址0xFFFF0(ROM BIOS映射区)
  • 检查RAM、键盘、显示器、软硬磁盘等
  • 将磁盘0磁道0扇区(引导扇区)的数据读入到0x7c00处
  • 设置CS=0x07c0,IP=0x0000

此时,0x7c00处存放的代码即为从磁盘引导扇区读入的512个字节,该扇区存放着开机后执行的第一段我们可以控制的代码。寻址也设置为0x7c00处,操作系统的故事从这里正式开始……

#Java##Java工程师#
全部评论
请问是哪家外企呢
点赞 回复
分享
发布于 2020-03-19 11:59

相关推荐

1 15 评论
分享
牛客网
牛客企业服务