图片无法显示,请右键点击新窗口打开图片

BiscuitOS 内存管理之分页大专题订阅入口

目录
  • PAGE_USER 原理

  • PAGE_USER 的应用

  • PAGE_USER 使用场景

图片无法显示,请右键点击新窗口打开图片


PAGE_USER 原理

图片无法显示,请右键点击新窗口打开图片

在 Linux 页表里存在这样一个标志位 PAGE_USER, 用来标记一个页是用户空间的还是内核空间的。在 x86 架构中,页表条目(PTE Entry)使用不同的位来定义访问权限和状态。其中之一就是用户/超级用户(U/S)位,它定义了访问该页的权限级别. PAGE_USER 置位表示该页面可以被用户模式访问(即普通的应用程序). 这意味着该页在用户空间中,应用程序代码可以读取或写入这个页面,前提是还要有正确的读写权限. PAGE_USER 清零表示该页面只能被内核模式访问,也就是说只有内核和具有特权级别的代码可以访问这个页面,普通的应用程序将被阻止访问这个内存区域. 这个机制是实现操作系统中用户空间和内核空间隔离的基础部分。用户空间的应用程序通常不允许直接访问内核空间的内存,这有助于保护内核免受恶意软件和用户程序错误的影响,确保系统的稳定性和安全性。当用户空间的程序尝试访问只有内核可以访问的内存时,处理器会产生一个保护故障(通常是段故障或页面故障),操作系统可以选择杀死该程序或者提供一个信号告诉该程序它做了不合法的内存访问.

图片无法显示,请右键点击新窗口打开图片

PAGE_USER 标志位可能在不同的硬件架构的位置不同,但 Linux 为了屏蔽硬件差异,统一使用 _PAGE_USER 标志位表示,也可以使用 _USR 进行表示. 例如在 X86/I386 中 PAGE_USER 位于页表的 BIT2.

图片无法显示,请右键点击新窗口打开图片

在 Linux 里,很多内核使用的页表属性集合都会将 PAGE_USER 标志为清零,例如 __PAGE_KERNEL 用于为内核空间虚拟内存构建页表使用,此时都会将 PAGE_USER 标志位清零,以此表示这块区域是由内核访问. 而页表属性集由用户空间使用时,PAGE_USER 标志置位以此表示是用户进程访问.

图片无法显示,请右键点击新窗口打开图片

图片无法显示,请右键点击新窗口打开图片

BiscuitOS 内存管理之分页大专题订阅入口

图片无法显示,请右键点击新窗口打开图片