linux - 内核态与内核空间、用户态与用户空间的关系?
问题描述
Linux 中的虚拟内存可以分为两部分:用户地址空间和内核地址空间。
该任务根据特权级别在内核模式或用户模式下工作。
但是考虑到i386 arch,内核模式和内核地址空间、用户模式和用户地址空间有什么关系呢?
解决方案
根据评论和个人研究,一般内核态和内核地址空间、用户态和用户地址空间之间没有强制关系。对于现代操作系统(Linux),这种关系 100% 由操作系统软件控制,该软件可以映射内核模式可以访问的用户地址空间,通常使用 highmem。
基本上,虚拟内存空间的划分是一种约定,减少了碎片,并且在编程时易于识别。对于 86x86 拱门,确实存在基于以下事实的“关系”。
- 当任务被捕获到内核模式时,
CPL
内部cs
寄存器设置为0
最高权限。从技术上讲,它可以访问所有的虚拟内存空间。一种映射,通常是 highmen,用于使内核安全地访问用户地址空间。 - 当任务处于用户模式时,
CPL
内部cs
寄存器设置为3
最低权限。它只能访问DPL
字段为的段3
。但是,内核地址空间中的段都被 DPL 填充,0
这意味着用户模式任务没有访问权限。这两点不考虑RPL
,应该只有DPL >= max(RPL,CPL)
段可以访问的条件。
推荐阅读
- git - Jenkins(BlueOcean) 未能构建在 BitBucket 中创建的 PR
- php - 如何为 MacOS Big Sur 启用 Xdebug?“php -m”显示正常,但“phpinfo();” 别
- python - 删除时更改 django-admin 中的默认消息
- vue.js - 如何在对话框中执行函数?
- google-sheets - 双重选择标准自定义的谷歌表格中的动态图表
- javascript - 将年、月和日字段转换为日期以进行数学运算
- google-app-engine - 从命令行部署到 App Engine 失败
- autodesk-forge - 如何获取 BIM 360 Docs 上托管的大型模型的属性?响应为“诊断:查询数据失败”
- php - Docker 和 Laravel 8 迁移问题
- list - 在 Sharepoint 2013 中,如何隐藏列表的内容?