x86 --- 任务隔离特权级保护

news2024/11/16 15:40:36

程序是记录在载体上的数据和指令。
程序正在执行时的一个副本叫做任务

所有段描述符都放在GDT --> 不做区分。
内核程序(任务)所占段在GDT中,用户程序(任务)所占段在LDT中 --> 做区分。

每个任务都有自己独立的LDT,也用来存放描述符。
需要跟踪所有任务的LDT,也需要一个特定寄存器LDTR(类似GDTR),LDT不止一个,多任务系统中会有很多个任务在CPU上流转,而某一时刻只有一个任务在CPU上工作,这个任务被称为“当前任务” Current Task。LDTR就指向当前任务的LDT,每当任务切换,新的任务“上台“,LDTR就转而指向它。

以前只有一个GDT,现在多了LDT,CPU该执行哪一个呢?取决于段选择子的TI位:
TI = 1 从当前任务的LDT中加载描述符
TI = 0 从GDT中加载描述符
在这里插入图片描述

以前整个机器上只有内核程序和一个用户程序的时候,没有任务切换的说法,任务不会中途被CPU切出,转而去执行另一个程序。现代多任务操作系统,在任务切出时上一个任务的”现场“需要保存,以便切回到它时CPU能够知道上一次执行它时执行到哪儿了,是个什么样的状态。核心需求就是”保存“这个动作。保存到哪儿?如何保存?这是亟待解决的问题。

每个任务都有一个LDT,为了解决切换任务时保护现场的问题,TSS(Task State Segment)任务状态段,用来保存任务切换时的状态,切换时任务就像被静止了一样,所有状态,包括以下图中的信息,都需要保存在TSS中,在切换回来时再从TSS中读取恢复。
在这里插入图片描述
和LDT一样,TSS也需要一个特殊寄存器去指向它,也就是TR。

多任务操作系统中,操作系统要肩负着任务的创建,以及在任务之间调度和切换的工作。不过,更为繁重和基础的工作是对处理器、设备及存储器的管理。对不同事件的响应,有些可以由任务来处理,有些只能被操作系统去处理,比如中断,内存分配,内存回收,设备访问,以及进程的排队与调度。

在这里插入图片描述
从程序员的角度来看,任务的全局空间包含了操作系统的段,是由别人编写的,但是他可以调用这些段的代码,或者获取这些段中的数据;任务局部空间的内容是由程序员自己创建的。通常,任务会在自己的局部空间运行,当它需要操作系统提供的服务时,转入全局空间执行。

由于这个特性,一个任务既能在其自己的局部空间执行,也可以到全局空间去执行。这就导致它可以访问的空间更加大了。

每个段描述符都对应着一个内存段。很显然,在一个任务的全局地址空间上,可以划分出2^13 个段,也就是8192 个段。因为GDT 的0 号描述符不能使用,故实际上是8191 个段,但这无关紧要。又因为段内偏移是32 位的,段的长度最大的4GB,因此,一个任务的全局地址空间,
其总大小为2^13 × 2 ^32 =245 字节,即32TB。同样的道理,局部描述符表LDT 可以定义2 ^13 个,也就是8192 个描述符,每个段的最大长度也是4GB,故,一个任务的局部地址空间为2 ^13×2 ^32 =245 字节,同样是32TB。这样一来,每个任务的总地址空间为2 ^45 +2 ^45 =2 ^45 ×2=2 ^45 ×21 = 2 ^46 字节,即64TB。

特权级保护

特权级(Privilege Level)
存在于描述符 以及 其选择子中的一个数值。
Intel 处理器可以识别4 个特权级别,分别是0 到3,较大的数值意味着较低的特权级别,反之亦然。如图14-4 所示,这是Intel 处理器所提供的4 级环状保护结构。
在这里插入图片描述
在上面描述符选择子的图片中最低两位是RPL,request privilege level
在下面这张段描述符的图片中高32位14 13位是DPL。descriptor privilege level
2个bit位的表示范围是:0,1,2,3
数值越低 级别越高
在这里插入图片描述
DPL 决定了访问其所在描述符所应当具备的最低特权级别。

当处理器正在一个代码段中取指令和执行指令时,那个代码段的特权级叫做当前特权级(Current Privilege Level,CPL)

一般情况下:

范围特权级
操作系统0
驱动程序1 or 2
用户程序3

一般来说,操作系统是最先从BIOS 那里接收处理器控制权的,进入保护模式的工作也是由它做的,而且,最重要的是,它还肩负着整个计算机系统的管理工作,所以,它必须工作在0 特权级别上,当操作系统的代码正在执行时,当前特权级CPL 就是0

当任务在局部空间运行时(CPL = 3),想要访问硬件资源,这个时候就需要操作系统介入(操作系统拥有最高级别)(CPL = 0)

一些权力至上,比如停机指令hlt 和对控制寄存器CR0 的写操作,像这样的指令只能由最高特权级别的程序来做。因此,那些只有在当前特权级CPL 为0 时才能执行的指令,称为特权指令(Privileged Instructions)型的特权指令包括加载全局描述符表的指令lgdt(它在实模式下也可执行)、加载局部描述符表的指令lldt、加载任务寄存器的指令ltr、读写控制寄存器的mov 指令、停机指令hlt 等十几条。

想要从一个特权级的代码段,跳转到另一个特权级的代码段,需要遵循一些原则和方法

  1. 一般来说控制转移只允许发生在两个特权级相同的代码段之间。
  2. 低特权级要跳转到高特权级有两种办法:高特权级代码设置为依从 或是 使用 门描述符

依从

简单来说就是让一个高特权级的段,设置为服从于当前正在执行的低特权级的段。当低特权级的段
必须满足 CPL>= 目标代码段描述符的DPL 就可以让控制转移到依从的代码段上执行,但是执行时并不使用依从代码段的DPL,而是使用调用放的特权级

门(Gate)是另一种形式的描述符,称为门描述符,简称门。
和段描述符不同,段描述符用于描述内存段,门描述符则用于描述可执行的代码,比如一段程序、一个过程(例程)或者一个任务
门描述符 描述了 目标过程(例程)所在代码段的选择子,以及段内偏移

不同门的作用分类:

门类型作用
不同特权级之间切换调用门
中断处理过程中断门/陷阱门
任务切换任务门

要想通过调用门进行控制转移,可以使用jmp far 或者call far 指令,并把调用门描述符的选择子作为操作数。

使用jmp far 或者 call far指令 来调用门进行转移 参数为门描述符所在的选择子。

不同之处:

jmp farcall far
特权级变化不改变CPLCPL被赋值为目标代码段DPL

不允许从特权级高的代码段将控制转移到特权级低的代码段,因为操作系统不会引用可靠性比自己低的代码。

不管是实施控制转移(jmp和call)还是访问数据段,都可以看作一个请求。请求者通过提供一个段选择子来请求访问指定段。此处的请求使用的就是RPL请求者特权级别

在绝大多数时候,请求者都是当前程序自己(程序自己提供了选择子),因此,CPL=RPL。
判断请求者是谁最简单的方法是看谁提供了选择子

有些情况下CPL != RPL特权级为3 的应用程序希望从硬盘读一个扇区,并传送到自己的数据段,因此,数据段描述符的DPL 同样会是3。由于I/O 特权级的限制,应用程序无法自己访问硬盘。好在位于0 特权级的操作系统提供了相应的例程,但必须通过调用门才能使用,因为特权级间的控制转移必须通过门。

假设,通过调用门使用操作系统例程时,必须传入3 个参数,分别是CX 寄存器中的数据段选择子、EBX 寄存器中的段内偏移,以及EAX 中的逻辑扇区号。

高特权级别的程序可以访问低特权级别的数据段,这是没有问题的。因此,操作系统例程会用传入的数据段选择子代入段寄存器,以便代替应用程序访问那个段:mov ds,cx

在这里插入图片描述

RPL的必要性

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1505.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【无标题】

第1章 概述 本章主要内容: 互联网的概念(标准化)、组成、发展历程;电路交换的基本概念、分组交换的原理;计算机网络的分类、性能指标及两种体系结构。 重点掌握: 在计算机网络分层模型中,网…

7、GC日志详解

目录如何分析GC日志参数配置程序运行GC日志打印解析GC日志数据分析指定其他垃圾收集器CMSG1GC分析工具JVM参数汇总查看命令如何分析GC日志 参数配置 对于java应用我们可以通过一些配置把程序运行过程中的gc日志全部打印出来,然后分析gc日志得到关键性指标&#xff…

目标检测算法——遥感影像数据集资源汇总(附下载链接)

关注”PandaCVer“公众号 深度学习资料,第一时间送达 目录 一、用于 2-5 分类问题 1.UCAS-AOD 遥感影像数据集 2.Inria Aerial Image Labeling Dataset 3.RSOD-Dataset 物体检测数据集 二、用于 5-10 分类问题 1.RSSCN7 DataSet 遥感图像数据集 2.NWPU…

孙宇晨接受韩国媒体专访:熊市受宏观经济的不确定性影响

10月27日至10月29日,韩国釜山备受关注的大型区块链活动 2022 釜山区块链周(BWB 2022)在釜山会展中心(BEXCO)举行。韩国区块链媒体TokenPost 对出席活动的波场TRON创始人孙宇晨进行了专访。10月28日,该媒体发…

Nginx快速入门部署前端项目

目录 一,Nginx简介 1.1 负载均衡 演示 1.1.2 安装nginx 再复制一份一样的tomcat并修改端口号 打开两个tomcat的服务 打开防火墙中的8081端口 修改Nginx配置 重启Nginx服务,让配置生效 1.2 反向代理 Nginx项目部署 1.确保前端项目能用 2.将前台项目…

看过来,Windows 11 Insider Preview 25231.1000推送啦!

微软于近日凌晨发布新的Windows 11内部预览版系统,版本号为25231.1000,该系统对平板任务栏体验进行了改进,修复了系统托盘、设置等问题。下面一起来看看完整的更新内容。 更新日志 TL;速度三角形定位法(dead reckoning…

【ASM】字节码操作 转换已有的类 清空方法体

1.概述 在文章:【ASM】字节码操作 转换已有的类 移除Instruction 移除NOP 中我们学会了如何移除NOP。 本章我们将学习如何清空方法体。 1.1 如何清空方法体 在有些情况下,我们可能想清空整个方法体的内容,那该怎么做呢?其实,有两个思路。 ●第一种思路,就是将instructi…

Spring中事务的传播机制以及REQUIRED、REQUIRES_NEW、NESTED区别以及代码演示

​📒个人主页:热爱生活的李📒 ​❤️感谢大家阅读本文,同时欢迎访问本人主页查看更多文章​❤️ 🙏本人也在学习阶段,如若发现问题,请告知,非常感谢🙏 事务隔离级别demo理…

[计算机网络]第一章 概述 -- 1.1 计算机网络在信息时代中的作用 1.2 互联网概述

文章目录1.1 计算机网络在信息时代中的作用1.2 互联网概述1.2.1 网络的网络1.2.2 互联网基础结构发展的三个阶段第一阶段第二阶段第三阶段1.2.3 互联网标准化工作1.1 计算机网络在信息时代中的作用 21世纪是以网络为核心的信息时代,21世纪的重要重要特征&#xff1a…

小侃设计模式(二)-单例模式

1.概述 设计模式在粒度和抽象层次上各不相同,因此从不同的角度,分类形式也不同,目前存在两种较为经典的划分方式,即根据模式作用的范围、模式的目的来划分。根据模式主要是用于类还是用于对象,可将其划分为类模式和对…

【JavaWeb】Tomcat

1.JavaWeb是指所有通过java语言编写可以通过浏览器访问的程序的总称 请求是指客户端给服务器发送数据 响应是指服务器给客户端回传数据 2.Web资源按实现的技术和呈现的效果的不同,又分为静态资源和动态资源两种. 静态资源:html css js txt mp4视频 jpg图片 动态资源:jsp页面 se…

前端工程化基建探索:从内部机制和核心原理了解npm

大厂技术 坚持周更 精选好文 前言 本文【前端工程化基建探索】的第2篇,上一篇 前端工程化基建探索(1)前端大佬,你好! 当我们拉取一个前端工程化项目,都会通过npm/Yarn/pnpm 管理工具来安装项目的依赖&am…

大学解惑06 - 要求输入框内只能输入2位以内小数,怎么做?

请听题:有一个输入框,准备用于计算使用,要求点击“校验”按钮的时候进行验证,必须输入数字,并且只能是2位以内的小数,如果输入不合法,请给出提示,如果输入合法通过验证,则…

又是一篇教你摸鱼的文章,用Python实现自动发送周报给老板

前言 有没有哪个同志跟我一样,每周都要写工作周报 像我这种记性不好的,一个月四周忘记三次 索性就用Python写个小工具,让它每周帮我给老板发周报~ Github: Weekday 小工具 提出目标 源码.资料.素材.点击领取即可 想有一个工具能发邮件 目…

ARM 汇编基础

一、ARM架构 ARM芯片属于精简指令集计算机(RISC:Reduced Instruction Set Computing),它所用的指令比较简单,有如下特点: 对内存只有读、写指令对于数据的运算是在CPU内部实现使用RISC指令的CPU复杂度小一点,易于设计…

WebShell箱子简介与原理

今天继续给大家介绍渗透测试相关知识,本文主要内容是WebShell箱子简介与原理。 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 再次强调:严禁对未授…

【面试】【项目】谷粒商城

视频链接 项目调查 这项目是这么多免费视频里最好的了。但依旧是demo。 最好还是买慕课网上的实战课,那些老师都有丰富的开发经验,有经验跟没经验讲的课是完全不同的。 谷粒商城我觉得是不low的,我很菜,毕业一年半被多次辞退&a…

数据结构之-【排序】

目录 排序 ⚡️冒泡排序 ⚡️选择排序 ⚡️插入排序 ⚡️堆排序 ⚡️归并排序 ⚡️快速排序 🏳️‍🌈排序 将数字从小到大的顺序排列 🔴冒泡排序 「冒泡排序」重复"从序列右边开始比较相邻两个数字的大小,再根据结果交换两个…

国产蓝牙耳机哪个牌子好?国产蓝牙耳机质量排行榜

随着3.5 mm耳机插孔被淘汰,特别是5G时代,让手机的内部结构变得越来越小,要将耳机插口塞进一个新的插口,无疑是一件非常困难的事情,而随着蓝牙技术的不断进步,蓝牙耳机也逐渐成为了如今人们配戴手机的首选&a…

Revit中阀门在项目中不可用无法与管道连接?

一、Revit中阀门在项目中不可用的问题 在项目中放置阀门时,有时候不可用,会出现如图1所示问题,无法与管道连接。 出现上图显示问题是因为在编辑族的时候,阀门两边的连接件原心没有完全重合。打开编辑族界面,可以看到如…