免费注册 查看新帖 |

Chinaunix

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

[内核入门] [已解决]页目录项和页表项的结构中Field有点不明白 [复制链接]

论坛徽章:
6
酉鸡
日期:2013-11-04 15:30:02巳蛇
日期:2014-01-23 10:36:23双鱼座
日期:2014-01-23 13:08:332015亚冠之鹿岛鹿角
日期:2015-09-03 14:36:002015亚冠之武里南联
日期:2015-09-18 10:48:1315-16赛季CBA联赛之山西
日期:2016-05-05 00:05:33
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-12-23 00:18 |只看该作者 |倒序浏览
本帖最后由 Dannysd 于 2015-12-23 01:16 编辑
  1. Field containing the 20 most significant bits of a page frame physical address

  2. Because each page frame has a 4-KB capacity, its physical address must be a multiple
  3. of 4096, so the 12 least significant bits of the physical address are always
  4. equal to 0. If the field refers to a Page Directory, the page frame contains a Page
  5. Table; if it refers to a Page Table, the page frame contains a page of data.
复制代码
这段没看懂
页目录项或页表项在线性地址中不是只有10位么?再加上偏移的12位正好32位

这段说,Field包含页框物理地址最高20位的字段???

另外,最低12位为什么要置0?看不出来和物理地址4096有什么倍数关系。。。

请大牛讲解一下,万分感谢

论坛徽章:
6
酉鸡
日期:2013-11-04 15:30:02巳蛇
日期:2014-01-23 10:36:23双鱼座
日期:2014-01-23 13:08:332015亚冠之鹿岛鹿角
日期:2015-09-03 14:36:002015亚冠之武里南联
日期:2015-09-18 10:48:1315-16赛季CBA联赛之山西
日期:2016-05-05 00:05:33
2 [报告]
发表于 2015-12-23 01:16 |只看该作者
谢特
那10位代表页目录的位置和页表的位置
而实际上页目录(表)项的格式是32位的
不好意思,理解错了

论坛徽章:
9
程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-14 06:20:00程序设计版块每日发帖之星
日期:2016-02-14 06:20:0015-16赛季CBA联赛之吉林
日期:2016-03-23 17:25:0015-16赛季CBA联赛之浙江
日期:2016-04-01 08:25:0615-16赛季CBA联赛之山西
日期:2016-04-01 10:09:1915-16赛季CBA联赛之广夏
日期:2016-06-03 15:58:212016科比退役纪念章
日期:2016-07-28 17:42:5215-16赛季CBA联赛之广东
日期:2017-02-20 23:32:43
3 [报告]
发表于 2015-12-23 19:18 |只看该作者
HI:
     你好,我用下面一个例子给你做解释.

假设一个 page 的虚拟地址为 0xC000FFFF

unsigned long addr = 0xC000FFFF;
pgd_t *pgd;
pmd_t *pmd;
pte_t *pte;
struct page *page;

pgd = pgd_offset(current->mm,addr); // 获得 page 的 pgd 全局页表,该页表通过 addr 的高 20 位的值 加上进程 current->mm 的成员 pgd 来合成二级页表.
pmd = pmd_offset(pgd,addr);  // 通过 pgd  入口 获得 二级页表的入口 .
page = pmd_page(pmd);  // 可以通过 pmd 获得对应的 page 地址.
pte   = pte_offset(pmd,addr);  //  通过 二级页表和 addr 的低 12 位合成三级页表,与此找到相应的 page 的物理地址.


Linux 的物理页分配策略大致可以这么解释,使用 malloc 在用户空间分配空间的时候,如果不对分配的内存空间进行写操作的,内核是不实际分配物理地址物理页帧的.
如果用户空间对分配的内存空间进行写操作,那么 Linux 内核就会产生缺页处理,分配物理页帧.
对物理页写操作之后就将物理页标记为脏页,Linux 内核会对合适的时候 swap 到 disk 上进行数据同步.




论坛徽章:
6
酉鸡
日期:2013-11-04 15:30:02巳蛇
日期:2014-01-23 10:36:23双鱼座
日期:2014-01-23 13:08:332015亚冠之鹿岛鹿角
日期:2015-09-03 14:36:002015亚冠之武里南联
日期:2015-09-18 10:48:1315-16赛季CBA联赛之山西
日期:2016-05-05 00:05:33
4 [报告]
发表于 2015-12-23 22:44 |只看该作者
回复 3# Buddy_Zhang1


    谢谢回复,还没看到具体代码的部分,入个门都困难   

论坛徽章:
9
程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-14 06:20:00程序设计版块每日发帖之星
日期:2016-02-14 06:20:0015-16赛季CBA联赛之吉林
日期:2016-03-23 17:25:0015-16赛季CBA联赛之浙江
日期:2016-04-01 08:25:0615-16赛季CBA联赛之山西
日期:2016-04-01 10:09:1915-16赛季CBA联赛之广夏
日期:2016-06-03 15:58:212016科比退役纪念章
日期:2016-07-28 17:42:5215-16赛季CBA联赛之广东
日期:2017-02-20 23:32:43
5 [报告]
发表于 2015-12-24 09:52 |只看该作者
回复 4# Dannysd

这部分代码在内核属于虚拟内存管理部分,你可以在内核中查看 do_mmap() 这个函数,里面基本就是整个虚拟内存的实现.


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP