为什么操作系统启动的时候总要把内存移来移去的?
很多操作系统在刚开始加载的时候都要把内核在内存中移动来移动去的,一会加载到一个地址一会又移动到另一个,为什么呢?难道不能一开始就放到一个固定的位置吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
很多操作系统在刚开始加载的时候都要把内核在内存中移动来移动去的,一会加载到一个地址一会又移动到另一个,为什么呢?难道不能一开始就放到一个固定的位置吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(9)
因为,BIOS 加载 OS loader, loader 再通过加载 OS kernel, kernel 通常是压缩的,还需经过解压.然后再转入kernel
在嵌入式系统里好像没有像pc上那个BIOS吧。其BootLoader好像都包括了硬件检测和初始化。
这是因为引导程序还要通过BIOS调用来获得机器的一些参数,比如硬盘,显卡等。而BIOS初始化时是从内存0开始的,如果直接把kernel移动到内存0处,就会覆盖BIOS代码。
对于pc而言,启动时会将硬盘第一个扇区的512个字节加载到地址0x7c00处执行。
注意,这里只加载了512字节的内容。
这段512字节的代码(其中还包含了64字节的硬盘分区表)会从硬盘的活动分区加载一个boot loader。而boot loader又会从其他地方加载真正的内核。
正是因为系统启动需要有这么多次的加载过程,造成其会对内存进行多次移动和拷贝。这主要是历史遗留问题
楼上和楼上的楼上说法一致么?能解释一下么?
是一至的,只不过我ls那个倾向于解释硬件处理的部分,而我说的是硬件处理完了,然后从硬盘开始加载软件的部分
bios把控制交给操作系统,这就是你们两人说法的分界点,是么
是的:)
谢谢解释