关于内存的疑问

bhtlbhtl123 2014-08-26 10:37:00
首先说一下我的理解,CPU将外存的程序与数据的一部分移动到内存上来运行,当代码区的指令全运行完之后,移入新的指令,栈的内容可能也需要改变.我的疑问是这个新指令区的移入内存动作是谁完成的呢,启动阶段是启动文件完成了第一次的移动,那么运行阶段呢,编译阶段加入的语句吗.也不是mmu和操作系统吧,无操作系统不开mmu的情况不也是在内存中运行吗.
...全文
163 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
bhtlbhtl123 2014-08-28
  • 打赏
  • 举报
回复
引用 3 楼 gjq_1988 的回复:
os, 或者能实现内存管理的任何程序
那岂不是说没有操作系统的情况下程序的大小不能大于内存,否则就需要编写相应的程序来搬移内存的数据?
bhtlbhtl123 2014-08-28
  • 打赏
  • 举报
回复
引用 1 楼 Huntercao 的回复:
[quote=引用 楼主 bhtlbhtl123 的回复:] 疑问是这个新指令区的移入内存动作是谁完成的呢
由CPU的PC指针来指向下一条运行的命令。[/quote] 我可能没表述清楚.就是程序最后出来是RO RW ZI吧.而且外存的容量肯定大于内存.所以RO RW段无法全部搬入内存中.那么就需要一部分一部分的进入.第一次的搬移是bootloader中实现,那么之后的呢,假如有操作系统可能认为是操作系统完成的,那么没有操作系统呢,难道会说程序大小不能大于内存大小.
gjq_1988 2014-08-28
  • 打赏
  • 举报
回复
os, 或者能实现内存管理的任何程序
gjq_1988 2014-08-28
  • 打赏
  • 举报
回复
引用 4 楼 bhtlbhtl123 的回复:
[quote=引用 1 楼 Huntercao 的回复:] [quote=引用 楼主 bhtlbhtl123 的回复:] 疑问是这个新指令区的移入内存动作是谁完成的呢
由CPU的PC指针来指向下一条运行的命令。[/quote] 我可能没表述清楚.就是程序最后出来是RO RW ZI吧.而且外存的容量肯定大于内存.所以RO RW段无法全部搬入内存中.那么就需要一部分一部分的进入.第一次的搬移是bootloader中实现,那么之后的呢,假如有操作系统可能认为是操作系统完成的,那么没有操作系统呢,难道会说程序大小不能大于内存大小.[/quote] 你所说的外存应该就是指硬盘或者外部存储器吧?bootloader 是将os内核从硬盘或者sd卡搬移到内存,因为内核是需要常驻内存的(总不能直接运行在硬盘中,那样速度太慢了),所以要从硬盘或者sd卡移到内存中,并不是因为内核太大,需要一段一段搬移,比如像linux内核一般很小的,差不多不到4M。但有的应用程序(app)就确实会很大,以至于内存太小放不下几个,这时OS提供了虚拟存储机制,暂时没执行的代码块可能放在外存中,等到运行到了这块代码时,触发一个缺页中断,OS就会从外存中,将这段代码换入到内存中执行。这个和bootloader的目的是不一样的,这是为了“虚拟出更大的内存”,bootloader是为了引导kernel至内存中,内存要是连kernel都放不下,那还谈什么应用阿。。
Heaven_Redsky 2014-08-28
  • 打赏
  • 举报
回复
另外,同意楼上一位兄弟提的缺页中断。
Heaven_Redsky 2014-08-28
  • 打赏
  • 举报
回复
引用 5 楼 bhtlbhtl123 的回复:
[quote=引用 3 楼 gjq_1988 的回复:] os, 或者能实现内存管理的任何程序
那岂不是说没有操作系统的情况下程序的大小不能大于内存,否则就需要编写相应的程序来搬移内存的数据?[/quote] 我个人理解,是这样的。。。
gjq_1988 2014-08-28
  • 打赏
  • 举报
回复
引用 5 楼 bhtlbhtl123 的回复:
[quote=引用 3 楼 gjq_1988 的回复:] os, 或者能实现内存管理的任何程序
那岂不是说没有操作系统的情况下程序的大小不能大于内存,否则就需要编写相应的程序来搬移内存的数据?[/quote] 是的,虚拟内存技术就是OS实现的,当然像你说的,你可以自己编写程序来搬移内存数据
arthurzhuyong 2014-08-27
  • 打赏
  • 举报
回复
do_page_fault
曹大夯 2014-08-27
  • 打赏
  • 举报
回复
引用 楼主 bhtlbhtl123 的回复:
疑问是这个新指令区的移入内存动作是谁完成的呢
由CPU的PC指针来指向下一条运行的命令。

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧