保护模式总结(三)——任务切换

2024-06-19 03:38

本文主要是介绍保护模式总结(三)——任务切换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

       上一篇总结回顾了任务在计算机中的实现形式,现在接着来讲任务的切换。

       任务切换在处理器中并没有特殊的指令,而是借用老指令。有两种方法:

       第一种方法:借助中断方式。说到中断方式就必须要引入一个概念,中断描述符表。这个概念具体在下一篇总结中介绍,大致上就是一些存放中断处理程序段的信息的描述符。不同的是,它保存的是门描述符,包括中断门,陷阱门,任务门。结构如下:

                             

       一般的中断处理用中断门和陷阱门,而切换任务使用任务门。任务门中的段选择符其实都是TSS选择子。在中断发生时,处理器用中断号*8为索引访问中断描述符表,当它发现这是一个任务门时,便进行任务切换。那么再IRET时,又怎么分辨是正常的中断返回还是任务切换呢?此时需要EFLAG中的NT位。NT位即Nested Task Flag,嵌套任务标志。此位为1时意味着当前正在执行的任务嵌套于其他任务中。当出现用中断来任务切换的情况时,此位置1。那么当处理器执行IRET时,检查NT位,若NT为0,则正常中断返回,否则返回原先任务。

                          

       第二种方法:用远过程调用指令CALL,或者远跳转指令JMP。当然,前提是操作数是TSS选择子。来比较下CALL与JMP在任务切换时的区别。CALL指令发起的是嵌套的,所以切换时,旧任务TSS描述符B位保持1,NT不变;新任务B置1,NT置1。JMP是非嵌套的,旧任务B清0,NT不变,新任务B置1,NT保持。

                     

来总结下,处理器能进行任务切换的几种方式:



(1)当前任务对GDT中的TSS描述符执行JMP或CALL指令。


(2)当前任务对GDT或LDT中的任务门描述符执行JMP或CALL指令。


(3)中断或异常向量指向IDT表中的任务门描述符。


(4)当EFLAGS中的NT标志置位时当前任务执行IRET指令。

这篇关于保护模式总结(三)——任务切换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1073901

相关文章

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

IDEA中新建/切换Git分支的实现步骤

《IDEA中新建/切换Git分支的实现步骤》本文主要介绍了IDEA中新建/切换Git分支的实现步骤,通过菜单创建新分支并选择是否切换,创建后在Git详情或右键Checkout中切换分支,感兴趣的可以了... 前提:项目已被Git托管1、点击上方栏Git->NewBrancjsh...2、输入新的分支的

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

在Golang中实现定时任务的几种高效方法

《在Golang中实现定时任务的几种高效方法》本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和go... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio