阅读:1306回复:8
请问斑竹和PJF一个问题--关于page table
在虚拟地址向物理地址转换时,需要用到page directory和page table,每一个进程都有自己的,它们占用内存空间最大应该是4M+4K,而NT在物理内存中应该怎样维护它们呢?
一般是在有个最大4M空间物理内存来维护当前进程的,也就是如果线程调度时,如果不是同一进程,那么就要把memory context也切换了,也就是把另一个进程的page directory和page table装载到同一物理内存中。 请问是否如此,那么这样调度时,是否会影响效率? 如果不这样,在物理内存中对每个进程维护page directory和page table,显然又是不可能的! |
|
最新喜欢:zackar...
|
沙发#
发布于:2002-12-27 14:42
在虚拟地址向物理地址转换时,需要用到page directory和page table,每一个进程都有自己的,
---------------------------------------------------------------- 只是有自己的page directory,而page table大部分不用换,使得页目录中的很多项是一样的 它们占用内存空间最大应该是4M+4K,而NT在物理内存中应该怎样维护它们呢? ----------------------------------------------------------------- 页表本身是分页的,你找个进程的页目录看看,映射了的页表只占比较少的部分。顺便一提,在NT中就算全映射了,也只占4M,其中原因自己研究一下吧,不多说了,呵呵 一般是在有个最大4M空间物理内存来维护当前进程的,也就是如果线程调度时,如果不是同一进程,那么就要把memory context也切换了,也就是把另一个进程的page directory和page table装载到同一物理内存中。 请问是否如此,那么这样调度时,是否会影响效率? ---------------------------------------------------------------- 一般切换时只改页目录指针reg和不多的页表。 |
|
板凳#
发布于:2002-12-27 15:41
呵呵,多谢多谢!
我还想问下,最多为4M,是否是因为全部映射时那么所有内存都被映射了,最后一项就不用了。所以是PD的4k加上PT的(4M-4K)。 |
|
|
地板#
发布于:2002-12-27 15:57
呵呵,多谢多谢! 非也,有一个页标与页目录重合了 |
|
地下室#
发布于:2002-12-27 16:01
哦,懂了!而且这4M空间是非分页空间吧!
|
|
|
5楼#
发布于:2002-12-27 16:13
哦,懂了!而且这4M空间是非分页空间吧! 呵呵,要仔细看上面了 这4M空间可以换出去的,并且大部分没映射(页目录里大片零,并且有些用的少的页表也被换出了) |
|
6楼#
发布于:2002-12-27 16:18
[quote]哦,懂了!而且这4M空间是非分页空间吧! 呵呵,要仔细看上面了 这4M空间可以换出去的,并且大部分没映射(页目录里大片零,并且有些用的少的页表也被换出了) [/quote] 这个我就有点奇怪了,我认为那4M有部分内容是要被重写,但不能被swap,因为我先看到linux中似乎说了这4M是不能被切换的!再追踪过来的。 而且于理不通啊,线程一调度,就可能引发memory context switch,那么它如果被swap,会page fault的,可能有点说不通吧? |
|
|
7楼#
发布于:2002-12-27 16:32
这个我就有点奇怪了,我认为那4M有部分内容是要被重写,但不能被swap,因为我先看到linux中似乎说了这4M是不能被切换的!再追踪过来的。 NT与Linux的内存映射方式差别挺大的,Linux的内核空间是物理地址的线性映射,有其方便性,而NT很灵活,各有好处。都没你说得那么严重。 不必担心,呵呵,对NT,页目录是不会被换出的,内核空间中关键代码与数据部分(比如集成子系统)每个进程都会用到,根本不可能被换出,一点都不必改。 |
|
8楼#
发布于:2002-12-27 16:37
呵呵,太感谢了,每次你一出马,我就长进不少!
非常感谢!改天还要问你个win9x的问题,我还没有想明白. |
|
|