Linux kernel 学习笔记(1) --分段分页保护机制
使用80x86处理器进行寻址时牵涉到三种不同的地址,其关系如下所示
逻辑地址------------------->线性地址-------------------------->物理地址
(分段) (分页)
分段的保护机制:
一个逻辑地址由两部分组成:段标识符和偏移量。其中偏移量是一个32位长的字段,段标识符是一个16位长的字段,称为段选择符,含有一个13位的段描述符索引,一个1位的GDT和LDT指示位和一个两位的请求者特权级。
请求者特权级(RPL)是用来指示当前CPU的特权级。0代表最高优先级,3代表最低优先级,Linux只用0和3,分别称之为内核态和用户态。
为了快速方便的找到段选择符,处理器提供了段寄存器,段寄存器的唯一目的是存放段选择符,其中CS寄存器中包含一个两位的字段,用来指明CPU的当前优先级(CPL)。
段描述符是由8个字节来表示段的特性,它被保存在全局描述符表(GDT)和局部描述符表(LDT)中,由于段描述符的内容较多,在此不一一介绍。关键的有一个两位表示的描述符特权级(DPL),主要用于限制对这个段的存取,它表示可以访问这个段的最小CPU优先级。
以上三段共提到3个特权级,分别是RPL、CPL和DPL。是不是有点晕了,不着急,下面说明三个的关系。
DPL:描述符特权级(Descriptor Privilege Level)
存储在描述符中的权限位,用于描述代码的所属的特权等级,也就是代码本身真正的特权级。一个程序可以使用多个段(Data,Code,Stack)也可以只 用一个code段等。正常的情况下,当程序的环境建立好后,段描述符都不需要改变——当然DPL也不需要改变,因此每个段的DPL值是固定。
CPL:当前特权级(Current Privilege Level)
是CS register 里bit 0和bit 1 位组合所得的值.在某一时刻就只有这个值唯一的代表程序的CPL。在Linux系统中代表当前处于内核态还是用户态。
RPL:请求特权级RPL(Request Privilege Level)
RPL保存在选择子的最低两位。 RPL 说明的是进程对段访问的请求权限,意思是当前进程想要的请求权限。 RPL 的 值 由程序员自己来自由的设置,并不一定RPL>=CPL,但是当RPL<CPL时,实际起作用的就是CPL了,因为访问时的特权检查是判 断:EPL=max(RPL,CPL)<=DPL 是否成立,所以RPL可以看成是每次访问时的附加限制,RPL=0时附加限制最小,RPL=3时附 加限制最大。所以你不要想通过来随便设置一个rpl来访问一个比cpl更内层的段。
因为你不可能得到比自己更高的权限,你申请的权限一定要比你实际权限低才能通过CPU的审查,才能对你放行。所以实际上RPL的作用是程序员可以把自己的程序降级运行——有些时候为了更好的安全性,程序可以在适当的时机把自身降低权限(RPL设成更大的值)。
段机制中使用特权级实现自己的保护机制
分页的保护机制:
分页机制中将32位的线性地址分成3个域
目录项 (高10位)
页表项(中10位)
偏移量(低12位)
页目录项和页表项具有相同的结构其中与权限有关的有:
Read/Write标志
读写特权,如果为0,表示相应页表或者页是只读的,如果为1,则表示可读写。
User/Supervisor标志
和页表相关的特权级只用两个,如果该标志为0,处于内核态时才能寻址,如果标志为1,总能对页寻址。
Linux kernel 学习笔记(1) --分段分页保护机制相关推荐
- linux钩子函数和回调函数,Linux Kernel 学习笔记10:hook函数
(本章基于: Linux -4.4.0-37) linux 内核中有一套hook函数机制,可在不同hook点位置监控网络数据包,并执行丢弃.修改等操作.网络防火墙就是通过此机制实现的. 注册注销hoo ...
- Linux内核学习笔记——内核页表隔离KPTI机制(源码分析)
KPTI(Kernel PageTable Isolation)全称内核页表隔离,它通过完全分离用户空间与内核空间页表来解决页表泄露. KPTI中每个进程有两套页表--内核态页表与用户态页表(两个地址 ...
- Linux内核学习笔记五——中断推后处理机制
一 中断 硬件通过中断与操作系统进行通信,通过对硬件驱动程序处注册中断处理程序,快速响应硬件的中断. 硬件中断优先级很高,打断当前正在执行的程序.有两种情况: 硬件中断在中断处理程序中处理 硬件中断延 ...
- 【OS学习笔记】三十三 保护模式九:分页机制对应的汇编代码之---用户程序代码
本片文章是以下两篇文章: [OS学习笔记]三十 保护模式九:段页式内存管理机制概述 [OS学习笔记]三十一 保护模式九:页目录.页表和页三者的关系详解 对应的用户程序汇编代码. ;代码清单16-2;文 ...
- 【OS学习笔记】三十 保护模式九:段页式内存管理机制概述
上几篇文章学习了任务切换相关知识,如下: [OS学习笔记]二十六 保护模式八:任务门-任务切换 [OS学习笔记]二十七 保护模式八:任务切换的方法之----jmp与call的区别以及任务的中断嵌套 今 ...
- linux系统管理学习笔记之八---进程与作业的管理
linux系统管理学习笔记之八---进程与作业的管理 2010-01-05 13:00:42 标签:linux 进程 [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 ...
- linux系统管理学习笔记之八---linux文件与目录的管理及权限
linux系统管理学习笔记之八---linux文件与目录的管理及权限 2010-01-05 09:00:49 标签:权限 管理 文件目录 linx [推送到技术圈] 版权声明:原创作品,允许转载,转载 ...
- Zynq-7000系列之linux开发学习笔记:编译Linux内核和制作设备树(六)
开发板:Zynq7030数据采集板 PC平台:Ubuntu-18.04 + MobaXterm 开发环境:Xilinx Vivado + SDK -18.3 交叉编译工具:arm-linux-gnue ...
- linux系统学习笔记9——CANOpen状态转换
CANopen CANopen状态转换 CANopen状态转换 从节点上电和内部初始化之后自动进入预损作状太(Pre-operational State),在进入预操作之前,发送标准的启动对象(Boo ...
最新文章
- jsonp解决跨域问题
- 六个方法查看linux硬盘使用状况
- ORACLE关闭启动的诡异错误
- 【PHP】Sublime下PHP网站开发指南
- 『设计模式』开发设计的七大原则,我做人还是挺有原则,那些代码呢?
- 2021-08-21 初识javabean
- JavaWeb基于session和cookie的数据共享
- SWF文件反编译调试记录
- IT趣谈:关于所谓”XcodeGhost”的澄清
- 按住 ctrl 并滚动鼠标滚轮才可缩放地图_鼠标永远快不过键盘!32组PS常用快捷键你值得拥有!...
- ubuntu20.04安装qq音乐并解决闪退问题
- C语言里程序编译无误但运行会弹出程序已停止运行是为什么?
- word表格分开快捷键_Word使用技巧(表格技巧、快捷键)
- 平衡树--替罪羊树 *
- DL: Basic of C/C++(to be continued)
- VS中警告等级的含义
- Github中如何给项目创建GitHub Pages官方网页
- MTK MT6735 PCB设计规范资料分享
- arcgis中如何导出奥维可识别的图_如何在奥维中加载ArcGIS发布的地图服务
- P4994 终于结束的起点
热门文章
- 数据库:数据库的连接池原理及实现
- IO: BIO ? NIO ? AIO?
- 引入spring-boot-starter-actuator,控制台没有mapper的映射信息打印问题
- 计算机网络原理和应用,计算机网络原理与应用
- linux离线安装rjava,无法在ubuntu系统上安装rJava
- 机房定期巡检报告报告,全面详实,可以参考
- 有一种灾难,叫数据中心被大火烧了
- 你是否能判断电机损毁风险?
- swiper炫酷_swiper3d横向滚动多张炫酷切换banner
- python执行shell命令查看输出_python 运行 shell 命令并捕获输出_python_酷徒编程知识库...