欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

linux内存管理疑点,求高手解答!

更新时间: 2014-01-05 03:18:45 责任编辑: Author_N1

 

LINUX内存管理疑问,求高手解答!!
  用户程序经过汇编编译后形成二进制指令和数据,运行之前,这些指令和数据所存放的地点是外部FLASH或硬盘,运行后,代码被调入内存。而CPU在执行代码的时候需要取线性地址,然后根据线性地址找到指令或数据,那么这些线性地址CPU从哪取?难道是从硬盘里取?还是内存有这些线性地址的拷备?求解答,被这问题困扰了好久了!
--参考方法--
以小弟愚见:
首先编译完之后就有一个代码段首地址和数据段首地址,(玩过汇编的应该很清楚的)这是逻辑地址,然后内存管理模块在装入内存执行之前要把这个逻辑地址转化为实际物理地址,然后装入(多数情况是和PC里的值做运算吧)。
--参考方法--
线性地址是提供给用户编程和识别作用的  cpu真正运行的是物理地址  体系架构(特定的cpu)相关代码都有内存管理机制 是用来把线性地址转换成物理地址   vm_area_struct是进程映像的段区的结构  进程加载进去之后在实际使用的时候分配物理地址
--参考方法--
引用:
  用户程序经过汇编编译后形成二进制指令和数据,运行之前,这些指令和数据所存放的地点是外部FLASH或硬盘,运行后,代码被调入内存。而CPU在执行代码的时候需要取线性地址,然后根据线性地址找到指令或数据,那么这些线性地址CPU从哪取?难道是从硬盘里取?还是内存有这些线性地址的拷备?求解答,被这问题困扰了好久了!

有个东西叫装载器(loader)
--参考方法--
cpu并不认识线性地址 所以不存在是cpu去找线性地址 cpu只是运行物理指令只认识物理地址 你说的这个线性转化成物理是内存管理做的  其实可执行文件的代码段在加载之后就对应了物理地址 而你用的可见的 就是线性地址 这是加载器就做好了的  所以说对cpu来说 线性地址是不可见的
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:18:45
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/20605/
本文WWW.DOC100.NET DOC100.NET版权所有。