操作系统引导过程是计算机启动时的关键步骤,涉及到计算机硬件初始化、BIOS(基本输入输出系统)功能、引导程序的加载以及操作系统内核的加载等多个环节。以下是详细的解释:
1. **计算机启动流程**:
- 当计算机电源键被按下,主板接收到电信号,供电系统开始工作,为系统提供电力,并通知BIOS准备就绪。
- BIOS执行POST(加电自检),检查硬件设备是否正常,如内存、CPU、磁盘控制器等。
- POST完成后,BIOS读取其内部的配置信息,确定引导设备的顺序。
- BIOS依次尝试从设定的驱动器中寻找引导扇区,即包含有效引导程序的磁盘。
2. **引导程序的理解**:
- 引导程序通常位于磁盘的第一个扇区(0磁头,0磁道,1扇区),大小为512字节,其结尾的两个字节必须是"55 AA",这是识别引导扇区的标识。
- BIOS将引导扇区加载到内存的0x0000:0x7c00处,如果检测到"55 AA",则认为该磁盘可引导。
- 引导程序的主要任务是加载操作系统的核心部分到内存中,以便后续执行。
3. **读取磁盘扇区**:
- 为了加载操作系统,引导程序需要通过某种方式读取磁盘内容。这可以通过直接访问磁盘I/O端口或者使用BIOS中断实现。
- 直接访问I/O端口的方法灵活但复杂,而通过BIOS中断相对简单,但可能受到一些限制,如不能将数据读取到内存的特定区域(中断向量表所在区域)。
4. **BIOS中断处理**:
- 中断处理是CPU响应外部或内部事件的方式。中断向量表存储在内存的0x00000~0x003FF处,包含了每个中断服务程序的地址。
- CPU在加电时,最初的1MB内存由BIOS预先管理,其中0x00000~0x003FF用于中断向量表,不能被覆盖。
5. **BIOS 13号中断**:
- 读取磁盘扇区主要依赖于BIOS的13号中断。在调用此中断前,需要设置相关寄存器,如:
- AH寄存器:设置为2,表示选择读磁盘功能。
- DL寄存器:设置为要读取的驱动器号。
- CH寄存器:设置为要读取的磁头号。
- CL寄存器:设置为要读取的起始扇区号。
- AL寄存器:设置为要读取的扇区数量。
6. **引导程序加载内核**:
- 引导程序在读取并校验完磁盘上的操作系统核心部分后,会将控制权转移给操作系统内核。
- 内核进一步初始化系统环境,加载驱动程序,分配资源,最终进入用户空间,准备执行用户程序。
整个引导过程是操作系统运行的基石,理解这一过程有助于我们更好地理解和调试系统启动问题,以及进行低级别的系统编程。