免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4205 | 回复: 4
打印 上一主题 下一主题

[内存管理] 硬盘上的数据是怎么映射到虚拟地址上的?怎么拷贝到内存的? [复制链接]

论坛徽章:
2
射手座
日期:2014-09-03 00:18:022015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-09-01 23:58 |只看该作者 |倒序浏览
本帖最后由 wLiu2007 于 2014-09-02 00:05 编辑

程序是以ELF文件的形式保存在在磁盘上的吧,运行的时候,loader应该是根据ELF头信息获取.text,.data, .bss……各个段的长度,然后为这些段申请虚拟地址;

给程序分配了虚拟地址之后就可以运行了,当运行的时候,因为没有映射物理地址,会发生page fault,然后分配物理内存,从硬盘装载数据到物理内存;

不知道上面理解是否正确? 如果正确的话,发生page fault后,cpu怎么知道该去硬盘的哪个地方拷贝数据,这个映射关系(内核和硬盘之间的)从哪里可以获取?
物理内存的管理单元都是page,而硬盘的管理单元都是扇区、簇什么的,不会知道是怎么建立映射的?

论坛徽章:
2
射手座
日期:2014-09-03 00:18:022015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2014-09-02 11:07 |只看该作者
看了下面这个帖子大概知道怎么运作了
http://bbs.chinaunix.net/thread-2058683-1-1.html

ELF头里面不仅包含了各个段的大小,还告诉该段在该文件中的位置;
loader在为各个段申请虚拟内存的时候,有2个栏位vm_file、vm_pgoff来保存该段对应的文件,及在文件的中位置;
发生pagefault后,根据这2个信息,利用文件操作函数去读数据到内存就可以了;

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2014-09-02 15:44 |只看该作者
我也正在学习文件io,感觉你的解释有点问题啊?

关于io,我的理解是:
io系统调用--->vfs处理--->具体文件系统如ext4处理--->块设备io处理--->硬盘驱动程序(如果有的话)处理。

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
4 [报告]
发表于 2014-09-02 20:25 |只看该作者
回复 3# sohusina

你先别急把EXEC的过程跟你目前的理解去关联。等你把文件系统的mmap操作理解了。你就明白了。


   

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2014-09-02 21:30 |只看该作者
回复 4# Tinnal


    呵呵,我主要是看了标题,再加上自己的不正确理解,就匆匆下了结论。谢谢指正。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP