【OS学习笔记】二十三 保护模式七:保护模式下任务的隔离与任务的特权级概念

上一篇文章学习了保护模式下操作系统内核如何加载程序并运行:点击链接查看上一篇文章

本篇文章接着上一篇文章学习保护模式下任务的隔离。

包括以下学习内容:

  • 任务的全局空间和局部空间
  • 任务的TSS
  • 任务的LDT
  • 任务的特权级概念等

1、回顾

在保护模式下,通过将内存分成大小不等的段,并用描述符对每个段的用途、类型、长度进行指定,就可以在程序运行时由处理器硬件施加访问保护。比如,当程序试图去写一个可执行程序的代码段时,处理器就会阻止这种企图;再比如当程序试图让处理器反问超过段的界限内存区域,处理器会引发异常中断。

首先一个程序老老实实地访问只属于它自己的段时,基本的段保护机制是有效的。但是一个失控的程序,或者一个恶意的程序,依然可以通过追踪和修改描述符表来达到它访问任何内存段的目的。比如用户程序知道GDT的位置,它可以通过向段寄存器加载操作系统的段描述符,或者在GDT中添加一个指向操作系统的数据段的描述符,来修改只属于操作系统的私有数据。

我们肯定是不能允许有以上的事情发生。

现在都是多任务系统。对于多任务系统,首先就必须保证任务的隔离和保护以及任务与操作系统之间的隔离。这是我们首要的任务(此任务非彼任务)。其次,由于操作系统主要是为各个任务服务,负责加载、创建和执行环境的管理,并执行各个任务的调度,最操作系统的保护显得尤为重要。我们之前学习过的基本的段保护机制已经无法满足以上那些要求。

所以新的机制就要出现。比如任务的隔离,特权级与特权级访问规则等,这些都是在以上新的保护要求下被创造出来的规则。

当然本文不是一下子就将这些机制学习完。本文先学习任务的隔离,以及特权级的基本概念。

2、任务描述符的隔离

所谓任务。程序是记录在载体(比如硬盘)上的指令和数据,总是为了完成某个特定的工作,其正在执行的一个副本,叫做任务(Task)。当然,一个程序,它可以有多个在运行的副本,那么就会有多个任务在同时执行。不同的程序也可以同在在内存中运行,这也是多个任务。

在以前的学习中,我们只接触到了GDT,我们把所有的任务的描述符以及操作系统的描述符都放在这个全局描述符表里面。这样显得不是很好。为了让任务与任务,任务与操作系统之间能够更好的隔离,便有了局部描述符表(LDT)。每一个任务都有自己的独立的描述符表,叫做LDT,LDT里面存放的是各个任务自己的描述符。各个任务自己的描述符不再放在GDT中,而是放在自己的独立的LDT中,这样更加有利于任务的隔离。

类似于GDTR是指向GDT的寄存器,对于LDT来说,也有一个寄存器叫做LDTR指向LDT。这个LDTR指向的是当前正在执行的任务的LDT。当任务切换时,对应的LDT肯定会变,那么LDTR也会更新指向新的任务的LDT。

具体的LDT的大小以及各个如何从LDT中加载描述符,与GDT类似,只不过在段选择子的TI位为1的时候表示从LDT中加载描述符,TI位为0的时候表示从GDT中加载描述符。具体的步骤参考书籍。

3、 保护任务现场的任务状态段(TSS段)

我们知道,任务切换的时候,肯定是涉及到任务上下文信息的保存。任务的上下文信息包括通用寄存器、段寄存器、栈指针寄存器ESP、指令指针寄存器EIP、状态寄存器EFLAGS,等等。

为了保存任务的状态,并在下次重新恢复执行的时候恢复他们,每个任务都应该有一个额外的内存段区域用于保存相关信息,这叫做任务状态段(TSS)

如下图是一个TSS的具有的固定格式:

在这里插入图片描述

处理器固件能够识别TSS中每个元素,并在任务切换的时候读取其中的信息。

和LDT一样,处理器用TR寄存器来指向当前任务的TSS。

下面我们来综合看一下多任务系统的组合示意图,包括了GDT,LDT,TSS大致的关系。
在这里插入图片描述

4、任务的全局空间和局部空间

我们大多数人都学过C语言,知道在C语言中会调用一些库函数例如printf,实际上这些函数最终都会去调用对应的系统函数。这些系统函数正是操作系统为用户程序提供的例程。

这样的话,我们程序中就包括了调用自己写的函数,以及调用操作系统的函数。这就导致我们用户程序的执行会在操作系统内核用户程序之间来回切换。我们把在用户程序空间执行的空间叫做局部空间,在内核中执行的空间叫做全局空间。

如下a图为每个任务的全局空间个局部空间,b图为多任务系统的全局空间和局部空间。

在这里插入图片描述

所谓全局空间和局部空间,也就是地址划分为题,即段的划分问题。全局空间有全局描述符表GDT指定。局部空间由局部描述符表LDT指定。

5、特权级基本概念

引入LDT和TSS ,只是任务层面进一步强化了分段机制,从安全保障的角度来看,只是相当于构建了可靠的硬件设施。

仅有设施是不行的,还需要有规章制度,还要有人来执行,处理器也一样。为此在分段机制的基础上,处理器引入了特权级,并由固件负责实施特权级保护。

特权级是存在于描述符及其选择子中的一个数值。当这些描述符或者选择子所指向的对象要进行某种操作,或者被别的对象进行访问的时候,该数值用于控制它们所能进行的操作。或者限制它们的可访问性。

Intel处理器共有4个访问级别:0,1,2,3. 较大的特权级意味着较低的特权级。较小的数值一位置较高的特权级。如下图是Intel提供的4级换装保护:
在这里插入图片描述

由上图可以看出,操作系统的内核特权级最高,系统服务程序(例如设备驱动程序等)的特权级其次,用户程序的特权级最低。

其实这很容易理解,操作系统的特权最高,它想干什么就干什么,肯定需要最高的特权级。普通的用户程序是被操作系统管理的,而且用户程序也不能随便的访问硬件操作硬件,所以用户程序的特权级最低。

剩下的关于特权级的保护方面的内容,就放到下一篇文章去学习。

6、总结

今天学习了以下基本内容:

  • 任务的全局空间和局部空间
  • 任务的TSS
  • 任务的LDT
  • 任务的特权级概念等

最后我们再给出一个与任务相关的各部分逻辑示意图:

在这里插入图片描述

详细的内容还是要参考原书籍,这里只是做一个简单的总结。

学习探讨加个人:
qq:1126137994
微信:liu1126137994

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

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

相关文章

[Drupal] How to add the js file and js code block in Drupal

Drupal 6:代码//This will add a JS file to your head (specifically the $scripts variable in page.tpl.php)drupal_add_js(drupal_get_path(module,my_module) ./my_module.js); //This add inline JS to the head of the documentdrupal_add_js(alert("Hello!"…

【OS学习笔记】二十四 保护模式七:调用门与依从的代码段----特权级保护

学习交流加 个人qq: 1126137994个人微信: liu1126137994学习交流资源分享qq群: 962535112 上一篇文章学习了保护模式下的任务与任务隔离,以及简单介绍了保护模式下的特权级的概念。点击链接查看上一篇文章:任务与任务隔…

【OS学习笔记】二十六 保护模式八:任务门---任务切换

上一篇文章学习了:保护模式七:调用门与依从的代码段----特权级保护 主要学习了以下内容: 描述符特权级(目标对象的特权级)DPL 描述符特权级(目标对象的特权级)DPL 当前特权级CPL 低特权级的应…

腾讯微博应用

腾讯微博开放平台提供了一些官方微博应用,供开发者借鉴和利用,其中包括: 一键转播——嵌入一键转播到你的网站里,访客便能将网页信息直接传播至腾讯微博。分享资讯的同时,用户通过来源链接可进入你的网站,从…

【OS学习笔记】二十七 保护模式八:任务切换的方法之----jmp与call的区别以及任务的中断嵌套

上一篇文章学习了任务门的概念:任务门—任务切换。主要学习了以下内容: 使用任务门进行任务切换的一般工作原理(和中断有关的任务切换) 本篇文章接着上一篇文章学习以下内容: 利用jmp进行任务切换利用call进行任务切…

Windows Phone 7 开发 31 日谈——第22日:应用?还是 游戏?

本文是“Windows Phone 7 开发 31 日谈”系列的第22日。 昨天,我发了一篇极长的关于Silverlight Toolkit for Windows Phone的文章。今天的会短一些,但却非常珍贵。我会讨论你的应用程序设置中非常细微但很重要的设置:类别(Genre&…

《Advanced .NET Debugging》 读书笔记 Listing 3-6: 使用sxe在程序载入mscorwks之后停下来载入sos...

1. 在WinDbg下载入01MDASample.exe 2. 执行 sxe ld mscorwks.dll 该命令的作用是在进程载入mscorwks之后停下来 3. 执行 g 可见程序在载入mscorwks.dll 之后停下来了 4. 执行 .loadby sos.dll mscorwks 转载于:https://www.cnblogs.com/charrli/archive/2010/12/25/1916964.h…

转载并学习实现三重DES加密解密代码(一)

作者:finallyliuyu 出处:博客园 声明:此篇博文代码来自于邹德强先生。由于目前找到的版本是残缺版,所以我又进行了补全。读一份好代码,可以领略到作者的编程风格和语言驾驭能力,同时又能从其中汲取养分。现将我所修改后…

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

上几篇文章学习了任务切换相关知识,如下: 【OS学习笔记】二十六 保护模式八:任务门—任务切换【OS学习笔记】二十七 保护模式八:任务切换的方法之----jmp与call的区别以及任务的中断嵌套 今天继续学习保护模式下的分页机制。本篇…

真人拳皇项目第六次Scrum总结——史经浩

今天,我们组开始了正式的编码阶段,前期plan的时候天马行空,现在是脚踏实地的coding了。在Scrum上,大家sync了一下各自的进展,如下: 今天 进度 问题及解决 明天 田飞 work item 37528:DirectX动画的de…

【OS学习笔记】三十一 保护模式九:页目录、页表和页三者的关系详解

上一篇文章学习了:保护模式九:段页式内存管理机制概述 本篇文章接着学习以下内容: 页目录概念页表概念页目录、页表与页之间的关系虚拟地址(线性地址)到物理地址的具体变换过程。 1、页目录、页表和页的对应关系 第…

使用某个文件夹下的所有文件去替换另一个文件夹下及其子文件夹下存在的同名文件(Python实现)...

值此新年即将到来之际,在这献上今年最后一篇文章. 产生这个需求是在项目的一次图标替换上,当时给了我一堆新图标要替换原来的老图标,可是原来的老图标分布在某个文件夹下的各个子文件夹下面,而新图标全是在同一个目录下的. 手动替换的话,只能是搜索文件名后替换,但是文件很多太…

一款研发管理软件的对象标签介绍

如果你了解WIKI,WIKI中的所有信息链接以标签的方式网状关联。TOPO系统中实现了完整的TAG功能,区别于目前市面上的其他类似管理系统,TOPO系统中实现的标签功能更加彻底和全面,例如完全用户自定义TAG,系统中所有管理对象…

【OS学习笔记】三十四 保护模式十:中断和异常区别

上几篇文章学习了分页机制的一些原理: 【OS学习笔记】三十 保护模式九:段页式内存管理机制概述【OS学习笔记】三十一 保护模式九:页目录、页表和页三者的关系详解 今天继续学习保护模式下的关于中断与异常的概念。本文主要学习中断与异常的…

记录一次文件迁移

事情的经过是这样子的!数据库A表添加一条记录,**系统中B目录下就会多出5n个文件。随着系统运行3年多,B目录中的文件数已高达2M多,而这些文件恰恰又是用户高度频繁访问的。于是问题就来了,一方面是用户访问文件速度变慢…

【OS学习笔记】三十五 保护模式十:中断描述符表、中断门和陷阱门

上一篇文章学习了中断与异常的概念:【OS学习笔记】三十四 保护模式十:中断和异常区别 本片文章接着学习以下内容: 中断描述符表中断门陷阱门 1 中断描述符表 我们前面讲了无数次,在实模式下,是由位于低地址的1M内存…

【OS学习笔记】三十六 保护模式十:通过中断发起任务切换----中断任务

上一篇文章学习了:OS学习笔记】三十五 保护模式十:中断描述符表、中断门和陷阱门 本篇文章接着上一篇文章学习中断任务。 我们在前面文章中一直在说通过中断发起任务切换,本文就是将之前没有说明白的内容:通过中断发起任务切换讲…

小议传统分层与新式分层,抑或与DDD分层

引言本文提到的分层只是软件架构上的分层。文中的传统分层指的是传统的三层结构:UI(界面表现层),BLL(业务逻辑层),DAL(数据访问层)。文中提出的观点也都是个人的一点认识,与任何组织…

WCF 第八章 安全 客户端认证

一个服务的客户端认证是通过向服务提供一系列信赖的声明。声明可以是任何形式,只要客户端和服务端理解这个格式并信赖它的来源就可以。 如果客户端和服务端共享一个秘密信息,比如一个用户名和密码,只要客户端通过一个合法认证发送数据&#x…

前端学习(205):animation动画库

动画库 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compatible" conte…