首页
社区
课程
招聘
[求助]内核的几个问题,快把我整死了,希望能仔细看完
发表于: 2008-11-5 16:36 4235

[求助]内核的几个问题,快把我整死了,希望能仔细看完

2008-11-5 16:36
4235
本人把核心编程那单看好几次了,不过还是了解不了,希望高人能帮忙,

我先说下我对虚拟地址转换成物理内存地址的理解,,这也是在网上找到的说法。

==================================================

对于x86系统,页目录的物理地址放在CPU的CR3寄存器中。 CPU把虚拟地址转换成物理地址:一个虚拟地址,大小4个字节(32bit),包含着找到物理地址的信息,分为3个部分

1。第22位到第31位这10位(最高10位)是页目录中的索引,
2。 第 12 位到第21位这10位是页表中的索引,
3。第0位到第11位这12位(低12位)是页内偏移。

  对于一个要转换成物理地址的虚拟地址,CPU首先根据CR3中的值,找到页目录所在的物理页。然后根据虚拟地址的第22位到第31位这10位(最高的 10bit)的值作为索引,找到相应的页目录项(PDE,page directory entry),页目录项中有这个虚拟地址所对应页表的物理地址。有了页表的物理地址,根据虚拟地址的第12位到第21位这10位的值作为索引,找到该页表中相应的页表项(PTE,page table entry),页表项中就有这个虚拟地址所对应物理页的物理地址。最后用虚拟地址的最低12位,也就是页内偏移,加上这个物理页的物理地址,就得到了该虚拟地址所对应的物理地址。
    一个页目录有1024项,虚拟地址最高的10bit刚好可以索引1024项(2的10次方等于1024)。一个页表也有1024项,虚拟地址中间部分的 10bit,刚好索引1024项。虚拟地址最低的12bit(2的12次方等于4096),作为页内偏移,刚好可以索引4KB,也就是一个物理页中的每个字节。
========================================
问题:
1。这理解过程都OK,不过我现在突然想起,在查找到PDE的时候,低12位是一些标志位,高20位的就是页表的物理地址了,可是我查看资料发现,页表是在系统地址空间的,这时候说的系统地址空间就是我们真实内存条大小范围之内,而不是我们平时说的2G之上????
另外由于一个进程有1个页目录表,1024个页表,而一个页目录表大小为1024*4=4K,1024个页表的大小为1024*1024*4=4M
那就是一个进程启动,不管它有多大多小,它都必要分配到4M+4K大小的物理内存给它???如果这样的话,那这些页表不会被转换出去吧,因为我也听说因为页表是存放在系统地址空间的,所以然不会给转换出去!

2。我知道页表项PTE中有几个重要标志位,我知道页保留,提交这2个标志位是在这上面,
  我在看操作系统的书的时候,还有个标志位,就是标志此物理页是否已经调入内存,另外还说能记录到当些物理页被转换到页面文件后的地址,我就晕了,怎么记录得了地址啊,这页表项PTE已经用20位来记录物理页的地址了,还哪有位来记录呢?

3。当发生缺页的时候,系统是怎么知道的?难道在虚拟地址转换的过程中,在页表中没有找到它需要的页表项??
  如果是这样的话,那当系统去页面文件把需要的页调进来的时候,系统怎么知道这个页面文件在哪?当凭一个虚拟地址的转换没办法吧?难道还有另一张表维护着?在启动进程的时候已经初始化好的?

4。另外看书说的 保留和提交是什么意思。是不是对页表的一些设置?具体怎么实现,谢谢!!!

是这样吗:保留了地址空间,就应该有一个起始地址,和一个指定大小吧?而这个起始地址是个虚拟地址,也应该可以转换得到一个页表的页表项里面,如果指定的是保留 64K大小,那就应该占用16页表项,并把页表项里面的保留标志位置1,不过由于并没有提交存储空间,所以并没有物理内存影响到相应的页表项吧??是这样吗?感觉这样好合理了
=========================

以上问题,希望高人能帮忙,要不我给它们折磨死的!!!!!!!!!!!

[课程]Linux pwn 探索篇!

收藏
免费 1
支持
分享
最新回复 (4)
雪    币: 214
活跃值: (46)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
别看书了,动动手吧
2008-11-5 19:03
0
雪    币: 223
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
建议看看Intel® 64 and IA-32 Architectures Software Developer’s Manual 253668.pdf对照JIURL玩玩Win2k内存篇再看看
2008-11-5 21:19
0
雪    币: 215
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
页表不会被换出去的
页表目录和页表,这儿是2个buffer,哈,不多说,自己对准格式想。
页是否缺在PTE里面有一个位保存的。
保留和提交是虚拟内存和物理内存之间的术语。最讨厌术语了。

你该把内存映射的结构重新理顺。
2008-11-6 15:32
0
雪    币: 331
活跃值: (57)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
5
一级目录不会换出去,二级目录我不知道,应该可以换出去的
2008-11-7 00:03
0
游客
登录 | 注册 方可回帖
返回
//