堆栈,就是在存储器中按数据“后进先出(LIFO)【类比杯子】”的原则组织的连续存储空间,为了满足任务切换和响应中断保存CPU寄存器中的内容及存储任务私有数据的需要,每个任务都应该配有自己的堆栈,

  注意点:堆栈的增长方向是随系统所使用的处理器不同而存在差异,有些处理器要求堆栈的增长方向是向上的,而有些则是要求堆栈的增长方向是向下的;

当cpu启动运行一个任务时,cpu的各寄存器总是需要预置一些初始数据,例如指向任务的指针,程序状态字PSW等;

  那么,在系统启动任务时,CPU从何处可以获得这些数据呢?一个最方便的方法是让cpu从这个任务的任务堆栈里获得这些数据/。为此,应用斥呢个需在创建一个新任务时,就必须把在系统启动这个任务时CPU各寄存器所需要的初始数据(任务指针,任务堆栈指针,程序状态字等)事先存放在任务的堆栈中,这样,当任务获得cpu使用权时,就能把堆栈中的初始数据复制到cpu的各寄存器里,从而可使任务顺利地启动并运行;

  任务堆栈的初始化工作应该是由操作系统负责的,

uc/os2用来记录任务的堆栈指针、任务的当前状态、任务的优先级等一些与任务管理相关的属性的表叫做任务控制块;

  任务控制块负责把任务代码和任务堆栈进行关联,从而使任务控制块,任务代码和任务堆栈称为一个整体;并且系统要通过这个任务控制块来感知和管理一个任务,因此,任务控制块就相当于一个任务的身份证,没有任务控制块的任务是不能被系统承认和管理的;

  为了管理系统中的多个任务,uc/os2把系统所有任务的控制块链接成两条链表,并通过这两条链表管理各任务控制块,进而通过任务控制块对任务进行相应的操作;一条是空任务块链表(其中所有任务控制块还没有分配给任务);另一条是任务控制块链表(其中所有任务控制块已经分配给任务);

  多任务os的核心工作就是任务调度。所谓调度,就是通过一个算法在多任务中确定哪个任务来运行,做这项工作的函数就叫做调度器;

UC/OS2进行任务调度的思想是,每时每刻总是让优先级最高的就绪任务处于运行状态,为了保证这一点,它在系统或用户任务调用系统函数及执行中断服务程序结束时,总是调用调度器来确定应该运行的任务并运行它;  

  多任务系统中,令cpu中止当前正在运行的任务转而去运行另一个任务的工作叫做任务切换,而按某种规则进行任务切换的工作叫做任务的调度;

在UC/OS2中,任务调度是由任务调度器来完成的,任务调度器的主要工作有两项:一、在任务就绪表中查找具有最高优先级的就绪任务;二、实现任务的切换;

  UC/OS2中有两种调度器:一种是任务级的调度器,另一种是,中断级的调度器;

下面介绍任务级的调度器:

  调度器把任务切换的工作分为两个步骤:

     第一步是获得待运行任务的TCB指针;Task control  block

     第二步是进行断点数据的切换;

  

UC/0S2之基础总结的更多相关文章

  1. UC/0S2之中断

    中断是计算机系统处理异步事件的重要机制.当异步事件发生时,事件通常是通过硬件向cpu发出中断请求的.在一般情况下,cpu响应这个请求后会立即运行中断服务程序来处理该事件: 为了处理任务延时.任务调度等 ...

  2. 学习嵌入式Linux有没有一个最佳的顺序(持续更新)

    作为一个嵌入式Linux的初学者,我知道我可能将长期处于初学者阶段,因为我至今仍然没有能够摸索出一条很好的道路让我由初学者进入到更高级阶段.但是我始终没有放弃,本篇文章就是用来记录我学习嵌入式Linu ...

  3. 蚂蚁金服 Service Mesh 实践探索

    SOFAMesh是蚂蚁金服在ServiceMesh方向上的探索,下面是它高级技术专家敖小剑在QCon上海2018上的演讲. Service Mesh 是一个 基础设施层,用于处理服务间通讯.现代云原生 ...

  4. NCB | 定量蛋白质组学揭示细胞外泌体通用标志物Syntenin-1

    外泌体 (exosomes) 是由哺乳动物细胞通过"内吞-融合-外排"等机制,主动向胞外释放的纳米级 (直径40~60 nm) 双层囊泡小体,携带蛋白质.核酸.脂质等多种生物活性分 ...

  5. HTML5移动开发学习笔记之CSS3基础学习

    CSS回顾 在学CSS3之前首先巩固下CSS的基础知识. 1.CSS框模型 举例子: #box { width: 70px; margin: 10px; padding: 5px; } 这个代码将出现 ...

  6. 【转】《从入门到精通云服务器》第六讲—OpenStack基础

    前五期的<从入门到精通云服务器>受到了广泛好评,收到留言,有很多读者对云计算相关的技术非常感兴趣.应观众要求,我们这期要安利一条纯技术内容.准备好瓜子.花生,随小编一起进入OpenStac ...

  7. 基础知识漫谈(2):从设计UI框架开始

    说UI能延展出一丢丢的东西来,光java就有swing,swt/jface乃至javafx等等UI toolkit,在桌面上它们甚至都不是主流,在web端又有canvas.svg等等. 基于这些UI工 ...

  8. java必备基础知识点

    Java基础 1. 简述Java的基本历史 java起源于SUN公司的一个GREEN的项目,其原先目的是:为家用消费电子产品发送一个信息的分布式代码系统,通过发送信息控制电视机.冰箱等 2. 简单写出 ...

  9. C++基础——模拟事务 (1)COMMAND模式

    =================================版权声明================================= 版权声明:原创文章 禁止转载  请通过右侧公告中的“联系邮 ...

随机推荐

  1. C++中的unordered_map

    1.简介 随着C++0x标准的确立,C++的标准库中也终于有了hash table这个东西.很久以来,STL中都只提供<map>作为存放对应关系的容器,内部通常用红黑树实现,据说原因是二叉 ...

  2. Android 常用动画小结

    1. 渐入动画 // Request the next activity transition (here starting a new one). startActivity(new Intent( ...

  3. 移动前端制作篇之javascript篇

    javascript(简称js)语言在移动前端应用很广.可以说必不可少,许多效果都是和js相关的.包括现在移动端的一些框架.jqmobi.jqtouch.sencha touch.jquerymobi ...

  4. hdu 4289 Control 网络流

    题目链接 给出一些点, 每个点有一个权值, 给出一些边, 起点以及终点, 去掉一些点使得起点和终点不连通, 求最小的val. 拆点, 把一个点s拆成s和s', 之间建一条边, 权值为点权. 对于一条边 ...

  5. SQL Server 多表删除

    第一步: 建表 create table t1(x int, y int); create table t2(x int, y int); go insert into t1(x,y) values( ...

  6. QT实现appendSheet(QAxObject的一种Add + Move的方法)

    一般地,熟悉VB.VC的同学都知道,要将新增的excel表单添加到表单的末尾,是很简单的事情,直接调用Add函数,传入对应的函数形参,就能实现将新增表单插入到末尾,但是通过QT的QAxObject实现 ...

  7. Hadoop-04-HBase全然分布式环境搭建

    Hbase分布式具体安装步骤 Hadoop全然分布式环境已经搭建完毕(參见01_Hadoop全然分布式环境搭建). 注意:Hbase和Hadoop的版本号必须相应! 不然会出现各种问题! 这里选用的是 ...

  8. css版hover现边框

    需要注意的是  hover中要给盒子加:position:relative; <style type="text/css"> *{margin:0;padding:0; ...

  9. zoj 2067 White Rectangles

    这题解决的算法处理,真的很难想清楚!!尤其是最后的正矩形如何处理.不过终于看懂了 #include<stdio.h> #include<stdlib.h> #include&l ...

  10. NOIP2010提高组] CODEVS 1069 关押罪犯(并查集)

    这道这么简单的题目还写了这么久.. 将每个会发生冲突的两人的怒气进行排序,然后从怒气大到小,将两个人放到不同监狱中.假如两人都已经被放置且在同一监狱,这就是答案. ------------------ ...