r**u 发帖数: 1567 | 1 【 以下文字转载自 CS 讨论区 】
发信人: raou (raou), 信区: CS
标 题: user virtual address space VS kernel virtual address space
发信站: BBS 未名空间站 (Sun Apr 18 17:14:09 2010, 美东)
32-bit machine,virtual address space 4GB,kernel(e.g. linux)会把这4GB,分成
3GB user/1GB kernel。
1GB kernel virtual address space跟物理内存是1-to-1的map。对user virtual addr
做virtual --> physical 转换是也是转到一个kernel virtual addr再到physical
memory。
那这样不是只能用到1GB physical memory,如果有更多
的就用不到了。windows也有这个机制,好奇这样的话不是加内存都没用?大牛给解释
一下啊 |
t**n 发帖数: 272 | 2 没错, 32位机器就是只能用4G内存
精确地说,从前winxp只能用2G内存,因为它把高2G物理地址全留给外设了
从某一个winxp的补丁开始winxp支持4G物理内存,但也只是理论上,像PCI/PCI Express/
显卡都要占用一些物理内存空间 |
l*******y 发帖数: 1498 | 3 kernel virtual address space可以分成2部分。一个是logical adress space, 对应
physical address < 896M的部分,这个部分(Low memory)和physical address只差
一个constant的 offset. 另外一部分是 physical address > 896M的部分kenel不能直
接访问,要做一个mapping 建立page table后才可以访问。
kmalloc返回的地址就是 logical adress, physical contiguous, 这个部分地址不用
page table.
vmalloc返回的 kernel virtual address是 virutal contiguous, 要建page table
1G以上的memory是可以用到的,把暂时不用的page mapping保存一下,然后去map 别的
部分就可以了。
Linux是这样的,Windows不知道是什么样子。 |
r**u 发帖数: 1567 | 4 多谢多谢。也就是说kernel只能用到up to 1GB physical mem,但是user process可以
用到more than 1GB是吧。
还有一个困惑的地方,比如物理内存少于1GB,这种情况是啥样的?user virtual addr
和 kernel virtual addr会map到同一个physical mem frame?
【在 l*******y 的大作中提到】![](/moin_static193/solenoid/img/up.png) : kernel virtual address space可以分成2部分。一个是logical adress space, 对应 : physical address < 896M的部分,这个部分(Low memory)和physical address只差 : 一个constant的 offset. 另外一部分是 physical address > 896M的部分kenel不能直 : 接访问,要做一个mapping 建立page table后才可以访问。 : kmalloc返回的地址就是 logical adress, physical contiguous, 这个部分地址不用 : page table. : vmalloc返回的 kernel virtual address是 virutal contiguous, 要建page table : 1G以上的memory是可以用到的,把暂时不用的page mapping保存一下,然后去map 别的 : 部分就可以了。 : Linux是这样的,Windows不知道是什么样子。
|
l*******y 发帖数: 1498 | 5 少于896M的话,我觉得所有的 physical address都能被kernel直接访问,都有logical
address.
user virtual addr 和 kernel virtual addr 应该可map到同一physical page吧,如
果kernel 想访问的话。
当user app 执行write或者read时,会通过相应system call 进入kernel mode,这个
时候kernel 应该直接用user app的page table 就可以了吧。我也不确定,我自己理解
的。。。
addr
【在 r**u 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 多谢多谢。也就是说kernel只能用到up to 1GB physical mem,但是user process可以 : 用到more than 1GB是吧。 : 还有一个困惑的地方,比如物理内存少于1GB,这种情况是啥样的?user virtual addr : 和 kernel virtual addr会map到同一个physical mem frame?
|