嵌入式实时操作系统复习_第1页
嵌入式实时操作系统复习_第2页
嵌入式实时操作系统复习_第3页
嵌入式实时操作系统复习_第4页
嵌入式实时操作系统复习_第5页
全文预览已结束

下载本文档

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

文档简介

1、a.计算机操作系统的作用和功能是什么?计算机操作系统为应用程序提供了一个界面友好,性能稳定、安全,效率高,操作方便的虚拟计算机。它的主要功能有:1、处理器的管理2、存储的管理3、设备的管理4、文件的管理5、网络和通信管理6、提供用户接口b什么是实时操作系统?它应满足那三个条件?试列举几个日常生活中的实时操作系统。(至少两个)操作系统能使计算机系统及时响应外部事件的请求,并能及时控制所有实时设备与实时任务协调运行,且能在一个规定的时间内完成对事件的处理,那么这种操作系统就称之为实时操作系统。实时操作系统满足的三个条件:1、实时操作系统必须是多任务系统2、任务的切换时间应与系统中的任务数无关3、中

2、断延迟时间可预知并尽可能段常见的几种实时操作系统有:Windows CE 、VxWorks、 CLinux、 C/OS等3.1 从任务的存储结构上看,C/OS-II的任务由那几部分组成,各组成部分的作用是什么?从任务的存储结构上看, C/OS-II的任务由任务程序代码、任务堆栈和任务控制块组成。其中,任务控制块关联了任务代码的程序控制块,它记录了任务的各种属性;任务堆栈则用来保存任务的工作环境;任务程序代码就是任务的执行部分。3.2 C/OS-II操作系统最多含有多少个任务?它包含那两种任务? C/OS-II操作系统的系统任务有那两种,它们的作用是什么?C/OS-II操作系统最多含有64个任务

3、,它包含用户任务和系统任务,它有两个系统任务,空闲任务和统计任务;空闲任务几乎不做任何工作,它只是对系统变量空闲任务运行次数计数器OSdleCtr进行加1操作,设置该任务的目的在于:系统在某个时间内无用户任务执行时,运行空闲任务,使CPU在没有用户任务执行时有事可做;统计任务每秒计算一次CPU在单位时间内被使用的时间,并把计算结果以百分比的形式存放在变量OSCPUsage中,以便其他应用程序来了解CPU的利用率。3.3 C/OS-II操作系统中任务有哪5种状态?并画出任务状态及其转换关系图(不必标出它们的转换条件)。C/OS-II操作系统中任务状态有:睡眠状态、等待状态、就绪状态、运行状态、中

4、断服务状态。关系图见P173.4 C/OS-II优先级别最多有多少级?在实际应用中用户可以通过配置那个系统参数来设置最低优先级?此时空闲任务和统计任务的优先级分别为多少?C/OS-II优先级别最多有64级,可以通过配置OS_LOWEST_PRIO来设置最低优先级,此时空闲任务和统计任务的优先级分别为OS_LOWEST_PRIO-1和OS_LOWEST_PRIO-23.5 若应用程序中任务的优先级别为18个,则表示最低优先级别的常数OS_LOWEST_PRIO值应该是多少?如果应用程序中使用了空闲任务和统计任务,那么他们的优先级别分别为多少?应用程序最多可以安排多少个任务?最低优先级别的常数OS

5、_LOWEST_PRIO值应该是17,空闲任务和统计任务的优先级别分别为17和16,应用程序最多可以安排16个任务3.6 任务堆栈是任务的重要组成部分, C/OS-II中支持哪两种堆栈方向?可以通过那个参数选择堆栈的方向?C/OS-II中支持向下和向上两种堆栈方向,可以通过参数OS_STK_GROWTH选择堆栈的方向3.7 使用任务创建函数创建一个任务MyTask,定义一个OS_STK堆栈数组MyTaskStk 为该任务的堆栈空间(OS_STK为16位无符号整型),任务堆栈长度为256字节,任务参数pdata的实参为空,任务堆栈方向为向下,优先级别为36,试写出OSTaskCreate()的调

6、用代码。#define MyTaskStkN 128OS_STK MyTaskStkMyTaskStkN OSTaskCreate(MyTask,(void*)0,& MyTaskStkMyTaskStkN -1 36)3.8 什么是任务控制块? C/OS-II使用哪两条链表对任务控制块进行管理?初始化任务控制块函数OSTCBInit()的主要操作是什么?用来记录任务的堆栈指针、任务的当前状态、任务的优先级别等一些与任务管理有关的属性的表叫做任务控制块。 C/OS-II使用空任务控制块链表和任务控制块链表对任务控制块进行管理。初始化任务控制块函数OSTCBInit()的主要操作是:1、为被创建

7、的任务从空任务控制块链表获取一个任务控制块2、用任务的属性对任务控制块各成员进行赋值3、把这个任务控制块链入到任务控制块链表3.9 请分别说明数组OS_TCB *OSTCBPrioTbl、指针OS_TCB * OSTCBCur的作用。C/OS-II定义了一个OS_TCB *OSTCBPrioTbl,该数组以任务的优先级别为顺序在各个元素里存放了指向各个任务控制块的指针,这样在访问一个任务控制块时,就不需要遍历整个任务控制块链表了。指针OS_TCB * OSTCBCur指向的是当前正在运行的任务的任务控制块。3.10 C/OS-II使用OSRdyTbl和OSRdyGrp来管理任务就绪表,已知某一

8、个就绪任务的优先级别为prio=26,试判断应该在OSRdyTbl和OSRdyGrp的哪一位置1。试写出把优先级别为prio的任务置为就绪态的代码。26的二进制形式为,其低6位为,可知应该在OSRdyTbl3的D2位上置1,同时把OSRdyGrp的D3位置1。将优先级别为prio的任务置为就绪态的代码如下: OSRdyGrp | = OSMapTblprio3; OSRdyTblprio3 | = OSMapTblprio&0x07;3.11 C/OS-II中调度器的主要工作有哪两项?有哪两种调度器?这两种调度器是通过调用哪两种系统函数实现任务调度的?C/OS-II中调度器的主要工作有:1、在

9、任务就绪表中查找具有最高优先级别的就绪任务2、实现任务切换两种调度器为:任务级的调度器和中断级的调度器;任务级的调度器调用函数OSSched()来实现,而中断级的调度器调用函数OSIntExt()来实现。3.12 在C/OS-II中,可通过调用哪两个函数来创建任务?函数OSTaskSuspend()和函数OSTaskResume()的作用是什么?函数OSTaskDel()的主要操作什么?可通过调用函数OSTaskCreate()和OSTaskCreateExt()来创建任务;函数OSTaskSuspend()可用来挂起自身或者除空闲任务之外的其他任务,函数OSTaskResume()用来恢复被

10、挂起任务的就绪态;函数OSTaskDel()的主要操作是:把被删除任务的任务控制块从任务控制块链表中删除,并归还给空任务控制块链表,然后再任务就绪表中把该任务的就绪状态位置0。4.1 什么叫做中断?简述C/OS-II系统响应中断的过程?任务在运行过程中,应内部或外部异步事件的请求中止当前任务,而去处理异步事件所要求的过程叫做中断。C/OS-II系统响应中断的过程:系统接收到中断请求后,如果此时CPU处于中断允许状态,系统就会中止正在运行的任务,而按照中断向量的指向转而去运行中断服务子程序;中断服务子程序运行结束后,系统将会根据情况返回到被中止的任务继续运行,或者转向运行另一个具有更高优先级别的

11、就绪任务4.2 在编写C/OS-II的中断服务子程序时,要用到两个重要的函数OSIntEnter()和OSIntExit(),它们的作用是什么?函数OSIntEnter()是在进入中断服务子程序时调用的,它用来记录中断嵌套的层数,它的操作就是简单对全局变量中断嵌套层数计数器OSIntNesting加1; 函数OSIntExit()是在退出中断服务子程序时调用的,它在中断嵌套层数计数器为0、调度器未被锁定且从任务就绪表中查找到的最高级就绪任务又不是被中断的任务的条件下将要进行任务切换,否则就返回到被中断的任务。4.3 什么叫做时钟节拍? C/OS-II在每次响应定时中断时调用时钟节拍服务函数OS

12、TimeTick(), OSTimeTick() 所做的工作有哪些?最小时钟单位就是两次中断之间相间隔的时间,这个最小时钟单位叫做时钟节拍。 OSTimeTick() 所做的工作有:1、给系统时间计数器OSTime加12、遍历任务控制块链表中的所有任务控制块,把各个任务控制块中用来存放任务延时时限变量OSTCBDly减1,并使该项为0,同时又不使被挂起的任务进入就绪态。4.4 在编写C/OS-II的中断服务子程序时,要用到两个重要的函数OSIntEnter()和OSIntExit(),它们的作用是什么?函数OSIntEnter()是在进入中断服务子程序时调用的,它用来记录中断嵌套的层数,它的操

13、作就是简单对全局变量中断嵌套层数计数器OSIntNesting加1; 函数OSIntExit()是在退出中断服务子程序时调用的,它在中断嵌套层数计数器为0、调度器未被锁定且从任务就绪表中查找到的最高级就绪任务又不是被中断的任务的条件下将要进行任务切换,否则就返回到被中断的任务。5.1 信号量由哪两部分组成?简述信号量的工作过程?信号量由信号量计数器和等待任务列表组成。每当有任务申请信号量时,如果信号量计数器OSEventCnt的值大于0,则把OSEventCnt的值减1并使任务继续运行;如果OSEventCnt值为0,则会将任务列入等待任务表OSEventTbl,而使任务处于等待状态。如果有正

14、在使用信号量的任务释放了该信号量,则会在任务等待表中找出优先级别最高的等待任务,并在使它就绪后调用调度器引发一次调度。如果任务等待表中已经没有等待任务,则信号量计数器就只简单的加1。5.2 什么是任务优先级反转现象?互斥信号量是如何防止优先级反转现象出现的?在可剥夺性内核中,当任务以独占方式使用共享资源时,会出现低优先级任务先于高优先级任务而被运行的现象,称之为任务优先级反转现象。互斥信号量解决优先级反转的方法是:使获得信号量任务的优先级别在使用共享资源期间暂时提升到所有任务最高优先级别的高一个级别上,以使该任务不被其他任务所打断,从而能尽快地使用完共享资源并释放信号量,然后在释放信号量之后,

15、再恢复该任务原来的优先级别。5.3 什么叫消息邮箱?能否使用全局变量来实现任务间的通信?如果可以它有什么缺点?.在多任务操作系统中,常常需要在任务与任务之间传递一个数据,为此可以在内存中创建一个存储空间作为该数据的缓冲区,如果把这个缓冲区叫做消息缓冲区,那么在任务间传递数据的最简单的方法就是传递消息缓冲区的指针,因此,用来传递消息缓冲区指针的数据结构就叫做消息邮箱。可以使用全局变量来实现任务间的通信,但不支持行为同步控制。5.4 消息队列由哪四部分组成?有哪两种方式向消息指针数组中插入消息?创建消息对列函数OSQCreate()的主要工作是什么?消息队列由事件控制块(ECB)、队列控制块(OS

16、_Q)、消息指针数组和消息组成。向消息指针数组中插入消息方式有:先进先出的FIFO方式和后进先出的LIFO方式。创建消息对列函数OSQCreate()的主要工作是:首先从空闲队列控制块链表摘取一个控制块并按参数赋值,然后把消息队列初始化为空,即不包含任何消息。6.1 C/OS-II把信号量集的功能分成哪两部分?在每个部分的作用是什么? C/OS-II把信号量集的功能分成标志组和等待任务链表。标志组存放了信号量集的所有信号;等待任务链表中的每一个节点对应着一个OS_FLAG_NODE结构,它实质上就是等待任务控制块,等待任务控制块对标志组中的输入信号进行过滤并实施逻辑运算,其结果即是等待任务所请求的信号量值。6.2 简述向信号量集发送信号函数OSFlagPost()函数的工作过程。函数首先判断等待任务链表是否为空,若等待任务链表为空,则获取当前事件标志组的事件标志状态;若非空,函数将遍历所有的OS_FLAG_NODE,检查新设定的事件标志是否满足某个任务所期待的运行条件,遍历完之后,若有任务满足条件,则执行一次调度,并将该任务的OS_FLAG_NODE从等待任务链表中删除。7.1 C/OS-II是如何管理内存的?如何在内存中定义一个内存分区?试定义一个有30个内存块,每个内存块长度为20的内存分区,二维数组MemBuf( INT16U类型)。C/OS-II对内存进行两

温馨提示

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

最新文档

评论

0/150

提交评论