首页 > 解决方案 > 内核态与内核空间、用户态与用户空间的关系?

问题描述

Linux 中的虚拟内存可以分为两部分:用户地址空间和内核地址空间。

该任务根据特权级别在内核模式或用户模式下工作。

但是考虑到i386 arch,内核模式和内核地址空间、用户模式和用户地址空间有什么关系呢?

标签: linuxlinux-kernelkernel

解决方案


根据评论和个人研究,一般内核态和内核地址空间、用户态和用户地址空间之间没有强制关系。对于现代操作系统(Linux),这种关系 100% 由操作系统软件控制,该软件可以映射内核模式可以访问的用户地址空间,通常使用 highmem。
基本上,虚拟内存空间的划分是一种约定,减少了碎片,并且在编程时易于识别。对于 86x86 拱门,确实存在基于以下事实的“关系”。

  1. 当任务被捕获到内核模式时,CPL内部cs寄存器设置为0最高权限。从技术上讲,它可以访问所有的虚拟内存空间。一种映射,通常是 highmen,用于使内核安全地访问用户地址空间。
  2. 当任务处于用户模式时,CPL内部cs寄存器设置为3最低权限。它只能访问DPL字段为的段3。但是,内核地址空间中的段都被 DPL 填充,0这意味着用户模式任务没有访问权限。这两点不考虑RPL,应该只有DPL >= max(RPL,CPL)段可以访问的条件。

推荐阅读