操作系统启动过程详解:从BIOS到内核加载

5星 · 超过95%的资源 需积分: 32 138 下载量 64 浏览量 更新于2024-07-25 4 收藏 12.82MB PDF 举报
“高级操作系统(一)杨力祥课件,主要涵盖了从开机加电到执行main函数之前的系统启动过程,包括BIOS启动、实模式、中断向量表、中断服务程序、加载操作系统的各个阶段,以及相关代码实现的细节。” 在计算机科学中,操作系统是管理和控制计算机硬件与软件资源的核心软件。高级操作系统的学习涉及到许多底层概念和技术,本课件由杨力祥教授提供,旨在深入解析这一主题。以下是对课件部分内容的详细解释: 1. **启动流程**:计算机开机时,首先执行的是固化在主板上的BIOS(基本输入输出系统)。BIOS的主要任务是进行自检(POST),然后根据用户设定的启动顺序加载启动设备上的引导程序。 2. **实模式**:BIOS在16位实模式下运行,此时CPU的地址线未被完全利用,只能访问1MB的物理内存。实模式下的地址计算基于段机制,每个段由16位段基址和16位偏移地址组成,形成20位的物理地址。 3. **中断向量表和中断服务程序**:中断向量表存储了所有可能中断的处理程序地址和相关数据。当系统接收到硬件或软件中断请求时,通过中断向量找到对应的中断服务程序来处理。 4. **加载操作系统程序**:BIOS通过读取硬盘上的引导扇区(通常是第一个扇区,即MBR,主引导记录)来加载操作系统。这个过程通常分为两个阶段:bootsect(引导扇区)和setup(设置程序)。 5. **bootsect**:引导扇区是操作系统加载的第一部分,它负责将setup程序加载到内存的特定位置。在示例代码中,bootsect被加载到0x07c0段,并随后移动到0x9000段,以便为setup腾出空间。 6. **内存布局**:BOOTSEG、INITSEG、SETUPSEG、SYSSEG和ENDSEG等常量定义了不同部分在内存中的起始位置。例如,SETUPSEG位于0x9020,而kernel则从SYSSEG(0x1000)开始加载。 7. **复制bootsect**:引导扇区代码包含了一个复制自身到新位置的循环,使用`rep movsw`指令来完成。完成后,跳转到新位置(INITSEG)继续执行。 8. **初始化段寄存器**:在新位置执行时,需要更新段寄存器(如DS、ES、SS)以指向新的代码和数据段。同时,堆栈指针(SP)也需要设置,以确保正确地处理调用和返回。 9. **加载setup**:setup程序进一步加载操作系统内核,并为进入保护模式做准备。保护模式允许更复杂的内存管理、多任务和内存保护。 本课件详细阐述了操作系统启动过程中的一些关键步骤,是学习高级操作系统和Linux源码分析的重要参考资料,对于理解计算机系统底层运作有极大帮助。