shineyear 发表于 2007-05-24 13:22

为什么操作系统启动的时候总要把内存移来移去的?

很多操作系统在刚开始加载的时候都要把内核在内存中移动来移动去的,一会加载到一个地址一会又移动到另一个,为什么呢?难道不能一开始就放到一个固定的位置吗?

mik 发表于 2007-05-24 19:01

原帖由 shineyear 于 2007-5-24 13:22 发表于 1楼
很多操作系统在刚开始加载的时候都要把内核在内存中移动来移动去的,一会加载到一个地址一会又移动到另一个,为什么呢?难道不能一开始就放到一个固定的位置吗?

因为,BIOS 加载 OS loader, loader 再通过加载 OS kernel, kernel 通常是压缩的,还需经过解压.然后再转入kernel

sep 发表于 2007-05-24 21:41

在嵌入式系统里好像没有像pc上那个BIOS吧。其BootLoader好像都包括了硬件检测和初始化。

W.Z.T 发表于 2007-05-25 08:10

这是因为引导程序还要通过BIOS调用来获得机器的一些参数,比如硬盘,显卡等。而BIOS初始化时是从内存0开始的,如果直接把kernel移动到内存0处,就会覆盖BIOS代码。

朱熹之 发表于 2007-05-25 08:34

:mrgreen: 对于pc而言,启动时会将硬盘第一个扇区的512个字节加载到地址0x7c00处执行。

注意,这里只加载了512字节的内容。

这段512字节的代码(其中还包含了64字节的硬盘分区表)会从硬盘的活动分区加载一个boot loader。而boot loader又会从其他地方加载真正的内核。

正是因为系统启动需要有这么多次的加载过程,造成其会对内存进行多次移动和拷贝。这主要是历史遗留问题

flyeon 发表于 2007-05-26 22:55

楼上和楼上的楼上说法一致么?能解释一下么?

朱熹之 发表于 2007-05-29 08:53

是一至的,只不过我ls那个倾向于解释硬件处理的部分,而我说的是硬件处理完了,然后从硬盘开始加载软件的部分

flyeon 发表于 2007-05-29 12:36

bios把控制交给操作系统,这就是你们两人说法的分界点,是么

朱熹之 发表于 2007-05-29 21:12

是的:)
:mrgreen:

flyeon 发表于 2007-05-30 08:52

谢谢解释:em02: :em02:
页: [1] 2
查看完整版本: 为什么操作系统启动的时候总要把内存移来移去的?