这本《国科大操作系统高级教程思考题》包含了截至2023年10月24日的教学材料和深入问题,旨在辅助学习者理解与掌握操作系统的高级概念。
操作系统高级教程-思考题提供了国科大《操作系统高级教程》课程的练习题目,更新至2023年10月24日。该资源涵盖了操作系统的基础知识与复杂概念,并通过一系列问题引导学生深入理解其工作原理和机制。
一、BIOS与Bootsect
思考题1:为何计算机启动时执行的是BIOS代码而非操作系统本身的代码?
答案:在计算机开机之初,内存尚未初始化,CPU不能直接从外部设备运行操作系统。因此需要先将系统加载到内存中,而这一过程的初始阶段由BIOS完成硬件检测、设置实模式下的中断向量表和服务程序,并将操作系统的引导扇区加载至0x7C00地址处后跳转至此开始执行。
思考题2:为何BIOS仅加载一个扇区,后续部分则需通过bootsect代码来处理?
答案:按照约定,在启动操作系统时,BIOS只负责从启动盘的第一个扇区读取程序并将其放置在内存的特定位置(0x7c00)。而接下来的操作系统文件则是由开发者编写的bootsect代码完成加载。这种设计简化了整体结构,并确保了高效统一的设计理念。
二、Bootsect与Setup
思考题3:为何BIOS选择将bootsect置于地址0x7C00而非其他地方?
答案:由于内存从0x0000开始的前1KB用于中断向量表,接下来256KB则为BIOS数据区预留。因此不能直接使用该区域存放引导扇区代码。而位置选择在了固定的加载点(即地址为0x7C00)。
思考题4:bootsect、setup和head程序是如何互相配合的?请提供相关代码示例。
答案:
1) bootsect跳转至setup阶段:通过执行`jmpi 0,SETUPSEG;`指令,将控制权转移到位于内存地址0x90200处的setup部分(即CS:IP指向该位置),标志着setup程序开始运行。
2)从setup到head的过渡:首先切换到保护模式后,再通过执行`jmpi 0,8`命令来定位至段选择符为1、特权级为4(对应GDT表中第一个条目)的目标地址处。这实际上指向了位于偏移量0且基址为零的位置——即head程序的起始点。
三、保护模式
思考题5:为何setup结尾使用jmpi 0,8指令而非直接理解成数字8?
答案:这里的数值应该被解读为二进制形式1000。其中,最后两位表示特权级(这里设置为最低级别),而第三位则指明了选择GDT表中的特定条目。通过这种方式确定代码段的基地址和界限等信息。
思考题6:保护模式具体能保护什么?它的作用体现在哪里?
答案:
开启保护模式后,CPU使用GDT来获取所需的物理内存位置,并且除了提供基址外还限制了各个段的最大长度(即“限长”)。这不仅避免了代码或数据的覆盖错误,也防止超出分配范围。此外,在不同权限级别间切换时会对各种属性进行检查和管理;分页机制同样具有保护作用。
特权级的意义在于为操作系统内核提供了强有力的防护措施:硬件层面禁止低等级程序执行某些关键指令,并允许通过设置来限制特定功能的使用(如控制中断处理)。这样,最高级别的核心代码就可以有效防止被普通用户进程篡改或破坏。