嵌入式操作系统.doc_第1页
嵌入式操作系统.doc_第2页
嵌入式操作系统.doc_第3页
嵌入式操作系统.doc_第4页
嵌入式操作系统.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1.、操作系统的基本概念1.1操作系统:是计算机系统硬件的软件封装,它使计算机成为功能强大的虚拟计算机,从而使应用程序可以使用软件的方式使用计算机的底层功能。1.2操作系统的功能:是计算机硬件的封装和功能的扩充;是计算机资源的管理者;1.3操作系统对计算机资源的管理:1.处理器的管理,2.存储器存储空间的管理,3.I/O设备的管理,4.文件的管理,5.网络和通信的管理,6.提供用户接口1.3操作系统的基本服务:创建程序;执行程序;数据输入输出;文件管理;通信服务;错误的检测和处理;资源的分配;资源使用情况的统计;对系统资源的保护1.4操作系统内核:由HAL层中的程序模块及进程管理,内存管理等基本服务程序模块组成了系统的核心部分1.5异步事件:就是与当前正在做的事情在逻辑上无关的事情。1.6进程的含义:可并发执行且具有独立功能的程序在一个数据集合上的运行过程,它是操作系统资源分配和保护的基本单位。1.7进程的特征:动态性:是指进程是程序的一次活动,程序是进程活动的蓝本,而进程活动是程序的一次运行过程;并发性:是指在一个系统内可以同时存在多个进程,他们在交替使用处理器这个资源,并按照自己独立的进度推进;异步性:是指进程之间在交替使用计算机资源是没有强制的顺序;独立性:是指进程在系统中是一个可独立运行的并具有独立功能的单位,也是系统分配资源和进程调度的独立单位;结构性:是指为了记录、描述、跟踪进程运行使得状态变化以便对进程进行控制,由系统建立的一套数据结构。1.8进程实体:程序代码;数据集合;进程控制块(进程控制块,进程堆栈,进程数据块)1.9系统根据某种规则而暂停进程的运行,进程会转为就绪状态,由于进程需要等待一个事件而暂停运行,进程会进入阻塞状态1.9调度策略:时间片轮转法;优先级调度法;多级反馈队列调度法(对不同的优先级进行分组,优先级越高的组中的进程应得的时间片越短的原则);1.10进程间的同步:直接制约关系(B要用A生成的数据);间接制约关系(A和B都要使用同一资源)1.11存储管理:分页,分段,段页式划分1.11操作系统的设备无关性:设备应是可寻址的;使用逻辑设备名;设备描述表;1.12操作系统对设备的管理:缓冲技术;设备的调度(一个资源为多个进程服务);设备的分配(在资源中选择一个为进程服务);1.13文件逻辑结构:字符流式文件(文件内的信息不在划分结构);记录式文件(连续结构记录式文件【时间顺序】,有序结构记录式文件【某项值的大小顺序】)1.14文件物理结构:文件物理块是分配存储空间的基本单位,也是文件系统与主存之间传输和交换信息的基本单位,是I/o指令对文件读写操作的基本单位1.15文件系统的两个基本功能:一是在建立文件时为文件分配存储空间;二是在删除文件时把文件所占用的存储空间进行回收1.16文件目录及其结构:1.文件名2.文件的存储位置3.用户对文件的存取权限,4,使用信息,5.文件的结构1.16操作系统的内核应提供中断处理,进程的调度管理和系统的基本操作三方面功能。操作1.17系统的分类:单用户操作系统;批处理操纵系统;分时操作系统;实时操作系统1.18假如内核中的某一个服务模块进行修改,那么在修改后就必须对整个系统进行一次编译,再次,就是使得处理器的内核运行时间变长,从而不适合在速度要求较高的场合下应用1.19操作系统的引导和装入:系统引导文件装载文件装载操作系统2、实时操作系统的基本概念2.1实时操作系统的含义:如果一个系统能够及时响应外部事件的请求,并在一个规定的时间内完成对事件的处理2.2基本要求:实时系统的计算必须产生正确的结果,称为逻辑或功能正确;实时系统的计算必须在预定的时间内完成,称为时间正确2.3实时系统的特点:实时任务具有确切的完成期限;实时任务的活动是不可逆的;实时任务大多由外部事件激活2.5实时操作系统设计时应满足的条件:必须是多任务系统;内核应是可剥夺型的;进程调度的延时可预测并尽可能小;系统提供的服务时间可预知;中断延时尽可能小;2.6实时调度算法:单调速率RM算法:用来处理周期性实时进程,凡是执行周期越短,执行频度越高的进程,其紧急程度越高prio=k/T(可去k=1)截止期限最早优先算法(EDF)(该方法有缺陷);可达截止期限最早优先算法d=D-(t1+E) 0;最小裕度算法2.7实时进程的可调度性:=P503、嵌入式系统和嵌入式实时操作系统3.1嵌入式系统:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。3.2嵌入式系统的特点:专用性强;实时性好;可裁剪性好;可靠性高;功耗低3.3嵌入式实时操作系统:运行在嵌入式硬件平台上,对整个系统及其部件,装置等资源进行统一协调,指挥和控制的系统软件就叫做嵌入式操作系统。3.4嵌入式实时操作系统特点:微型化;实时性;可裁剪性;高可靠性;易移植性3.5微内核并不是通过减少内核的服务功能模块而变小的,而是把内核中应提供的部分功能模块移动到内核外来实现3.6嵌入式系统的配制方法:在系统进行编译连接时进行配置;在系统运行时进行配置(通过转移语句来实现)4、嵌入式实时操作系统及其任务4.1 与应用程序相关的文件:INCLUDES.H是ucos的主头文件,在每个.c文件都要包含这个文件OS_CFG.H是配置文件,进行选择性编译;与计算机硬件相关的文件:OS_CPU.H是一个与计算机硬件相关的文件OS_CPU_A.ASM集中了所有与处理器相关的汇编代码模块OS_CPU_C.C集中了于处理器相关的C语言代码模块系统内核的各种服务文件4.2实现可裁剪:OS_TASK_CREATE_EXT_EN=1和if OS_TASK_DEL_EN=0则进行编译4.3外部事件的形式:异步事件;周期性事件;异步事件和周期性事件的组合4.4任务控制模块用来保存任务属性;任务堆栈用来保存任务的工作环境;任务程序代码是任务的执行部分4.5任务的状态:睡眠状态(任务在未被配备任务控制块或者被剥夺了任务控制快的状态);就绪状态;运行状态,等待状态,中断服务状态4.6优先级分为64个,可用的优先级OS_LOWEST_PRIO+1,系统中的总任务总数最多不能超过OS_LOWEST_PRIO+1;OS_LOWEST_PRIO是空闲任务;OS_LOWEST_PRIO-1是统计任务4.7任务控制块操作方法:OSInit() , OSTaskCreate() 或者 OSTaskCreateExt() ,OSTaskDel() ,属性:OSTCBCur ,OSTCBTbl ,任务链,空链,任务被删除时是被“吊销”了任务控制块,如果需要,该任务还可以被重新创建。4.8创建堆栈:OSTaskCreate() 注意堆栈的增长方向(OS_STK_GROUTH) 堆栈的初始化:OSTaskStkInit() 空闲任务:OSTaskIdle() ,统计任务:OSTaskStat()4.9临界区:OS_ENTER_CRITICAL() ,OS_EXIT_CRITICAL()5.任务管理:5.1 就绪任务表结构:为1表示对应的任务处于就绪状态,一个分配了任务控制块和任务堆栈的任务要想取得抢占处理器的资格,必须现在就绪任务表中属于自己的位置上登记。5.2 OSRdyGrp , OSRdyTbl组成的二维数组用来表示任务就绪表5.3 优先级最高不超过63,可看成一个6位的二进制,高三位表示OSRdyGrp的具体数据位,低三位用来知名该数组元素的具体位置Eg:prio=29=00011110,低六位011110,可知在OSRdyGrp3的D5位置上,将OSRdyGrp和OSRdyTbl中相对应的位置置“1”5.4任务的创建:OSTaskCreate()或者OSTaskCreateExt(),包括三个步骤:任务堆栈的初始化,任务控制块的初始化,任务的调度。不允许在中断服务程序中创建任务INT8U OSTaskCraeate(Void (* task)(void * pd), /只想任务的指针Void *pdata,/传递给任务的参数OS_STK * ptos,/只想任务堆栈站定的指针INT8U prio /任务的优先级)使用OSTaskCreateExt()创建代码:INT8U OSTaskCreateExt()(Void (*task)(void *pd),/只想任务的指针Void *pdata, /传递给任务的参数OS_STK *ptos, /只想任务堆栈栈顶的指针INT8U prio,/任务的优先级INT16U id,/任务的标示OS_STK *pbos,/任务堆栈占地的指针INT32U stk_size,/任务堆栈的容量Void *pext,/指向附加数据域的指针INT16U opt/用于设定操作系统选项);5.4 在调用启动函数OSStart()之前,必须已经常见了至少一个任务,一般习惯在调用OSStart()之前先创建一个任务,并赋予它最高的优先级,然后在这个起始任务中再创建其他任务过程:void main(void).OSInit();/对UCOSII进行初始化.OSTaskCreate(TaskStart,.);/创建起始任务TaskStartOSStart();/开始多任务调度5.5任务的挂起:用户任务可通过调用系统提供的OSTaskSuspend()来挂起自身或者除空闲任务之外的其他任务,被挂起的任务只能在其他任务中使用OSTaskResume()使其回复就绪状态。挂起自身的参数为OS_PRIO_SELF(图)5.6任务的删除:OSTaskDel()INT8U OSTAskDel(INT8U prio);有其他任务提出删除请求,任务自身进行自我删除通过判断OSTCBDelReq=OS_TASK_DEL_REQ来确定是否进行删除,然后任务自身调用OSTaskDel(OS_PRIO_SELF)来删除自己5.7查询任务信息:INT8U OSTaskQuery(INT8U prio;OS_TCB *pdata /存储信息的结构(须事先进行定义);6. 任务调度6.1调度器OSSched()。OSTCBCur存放着当前运行的任务的任务快指针6.2在中断服务程序中不能进行任务调度,每当进入中断服务程序就要把变量OSIntNesting()加1,而当中断返回前把OSIntNesting减16.3 OSSchedLock()为调度器上锁,OSSchedUnLock() 为调度器解锁6.4调度器的任务切换:1.任务断点的保存。2.任务切换(任务切换的实质是断点数据的切换,断点数据的切换也就是处理器堆栈指针的切换)6.5调度的时机:只有在就绪任务表的内部内容进行变化时才进行调度:1.有新任务被创建,并在就绪任务表中进行创建2.有任务被删除3.又处于等待状态的任务被唤醒4.由于异步事件的发生,在中断服务程序中激活了一个或几个任务5.正在运行的任务需要等待某个事件而进入等待状态6.正在运行的任务调用延时函数而资源进入等待状态7. UCOS-II的初始化和启动7.1OSInit()主要负责建立任务控制块链表,就绪任务表等一些数据结构,并对系统所使用的全局变量进行初始化7.2OSInit()对所有的全局变量和数据结构进行初始化,同时创建空闲任务OSTaskIdle,并赋予最低优先级和永远的就绪态,如果有需要,还要以OS_LOWEST_PRIO-1来创建统计任务7.3在启动OSStart()中首先对OSRunning进行判断,如果为假,则查找最高优先级别的就绪任务运行并在OSStartHighRdy()中把OSRuning置为TRUE8终端与时钟8.1中断服务子程序运行结束前,需要进行一次任务调度,这样系统才会有可能去运行另外一个任务,而不是一定要返回被中断的任务,这个被运行的任务一定是优先级别最高的就绪任务8.2OSIntEnter()用来通知内核:现在已经进入中断服务程序,禁止调度;OSIntExit()用来通知内核:中断服务已经结束,可以进行调度8.3中断级的任务切换:OSIntCtxSw()OSIntCtxSw() OSTCBCur = OSTCBHighRdy; /任务控制块的切换 OSPrioCu = OSPrioHighRdy; SP = OSTCBHighRdy - OSTCBStkPtr; /使SP指向待运行的任务堆栈 RETI;8.4任务的延时:OSTimeDly() 可使用OSTimeDlyResume()取消延时8.5.获取和设置系统时间:OSTimeget() OSTimeSet()9. 任务的同步与通信9.1:信号量、邮箱、消息队列9.2事件的等待任务表OSEventGrp OSEventTbl 等待任务的等待时限记录在等待任务的任务控制块TCB的成员OSTCBDly中。9.3事件控制块ECBTypedef structINT8U OSEventType; /事件的类型INT16U OSEventCnt; /信号量计数器Void *OSEventPtr; /消息或消息队列的指针INT8U OSEventGrp; /等待时间的任务组INT8U OSEventTblOS_EVENT_TBL_SIZE; /任务等代表OS_EVENT;9.4OSEventType表:9.6事件控制块的基本操作:1.时间的控制块的初始化函数:EventWaitListInit(),将在任务调用OSXXXCreate()函数创建事件时被OSXXXCreate()调用2. 使一个任务进入等待状态的函数:OS_EventTaskWait(),将在任务调用OSXXXPend()函数创建事件时被OSXXXPend()调用3. 使一个正在等待任务进入就绪状态的函数:OS_EventTaskRdy(),将在任务调用OSXXXPost()函数创建事件时被OSXXXPost()调用4. 使用一个等待超时的任务进入就绪状态的函数:OS_EventTO(), 5. 将在任务调用OSXXXPend()函数创建事件时被OSXXXPend()调用9.5:信号量及其操作:信号量由信号量计数器和任务等代表两部分组成,OSEventCnt作为计数器,OSEventTbl数组来充当等待任务表,信号量不使用OSEventPtr9.6:信号量的操作:1.OSSemCreate()OS_EVENT *OSSemCreate(INT16U cnt /信号量计数器初值);2. 请求信号量:OSSEMPend() 或者 OSSemAccept()Void OSSemPend( OS_EVENT *pevent, /信号量的指针INT16U timeout , /等待的时限,为0表示任务的等待时间为无限长INT8U *err); /错误信息3. 发送信号量:OSSemPost()INT8U OSSemPost(OS_EVENT * pevent /信号量的指针);4. 查询信号量的状态:OSSemQuery()5. INT8U OSSemQuery(OS_EVENT * pevent, /信号量指针OS_SEM_DATA *pdata /存储信号量状态的结构);OS_SEM_DATA结构:Typedef structPINT16U OSCnt;INT8U OSEventTblOS_EVENT_TBL_SIZE;INT8U OSEventGrp;OS_SEM_DATA9.7解决优先级反转的问题: 使获得信号量任务的优先级别在使用共享资源期间暂时提升到所有任务最高优先级的高一个级别上,以使该任务不被其他任务打断,从而尽快的使用完共享资源并释放信号量,然后在释放了信号量之后,再回复该任务原来的优先级别9.8对于互斥信号量,OSEventCnt被分成了低8位和高8位,低8位存放信号值(OXFF为有效),高8位用来存放为了避免出现优先级反转而要提升的优先级prio。9.9互斥信号量创建:OSMutexCreate()OS_EVENT * OSMutexCreate (INT8U prio, /优先级别INT8U * err /错误信息);请求互斥型信号量: OSMutexPend() 或者 OSMutexAccept()Void OSMutexPend( OS_EVENT *pevent, /互斥型信号量指针INT16U timeout , /等待时限INT8U *err /错误信息);发送互斥性信号量 OSMutexPost()INT8U OSMutexPost(OS_EVENT * pevent / 互斥性信号量指针)获取互斥性信号量的当前状态 OSMutexQuery()INT8U OSMutexQuery(OS_EVENT * pevent, /互斥性信号量指针OS_MUTEX_DATA *pdata /存放互斥性信号量状态的结构);删除互斥性信号量 OSMUtexDel()OS_EVET * OSMutexDel(OS_EVENT * pevent, /互斥性信号量指针INT8U opt, /删除方式的选项INT8U * err /错误信息);9.10消息邮箱及其操作创建消息邮箱 OSMboxCreate()OS_EVENT * OSMboxCreate(Void *msg /消息指针);像消息邮箱发送信息 OSMboxPost()INT8U OSMboxPost(OS_EVENT *pevent, /消息邮箱指针Void *msg /消息指针);OSMboxPostOpt()可以采用广播的方式向等待任务表中的所有任务发送信息INT8U OSMboxPostOpt(OS_EVENT *pevent, /消息邮箱指针Void *msg /消息指针INT8U opt /广播选项 OS_POST_OPT_BROADCAST , OS_POST_OPT_NONE);请求消息邮箱:OSMboxPend() 或 OSMboxAccempt()Void * OSMboxPend(OS_EVENT *pevent, /请求消息邮箱指针INT16U timeout, /等待时限INT8U * err /错误信息)查询邮箱状态 OSMboxQuery()INT8U OSMboxQuery(OS_EVENT *pevent, /消息邮箱指针OS_MBOX_DATA *pdata /存放邮箱信息的结构);删除邮箱: OSMboxDel()OS_EVENT *OSMboxDel(OS_EVENT *pevent, /请求消息邮箱指针INT8U opt, /删除选项INT8U * err /错误信息)9.11消息队列消息队列有三部分组成:事件控制块,消息队列,消息。OSEventPtr指向队列控制块队列控制块:Typedef struct os_qStruct os_q *OSQPtr;Void *OSQStart;Void * OSQEnd;Void * OSQIn;Void* OSQOut;INT16U OSQSize;INT16U OSQEntries;OS_Q;创建消息队列:OSQCreate()OS_EVENT OSQCreate(Void * start, /指针数组的地址INT16U size /数组长度);请求消息队列:OSQPend() 或者 OSQAccept()Void * OSQPend(OS_EVENT *pevent, /所请求的消息队列的指针INT16U timeout, /等待的时限INT8U *err /错误信息);向息队列发送信息 OSQPost()先进先出的方式 或 OSQPostFront()后进先出的方式INT8U OSQPost(OS_EVENT *pevent, /消息队列的指针Void *msg /消息指针);可以通过OSQPostOpt()实现广播清空消息队列:OSQFlush()删除消息队列:OSQDel()查询消息队列:OSQQuery()INT8U OSQQuery(OS_EVENT *pevent, /消息队列指针OS_Q_DATA *pdata /存放状态信息的结构);Typrdef structVoid *OSMsg;INT16U OSNMsgs;INT16U OSQSize;INT8U OSEventTblOS_EVENT_TBL_SIZE;INT8U OSEventGrp;OS_Q_DATA;10. 信号量集:信号量集由两部分组成:标志组OS_FLAG_GRP,其中存放了信号量

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论