精华内容
下载资源
问答
  • 13-任务状态段(TSS)

    万次阅读 多人点赞 2016-09-24 15:22:14
    任务状态段不要被名字所吓倒,它不过是一块位于内存中的结构体而已。有一点需要注意的是,不要把它和任务切换关联起来(切记),否则你会被搞晕,它只是位于内存中的一段数据。Intel 白皮书给出TSS在内存中的图是...

    1. 任务状态段

    不要被名字所吓倒,它不过是一块位于内存中的结构体而已。有一点需要注意的是,不要把它和任务切换关联起来(切记),否则你会被搞晕,它只是位于内存中的一段数据。

    Intel 白皮书给出TSS在内存中的图是这样的,它保存了一些重要的值。

    这里写图片描述
    抽象成结构体就是下面这个样子。

    typedef struct TSS {
        DWORD link; // 保存前一个 TSS 段选择子,使用 call 指令切换寄存器的时候由CPU填写。
        // 这 6 个值是固定不变的,用于提权,CPU 切换栈的时候用
        DWORD esp0; // 保存 0 环栈指针
        DWORD ss0;  // 保存 0 环栈段选择子
        DWORD esp1; // 保存 1 环栈指针
        DWORD ss1;  // 保存 1 环栈段选择子
        DWORD esp2; // 保存 2 环栈指针
        DWORD ss2;  // 保存 2 环栈段选择子
        // 下面这些都是用来做切换寄存器值用的,切换寄存器的时候由CPU自动填写。
        DWORD cr3; 
        DWORD eip;  
        DWORD eflags;
        DWORD eax;
        DWORD ecx;
        DWORD edx;
        DWORD ebx;
        DWORD esp;
        DWORD ebp;
        DWORD esi;
        DWORD edi;
        DWORD es;
        DWORD cs;
        DWORD ss;
        DWORD ds;
        DWORD fs;
        DWORD gs;
        DWORD ldt;
        // 这个暂时忽略
        DWORD io_map;
    } TSS;
    

    在学习调用门,中断门和陷阱门已经知道,代码发生提权的时候,是需要切换栈的。

    之前遗留的一个问题是,栈段描述符和栈顶指针从哪里来?那时只是简单的讲了一下是从 TSS 中来的。

    如果代码从3环跨到0环,现在观察上面的图或者结构体,可以看到确实存在这么一个 SS0 和 ESP0。提权的时候,CPU就从这个TSS里把SS0和ESP0取出来,放到 ss 和 esp 寄存器中。

    2. CPU怎么找到TSS

    前面已经知道,CPU可以通过 gdtr 寄存器来知道 GDT表在哪里,通过 idtr 寄存器知道 IDT 表在哪里。实际上,CPU是通过 tr 寄存器来确定 TSS 的位置的。

    和 gdtr,idtr 这些不同的是,tr 寄存器是段寄存器,之前已经知道的段寄存器有 cs, ds, es, ss, fs, gs 。也知道段寄存器有96位,还做过实验验证。tr 寄存器中存放的就是描述了TSS段的相关信息,比如TSS段的基址,大小和属性。

    可以通过 ltr指令跟上TSS段描述符的选择子来加载TSS段。该指令是特权指令,只能在特权级为0的情况下使用。

    3. TSS 段描述符

    |   7    |     6       |     5     |   4    |   3    |   2    |   1    |   0    |  字节
    |76543210|7 6 5 4 3210 |7 65 4 3210|76543210|76543210|76543210|76543210|76543210|  比特
    |--------|-|-|-|-|---- |-|--|-|----|--------|--------|--------|--------|--------|  占位
    |  BASE  |G|D|0|A|LIMIT|P|D |S|TYPE|<------- BASE 23-0 ------>|<-- LIMIT 15-0 ->|  含义
    |  31-24 | |/| |V|19-16| |P |
               |B| |L|     | |L |
    

    当S=0, TYPE=1001或者TYPE=1011的时候,表示这是一个TSS段描述符。当TSS段没被加载进 tr 寄存器时,TYPE=1001,一旦TSS被加载进 tr 寄存器,TYPE就变成了1011.

    4. TSS的用途

    • 保存0环、1环和2环的栈段选择子和栈顶指针

    前面讲到了,在跨段提权的时候,需要切换栈,CPU会通过 tr 寄存器找到 TSS,取出其中的 SS0 和 ESP0 复制到 ss 和 esp 寄存器中。这只是 TSS 的一个用途,也是现代 Windows 操作系统使用到的功能。

    • 一次性切换一堆寄存器

    TSS 的另一个用途是什么?通过观察 TSS 的结构还发现 TSS 不仅存储了不同特权级下的 SS 和 ESP,还有 cs, esp, ss, esp 等等,这些后面不带数字的变量名,有着各自的用途。可以通过 call/jmp + TSS段选择子指令一次性把这些值加载到 CPU 对应的寄存器中。同时,旧值将保存在旧的 TSS 中。

    GDT 表中可以存放多个TSS描述符,这意味着内存中可以存在多份不同的TSS。总有一个 TSS 是在当前使用中的,也就是 tr 寄存器指向的那个 TSS。当使用 call/jmp + TSS段选择子的时候,CPU做了以下几件事情。

    • 把当前所有寄存器(TSS结构中有的那些寄存器)的值填写到当前 tr 段寄存器指向的 TSS 中
    • 把新的 TSS 段选择子指向的段描述符加载到 tr 段寄存器中
    • 把新的 TSS 段中的值覆盖到当前所有寄存器(TSS结构中有的那些寄存器)中

    总结

    本节主要讲了 TSS 的两个功能:

    • 提权时栈切换用到了 TSS
    • 切换一堆寄存器

    本文始终没有把 TSS 和任务切换关联起来,只是为了避免给初学者造成困扰。虽然 Intel 设计的初衷是用它来做任务切换,然而,在现代操作系统中(无论是 Windows 还是 Linux),都没有使用这种方式来执行任务切换,比如线程切换和进程切换。主要原因是这种切换速度非常慢,一条指令要消耗200多个时钟周期。

    至于现代操作系统如何进行线程或进程的切换,确实是用到了 TSS,但却不是靠切换call/jmp TSS 来切换任务。(你可参考这一篇:http://guojing.me/linux-kernel-architecture/posts/process-switch/)

    下一小节,会对 TSS 的第二个功能做一个实验。有兴趣,可以自己尝试着挑战一下。

    展开全文
  • 在一个多任务环境中,当发生了任务切换,需保护现场,因此每个任务的应当用一个额外的内存区域保存相关信息,即任务状态段(TSS);TSS格式固定,104个字节,处理器固件能识别TSS中元素,并在任务切换时读取其中信息。...

    1.TSS介绍

    在一个多任务环境中,当发生了任务切换,需保护现场,因此每个任务的应当用一个额外的内存区域保存相关信息,即任务状态段(TSS);TSS格式固定,104个字节,处理器固件能识别TSS中元素,并在任务切换时读取其中信息。

    2.GDT、TSS、LDT对比

    GDT/LDT/TSS对比内容
    GDT(全局描述符表)整个系统只有一个GDT;
    通过全局描述符寄存器GDTR进行定位;
    段描述符
    LDT(局部描述符表)每个任务都配有一个LDT,LDT基地址、界限等信息存放在任务对应的TCB中;
    通过局部描述符寄存器GDTR进行定位;
    将LDT视为一种特殊的内存段,则可为每一个LDT创建一个LDT描述符,将描述符存放到GDT中;
    访问LDT时:GDT选择子==>访问GDT==>LDT描述符==>访问LDT(==>加载到LDTR);
    段描述符
    TSS(任务状态段)每个任务都配有一个TSS,TSS基地址、界限等信息可以存放在任务对应的TCB中;
    通过任务寄存器TR进行定位;
    将TSS视为一种特殊的内存段,则可为每一个TSS创建一个TSS描述符,将描述符存放到GDT中;
    访问TSS时:GDT选择子==>访问GDT==>TSS描述符==>访问TSS(==>加载到TR);
    保存任务相关信息

    各部分关系图:

    3.任务寄存器TR与局部描述符表寄存器LDTR

    TR,LDTR总指向当前任务的TSS,LDT。

    TR(LDTR)寄存器包含16位TR(LDTR)描述符选择子+描述符高速缓存器;
    加载TR和LDT分别使用指令ltr和lldt:

    //操作数可以为16位通用寄存器或16位单元内存地址,不论寄存器还是内存单元,内容为16位TSS(LDT)选择子
    ltr r/m16
    lldt r/m16
    

    将TSS(LDT)选择子加载到TR(LDTR)后,CPU访问GDT==>得到TSS(LDT)描述符==>将段界限、基址加载到TR(LDTR)高速缓存部分;若为TSS则TSS中’B’置1即忙;

    3.TSS描述符格式

    TSS描述符存放在GDT中;

    TYPE中'B':忙,刚创建时应为0,任务开始执行,挂起时为1,由硬件管理,防止切换任务切到自己;TSS描述符DPL必须为0,只有CPL为0能调用;

    4.LDT描述符格式

    LDT描述符存放在GDT中,在GDT中的选择子可以存入相应的TCB中;

    段基地址指示LDT在内存中的起始地址;
    段界限指示LDT的范围;
    S-TYPE固定为'0-0010',表明为LDT描述符;

    5.TSS结构

    组成作用
    0:任务链接域 前一个任务的TSS描述符的GDT选择子
    SS0,SS1,SS2
    ESP0,ESP1,ESP2
    分别是0,1,2特权级的栈段选择子和对应栈段的栈顶指针;
    该部分应由任务创建者填写,且属于一般不变的静态部分,用于当通过门进行特权级转移时切换的栈
    28:CR3 分页相关
    32~92部分处理器各寄存器快照,用于任务切换时,保存状态以便将来恢复现场;
    多任务环境中,每创建一个任务,OS至少要填写EIP,EFLAGS,ESP,CS,SS,DS,ES,FS,GS,当该任务第一次执行时,处理器从这加载初试环境,并从CS:EIP处开始执行,从此运行期间由固件更改;
    96:LDT段选择子 即当前任务的LDT描述符的GDT选择子;
    100:T 用于软件调试,在多任务环境中,若为1,每次切换到该任务引发一次调试异常中断;
    I/0映射起始地址 用于决定当前任务是否可以访问特定硬件端口,填TSS段界限(103)即代表不用;
    展开全文
  • 1 任务状态段(TSS) 任务状态段(Task-State Segment(TSS)),保存任务状态信息的系统段为任务状态段。图7-2描述32位CPU的TSS信息。TSS主要分为动态字段和静态字段。 在任务切换过程中当任务挂起时,处理器会...

    主要是TSS、TSS描述符、TR和任务门描述符学习总结
    1 任务状态段(TSS)
    任务状态段(Task-State Segment(TSS)),保存任务状态信息的系统段为任务状态段。图7-2描述32位CPU的TSS信息。TSS主要分为动态字段和静态字段。
    这里写图片描述
      在任务切换过程中当任务挂起时,处理器会更新动态字段,动态字段有:
     (1)通用寄存器字段—任务切换之前,EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI寄存器状态。
     (2)段选择符字段—任务切换之前,ES,CS,SS,DS,FS,GS寄存器保存的段选择符。
     (3)EFLAGS寄存器字段—任务切换之前,EFAGS寄存器的状态。
     (4)EIP字段—任务切换之前,EIP寄存器的状态。
     (5)先前任务链接字段—包含先前任务的TSS的段选择符。该字段禁止任务通过使用IRET指令返回先前的任务。
    当任务创建时会创建静态字段,静态字段可读,不可写:
     (1)LDT段选择符字段—包含任务LDT的段选择符。
     (2)CR3控制寄存器字段—包含任务使用的页目录的物理基地址。CR3也被称为page directory base register(PDBR)页目录基址寄存器。
     (3)特权级0,1,2栈指针字段—包含栈段(因为任务运行在不同特权级下,需要不同的栈段,故相应的SS0,SS1,SS2)的段选择符的逻辑地址和栈的偏移(不同特权级相应的ESP0,ESP1,ESP2)。在特定的任务中该字段是静态的,但是如果栈切换发生在单个任务中,SS和EIP的值就会改变。
     (4)T标志(调试陷阱,100字节,位0)—如果设置,当切换任务时,会引起调试异常。
     (5)I/O映射基址字段—是16位的偏移,包含从I/O权限位图和中断导向表中TSS的基地址。

    2 TSS 描述符
    就像其它段描述符描述段的一些性质一样,TSS描述符用来描述TSS的某些性质。TSS描述符仅可能存放在GDT中,不能存放在LDT或IDT中。32位模式下,TSS描述符格式如下:
    当G标志是0时,界限字段的值大于或等于67H(103字节),比TSS(104字节)的大小少一个字节。如果切换到任务的TSS界限字段小于67H会产生无效TSS异常(#TS)。
    这里写图片描述

    3 任务寄存器(task register)
    任务寄存器拥有当前任务的TSS的段选择符和段描述符(32位基地址,16位段界限和描述符参数)。任务寄存器具有可见部分(软件可以读和写)和不可见部分(只能被处理器访问,软件不能读写)。可见部分中的段选择符指向GDT中TSS描述符。不可见部分缓存TSS的描述符。指令LTR(加载任务寄存器)和STR(保存任务寄存器)加载和保存任务寄存器的可见部分。LTR指令让任务寄存器加载TSS描述符的段选择符,该指令只能运行在特权级0,该指令通常用来系统初始化时初始化任务寄存器。指令STR可以将任务寄存器的可见部分保存到通用寄存器或内存中。该指令可以运行在任何特权级。
    系统上电或复位时,段选择符和基址指向默认值0,界限设为FFFFH。
    下图描述了,任务寄存器中可见部分的段选择符加载TSS描述符的段选择符,访问GDT中TSS描述符,通过TSS描述符访问TSS。同时TSS描述符中的基址和界限字段的值又加载到任务寄存器的不可见部分的基址和界限字段,这样做的目的是下次访问该TSS时可以不用通过GDT中的TSS描述符访问TSS,而是直接通过缓存在任务寄存器中的基址和界限字段访问TSS,加快了系统对TSS的访问。
    这里写图片描述

    4 任务门描述符(Task-Gate Descriptor)
    任务门描述符用来间接地、保护引用任务。结构如下图。任务门描述符可以放在GDT,LDT和IDT中。任务门描述符中的TSS段选择符字段指向GDT中的TSS描述符。在任务切换过程中,任务门描述符中DPL字段控制访问TSS描述符。当程序通过任务门调用和跳转到一个任务时,CPL和门选择符的RPL字段必须小于等于任务门描述符中的DPL。
    这里写图片描述
    任务可以通过任务门描述符或TSS描述符被访问。LDT中任务门,GDT中的任务门和IDT中任务门可指向相同的任务,如下图:
    这里写图片描述
    good luck!

    展开全文
  • 任务状态段(Task State Segment)

    千次阅读 2013-04-27 09:02:40
    任务状态段(Task State Segment)是保存一个任务重要信息的特殊段...任务状态段寄存器TR的可见部分含有当前任务的任务状态段描述符的选择子,TR的不可见的高速缓冲寄存器部分含有当前任务状态段的段基地址和段界限等

    转自:http://www.cnblogs.com/guanlaiy/archive/2012/10/25/2738355.html

    任务状态段(Task State Segment)是保存一个任务重要信息的特殊段。任务状态段描述符用于描述这样的系统段。任务状态段寄存器TR的可见部分含有当前任务的任务状态段描述符的选择子,TR的不可见的高速缓冲寄存器部分含有当前任务状态段的段基地址和段界限等信息。

     TSS在任务切换过程中起着重要作用,通过它实现任务的挂起和恢复。所谓任务切换是指,挂起当前正在执行的任务,恢复或启动另一任务的执行。在任务切换过程中,首先,处理器中各寄存器的当前值被自动保存到TR所指定的TSS中;然后,下一任务的TSS的选择子被装入TR;最后,从TR所指定的TSS中取出各寄存器的值送到处理器的各寄存器中。由此可见,通过在TSS中保存任务现场各寄存器状态的完整映象,实现任务的切换。
      任务状态段TSS的基本格式如下图所示。

     























    BIT31—BIT16BIT15—BIT1BIT0Offset
    0000000000000000链接字段0
    ESP04
    0000000000000000SS08
    ESP10CH
    0000000000000000SS110H
    ESP214H
    0000000000000000SS218H
    CR31CH
    EIP20H
    EFLAGS24H
    EAX28H
    ECX2CH
    EDX30H
    EBX34H
    ESP38H
    EBP3CH
    ESI40H
    EDI44H
    0000000000000000ES48H
    0000000000000000CS4CH
    0000000000000000SS50H
    0000000000000000DS54H
    0000000000000000FS58H
    0000000000000000GS5CH
    0000000000000000LDTR60H
    I/O许可位图偏移000000000000000T64H

     

     从图中可见,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确定。显然,随着任务的切换,地址映射关系也要切换。
     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,那么在任务切换完成之后,新任务的第一条指令执行之前产生调试陷阱。
    展开全文
  • 任务状态段和门

    千次阅读 2010-10-14 14:08:00
     每一个任务(可以理解为进程)都有一个任务状态段TSS,用于保存任务的有关信息,在任务内变换特权级和任务切换时要用到这些信息。  系统段是为实现存储管理机制所使用的一种特别的段。在80386中,有两...
  • 关于利用任务状态段TSS进行进程切换的一点说明:由于在时钟中断里进行任务切换,也就是用JMP指令跳转到新的任务中去,这时的时钟中断是屏蔽的,但任务切换是直接进入新任务,没有将时钟中断屏蔽打开,所以造成了任务...
  • 第四章笔记补充-FreeRTOS临界代码 第五章笔记-FreeRTOS任务基础 第六章笔记-FreeRTOS任务API函数的使用 第七章笔记-FreeRTOS列表和列表项 第八章笔记-1-FreeRTOS任务创建 第八章笔记-2-...
  • FreeRTOS笔记(五)任务状态

    千次阅读 2018-12-11 19:37:10
    文章目录01 - 任务的状态02 - tick时钟和调度器03 - 任务状态测试04 - 总结 01 - 任务的状态   任务被创建后,它可能正在运行,可能暂停运行,任务有状态之分是由于调度器的存在,调度器需要决定哪些任务可以...
  • TSS(Task-State Segment)任务状态段

    千次阅读 2008-03-10 09:30:00
    TSS的使用是为了解决调用门中特权级变换时堆栈发生的变化,每一个任务是最多可能在四个特权级间转移,所以每个任务实际上需要4个堆栈,从上图中可以看出,从偏移4到偏移27的3 个SS和3个ESP,当发生堆栈切换时,被...
  • VxWorks任务状态的转换

    千次阅读 2017-11-07 15:33:59
    在VxWorks中,任务的基本状态分为5种:就绪态、休眠态、延迟态、悬置态、运行态。  就绪态是指,任务已经获得除了CPU之外的所有其他资源,所等待的只是CPU的运行,一旦其他任务释放了CPU资源,该任务就可以开始...
  • UCOSIII的任务状态

    千次阅读 2018-12-03 20:57:40
    2、就绪态:系统为任务分配了任务控制块,并且任务已经在就绪表中登记,这时这个任务就具有了运行的条件,此时任务状态就是就绪态。 3、运行态:任务获得CPU的使用权,正在运行。任何时刻只能有一个任务处于运行...
  • ucos任务状态及任务控制块

    千次阅读 2017-01-09 14:30:48
    一个任务被创建后,可以处于以下五种状态之一 这五种状态分别是: 1.睡眠状态 2.就绪状态 3.等待状态 4中断服务状态 5执行状态 下面简单介绍各状态的含义即各状态的切换方法  睡眠状态:睡眠态指任务驻留在...
  • 任务状态段和控制门每个任务有一个任务状态段TSS,用于保存任务的有关信息,在任务内变换特权级和任务切换时,要用到这些信息。为了控制任务内发生特权级变换的转移,为了控制任务切换,一般要通过控制门进行这些...
  • VxWorks的任务状态

    千次阅读 2014-05-18 16:46:32
    VxWorks中的任务状态
  • celery任务状态监控

    千次阅读 2019-05-20 14:52:10
    celery是python里常用的一个...这里就讲一下celery的任务状态监控相关的方法。 单独使用celery命令格式为 celery -A [proj] [cmd] 在django下使用时,用manage.py启动时则不需要-A参数,命令格式为 python manage....
  • UC/OS-II 任务状态

    千次阅读 2016-12-06 15:21:18
    uc/os是一个抢占式多任务的实时操作系统,每个任务都有各自的状态,并且状态之间都有一定的转换关系。写下此文以作记录及帮助自己理清关系。在uc/os-ii中,任务状态有5种:睡眠态、就绪态、运行态、等待态及中断...
  • cronmon 定时任务执行状态监控

    千次阅读 2018-11-29 15:37:25
    cronmon是一个计划任务(定时任务)监控系统,可以对循环执行的程序和脚本进行监控告警,当其未按照预期执行时,发送邮件到对应邮箱进行通知。同时可以将监控任务划分到不同业务下面,每个业务可以分配不同的通知人...
  • 1、什么是任务 我们设计复杂、大型程序的时候,将这些负责的程序分割成许多个简单的小程序,这些小程序就是单个的任务,所有的小任务和谐的工作,最终完成复杂的功能。在操作系统中这些小任务可以并发执行,从而...
  • μC/OS任务状态及具体内容描述

    千次阅读 2016-09-09 22:18:13
    1、任务的5种状态:①睡眠状态任务只以代码的形式驻留在...需要等待一时间或者需要等待一个事件发生在运行的时候为等待状态)⑤中断服务状态(一个正在运行的任务一旦响应中断申请就会中止运行而去执行中断服务程
  • 3.任务管理机制

    千次阅读 2017-06-15 14:14:37
    关于创建任务的详细参数,前面也有说过了创建一个任务时必须为其分配一个TCB(Task Control Block,会存放任务优先级、任务名、任务状态、内部消息队列、内部信号量等),一个堆栈,一个优先级和其它一些参数。...
  • ucos II 内核学习之一:任务状态及任务控制块 一个任务被创建之后,可以处于以下五种状态之一。 这五种状态分别是: 1. 睡眠状态 2. 就绪状态 3. 等待状态 4. 中断服务状态 5. 执行状态 下面简单介绍下...
  • 逻辑地址-=>线性地址-=>物理地址前面我们提到了当使用...这个寻址方式在80x86著名的分段结构中表现得尤为具体,它促使MS-DOS或Windows程序员把程序分成若干。每一个逻辑地址都由一个(segment)和偏移量(offset或dis
  • 多线程面试题(值得收藏)

    万次阅读 多人点赞 2019-08-16 09:41:18
    但是如果把这个大的任务A分解成几个小任务任务B、任务C、任务D,分别建立程序模型,并通过多线程分别运行这几个任务,那就简单很多了。 4、创建线程的有哪些方式? 1)继承Thread类创建线程类 2)通过...
  • } } (3)执行结果: (4)结果分析:上代码中,创建了一个固定大小的线程池,容量为3,然后循环执行了4个任务。由输出结果可以看到,前3个任务首先执行完,然后空闲下来的线程去执行第4个任务。在...
  • RTOS之UCOS(一)--- 有限状态

    千次阅读 2019-05-30 21:56:54
    一、什么是有限状态机 有限状态机(FSM: Finite-state machine)是一种用来进行对象行为建模的工具,其作用主要是描述对象在它的生命周期内所经历的状态序列,以及如何响应来自外界的各种事件。它把复杂的控制逻辑...
  • 32位保护模式学习小结(3)---任务切换

    千次阅读 2016-08-03 22:55:24
    两种基本的任务切换方式 协同式和抢占式
  • 逻辑地址-=>线性地址-=>物理地址前面我们提到了当使用...这个寻址方式在80x86著名的分段结构中表现得尤为具体,它促使MS-DOS或Windows程序员把程序分成若干。每一个逻辑地址都由一个(segment)和偏移量(offset或dis
  • 任务和返回栈 一个应用程序当中通常都会包含很多个Activity,每个Activity都应该设计成为一个具有特定的功能,并且可以让用户进行操作的组件。另外,Activity之间还应该是可以相互启动的。比如,一个邮件应用中可能...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 533,878
精华内容 213,551
关键字:

任务状态段