免费注册 查看新帖 |

Chinaunix

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

ULK关于永久内核映射计数器的解释和源代码以及《深入linux内核架构》上讲的都不一样? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-25 15:59 |只看该作者 |倒序浏览
/*

* Virtual_count is not a pure "count".
在源代码(我的是2.6.25)
*  0 means that it is not mapped, and has not been mapped

*    since a TLB flush - it is usable.

*  1 means that there are no users, but it has been mapped

*    since the last TLB flush - so we can't use it. //没有内核成分使用这个页表项,但是从上次刷新TLB以来,它已经被映射。

*  n means that there are (n-1) current users of it.

*/

但是在ULK(第三版,不过这里的内容和第二版一样)中这样说:
  The corresponding Page Table entry does not map any high-memory page frame, but it cannot be used because the corresponding TLB entry has not been flushed since its last usage。(对应的页表项没有映射任何高端内存页框,但是它不能被使用。。。)
  请各位大侠提携小弟,小弟不甚感激,哦,是不胜感激。

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
2 [报告]
发表于 2010-11-25 16:33 |只看该作者
深入理解Linux架构,看的云里雾里的,个人感觉还是不如ulk和情景分析经典

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
3 [报告]
发表于 2010-11-25 19:12 |只看该作者

论坛徽章:
0
4 [报告]
发表于 2010-11-25 20:06 |只看该作者
to tempname2:
  刚看了您的帖子,您的意思是说ulk书中关于计数器为1的说法是不准确的么?即计数器为1的时候并不表示相应的页表项没有映射任何高端内存页框,而是表示此时相应的页表项还是映射到以前它映射的某个高端内存页框的,但不能使用,计数器为1就表示了这种情况。
  还有一个问题问您:
  我们说线性地址空间的最高128m可以映射到高端内存页框,那么这最高128m能不能映射到低端内存页框啊?

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
5 [报告]
发表于 2010-11-26 01:58 |只看该作者
to tempname2:
  刚看了您的帖子,您的意思是说ulk书中关于计数器为1的说法是不准确的么?即计数器为1的时 ...
xumin330774233 发表于 2010-11-25 20:06



那只是看了代码后的个人感觉,我不确定是对的。

貌似你还没懂为什么要留这末端线性地址。。。。。

http://linux.chinaunix.net/bbs/thread-1169862-1-1.html

看不下去就姑且认为末端线性地址可以映射到任何物理页帧。

论坛徽章:
0
6 [报告]
发表于 2010-11-26 10:07 |只看该作者
本帖最后由 xumin330774233 于 2010-11-26 10:16 编辑

刚看你您的帖子,你说线性地址空间最高128M可以映射到任何物理页桢,也就是说存在这样一种情况:3G~3G+896M虚拟地址空间和896M的低端内存是直接映射,最高128M也可以和这896M的低端内存建立映射那假如线性地址空间最高128M也映射到了这这896M的低端内存,例如这896M的低端内存中有某个页框被slab分配给内核,不是返回两个虚拟地址?(难道此时3G~3G+896M虚拟地址空间和896M的低端内存建立起来的直接映射无效?)显然内核不应该出现这种情况啊。所以我觉得末端线性地址一般用于映射高端物理页帧。

论坛徽章:
0
7 [报告]
发表于 2010-11-26 10:21 |只看该作者
在嵌入式系统Linux内核开发实战指南中:8)高端线性地址空间:从high_memory到0xFFFFFFFF之间的线性地址空间属于高端线性地址空间,其中VMALLOC_START~VMALLOC_END之间线性地址被vmalloc()函数用来分配物理上不连续但线性地址空间连续的高端物理内存,或者被vmap()函数用来映射高端或低端物理内存或者由ioremap()函数来重新映射I/O物理空间。PKMAP_BASE开始的LAST_PKMAP(一般等于1024)页线性地址空间被kmap()函数用来永久映射高端物理内存。FIXADDR_START开始的KM_TYPE_NR*NR_CPUS页线性地址空间被kmap_atomic()函数用来临时映射高端物理内存,其他未用高端线性地址空间可以用来在系统初始化期间永久映射I/O地址空间。这本书上说vmap()函数可以映射低端物理内存?不是很理解,请您传道解惑。

论坛徽章:
0
8 [报告]
发表于 2010-11-26 23:29 |只看该作者
你没有区分开虚拟地址和物理地址。所谓的高端映射是说的虚拟地址的,而它们可以映射到任何物理页面。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP