x86-4-任务(task)

4.1 任务:

CPU将一整段正在运行的代码称作任务,可以类比操作系统的线程。比如说:你在Windows写了个程序进行运行,这个程序的运行在操作系统层面上来说就是进程里的线程,在CPU层面上来说就是任务。

4.2 操作系统中的任务:

在操作系统中操作系统的内核可以管理用户程序的加载与卸载,内核为用户程序提供各种编程接口,通过接口来对用户程序进行服务,用户程序通过调用内核提供的各种例程(routime)来进行工作。

比如Windows操作系统的进程/线程程序是由操作系统的内核+用户程序代码来编写的。

而程序映射到CPU底层来执行就是task(任务),所以说任务也是由:内核代码+用户代码组合而成:

内核只有一个作为所有任务的公共部分,而每个用户程序作为任务的私有部分。

内核是一直运行的,当一个任务被关闭时,只会关闭任务的私有部分而不会关闭内核。

一个内核可以为多个用户程序服务,然后一起组合成一个任务:

当一个任务结束时,只是用户程序部分(私有部分)结束了,而内核部分还在继续(只要操作系统不关闭)。

比如:你的Windows操作系统是一直开着的,它可以给你电脑上的微信提供帮助,然后和微信一起组合成一个进程(映射到CPU上就是任务),但是操作系统也可以和别的程序一起组合成其他的任务。而你关闭微信时并不会关闭操作系统,只有当你关闭操作系统时才会关机。

4.3 LDT(local Description table)表

如果CPU将所有的程序都放在GDT表中那么管理起来会非常不方便,因为每个程序都有自己的段,而操作系统中肯定会有很多程序,所以CPU建议对每个任务的用户程序都建立一个类似GDT表的东西来管理该任务的用户程序(当然操作系统也是这样做的)。所以就有了LDT表,从名称上来看也可以看出端倪,local Description table,局部段描述符表。

和GDT 一样,LDT 也是用来存放描述符的。只不过LDT只属于某个任务,所以LDT可以有多个。

LDT表和GDT表一样,也有一个寄存器来专门存放它的内容,就是ldtg寄存器:

  1. kd> r ldtr
    ldtr=00000000

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

当任务在切换时,必须保存切换前任务的执行环境,不然切换回来后怎么保证继续执行是按照之前写好的代码逻辑执行的呢,所以引入了TSS数据结构来专门保存任务的环境。

TSS也有一个寄存器来存放它的首地址,叫做tr寄存器:

  1. kd> r tr
    tr=00000028

TSS的数据结构:

4.5 多任务系统:

多任务系统,是指能够同时执行两个以上任务的系统,也就是即使前一个任务没有执行完,其他任务也可以开始执行。

在单核CPU的系统中,多个程序不可能真的同时执行,但,CPU可以在多个任务之间周期性地切换。一会执行这个一会执行那个。所有任务都处于走走停停的状态,快速的CPU再加上高效的CPU任务切换,从其它角度看来,每个任务都是在同时运行。

目前基本上都是多任务操作系统了,所以说操作系 统时为了方便不再添加多任务这个关键字了。

多任务系统的组成示意图:

小结:

本来是想在WinDbg中验证的,可惜很遗憾,Windows没有采用这一套处理,Windows更多的是在分页管理上的运用。

比如说在Windbg中查看LDT的值:

  1. kd> r ldtr
    ldtr=00000000
    kd> dd ldtr
    00000000 ???????? ???????? ???????? ????????
    00000010 ???????? ???????? ???????? ????????
    00000020 ???????? ???????? ???????? ????????
    00000030 ???????? ???????? ???????? ????????
    00000040 ???????? ???????? ???????? ????????
    00000050 ???????? ???????? ???????? ????????
    00000060 ???????? ???????? ???????? ????????
    00000070 ???????? ???????? ???????? ????????

它是一个0值,所以这一套基本上对于现代操作系统是没用了,但是对于CPU来说是有用的。

x86-4-任务(task)的更多相关文章

  1. MSBuild could not create or connect to a task host with runtime "CLR2" and architecture "x86".

    vs2010 and vs2012 are installed on target machine. Build c# project using vs2010, following error oc ...

  2. Error:Execution failed for task ':app:transformClassesWithDexForDebug'解决记录

    转载请标明出处: http://blog.csdn.net/lxk_1993/article/details/50511172 本文出自:[lxk_1993的博客]:   3个错误non-zero e ...

  3. ASM:《X86汇编语言-从实模式到保护模式》第16章:Intel处理器的分页机制和动态页面分配

    第16章讲的是分页机制和动态页面分配的问题,说实话这个一开始接触是会把人绕晕的,但是这个的确太重要了,有了分页机制内存管理就变得很简单,而且能直接实现平坦模式. ★PART1:Intel X86基础分 ...

  4. X86 Booting Sequence

    1.BIOS 0xFFFF0 電源正常啟動後,x86 CPU 會先執行 0xFFFF0,也就是 BIOS ROM 的進入點.由於 0xFFFF0 ~ 0xFFFFF 只有少的很可憐的 16 bytes ...

  5. 关于vs生成app错误提示,提醒Execution failed for task ':transformClassesWithDexForDebug'.

    昨天将vs和android SDK更新之后生成app之后发现app生成出错,报错如下: FAILURE: Build failed with an exception. * What went wro ...

  6. ASM:《X86汇编语言-从实模式到保护模式》第14章:保护模式下的特权保护和任务概述

    ★PART1:32位保护模式下任务的隔离和特权级保护  这一章是全书的重点之一,这一张必须要理解特权级(包括CPL,RPL和DPL的含义)是什么,调用门的使用,还有LDT和TSS的工作原理(15章着重 ...

  7. System Address Map Initialization in x86/x64 Architecture Part 2: PCI Express-Based Systems

      原文  http://resources.infosecinstitute.com/system-address-map-initialization-x86x64-architecture-pa ...

  8. C:\Program Files (x86)\Common Files\microsoft shared\TextTemplating\11.0

    Generating Files with the TextTransform Utility \Program Files\Common Files\Microsoft Shared\TextTem ...

  9. ssis的script task作业失败(调用外部dll)

    原文 ssis的script task作业失败 我的ssis作业包里用了一个script task,会查询一个http的页面接口,获取json数据后解析然后做后续处理,其中解析json引用了本地目录下 ...

  10. Linux中的task,process, thread 简介

    本文的主要目的是介绍在Linux内核中,task,process, thread这3个名字之间的区别和联系.并且和WINDOWS中的相应观念进行比较.如果你已经很清楚了,那么就不用往下看了. LINU ...

随机推荐

  1. ApacheCN PythonWeb 译文集 20211028 更新

    Django By Example 中文版 1 创建一个博客应用 2 为博客添加高级功能 3 扩展你的博客应用 4 创建一个社交网站 5 分享内容到你的网站 6 跟踪用户动作 7 构建在线商店 8 管 ...

  2. java8 stream详细

    转载:   https://zhuanlan.zhihu.com/p/299064490

  3. RabbitMQ如何实现延迟队列?(转)

    什么是延迟队列 延迟队列存储的对象肯定是对应的延迟消息,所谓"延迟消息"是指当消息被发送以后,并不想让消费者立即拿到消息,而是等待指定时间后,消费者才拿到这个消息进行消费. 场景一 ...

  4. @play.data.binding.NoBinding

    新的@play.data.binding.NoBinding注解允许我们定义一些"不应该被绑定"的字段,以防出现安全问题.例如: public class User extends ...

  5. kubectl详解

    kubectl详解 目录 kubectl详解 一.陈述式管理 1. 陈述式资源管理方法 2. k8s相关信息查看 2.1 查看版本信息 2.2 查看资源对象简写 2.3 查看集群信息 2.4 配置ku ...

  6. ELK、ELFK企业级日志分析系统

    ELK.ELFK企业级日志分析系统 目录 ELK.ELFK企业级日志分析系统 一.ELK日志分析系统 1. ELK简介 1.2 ElasticSearch 1.3 Logstash 1.4 Kiban ...

  7. 【BZOJ3545】Peaks(Kruskal重构树 主席树)

    题目链接 大意 给出有\(N\)个点\(M\)条边的一张图,其中每个点都有一个High值,每条边都有一个Hard值. 再给出\(Q\)个询问:\(v\) \(x\) \(k\) 每次询问查询从点\(v ...

  8. 【POJ2942】Knights of the Round Table(二分图 点双联通分量)

    题目链接 大意 给定\(N\)个点与\(M\)个关系,每个关系表示某两个点间没有直接的边相连,求不在所有奇环上的点的个数. (\(1\le N\le 1e3,1\le M\le 1e6\)) 思路 考 ...

  9. 理解ASP.NET Core - 基于JwtBearer的身份认证(Authentication)

    注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 在开始之前,如果你还不了解基于Cookie的身份认证,那么建议你先阅读<基于Cookie ...

  10. 解决使用putty 连接Windows主机与Linux虚拟机出现提示network error:connection refused问题

    使用putty 连接Windows主机与Linux虚拟机出现提示network error:connection refused的问题 问题描述: 主机与虚拟机可以互相ping通: 防火墙已经关闭 使 ...