操作系统笔记概要

上传人:今*** 文档编号:108093531 上传时间:2019-10-22 格式:DOC 页数:38 大小:537.50KB
返回 下载 相关 举报
操作系统笔记概要_第1页
第1页 / 共38页
操作系统笔记概要_第2页
第2页 / 共38页
操作系统笔记概要_第3页
第3页 / 共38页
操作系统笔记概要_第4页
第4页 / 共38页
操作系统笔记概要_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《操作系统笔记概要》由会员分享,可在线阅读,更多相关《操作系统笔记概要(38页珍藏版)》请在金锄头文库上搜索。

1、第一章 实时操作系统基础1.4 基于优先级的不可剥夺内核1 内核:主要功能是进行任务调度。内核中最核心的基本服务就是调度的核心任务切换。2 基于优先级的调度算法:在uC/OS中,可以同时有64个就绪任务,每个任务都有各自的优先级。优先级用无符号整数表示,从063,取值越大则优先级越低。uC/OS总是调度就绪了的、优先级最高的任务获得CPU的控制权。3 不可剥夺型内核和可剥夺型内核1.5 同步与通信1 同步:有时候,一个任务完成的前提是需要另一个任务给出一个结果,任务之间的这种约束性的合作机制称为任务间的同步。2 互斥:共享资源称为临界资源,这种访问共享资源的排他性就是互斥。临界资源可以是全局变

2、量,也可以是指针、缓冲区或链表等其他数据结构,也可以是如打印机、硬盘等硬件。要做到互斥访问临界资源,操作系统可以有多种方法,uC/OS采用的方法有关中断、给调度器上锁和使用信号量等。3 临界区:每个任务中访问共享资源的那段程序称为临界区。临界区不允许任务切换。为保证系统的实时性,临界区代码必须尽量短,能够在限定时间内完成。4 任务事件:事件就是操作系统运行过程中发生的事情。事件处理的对象主要有信号量、互斥信号量、事件标志组、邮箱、消息队列。5 信号量:信号量标识了共享资源的有效可被访问次数。6 互斥信号量:互斥信号量用于互斥资源的访问及在使用互斥信号量管理需要解决的优先级反转问题(采用优先级继

3、承机制)。7 事件标志组:事件标志组管理的条件组合可以是多个事件都发生,也可以是多个事件中有任何一个事件发生,还可以是多个事件都没有发生或多个事件中有任何一个事件没有发生。8 消息邮箱:邮箱中的内容不是信件本身,而是指向消息内容的地址。9 消息队列:消息队列是由多个消息邮箱组合形成的,是消息邮箱的集合,实质上是消息邮箱的队列。同样是采用事件控制块来指示消息的位置和标记等待消息的任务。不同的是,消息队列自身有消息控制块这样的数据结构,事件控制块中指示的不再是消息的地址,而是消息控制块的地址,使用消息控制块可以先进先出的方式管理多条信息。1.6 时钟、中断和内存管理1 中断:中断是实时地处理内部或

4、外部事件的一种内部机制。中断源称为异步事件,处理异步事件所使用的程序是中断服务程序。2 时钟中断服务:在uC/OS中,通过对硬件的设置,使在10200ms的时间间隔内产生一次时钟中断,在该时钟中断服务程序中,对延时的任务进行延时计数,检查系统中是否有高优先级任务就绪而没有得到运行,相应进行任务调度。3 内存管理:uC/OS中采用分区的方式管理内存,即将连续的大块内存按分区来管理,每个分区又包含数个内存块,每个内存块大小相同。uC/OS采用内存控制块来管理内存。内存控制块记录了内存分区的地址、分区中内存快的大小和数量,以及控制块的数量等信息。第二章 任务管理操作系统内核运行后,进行一次初始化操作

5、OSInit,对操作系统的重要数据结构如任务控制块、事件控制块。就绪表等进行初始化,并创建两个系统任务(统计任务和空闲任务)。然后创建一个TaskStart任务,该任务用于设置时钟中断服务程序,接着调用OSStart启动多任务,开始真正多任务地执行。2.1 任务管理数据结构 任务管理数据结构包括任务控制块、任务空闲链表和任务就绪链表、任务优先级指针表、任务堆栈等,是uC/OS-II内核的核心部分之一。这些数据的内容完全反映了任务的运行情况。1 任务优先级:优先级是任务的唯一标志。各个任务的优先级必须不同,因此uC/OS以优先级作为事件的标志,作为任务管理的主键。任务的优先级可以是063,优先级

6、62和63被统计任务和空闲任务占用,数字越小,优先级越高。2 任务优先级指针表:任务优先级指针表是用来获取某优先级的任务的任务控制块地址。 任务优先级指针表的定义如下: OS_TCB *OSTCBPrioTblOS_LOWEST_PRIO + 1 假如创建一个优先级为5的任务,在取得任务控制块的地址之后,需要简单地把该地址赋值给OSTCBPrioTbl5。那么以后在根据优先级查找任务控制块的时候,不需要遍历就绪链表,因为OSTCBPrioTbl5中就是这个任务控制块的地址。3 任务控制块(OSTCBTbl):任务控制块是任务管理的核心数据结构,操作系统在启动的时候,首先要在内存中创建一定数量的

7、任务控制块。任务控制块的数量等于操作系统能同时管理的最多任务数。每个任务都有自己的任务控制块。OS_STK*OSTCBStkPtr任务堆栈的指针void*OSTCBExtPtr扩展块的指针OS_STK*OSTCBStkBottom任务堆栈的栈底地址INT32U*OSTCBStkSize任务堆栈的大小INT16UOSTCBOpt扩展的选项INT16UOSTCBId任务IDstruct os_tcb*OSTCBNext指向下一个任务控制块的指针OSTCBNextstruct os_tcb*OSTCBPrev指向上一个任务控制块的指针OSTCBPrevOS_EVENT*OSTCBEventPtr指向

8、事件控制块的指针OS_EVENT*OSTCBEventMultiPtr多事件控制块指针viod*OSTCBMsg消息地址OS_FLAG_NODE*OSTCBFlagNode事件标志节点OS_FLAGSOSTCBFlagsRdy事件标志INT32UOSTCBDly任务延时时间INT8UOSTCBStat任务状态INT8UOSTCBStatPend事件等待标志INT8UOSTCBPrio任务优先级INT8UOSTCBX任务优先级低3位INT8UOSTCBY任务优先级右移3位INT8UOSTCBBitX优先级在就绪表中的位置INT8UOSTCBBitY任务在就绪组中的位置BOOLEANOSTCBDe

9、lReq任务删除请求标志INT32UOSTCBCtxSwCtr切换到该任务的次数INT32UOSTCBCyclesTot任务运行的总的时间周期INT32UOSTCBCyclesStartOS_STK*OSTCBStkBase任务堆栈的起始地址INT32UOSTCBStkUsed任务堆栈中使用过的空间数INT8U*OSTCBTaskName任务名称INT32UOSTCBRegTblOS_TASK_REG_TBL_SIZE:表示条件编译(a) uC/OS将任务控制块划分为两个链表:就绪链表和空闲链表。创建任务的时候就从空闲链表中取出一个空闲的任务控制块。(b) Tybedef struct os_

10、tcb; OS_TCB; 定义了新的类型 OS_TCB ,代表结构体struct os_tcb。(c) uC/OS-II是以结构体数组的形式生成了任务控制块的实体,声明如下:OS_TCB OSTCBTblOS_MAX_TASKS + OS_N_SYS_TASKS,在定义了结构体的实体后,控制块的0地址就存储了任务堆栈的栈顶地址。(d) 任务控制块实体的声明的程序代码定义了系统任务总数个任务控制块数组,于是这些控制块对应的数组元素为OSTCBTbl0OSTCBTblOS_MAX_TASKS + OS_N_SYS_TASKS - 1,它们占用连续的内存空间。(e) 任务状态(OSTCBStat)取

11、值范围宏取值含义OS_STAT_RDY0x00任务未等待事件且未挂起OS_STAT_SEM0x01任务等待信号量OS_STAT_MBOX0x02任务等待邮箱OS_STAT_Q0x04任务等待消息队列OS_STAT_SUSPEND0x08任务挂起OS_STAT_MUTEX0x10任务等待互斥信号量OS_STAT_FLAG0x20任务等待事件标志(f) #define OS_STAT_PEND_ANY (OS_STAT_SEM | OS_STAT_MBOX | OS_STAT_Q | OS_STAT_MUTEX | OS_STAT_FLAG)(g) 任务控制块事件等待标志OSTCBStatPend

12、宏说明OS_STAT_PEND_OK因为事件发生,等待结束OS_STAT_PEND_ABORT事件等待失败OS_STAT_PEND_TO超时时间到,等待结束4 空闲链表和就绪链表:(1) 创建一个新任务,前提条件就是系统中还有空闲任务块。(2) 这两个链表在操作系统的初始化程序OSInit中创建的。(3) OSTCBFreeList永远指向空闲链表的表头,如果为0,说明没有空闲任务控制块了;OSTCBList永远指向就绪链表的表头,如果它为0,说明没有就绪任务了。(4) 空闲表是单向链表,就绪表是双向链表。向就绪链表中插入一个任务控制块,放在就绪链表的表头。5 任务堆栈:为了满足任务切换或响应

13、中断时保存CPU寄存器中的内容,以及存取任务私有数据的需要,每个任务都有自己的堆栈。(1) 任务堆栈在操作系统中的定义如以下程序所示:#define TASK_STK_SIZE 512typedef unsigned int OS_STK ;OS_STK TaskStkOS_MAX_TASKSTASK_STK_SIZE ;TASK_STK_SIZE是每个任务堆栈的大小,根据具体情况做移植时需修改此值。OS_MAX_TASKS是用户任务的数量,根据移植的系统需要进行修改。统计任务和空闲任务的堆栈是单独定义的,分别是OSTaskStatStk和OSTaskIdleStk。(2) 任务堆栈根据地址的

14、增长方向,分为向下增长型和向上增长型。(3) 如果堆栈是向下增长的,也就是高地址向低地址增长,栈顶为TaskStk0511,栈底为TaskStk00。(4) 如果堆栈是向上增长的,也就是低地址向高地址增长,栈顶为TaskStk00,栈底为TaskStk0511。(5) 由此可知,在任务控制块中,OSTCBStkPtr是指向任务堆栈栈顶的指针,OSTCBStkBottom是指向任务堆栈栈底的指针,OSTCBStkSize是任务堆栈的大小,如果OSTCBStkPtr与OSTCBStkBottom相等,说明堆栈已经满了。6 任务就绪表和就绪组:(1) 就绪组和就绪表定义的相关代码如下:typedef unsigned char INT8U #define OS_RDY_TBL_SIZE ( (OS_LOWEST_PRIO) / 8 + 1 ) ; INT8U OSRdyGrp ; INT8U OSRdyTbl OS_RDY_YBL_SIZE ;(2) 优先级为Prio的任务就绪,设置其在就绪表和就绪组中的位置,程序如下: OSRdyGrp | = OSMapTbl prio3 ;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号