操作系统 读书笔记4

4.1. 任务管理概述

什么是任务?

任务是处理器可以分派、执行和挂起的工作单元。任务由两个部分组成:任务执行空间和任务状态段(TSS)

80x86 提供了哪些硬件支持?

image.png

由上面的任务组成部分可知,任务由两个部分组成,如上图所示。如果操作系统或者执行程序使用处理器的特权级别保护机制,任务执行空间还会给特别优先级别的任务提供单独的堆栈。TSS来指定任务执行空间的段,并为任务状态信息提供存储位置。在多任务系统中,TSS还提供了一种连接任务的机制。

任务由对应的TSS来标识,当一个任务被加载到处理器执行的时候,TSS的段选择器、基址、限制和段描述符属性被加载到任务寄存器 TR 中。

如果为任务实现分页,就将对应的页目录的基地址加载到控制寄存器CR3

描述符表中与任务相关的描述符有哪些?
  1. 段选择器中的段选择子定义任务的当前执行空间。

  2. EFLAGSEIP、控制寄存器CR3以及LDTR寄存器的状态。

  3. TSS中的I/O映射基地址和I/O映射、特权级别0、1和2堆栈的堆栈指针和先前执行的任务的链接。

所有这些项目除了任务寄存器的状态都包含在TSS中,且LDTR只有部分内容在TSS中(只有段选择子)

任务切换与过程调用的区别是什么?

任务切换很象过程调用,但任务切换会保存更多的处理器状态信息。任务切换会把控制权完全转移到 一个新的执行环境,即新任务的执行环境。这种转移操作要求保存处理器中几乎所有寄存器的当前内容, 包括标志寄存器 EFLAGS 和所有段寄存器。与过程不一样的是,任务不可重入。任务切换不会把任何信息压入堆栈中,处理器的状态信息都被保存在内存中称为任务状态段(Task state segment)的数据结构中。

4.1.1. 任务的结构

一个任务由几部分构成?

一个任务由两个部分组成,任务执行空间和任务状态段TSS。

任务执行空间包括什么?

代码段,堆栈段和一个或者多个的数据段

为什么会有多个特权级栈空间?

因为有多个特权级,程序在访问计算机的堆栈的时候,在更高特权级别的程序才能对较低的特权级别的堆栈段进行访问,也就是说需要将堆栈段根据不同任务的特权级别来分成对应的特权级别的栈空间,这样才能实现不同特权级别访问的过滤。

4.1.2. 任务状态

当前正在执行的任务状态包括哪些内容?

当一个任务加载到处理器进行执行的时候,那么该任务的段选择符号、基地址、段限长以及TSS段描述符属性就会被加载到任务寄存器TR中(Task Register)。

任务状态包含以下的内容:

  1. 所有通用寄存器和段寄存器信息
  2. 标志寄存器EFLAGS、程序指针EIP,控制寄存器CR3、任务寄存器和LDTR寄存器
  3. 段寄存器指定的任务当前执行空间
  4. I/O映射位图基地址和I/O位图信息(在TSS中)
  5. 特权级别0/1/2的堆栈指针(在TSS中)
  6. 链接至前一个任务的链指针(在TSS中)
每一个被包含内容的含义和为什么要包含这些内容?

所有通用寄存器和段寄存器中包含的是当前数据段的位置和执行当前程序的寄存器的上下文内容;标志寄存器EFLAGS里面存储的是当前程序的各种标志位以及当前计算机的运行模式选择,程序指针EIP和可能出现的SS段寄存器代表的是执行指令的地址(应该是下一条指令的地址)。任务寄存器记录了当前执行的任务的地址,在返回的时候有利于重新返回任务;IDTR代表的是IDT的基地址位置,和段选择子一起能够寻址到当前的描述符。

I/O映射位图基地址和I/O位图信息,保存了I/O所在的地址信息,使得程序能够正常的调用I/O进行工作

特权级别0/1/2的堆栈指针能够使得程序可以访问到当前特权级所可以访问的堆栈信息并进行程序的执行对其进行利用或者修改。

4.1.3. 任务的执行

任务的执行方式有几种?

软件或者处理器可以使用以下的方法之一来调度执行一个任务:

  • 使用CALL指令明确的调用一个任务
  • 使用JMP指令明确的跳转到一个任务
  • 隐含的调用一个中断句柄处理任务;
  • 隐含的调用一个异常句柄处理任务
熟悉掌握每一种执行方式的过程

当使用CALL或者JMP指令调度一个任务的时候,指令中的选择符既可以直接选择任务的TSS,也可以选择存放有TSS选择符的任务门。当调度一个任务来处理一个中断或者异常的时候,那么IDT中该终端或者异常的表项必须是一个任务门,并且其中含有中断或者异常处理任务的TSS描述符。

当调度一个任务执行的时候,当前正在运行任务和调度任务之间会自动的发生任务切换操作。

Linux 0.00 用的是哪种方式?

Linux内核使用的是JMP指令明确的跳转到一个任务。

任务可以递归调用吗?为什么?

任务是不可以进行递归调用的,也就是任务不能调用或者跳转到自己。因为任务的调度方法是如果当前执行任务调用了被调度的新任务,那么调用者的TSS段选择符号会被被存在被调用者的TSS中,从而提供了一个返回调用者的链接;自己调用自己是不存在调度者和被调度者的,所以是不合法的。

4.2. 任务的数据结构

任务状态段 Task-State Segment (TSS)

image.png

程序的状态段的结构如上所示。

TSS各个字段可以分成两个大类:动态字段和静态字段

动态字段
  • 通用寄存器字段。用于保存EAX、ECX、EDX、EBX、ESP、EBP、ESI和EDI寄存器的内容
  • 段选择符字段。用于保存ES、CS、SS、DS、FS、和GS段寄存器的内容。
  • 标志寄存器EFALGS字段。在切换之前保存EFLAGS。
  • 指令EIP字段。在切换之前保存EIP寄存器内容。
  • 先前任务连接字段。含有前一个任务TSS段选择符号(在调用、中断或者异常激发的时候更新)。该字段(通常也称为后连接字段(Back link field))允许任务使用IRET指令切换到前一个任务。
静态字段
  • LDT 段选择符字段。含有任务的 LDT 段的选择符。
  • CR3 控制寄存器字段。含有任务使用的页目录物理基地址。控制寄存器 CR3 通常也被称为页目录基地址寄存器PDBR(Page directory base register)。
  • 特权级 0、1 和 2 的堆栈指针字段。这些堆栈指针由堆栈段选择符(SS0、SS1 和 SS2)和栈中偏移量指针(ESP0、ESP1 和 ESP2)组成。注意,对于指定的一个任务,这些字段的值是不变的。 因此,如果任务中发生堆栈切换,寄存器 SS 和 ESP 的内容将会改变。
  • 调试陷阱(Debug Trap)T标志字段。该字段位于字节 0x64 比特 0 处。当设置了该位时,处理器 切换到该任务的操作将产生一个调试异常。
  • I/O位图基地址字段。该字段含有从 TSS 段开始处到 I/O许可位图处的 16 位偏移值

描述符TSS

image.png

类型字段TYPE中的忙地址B用于指明任务是否处于忙状态。忙状态的任务是当前正在执行的任务或者等待执行(被挂起)的任务。值为0b1001的类型字段表明任务处于非活动的状态;而值位0b1011的类型字段标识任务正忙,任务是不可以递归执行的,因此处理器使用忙标志B来检测任何企图对被中断执行任务的调用。

其中基地址、段限长、描述符特权级DPL、颗粒度G和存在位具有与数据段描述符中相应字段同样的功能。当G=0 时,限长字段必须具有等于或大于 103(0x67)的值,即 TSS 段的最小长度不得小于 104 字节。如果 TSS 段中还包含 I/O 许可位图,那么 TSS 段长度需要大一些。另外,如果操作系统还想在 TSS 段中存放其他一些信息,那么 TSS 段就需要更大的长度。

使用调用或跳转指令,任何可以访问 TSS 描述符的程序都能够造成任务切换。可以访问 TSS 描述符的程序其CPL数值必须小于或等于 TSS 描述符的DPL。在大多数系统中,TSS 描述符的DPL字段值应该设置成小于3。这样,只有具有特权级的软件可以执行任务切换操作。然而在多任务应用中,某些 TSS 的 DPL可以设置成3,以使得在用户特权级上也能进行任务切换操作。

但是访问一个 TSS 段描述符并没有给程序读写该描述符的能力。若想读或修改一个 TSS 段描述符,可以使用映射到内存相同位置的数据段描述符(即别名描述符)来操作。把 TSS 描述符加载进任何段寄存器将导致一个异常。企图使用 TI 标志置位的选择符(即当前 LDT 中的选择符)来访问 TSS 段也将导致异常。

任务寄存器

任务寄存器中存档16位的段选择符号和当前任务TSS段的整个描述符号;信息是从当前任务的TSS描述符中复制过来的。指令LTR和STR分别用于加载和保存任务寄存器的可见部分,也就是TSS段的选择符。LTR只能被特权级别0的程序执行,LTR用于系统初始化给TR寄存器初值。

任务门描述符 Task-Gate Descriptor

提供对一个任务间接、受保护的引用。任务门描述符可以被存放在GDT、LDT或者DT中。

image.png

任务门描述符中的TSS选择符号字段指向GDT中的一个TSS段描述符。这个TSS段的RPL域不适用。任务门描述符中的DPL用于在任务切换的时候控制对TSS段的访问。当程序通过任务门调用或者跳转到一个任务的时候,程序的CPL以及指向任务们的们选择符的RPL的值必须小于等于任务门描述符中的DPL。

4.3. 任务切换

此部分内容重点掌握:

什么时候发生任务切换?

处理器在下面四种情况下会发生任务切换:

  1. 当前任务对GDT中的TSS描述符执行JMP或者CALL指令;
  2. 当前任务对GDT或者LDT中的任务门描述符执行JMP或者CALL指令
  3. 中断或者异常响亮指向IDT表中的任务门描述符
  4. 当EFLAGS中的NT标志位为1的时候当前任务执行IRET指令

发生任务切换时,处理器会执行哪些操作?

JMP或者CALL指令能够把控制转移到TSS描述符或者任务门上。使用这两种方式的作用相同;当中断或者异常的向量缩影的是IDT的一个任务门的时候,一个中断或者异常就会造成任务切换。

执行的具体操作是:

步骤描述异常 & 中断IRETJMPCALL
1从JMP或CALL操作数、任务门或当前TSS的前一任务链接字段(IRET引起)中获取新任务的TSS段选择符。
2检查当前任务是否允许切换到新任务,并应用数据访问权限规则。
3检查新任务的TSS描述符是否标记为存在(P=1),且TSS段长度有效(大于067)。确保异常处理过程的返回地址指向出错指令而不是其后的指令。
4忙标志B设置--
5是否复位临时保存的EFLAGS映像中的NT标志---
6将当前任务保存至当前任务的TSS中,获取当前任务TSS的基地址,并将所有寄存器内容复制到当前TSS中。
7设置从新任务加载的EFLAGS中的NT标志。--
8设置新任务TSS描述符中的忙标志B--
9使用新任务TSS的段选择符和描述符加载任务寄存器TR(包括隐藏部分),并设置CR0寄存器的TS标志。---
10加载处理器的新任务TSS状态,包括LDTR寄存器、PDBR(CR3)寄存器、EFLAGS寄存器、EIP寄存器以及通用寄存器和段选择符。同时,将任何检测到的错误记录到新任务的上下文中。
11开始执行新任务。

中断或异常向量指向 IDT 表中的中断门或陷阱门,会发生任务切换吗?

如果向量索引的是IDT中的一个中断或者陷阱门,就不会造成任务切换。

4.4. 任务链

如何判断任务是否嵌套?

NT标志指出了当前执行的任务是否嵌套在另一个任务中执行,并且当前任务的前一任务连接字段中存放着嵌套层中更高层任务的TSS选择符。

image.png

什么情况会发生任务嵌套?

CALL指令、中断或者异常造成任务切换,处理器把当前的TSS段的选择符复制到新任务TSS段的前一任务链接中,然后在EFLAGS中设置NT标志。如果软件使用IRET指令挂起新任务,处理器会切换到前一个任务链接字段中值和NT标志返回到前一个任务。

任务嵌套时修改了哪些标志位?

任务切换会修改忙标志(B),NT标志(NT),前一任务链字段和TS标志(TS)

修改的方式如下:

标志或字段JMP指令的影响CALL指令或者中断的影响IRET指令的影响
新任务忙标志B设置标志。以前需要已经被清除掉设置标志。以前需要被清除掉不变,必须已经被设置
老任务忙标志被清除不变,当前处于设置状态设置成新任务TSS中的值
新任务NT标志不变不变清除标志
老任务NT标志不变存放老任务TSS段选择符不变
新任务链接字段不变存放老任务TSS段选择符号不变
老任务链接字段不变不变不变
CR0中TS标志设置标志设置标志设置标志

任务嵌套时,如何返回前一任务?

任务嵌套的时候,处理器会检查EFLAGS里面的NT标识符,如果检测到存在任务嵌套,就访问当前TSS段中的前任务链对应的TSS位置,返回到前一个任务的TSS继续执行。

4.5. 任务地址空间

什么是任务地址空间?任务地址空间包括什么?

任务地址空间由任务能够访问的段构成,这些段包括代码段、数据段、堆栈段、TSS中应用的系统段以及任务代码能够访问的任何其他段。这些段都被映射到处理器的线性地址空间中,并且随后被直接地或者通过分页机制映射到处理器的物理地址空间中。

了解把任务映射到线性和物理地址空间的方法

有两种方法可以把任务映射到线性空间和物理地址空间:

  1. 所有任务共享一个线性到物理地址空间地映射。当没有开启分页机制的时候,就只能使用这个办法。不开启分页的时候,所有线性地址映射到相同物理地址上。当开启了分页机制的时候,那么通过让所有的任务使用一个页目录,我们就可以使用这种从线性到物理地址空间的映射形式。如果支持需求页虚拟存储技术,那么线性地址空间可以超过现有物理地址空间的大小。

  2. 每个人任务都有自己的线性地址空间,并映射到物理地址空间。通过让每个人物使用不同的页目录,我们就可以使用这种映射模式。因为每次切换都会加载PDBR(控制寄存器CR3),所以每个任务可以有不同的页目录。

此外,所有任务的TSS,GDT都应该存放在共享的物理地址空间区域中,并且所有任务都能访问这个区域。

  • 35
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 麒麟操作系统是由中国华为技术有限公司自主研发的一款开源操作系统,主要面向智能终端设备,如智能手机、平板电脑和物联网终端等。 CSDN是一个IT技术社区平台,广泛涵盖了计算机领域的各种技术资源和知识分享。在麒麟操作系统应用于电子书方面,可以借助CSDN这一平台共享麒麟操作系统的相关开发经验和资源。 首先,对于麒麟操作系统在电子书领域的应用,可以在CSDN上发表相关的技术博文或教程,分享麒麟操作系统开发电子书的经验和技巧。这些文章可以包括如何在麒麟操作系统上搭建电子书开发环境、如何使用麒麟操作系统的特性开发更好的电子书应用、如何在麒麟操作系统上实现更好的阅读体验等等。 其次,麒麟操作系统开发者可以在CSDN上创建相关的交流社区,与其他开发者一起讨论关于开发电子书在麒麟操作系统上的问题和挑战。这个社区可以提供问答、技术分享和开发资源共享等功能,帮助开发者更好地理解和解决在麒麟操作系统上开发电子书遇到的问题。 此外,麒麟操作系统开发团队也可以通过CSDN平台发布与电子书相关的麒麟操作系统更新和发布信息,方便用户了解麒麟操作系统在电子书应用方面的最新进展和功能优化,从而提升用户体验和满意度。 总的来说,在CSDN平台上应用麒麟操作系统开发电子书,可以通过技术博文、交流社区和发布信息等方式,促进相关技术资源和经验的共享,从而推动麒麟操作系统在电子书领域的应用和发展。 ### 回答2: 麒麟操作系统是华为公司自主研发的一款操作系统,具有高性能、高可靠性和高安全性的特点。它在电子书应用方面,特别适合在csdn网站上使用。 首先,麒麟操作系统能够提供出色的电子书阅读体验。它支持多种格式的电子书,包括PDF、EPUB等。用户可以通过麒麟操作系统上的电子书阅读器,方便快捷地阅读各种类型的电子书。阅读界面简洁友好,支持自定义设置字体、背景、亮度等功能,以满足用户各种阅读需求。 其次,麒麟操作系统集成了强大的搜索功能,可以帮助用户更加便捷地找到自己想要的电子书内容。不仅可以按照关键词进行搜索,还可以根据作者、出版社等信息进行筛选,提供个性化的搜索结果。这使得用户能够更加高效地找到需要的资源,并进行学习和研究。 此外,麒麟操作系统还提供了丰富的学习辅助功能。例如,用户可以在阅读电子书的同时进行标注、划线、添加笔记等操作,以便于后续复习和总结。同时,还可以通过内置的翻译功能,实时将书中的文本翻译成自己需要的语言,方便与外语资料的学习。 最后,麒麟操作系统通过与csdn网站的深度合作,为用户提供了一个便捷的下载和上传平台。用户可以通过麒麟操作系统的电子书应用,直接访问csdn网站上的各类电子书资源,进行在线或离线下载。同时,用户还可以将自己撰写的电子书上传到csdn网站上,与广大读者分享自己的知识和经验。 总之,麒麟操作系统在应用电子书方面,为用户提供了多种方便实用的功能和服务。通过与csdn网站合作,用户可以享受到更加高效和愉快的电子书阅读体验。 ### 回答3: 麒麟操作系统是一款基于Linux内核的开放源代码操作系统,它在设计上注重安全性和性能优化。麒麟操作系统广泛应用于各类电子设备,包括智能手机、平板电脑、智能电视等。下面将具体介绍麒麟操作系统在应用电子书方面与CSDN的结合。 首先,麒麟操作系统提供了丰富的应用程序生态系统,用户可以在应用商店中下载并安装各类电子书阅读应用。这些应用支持多种电子书格式,如PDF、EPUB等,使用户能够方便地获取和阅读电子书。同时,麒麟操作系统还提供了优化的读书界面和功能,例如夜间模式、字体调节、书签管理等,提升了用户阅读体验。 其次,CSDN作为国内知名的IT技术社区网站,提供了大量的技术书籍和文档资源。在麒麟操作系统中,用户可以通过CSDN应用浏览器访问CSDN网站,搜索和浏览各类电子书资源。同时,用户还可以通过CSDN应用浏览器进行在线阅读或下载电子书,方便快捷。 此外,麒麟操作系统还支持多任务处理,用户可以同时打开多个应用程序进行阅读。这意味着用户可以在阅读电子书的同时,打开其他应用程序,如浏览器、笔记应用等,进行其他操作。例如,用户可以在阅读电子书时,通过浏览器查找相关的技术知识或参考文献,提高学习效率。 总之,麒麟操作系统在应用电子书方面通过丰富的应用程序生态系统和多任务处理功能,与CSDN的结合为用户提供了便捷的阅读体验。用户可以通过麒麟操作系统的应用商店下载各类电子书阅读应用,同时通过CSDN应用浏览器访问CSDN网站获取电子书资源。这使得用户可以随时随地方便地获取和阅读电子书,满足他们在学习和娱乐方面的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值