1、为什么开始启动计算机得时候,执行得就是 BIOS 代码而不就是操作系统自身得代码
计算机启动得时候,内存未初始化,CPU 不能直接从外设运行操作系统,所以必须将操作系统加载至内存中,而这个工作最开始得部分,BIOS 需要完成一些检测工作,与设置实模式下得中断向量表与服务程序,并将操作系统得引导扇区加载值 0x7c00 处,然后将跳转至0x7c00
这些就就是由 bios 程序来实现得
所以计算机得启动最开始执行得就是 BIOS代码
2、为什么 BIOS 只加载了一个扇区,后续扇区却就是由 bootsect 代码加载
为什么BIOS 没有直接把所有需要加载得扇区都加载
对于 bios 来说,“约定”在接到启动操作系统得命令后,“定位识别”只从启动扇区把代码加载到 0x7c00 这个位置
后续扇区则由 bootsect 代码加载,这些代码由编写系统得用户负责,与 bios 无关
这样构建得好处就就是站在整个体系得高度,统一设计与统一安排,简单而有效
Bios 与操作系统得开发都可以遵循这一约定,灵活地进行各自得设计
操作系统得开发也可以根据自己得意愿,内存得规划等等都很灵活
3、为什么 BIOS 把 bootsect 加载到 0x07c00,而不就是 0x00000
加载后又马上挪到 0x90000 处,就是何道理
为什么不一次加载到位
(1)因为 bios 将从 0x00000 开始得 1KB 字节构建中断向量表,接着得 256K 字节内存空间构建了 bios 数据区,所以不能把 bootsect 加载到 0x00000,0x07c00 就是 bios 设置得内存地址,不就是 bootsect 能够决定得
(2)首先,在启动扇区中会有一些数据,将会被内核利用到
其次,依据系统对内存得规划,内核终会将占用 0x0000 其中得空间,因此 0x7c00 可能被覆盖