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

发布于 2022-09-29 12:02:28 字数 75 浏览 18 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

伴随着你 2022-10-06 12:02:28

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

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

何以笙箫默 2022-10-06 12:02:28

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

半衾梦 2022-10-06 12:02:28

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

瑕疵 2022-10-06 12:02:28

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

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

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

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

离旧人 2022-10-06 12:02:28

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

莫相离 2022-10-06 12:02:28

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

汐鸠 2022-10-06 12:02:28

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

衣神在巴黎 2022-10-06 12:02:28

是的:)

时间你老了 2022-10-06 12:02:28

谢谢解释

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文