- 论坛徽章:
- 0
|
原帖由 peimichael 于 2009-3-10 08:37 发表 ![]()
这个帖子我看过了,网上我也看了很多关于高端内存解惑类的文章帖子
但是可能哪里想歪了,这一点总是弄不明白
就是内核如果要访问哪一个地址的话为什么不用用户空间的虚拟地址
为什么一定要先映射到内核空间然 ...
我们一步一步来, 首先, Linux是Monolithic kernel, 即一个单内核形式. 此时, 每个进程都有3G的自己的用户空间, 而所有的进程都拥有1G的内核地址空间, 这1G的内核地址空间是每个进程与内核所共同拥有的.
>>为什么一定要先映射到内核空间然后在访问
操作系统就是为每个进程提供了访问硬件资源的功能, 所以这个过程肯定是进程向操作系统发送请求, 然后操作系统再对硬件资源进行操作, 并返回给用户进程. 而且每个进程的页表都在内核空间的, 建立了虚拟地址与物理地址的联系之后, 就得将这个联系写到页表中去. 说白了就是内核对所有的硬件资源进行管理, 当用户态的进程需要时, 就找内核要, 内核就给它. 而内核的地址空间只有1G的大小, 要管理大于1G的物理地址空间. 就不能够是简单的一个偏移量的映射关系. |
|