关于一致/非一致代码段与TSS 关系的个人看法

【0】概念定义

  • 0.1)一致代码段:
    简单理解,就是操作系统拿出来被共享的代码段,可以被低特权级的用户直接调用访问的代码, 但是特权级高的程序不允许访问特权级低的数据.
    通常这些共享代码,是”不访问”受保护的资源和某些类型异常处理。比如一些数学计算函数库,为纯粹的数学运算计算,
    被作为一致代码段.
    一致代码段的限制作用
    1.特权级高的程序不允许访问特权级低的数据:核心态不允许调用用户态的数据.
    2.特权级低的程序可以访问到特权级高的数据.但是特权级不会改变:用户态还是用户态.

  • 0.2)非一致代码段:
    为了避免低特权级的访问而被操作系统保护起来的系统代码.
    非一致代码段的限制作用
    1.只允许同级间访问.
    2.绝对禁止不同级访问:核心态不用用户态.用户态也不使用核心态. (调用门除外)
    [problem] 那低特权级段如何对高特权级的非一致代码段进行访问呢?
    通常低特权代码必须通过 “门” 来实现对高特权代码的访问和调用.

  • 0.3)门
    为了对具有不同特权级的代码段提供受控的访问,处理器提供了称为门描述符的特殊描述符集,有4种门描述符:

  • 1. 调用门(call gate), 类型TYPE=12: 用于在不同特权级间实现受控的程序控制转移;
  • 2. 陷阱门(trap gate),类型TYPE=15:用于调用异常和中断的处理程序;
  • 3. 中断门(interrupt gate),类型TYPE=14:用于调用异常和中断的处理程序;
  • 4. 任务门(task gate),类型TYPE=5:用于任务切换;

Example-看个荔枝:
E1)问题:代码A调用代码B,运用调用门G,而调用门G相当于一个选择子的角色(看它的数据结构,你就知道);
当然,要知道,代码A调用代码B,实际上是通过jmp selector:0 跳转到代码B的, 而selector存储在调用门G中;
E2)调用过程如下:

  • (1)而代码A 访问 G时,相当于访问一个数据段,要求代码A的CPL和RPL都小于或等于DPL_G,即CPL和RPL需要更高的特权级上。(数值上而言)
  • (2)接着,还要比较CPL和DPL_B;
    • (2.1)若B是一致代码段的话,要求DPL_B <= CPL;
    • (2.2)如果是非一致代码段的话,call指令和jmp指令又有不同;
      • (2.2.1)call调用,要求DPL_B <= CPL
      • (2.2.2)jmp调用,要求DPL_B = CPL

in a word: 通过调用门和call指令,可以实现从low level 到 high level 的转移, 无论目标代码是一致还是非一致。(干货)

  • 0.4)TSS描述符

1)使用调用或跳转指令,任何可以访问TSS 描述符的程序都可以进行任务切换。
2)可以访问TSS 描述符的程序其 CPL 必须小于或等于 TSS描述符的 DPL, 要知道, 大多数系统中, TSS描述符的DPL字段 设置成小于 3, 这样一来,只有具有特权级的软件可以执行任务切换操作;

软件或处理器可以使用如下方法来调度一个任务的执行:
(1)使用CALL 指令明确调用一个任务;
(2)使用JMP 指令明确跳转到一个任务(Linux 内核使用的方式);
(3)(由处理器)隐含地调用一个中断句柄处理任务;
(4)隐含地调用一个异常句柄处理任务;

任务门描述符

  • 0)定义:任务门描述符中的TSS 选择子字段指向 GDT 中的一个TSS 段描述符, 这个TSS选择子中的RPL不用;
  • 1)任务门描述符中的 DPL 用于在任务切换时控制对 TSS 段的访问:
    • 1.1)当程序通过任务门调用或跳转到一个任务时,程序的CPL 以及 指向任务门的门选择子的RPL值 必须小于等于任务门描述符的DPL;
    • 1.2)程序可以通过任务门描述符或TSS段描述符来访问一个任务;

【2】关联关系

Attention(感觉os的 程序(被调用者), 和程序(调用者)是关联数据库中的多对多的关系)(干货)

  • A1)首先, 要知道 操作系统的程序有些是共享的,有些是非共享的;而程序的调用者,有些调用者是可以访问非共享程序,有些调用者是不可以访问非共享程序的;而所有调用者都可以访问共享程序。(一致代码段就是共享的, 非一致代码段就是非共享的)
  • A2)显然,os 通过设置高特权级来保护某些程序,以防被不使用TSS机制的低特权级程序调用, 而通过设置低特权级来共享某些程序;
    A3)通过TSS 实现任务切换,给低特权级的调用者和高特权级的被调用者搭建起了一个桥梁;

那 os 如何实现允许某些调用者访问非共享的程序呢?
那就引入了TSS机制来允许低特权级的调用者访问高特权级的被调用者;
程序员创建TSS描述符, TSS选择子, TSS所占的内存空间,然后调用者通过调用TSS选择子(装有TSS选择子的任务门描述符的选择子) 实现低特权级转移到高特权级;

因为-Reason:

  • R1)未引入门或TSS机制前, CPU的 特权级检查规则是:调用者的CPL 和 被调用者选择子的RPL 去和 被调用者的DPL 进行比较,检验;(具体规则,这里略去)
  • R2)引入TSS 机制后, CPU的特权级检查规则是:
    • R2.1)若使用 TSS选择子 实现任务切换:调用者的CPL 必须小于或等于TSS描述符的DPL;
    • R2.2)若使用 装有调用TSS选择子的任务门描述符 实现任务切换:调用者的CPL和指向任务门的门选择子的RPL 必须小于等于任务门描述符的DPL,注意,当使用任务门时,目标TSS段描述符的DPL忽略不用;
  • R3)总结:如果使用TSS机制实现任何切换的话, 调用者的特权级和被调用者的特权级完全是隔开的, 没有任何比较或检验的规则在里面;

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

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

相关文章

python预处理标准化_tensorflow预处理:数据标准化的几种方法

tensorflow预处理&#xff1a;数据标准化的几种方法发布时间&#xff1a;2018-08-09 19:39,浏览次数&#xff1a;1774, 标签&#xff1a;tensorflow数据归一化问题是数据挖掘中特征向量表达时的重要问题&#xff0c;当不同的特征成列在一起的时候&#xff0c;由于特征本身表达方…

三思笔记_使用反射前先三思

三思笔记介绍 有时&#xff0c;作为开发人员&#xff0c;您可能会遇到无法使用new运算符实例化对象的情况&#xff0c;因为其类名称存储在配置XML中的某个位置&#xff0c;或者您需要调用一个名称指定为注释属性的方法。 在这种情况下&#xff0c;您总会有一个答案&#xff1a;…

分页机制总结

【0】写在前面&#xff08;分页机制&#xff09; 0.0&#xff09; source code from orange’s implemention of a os and text description from Zhaojiong’s perfect analysis of Linux kernel and for complete code ,please visit https://github.com/pacosonTang/Orange…

python程序填空题参照代码模板、完善代码_python二级考试操作题11.pdf

综合应用题参照代码模板完善代码&#xff0c;实现下述功能。文件ngchina.html 保持了网页源代码&#xff0c;请将该页面中图片的URL 提取出来,并输出所有图像的URL。习题讲解#P301#读取HTML 文件内容def getHTMLlines(htmlpath):f open(htmlpath,"r",encoding utf-…

Struts2学习笔记

文章目录Struts2 的核心开发包Struts2 配置文件Struts2 域对象Struts2 编程流程Action 组件使用通配符配置 ActionAction 中如何访问 Session通过 ActionContext 对象访问 Session 对象&#xff08;不推荐&#xff09;通过实现 SessionAware 接口访问 sessionAction 如何访问 r…

如何从文件系统中读取文件内容

【0】写在前面 0.0&#xff09; text description from orange’s implemention of a os &#xff0c;文末总结系个人臆测出的干货 【1】intro to FAT12&#xff08;file allocation table 12&#xff09;文件系统格式&#xff08;from Baidu Baike&#xff09; &#xff08;…

java微服务,微在哪_Java:ChronicleMap第3部分,快速微服务

java微服务,微在哪标准Java Maps需要在启动时进行初始化。 了解如何利用可从文件初始化的ChronicleMaps并显着减少微服务启动时间&#xff0c;以及如何在JVM之间共享Maps。 内置的Map实现&#xff08;例如HashMap和ConcurrentHashMap速度很快&#xff0c;但是必须先使用映射进…

excel离散度图表怎么算_Excel数据分析——离散值排除-excel直方图

今天举例的数据继续沿用昨天做出来的结果&#xff0c;至于这组数据还要接着用多久~~可能要混到我讲不下去为止吧~~~我们通过两个不同的拟合公式得到了两组不同的残差值&#xff0c;数据情况如下&#xff1a;有没有觉得看上面那张散点图有点糊啊&#xff1f;没错&#xff0c;问题…

drools dmn_Drools DMN最新开源引擎性能改进

drools dmn我们一直在寻求改善Drools DMN开源引擎的性能。 我们最近审查了DMN用例&#xff0c;其中输入数据节点的实际输入总体有所不同。 这突出显示了引擎的次佳性能&#xff0c;我们在最新版本中对此进行了改进。 我想分享我们的发现&#xff01; 基准制定 当我们开始为此用…

制作FAT12软盘以查看软盘的根目录条目+文件属性+文件内容

【-1】Before for specific info , please visit http://wiki.osdev.org/Loopback_Device 【0】我们先上干货&#xff0c;看到效果后&#xff0c;我们再说明每个步骤的缘由&#xff1b; 【1】进入挂载目录&#xff0c;添加相关文件&#xff08;依个人意愿&#xff09; Attenti…

如何取消高亮显示重复项_如何将重复数据突出显示?

将表格中一列数据中重复的&#xff0c;使用特殊颜色突出显示或者使用一些符号标记出来。例如&#xff1a;一个供应商&#xff0c;可以邀请别的供应商加入成为联合体&#xff0c;报表要显示所有供应商&#xff0c;然后供应商最后一列显示所有联合体&#xff0c;当联合体供应商跟…

Maven的maven-source-plugin插件详解

maven-source-plugin 这个插件专门负责将项目源文件打成包的&#xff0c;该插件在 pom.xml 中的配置如下&#xff1a; <build><plugins><plugin><artifactId>maven-source-plugin</artifactId><version>3.0.1</version><configu…

Maven Java Web Project打包详解/如何打包

文章目录打包部署构件&#xff08;Artifacts&#xff09;打源码包方式一&#xff1a; 命令行方式方式二&#xff1a;使用 IDE将源码包发布到本地 Maven 仓库中涉及到案例项目的结构&#xff1a; 打包部署构件&#xff08;Artifacts&#xff09; war 格式的部署构件可以直接放…

四位共阳极数码管显示函数_数码管模块.doc

数码管模块数码管1、概 述数码管模块采用四位共阳极数码管&#xff0c;用于显示数字和少数特殊字符。可以在机器人项目中使用该模块&#xff0c;用于显示速度、时间、分数、温度、距离等传感器的值。同时&#xff0c;Makeblock提供易于编程的Arduino库&#xff0c;使用户能够方…

java中的可检查和不检查_检查Java测试中发生了什么

java中的可检查和不检查有人想到了在Java单元测试中使用try和catch块的想法&#xff1a; Test public void test() { try { callSomeCode(); } catch (Exception e) { assertEquals( "foo" , e.getMessage()); } } 上面的内容很诱人&#xff0c;但不起作用 。 如果…

FAT12中,如何定位大于一个扇区(512B)的文件内容

【0】README 0.1&#xff09;本文旨在于 演示在FAT12中&#xff0c; 如何取定位大于 512B 的文件内容&#xff0c;和查看它&#xff1b;0.2&#xff09;如何制作FAT12文件系统&#xff0c;以及如何向文件中添加temp.txt文件&#xff0c;参见&#xff1a; { http://blog.csdn.n…

通过Struts2的拦截器实现文件上传/上传文件功能

struts.xml配置内容如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd&qu…

java获取ram_Java:ChronicleMap第2部分,超级RAM映射

java获取ram诸如无处不在的HashMap类的标准Java Map最终受到可用RAM的限制。 阅读本文并了解如何创建几乎无限大小甚至超过目标计算机RAM大小的Java Map。 内置的Map实现&#xff0c;例如HashMap和ConcurrentHashMap &#xff0c;只要它们相对较小&#xff0c;就可以正常工作。…

lifi与wifi的论文_Wifi_(毕业论文).doc

Wifi_(毕业论文)绪论2第一章 Wi-Fi技术概述31.1 无线局域网络31.1.1 IEEE 802.11系列标准31.1.2 无线局域网络概述31.2 Wi-Fi概念的引入41.2.1 Wi-Fi技术41.2.2 怎样使用Wi-Fi41.2.3 谁可以使用Wi-Fi5第二章 Wi-Fi技术的分析62.1 Wi-Fi与其他技术的对比分析6参 考 文 献8绪论Wi…

os引导程序boot从扇区拷贝os加载程序loader文件到内存(boot copy kernel to mem in the same method)

【0】README 0.1&#xff09; 本代码旨在演示 在boot 代码中&#xff0c;如何 通过 loader文件所在根目录条目 找出该文件的 在 软盘所有全局扇区号&#xff08;簇号&#xff09;&#xff0c;并执行内存中的 loader 代码&#xff1b;0.2&#xff09; 此代码非常重要&#xff0…