使用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) --分段分页保护机制相关推荐

  1. linux钩子函数和回调函数,Linux Kernel 学习笔记10:hook函数

    (本章基于: Linux -4.4.0-37) linux 内核中有一套hook函数机制,可在不同hook点位置监控网络数据包,并执行丢弃.修改等操作.网络防火墙就是通过此机制实现的. 注册注销hoo ...

  2. Linux内核学习笔记——内核页表隔离KPTI机制(源码分析)

    KPTI(Kernel PageTable Isolation)全称内核页表隔离,它通过完全分离用户空间与内核空间页表来解决页表泄露. KPTI中每个进程有两套页表--内核态页表与用户态页表(两个地址 ...

  3. Linux内核学习笔记五——中断推后处理机制

    一 中断 硬件通过中断与操作系统进行通信,通过对硬件驱动程序处注册中断处理程序,快速响应硬件的中断. 硬件中断优先级很高,打断当前正在执行的程序.有两种情况: 硬件中断在中断处理程序中处理 硬件中断延 ...

  4. 【OS学习笔记】三十三 保护模式九:分页机制对应的汇编代码之---用户程序代码

    本片文章是以下两篇文章: [OS学习笔记]三十 保护模式九:段页式内存管理机制概述 [OS学习笔记]三十一 保护模式九:页目录.页表和页三者的关系详解 对应的用户程序汇编代码. ;代码清单16-2;文 ...

  5. 【OS学习笔记】三十 保护模式九:段页式内存管理机制概述

    上几篇文章学习了任务切换相关知识,如下: [OS学习笔记]二十六 保护模式八:任务门-任务切换 [OS学习笔记]二十七 保护模式八:任务切换的方法之----jmp与call的区别以及任务的中断嵌套 今 ...

  6. linux系统管理学习笔记之八---进程与作业的管理

    linux系统管理学习笔记之八---进程与作业的管理 2010-01-05 13:00:42 标签:linux 进程 [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 ...

  7. linux系统管理学习笔记之八---linux文件与目录的管理及权限

    linux系统管理学习笔记之八---linux文件与目录的管理及权限 2010-01-05 09:00:49 标签:权限 管理 文件目录 linx [推送到技术圈] 版权声明:原创作品,允许转载,转载 ...

  8. Zynq-7000系列之linux开发学习笔记:编译Linux内核和制作设备树(六)

    开发板:Zynq7030数据采集板 PC平台:Ubuntu-18.04 + MobaXterm 开发环境:Xilinx Vivado + SDK -18.3 交叉编译工具:arm-linux-gnue ...

  9. linux系统学习笔记9——CANOpen状态转换

    CANopen CANopen状态转换 CANopen状态转换 从节点上电和内部初始化之后自动进入预损作状太(Pre-operational State),在进入预操作之前,发送标准的启动对象(Boo ...

最新文章

  1. jsonp解决跨域问题
  2. 六个方法查看linux硬盘使用状况
  3. ORACLE关闭启动的诡异错误
  4. 【PHP】Sublime下PHP网站开发指南
  5. 『设计模式』开发设计的七大原则,我做人还是挺有原则,那些代码呢?
  6. 2021-08-21 初识javabean
  7. JavaWeb基于session和cookie的数据共享
  8. SWF文件反编译调试记录
  9. IT趣谈:关于所谓”XcodeGhost”的澄清
  10. 按住 ctrl 并滚动鼠标滚轮才可缩放地图_鼠标永远快不过键盘!32组PS常用快捷键你值得拥有!...
  11. ubuntu20.04安装qq音乐并解决闪退问题
  12. C语言里程序编译无误但运行会弹出程序已停止运行是为什么?
  13. word表格分开快捷键_Word使用技巧(表格技巧、快捷键)
  14. 平衡树--替罪羊树 *
  15. DL: Basic of C/C++(to be continued)
  16. VS中警告等级的含义
  17. Github中如何给项目创建GitHub Pages官方网页
  18. MTK MT6735 PCB设计规范资料分享
  19. arcgis中如何导出奥维可识别的图_如何在奥维中加载ArcGIS发布的地图服务
  20. P4994 终于结束的起点

热门文章

  1. 数据库:数据库的连接池原理及实现
  2. IO: BIO ? NIO ? AIO?
  3. 引入spring-boot-starter-actuator,控制台没有mapper的映射信息打印问题
  4. 计算机网络原理和应用,计算机网络原理与应用
  5. linux离线安装rjava,无法在ubuntu系统上安装rJava
  6. 机房定期巡检报告报告,全面详实,可以参考
  7. 有一种灾难,叫数据中心被大火烧了
  8. 你是否能判断电机损毁风险?
  9. swiper炫酷_swiper3d横向滚动多张炫酷切换banner
  10. python执行shell命令查看输出_python 运行 shell 命令并捕获输出_python_酷徒编程知识库...