dibingfa / flash-linux0.11-talk

你管这破玩意叫操作系统源码 — 像小说一样品读 Linux 0.11 核心代码
19.49k stars 2.64k forks source link

为什么一开始需要把0x7c00处的代码搬到0x90000呢 ? : ) #41

Closed supervate closed 2 years ago

k0njac commented 2 years ago

菜鸟认为 :可以理解为这是一个人为的设计和规定。可以把0x90000 换成 0x80000 这只是一个地址

Mz-unitst commented 2 years ago

0x7c00是bios主板公司规定的,和做操作系统的不是一个公司。 ROM BIOS先读0x7c00(31KB)处的bootsect.s, bootsect.s会将自己挪到0x10000(576kB处)继续执行并载入2KB的setup.s,挪动的目的是给system模块,也就是操作系统内核腾位置。且因为system内核的大小不会超过512KB,因此不会冲突(31+512<576). 之后setup.s会将内核从0x10000处挪到0处。此时挪动而不是最开始直接挪到0处是因为0处存放的是BIOS提供的中断,存放着IDT.只有不再使用这些BIOS提供中断之后才能覆盖。

supervate commented 2 years ago

谢谢大家的解答,明白了哈