TSS 任务状态段

TSS(任务状态段)
1 什么是TSS  
TSS 全称task state segment,是指在操作系统进程管理的过程中,任务(进程)切换时的任务现场信息。 

 
2 TSS工作细节
TSS在任务切换过程中起着重要作用,通过它实现任务的挂起和恢复。所谓任务切换是指,挂起当前正在执行的任务,恢复或启动另一任务的执行。在任务切换过程中,首先,处理器中各寄存器的当前值被自动保存到TR(任务寄存器)所指定的TSS中;然后,下一任务的TSS的选择子被装入TR;最后,从TR所指定的TSS中取出各寄存器的值送到处理器的各寄存器中。由此可见,通过在TSS中保存任务现场各寄存器状态的完整映象,实现任务的切换。
3 TSS的格式 任务状态段TSS的基本格式如下图所示。 TSS的基本格式由104字节组成。这104字节的基本格式是不可改变的,但在此之外系统软件还可定义若干附加信息。基本的104字节可分为链接字段区域、内层堆栈指针区域、地址映射寄存器区域、寄存器保存区域和其它字段等五个区域。
(1). 寄存器保存区域 寄存器保存区域位于TSS内偏移20H至5FH处,用于保存通用寄存器、段寄存器、指令指针和标志寄存器。当TSS对应的任务正在执行时,保存区域是未定义的;在当前任务被切换出时,这些寄存器的当前值就保存在该区域。当下次切换回原任务时,再从保存区域恢复出这些寄存器的值,从而,使处理器恢复成该任务换出前的状态,最终使任务能够恢复执行。 从上图可见,各通用寄存器对应一个32位的双字,指令指针和标志寄存器各对应一个32位的双字;各段寄存器也对应一个32位的双字,段寄存器中的选择子只有16位,安排再双字的低16位,高16位未用,一般应填为0。
(2). 内层堆栈指针区域 为了有效地实现保护,同一个任务在不同的特权级下使用不同的堆栈。例如,当从外层特权级3变换到内层特权级0时,任务使用的堆栈也同时从3级变换到0级堆栈;当从内层特权级0变换到外层特权级3时,任务使用的堆栈也同时从0级堆栈变换到3级堆栈。所以,一个任务可能具有四个堆栈,对应四个特权级。四个堆栈需要四个堆栈指针。 TSS的内层堆栈指针区域中有三个堆栈指针,它们都是48位的全指针(16位的选择子和32位的偏移),分别指向0级、1级和2级堆栈的栈顶,依次存放在TSS中偏移为4、12及20开始的位置。当发生向内层转移时,把适当的堆栈指针装入SS及ESP寄存器以变换到内层堆栈,外层堆栈的指针保存在内层堆栈中。没有指向3级堆栈的指针,因为3级是最外层,所以任何一个向内层的转移都不可能转移到3级。 但是,当特权级由内层向外层变换时,并不把内层堆栈的指针保存到TSS的内层堆栈指针区域。实际上,处理器从不向该区域进行写入,除非程序设计者认为改变该区域的值。这表明向内层转移时,总是把内层堆栈认为是一个空栈。因此,不允许发生同级内层转移的递归,一旦发生向某级内层的转移,那么返回到外层的正常途径是相匹配的向外层返回。
(3). 地址映射寄存器区域 从虚拟地址空间到线性地址空间的映射由GDT和LDT确定,与特定任务相关的部分由LDT确定,而LDT又由LDTR确定。如果采用分页机制,那么由线性地址空间到物理地址空间的映射由包含页目录表起始物理地址的控制寄存器CR3确定。所以,与特定任务相关的虚拟地址空间到物理地址空间的映射由LDTR和CR3确定。显然,随着任务的切换,地址映射关系也要切换。 [Page] TSS的地址映射寄存器区域由位于偏移1CH处的双字字段(CR3)和位于偏移60H处的字字段(LDTR)组成。在任务切换时,处理器自动从要执行任务的TSS中取出这两个字段,分别装入到寄存器CR3和LDTR。这样就改变了虚拟地址空间到物理地址空间的映射。 但是,在任务切换时,处理器并不把换出任务但是的寄存器CR3和LDTR的内容保存到TSS中的地址映射寄存器区域。事实上,处理器也从来不向该区域自动写入。因此,如果程序改变了LDTR或CR3,那么必须把新值人为地保存到TSS中的地址映射寄存器区域相应字段中。可以通过别名技术实现此功能。
(4). 链接字段 链接字段安排在TSS内偏移0开始的双字中,其高16位未用。在起链接作用时,地16位保存前一任务的TSS描述符的选择子。 如果当前的任务由段间调用指令CALL或中断/异常而激活,那么链接字段保存被挂起任务的 TSS的选择子,并且标志寄存器EFLAGS中的NT位被置1,使链接字段有效。在返回时,由于NT标志位为1,返回指令RET或中断返回指令IRET将使得控制沿链接字段所指恢复到链上的前一个任务。
(5). 其它字段 为了实现输入/输出保护,要使用I/O许可位图。任务使用的I/O许可位图也存放在TSS中,作为TSS的扩展部分。在TSS内偏移66H处的字用于存放I/O许可位图在TSS内的偏移(从TSS开头开始计算)。关于I/O许可位图的作用,以后的文章中将会详细介绍。 在TSS内偏移64H处的字是为任务提供的特别属性。在80386中,只定义了一种属性,即调试陷阱。该属性是字的最低位,用T表示。该字的其它位置被保留,必须被置为0。在发生任务切换时,如果进入任务的T位为1,那么在任务切换完成之后,新任务的第一条指令执行之前产生调试陷阱。

-----------------------------------------------------------------------------------------------------------

我看了你说的两段了,是P393的吧
第一段是这样理解:
  当从外层转移到内层时系统会把返回地址和外层堆栈的指针保留到内层堆栈中,比如:从R3调用R0的服务,CPU会把R3的堆栈、返回地址都压入R0的堆栈中,以备返回时使用。

第二段:
  所谓“一旦发生向某级内层转移,那么返回到外层的正常途径是相匹配的向外层返回”。意思是说,从外层到内层,可以通过CALL/JMP来直接转移,但从内层到外层,不能直接通过CALL/JMP,只能通过远程RET,这样做的原因是为了确保内层的堆栈不被外层代码得知,而不是“这表明向内层转移时,总是把内层堆栈认为是一个空栈”。
至于递归调用那个说法,我也不是很明白

 

http://bbs.csdn.net/topics/90016769

 

转载于:https://www.cnblogs.com/wanghj-dz/p/3979729.html

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

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

相关文章

Linux下C语言程序的内存布局

以下内容源于C语言中文网的内容学习与整理。如有侵权,请告知删除。 一、C语言内存布局 C程序所占用的内存,可以划分为以下几个部分。 1、栈区(stack)。由编译器自动分配释放,存放函数的参数值,局部变量的值…

HTML/CSS/Javascript代码在线压缩、格式化(美化)工具

CSS 格式化ProCSSor - http://procssor.com/CSS 压缩CSS Compressor - http://www.cssdrive.com/index.php/main/csscompressorHTML 格式化Tabifier - http://tools.arantius.com/tabifierHTML 压缩Compress HTML - http://www.textfixer.com/html/compress-html-compression.p…

【运动快乐】享受赤脚慢跑 收获健康快乐

享受赤脚慢跑 收获健康快乐——写给想锻炼的您当您看到赤脚客时,您或许忍不住会问:为什么要赤脚跑呢?不怕扎破脚?跑起来不会硌疼么?赤脚踩在看起来扎脚硌脚的路面上,因为怕疼,我们的脚落地会轻而…

微型计算机频繁死机的原因,电脑经常死机是什么原因|电脑经常死机的解决方法...

‍‍电脑出现死机是很常见的一种故障,造成的原因也有很多种。而最近有些用户的电脑经常死机,开机几分钟就死机,有时还会出现蓝屏,这到底是怎么回事呢?电脑经常死机是什么原因呢?下面小编结合自己的实际情况…

Linux系统命令行的符号含义

内容整理于网络,如有侵权,请告知删除。 1、常见符号含义 . 代表当前目录 .. 代表上一层目录,当前目录的父目录 - 代表前一个目录,我刚才从哪个目录cd过来 ~ 代表当前用户的宿主目录 / 代表根目录 $ 普通用户的命令行提示符…

ExtJs 分组表格控件----监听

ExtJs 分组表格控件----监听2013年8月1日10:59如图,点击expand可以展开所有的分组,collapse可以合并所有的列,toggle和toggleone展开合并一个分组Ext.get(expand).on(click, function() { grid.getView().expandAllGroups(); });…

PKI系统深入介绍

公钥基础设施(Public Key Infrastructure,简称PKI)是眼下网络安全建设的基础与核心,是电子商务安全实施的基本保障,因此,对PKI技术的研究和开发成为眼下信息安全领域的热点。本文对PKI技术进行了全面的分析…

html 禁止缩放 ios10,完美解决ios10及以上Safari无法禁止缩放的问题

完美解决 ios10 及以上 Safari 无法禁止缩放的问题转载自掘金-互联网学徒移动端web缩放有两种:双击缩放双指手势缩放在 iOS 10之前,iOS 和 Android 都可以通过一行 meta 标签来禁止页面缩放:但 iOS 10开始,meta 设置在 Safari 内无…

SCRT软件的使用教程

以下内容源于网络资源的学习与整理,如有侵权请告知删除。 SCRT软件下载:提取码1234 快速链接的步骤与设置 先选择“快速链接”; 然后协议选serial,端口在设备管理器中查看(我的是com3),波特率…

KEIL4.12中添加ULINK2的支持

转载自:http://www.amobbs.com/thread-4767650-1-1.html 如果你用KEIL4.12,但却没有Ulink2下载器,只有早先用的Ulink下载器,那么你按照下面三步升下级就可以了....三步:1.把‘keil-ulink升级至ulink2的文件’解压缩后拷…

解决Vmware中安装Ubuntu Server 14.04 分辨率无法全屏问题

2019独角兽企业重金招聘Python工程师标准>>> We will have to edit grub configuration. Open a terminal and paste this: sudo gedit /etc/default/grub Hit Enter. It will open grub preferences in Gedit.Locate the line # GRUB_GFXMODE800x600 (resolution m…

vue indev.html,webpack - Can't add script tag to Vue component files ( *.vue ) - Stack Overflow

Im new to vue.js.Im trying to render vue component file but when I add to vue component, for example, app/javascript/packs/components/app.vue file, compiling error happens in babel-loader.error logERROR in ./node_modules/babel-loader/lib??ref--1-0!./node…

GCC编译器的相关内容

本文摘录与整理于C语言中文网的相关内容,仅用于学习,如有侵权请告知删除。 原内容网址:C语言中文网:C语言程序设计门户网站(入门教程、编程软件) GCC官方文档网址:Top (Using the GNU Compiler Collection (GCC)) 1、…

HDU 4279 - Number

2012年天津赛区网赛的题目,想了好久,也没能想出来 还是小杰思路敏捷,给我讲解了一番,才让我把这个题做出来 f(x)x-phi(x)(1——x与x互素个数)-g(x…

SQL SERVER2014 安装 Error code 0x858C001B.

原因是语言版本不一致,SQL SERVER是中文简体版,操作系统是英文版,在操作系统、控制面板,区域语言设置为中文就Ok啦。 TITLE: SQL Server Setup failure.------------------------------ssSQL Server Setup has encountered the following err…

计算机用户登录设置成2000,2008计算机等级考试:Windows2000系统选项设置

在Windows 2000 Server中, 用户除了可以进行前面章节中介绍的系统设置,还可以在系统中进行一些其他的设置,包括新建、编辑、删除用户及系统变量,设置默认启动系统及故障恢复选项,查看系统性能等。本节便来介绍一些比较…

静态链接库与动态链接库

以下内容源于C语言中文网相关内容的学习整理,如有侵权请告知删除。 一、库文件的简介 库文件,其等价为压缩包文件。该文件内部通常包含不止一个目标文件(也就是二进制文件),每个目标文件存储的代码,并非完…

C库函数qsort七种使用方法示例

这篇文章是 一楼那个学长写的 C库函数qsort七种使用方法示例 七种qsort排序方法<本文中排序都是采用的从小到大排序> 一、对int类型数组排序C代码 int num[100]; Sample: int cmp ( const void *a , const void *b ) { return *(int *)a – *(int *)b; } q…

成都电讯学院研发的计算机,成都电讯工程学院

[拼音]&#xff1a;chengdu dianxun gongcheng xueyuan[外文]&#xff1a;Chengdu Institute of Telecommunication中国一所以培养电子科学技术人才为主的多科性理工科高等学校。1956年9月创建于四川成都。建院初仅设4个专业。1984年&#xff0c;学校设12个系(26个专业)&#x…

Linux系统以源码方式安装软件的方法

以下内容源于网络资源的整理&#xff0c;如有侵权请告知删除。 Linux系统中安装软件的三种方法_馨若梦的博客-CSDN博客_linux怎么安装软件 Linux下源码编译安装详解_Zebul博的博客-CSDN博客_编译安装 Linux源码包的一般安装步骤_Kaiattrib的博客-CSDN博客_linux源码包安装步…