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

上一篇文章学习了:保护模式七:调用门与依从的代码段----特权级保护
主要学习了以下内容:

描述符特权级(目标对象的特权级)DPL

  • 描述符特权级(目标对象的特权级)DPL

  • 当前特权级CPL

  • 低特权级的应用调用高特权级的操作系统代码的两种方法

    • 第一种方法是将高特权级的代码段定义为依从的
    • 第二种方法是使用调用门
  • 请求特权级RPL

今天接着上一篇文章学习:

  • 任务切换的方法

1、回顾

从80286开始,处理器是面向多任务系统而设计的。在一个多任务的环境中,可以同时存在多个任务,每个任务都有自己的局部描述符(LDT)和任务状态段(TSS)。可以在多个任务之间切换,使它们轮流执行,从一个任务切换到另一个任务时,具体的切换过程是处理器固件负责进行。

但是什么时候切换到另一个任务,以及切换到哪一个任务,这是操作系统的责任,处理器只负责具体的切换过程,包括保护前一个任务的现场。

有两个基本的任务切换方法,一种是协同式的,从一个任务切换到另一个任务时,需要当前任务主动的请求暂时放弃执行权,或者在通过调用门请求操作系统服务时(系统会调用),由操作系统‘趁机’将控制转移到另一个任务。

另一种方式是抢占式的。在这种情况下,可以安装一个定时器,并在中断服务程序中实施任务切换。硬件中断信号总会出现,不管处理器当时在做什么,中断总会按时到来,而任务切换就能准时进行。在这种情况下,每个任务都能获得平等的执行机会。抢占式多任务将放在后面:保护模式八进行学习。这里我们只学习多任务切换的一般工作原理。

2、任务切与特权级控制转移的区别

在上一篇文章点击查看。我们学习了特权级相关的概念。知道了特权级实际上是针对同一个任务的局部空间与全局空间之间的控制转移保护而存在的。注意,我们说特权级是针对同一个任务的,这一点需要理解,因为不同的任务之间就算特权级不一样,也是可以进行人去切换的。比如用户线程与内核线程,这肯定是可以进行切换的。

上面的怎么理解呢?

实际上,操作系统出了为每一个任务提供服务外,也会有一个作为任务而独立存在的部分,而且是0特权级的任务。当计算机启动进入保护模式,直接创建和执行操作系统的0特权级任务,然后可以从该任务切换到其他任务,不管它们是哪个特权级的。

如下图是一个任务切换和在任务内进行特权级间的控制转移示意图:

在这里插入图片描述

很明显,任务切换与特权级控制转移不是一回事!!!

3、任务切换的方法

3.1 借助于中断—任务门

这是现代抢占式多任务的基础。原因很简单,只要中断没有被屏蔽,它就能随时发生。特别是定时器中断,能够以准确的时间间隔发生,可以用来强制实施任务切换。

我们知道在实模式下,内存最低地址端的1KB是中断向量表,保存着256个中断处理过程的段地址和偏移地址。当中断发生时,处理器把中断号乘以4,作为索引号访问中断向量表,从相应的位置取出中断处理过程的段地址和偏移地址,并转移到那里执行,

而在保护模式下,中断向量表不再使用,取而代之的是中断描述符表。它和GDT,LDT是一样的,用于保存描述符。它保存的是门描述符。 包括中断门,陷阱门和任务门。这些门和我们之前学过的调用门非常类似。当中断发生时,处理器用中断向量表乘以8(因为每个描述符占8字节),作为索引访问中断描述符表,取出门描述符。门描述符中有中断处理过程的代码段选择子和段内偏移量,这和调用门是一样的。接着,转移到相应位置去执行。

一般的中断处理可以使用中断门和陷阱门。它们两的本质与调用门类似,都是任务内的控制转移。从任务的局部空间转移大全局空间。

但是当中断发生时,中断号对应的是任务门,那就不一样了。此时就是进行任务切换-----即终止当前任务的执行,切换到另一个任务执行。

如下图是一个任务门描述符的格式:

在这里插入图片描述

其中:

  • TSS选择子: 执行任务切换时,必须找到新任务的选择子。
  • P位:任务门的P位指示该门是否有效,p=0时,不允许使用此门实施任务切换;
  • DPL:任务门描述符的特权级,但是对因中断而发起的任务切换不起作用,处理器不按特权级施加任何保护。当以非中断的方式使用任务门进行任务切换,就需要用到DPL

下面总体概述一下如何使用任务门来进行任务切换:

  1. 当中断发生时,处理器用中断号乘以8作为索引访问中断描述符表。当它发现这是一个任务门描述符时,就知道应当发起任务切换。
  2. 取出任务门描述符。
  3. 从任务门描述符中取出新任务的TSS选择子;
  4. 再用TSS选择子访问GDT,取出新任务的TSS描述符
  5. 在执行新任务前,处理器会把当前任务状态保存起来。也就是将当前任务的状态保存到TR寄存器指向的TSS状态段。
  6. 然后处理器访问新任务的状态段TSS,并从中恢复各个寄存器的内容,包括通用寄存器、标志寄存器EFLAGS、段寄存器、指令指针寄存器EIP、栈指针寄存器ESP,以及局部描述符表寄存器LDTR等。
  7. 最终任务寄存器TR指向新任务的TSS,而处理器开始新任务的执行。
  8. 一旦新任务开始执行,处理器固件会自动将其TSS描述符的B位置1,表示该任务状态为忙。

4 总结

以上只是大概学习了任务切换的一般过程以及任务门描述符的基本概念。我们需要注意任务切换与特权级的控制转移之间的区别。后序还会有详细的内容。

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

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

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

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

相关文章

腾讯微博应用

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

【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…

【剑指offer - C++/Java】7、斐波那契数列

在线题目链接&#xff1a;斐波那契数列 文章目录1、题目描述2、题目分析3、代码3.1 递归方法3.11 Java代码3.12 C代码3.2 动态规划3.21 Java代码3.22 C代码3.3 循环方法3.31 Java代码3.32 C代码4、总结1、题目描述 大家都知道斐波那契数列&#xff0c;现在要求输入一个整数n&a…

【剑指offer - C++/Java】8、跳台阶

在线题目链接&#xff1a;跳台阶 文章目录1、题目描述2、题目分析3、代码3.1 递归方法3.11 Java代码3.12 C代码3.2 动态规划3.21 Java代码3.22 C代码3.3 循环方法3.31 Java代码3.32 C代码4、总结1、题目描述 一只青蛙一次可以跳上1级台阶&#xff0c;也可以跳上2级。求该青蛙跳…

【剑指offer - C++/Java】10、矩形覆盖

在线题目链接&#xff1a;矩形覆盖 文章目录1 题目描述2 题目分析3 代码3.1 递归方法3.11 Java代码3.12 C代码3.2 动态规划算法3.2 动态规划3.21 Java代码3.22 C代码3.3 循环方法3.31 Java代码3.32 C代码4、总结1 题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形…