百科问答小站 logo
百科问答小站 font logo



页表到底是保存在内核空间中还是用户空间中? 第1页

  

user avatar   bei-ji-85 网友的相关建议: 
      

第一个问题,答案很明确:页表在内核空间中

至于题主问的访问页表是否会陷入内核,这要看你是:

1. CPU地址翻译的过程中的页表访问;
2. 增加修改页表项。

如果是第一种,CPU地址翻译,那么这种访问是硬件完成的,整个过程不需要代码参与,没有任何性能上的损失。
如果是第二种,是会慢一些。

这种慢是为了安全,如果页表在用户空间,那么用户就可能自己修改页表,映射任意的内存地址,访问任何内存,甚至是直接操作硬件,进程间、内核的隔离保护就失去了意义。

而且,应用程序虽然可能频繁的malloc或者free,但在页表层面上,并不会频繁的创建、删除页表项,主要原因是,malloc/free操作的接口都是C库的接口,在C库里,还有另外一层次的封装,来保证不会频繁的提交页表的操作申请。

第二个问题:内核页表一般指的是内核地址空间的页表,用户页表表示用户地址空间的。

用32位操作系统作为例子,虽然操作系统有N个进程,每个进程都有各自页表,但内核的页表只有一个。当发生进程切换时,只有用户页表被切换走,内核页表并不改变。

具体的做法是,把地址空间的高1G或者2G的地址都固定划分给内核,用户进程只能使用低3G或者低2G的地址,这样无论进程如何切换,内核页表都不需要换出。

这也就是内核页表和用户页表的区别。




  

相关话题

  如何用 Linux 命令快速查询一个符号链接最终指向的文件? 
  请问如果这样设计笔记本,能不能统一办公本 和 游戏本? 
  如何扎实系统地学好后端开发(Linux 环境下)?细分方向有哪些?可否推荐一些好的开源项目? 
  如何评价 360 安全卫士 for Linux? 
  如何看待明尼苏达大学因插入实验性漏洞,被禁止贡献 Linux 内核代码? 
  Windows 辨别文件为什么一定要扩展名?感觉 Linux 上要求就没有这么高? 
  Android 系统无法被分支 (fork) 吗,AOSP 和 GMS 是何关系? 
  熟悉 Ubuntu 的新手怎么玩转 Arch? 
  文件系统设计中的 Sectorsize有什么用? 
  为什么大家习惯于把任务栏置于底部,而不是左侧、右侧或顶部? 

前一个讨论
为什么51单片机编程喜欢用unsigned(无符号)类型定义变量呢直接用 int.char..不好吗?
下一个讨论
中断为什么一定要在内核空间处理,如果把中断放到用户态处理可能会产生什么问题?





© 2024-12-22 - tinynew.org. All Rights Reserved.
© 2024-12-22 - tinynew.org. 保留所有权利