趣谈Linux操作系统期末测试

答题规范

以下摘自趣谈 Linux 操作系统

第一,回答尽量体系化。不仅仅回答这个问题的知识点,还可以简单描述一下这个点背后完整的体系,然后根据面试官接下来的追问,更细地描述其他相关的内容。
这样做的好处是:一,防止你因为这个点没有回答好而丢分所有的分;二,可以体现你的知识掌握比较全面,可以加分;三,还可以避免冷场和尬聊。
面试官开放式的提问,最不想听到的就是“封闭式“回答。有的面试者“惜字如金“,有的人能聊一个小时,有的人不到半个小时就答完了,让面试官没有办法深入全面的了解你。

第二,在体系化的阐述过程中,可以加入一些你使用过的相关工具或者技巧的阐述。例如,操作系统干这个事情有十个步骤。第三步会在某个日志文件里面打印这样的日志,如果发现打印出 xxx 说明可能有错误,第七步可以通过某个命令行查看某某状态,等等。诸如此类,可以让面试官感觉到你是实战派而非理论派。

第三,在体系化的阐述过程中,如果能加入一些项目经验就更好了。例如,在第九个步骤,当时在做某项目的时候,因为客户现场的版本问题,导致了什么结果,最后如何进行解决的等等。
我刚才说了,面试官问问题的时候,脑子里都是有实际工作场景的。如果你能把他带到你的工作场景里面,有利于面试官对你当时的情形感同身受,你的分数自然不会很低。

因为对操作系统的理解确实还不够,所以本次考试采取开卷考试的形式,并且卷面内容会不断更新迭代,以上。

开始考试

说一下操作系统启动和初始化的过程

在面试中遇到这个问题我会使用从整体到细节的答题思路,首先回答最接近人类思维的过程:

然后再回答每一个过程中的细节。

BIOS 时期

在按下电源键以后,主板就加电了。主板上的 ROM(Read Only Memory,只读存储器)中固化了一些初始化的程序 —— BIOS(Basic Input Output System),与平时说的内存 RAM(Random Access Memory,随机存取存储器)不同,ROM 是只读的,而 RAM 是可读可写的。

在 x86 系统中,将 1M 空间最上面的 0xF0000 到 0xFFFFF 这 64K 映射给 ROM。电脑刚加电的时候会做一些重置工作,将 CS 设置为 0xFFFF,将 IP 设置为 0x0000,所以第一条指令就会指向 0xFFFF0(CS 左移一位或 IP),这个地址正好在 ROM 的范围里。这里有一个 JMP 指令会跳转到 ROM 中做初始化工作的代码,于是 BIOS 开始进行初始化代码工作。

这个过程主要做了三件事:

  1. BIOS 自检,检查硬件是否正常,如果异常会通过蜂鸣声或者键盘指示灯来发出警告;
  2. 建立中断向量表和中断服务程序,使用键盘、鼠标都需要触发中断;
  3. 内存空间映射显存空间,在显示器上显示一些字符。

bootloader 时期

想要初始化操作系统,首先需要找到操作系统在哪里。在 BIOS 的界面上,可以看到不同的启动项,BIOS 按照这个顺序,把控制权交给排在第一位的存储设备。这时,计算机读取该设备的第一个扇区,也就是读取最前面的 512 个字节。如果这 512 个字节的最后两个字节是 0x55 和 0xAA,表明这个设备可以用于启动;如果不是,表明设备不能用于启动,控制权于是被转交给”启动顺序”中的下一个设备。

这最前面的 512 个字节,就是 MBR(Master boot record,主引导记录)。

“主引导记录”只有512个字节,放不了太多东西。它的主要作用是,告诉计算机到硬盘的哪一个位置去找操作系统。

主引导记录由三个部分组成:

  (1) 第1-446字节:调用操作系统的机器码。

  (2) 第447-510字节:分区表(Partition table)。

  (3) 第511-512字节:主引导记录签名(0x55和0xAA)。

是结束也是开始

站在巨人的肩膀上

  1. 趣谈Linux操作系统
  2. 计算机是如何启动的?
  3. Linux 的启动流程