μC/OS-II练习题

1.在μC/OS-II中,已创建任务的任务控制块(  A   )

A. 通过两个指针链接成一个双向链表     B.放在一个顺序表中

C. 相互孤立                           D.通过一个指针链接成单链表

 

2.在下列哪一种情况下,一定会产生系统死锁?(B)

A.任务释放资源               B.多个任务竞争,出现了循环等待资源

C. 一个任务进入死循环        D.多个任务竞争共享型设备

 

3. 在单处理器的多任务系统中,任务什么时候占用处理器和能占用多长时间,取决于( C )

A.任务相应的程序段的长度                   B.任务总共需要运行时间多少

C.任务自身状态、优先级和任务调度策略       D.任务完成什么功能

 

4.如果任务TaskA对信号量Sem调用OSSemPost()系统服务函数,则信号量Sem的计数值应(D)。

A.加1       B.减1       C. 不变       D.视是否有其他任务等待该信号量而定

 

5.当信号量代表对某个共享资源的使用权时,则创建该信号量时的信号量计数值初始值应设置为(   B  )

A.0       B.1           C. 2       D.可取任意值

 

二、填空题(每空2分,共10分)

1、在μC/OS-II中,恢复一个被挂起任务函数的函数原型是OSTaskResume()

2、如果一个信号量的事件控制块指针为pevent,则判断是否有任务在等待该信号量的条件是________________________________。

3、在μC/OS-II中,已创建任务的任务控制块指针记录在数组OSTCBPrioTbl[]中,判断优先级为prio的任务是否存在的条件是如果第n个元素是一个空指针,说明优先级n的任务还没有创建,否则已经存在优先级为n的任务,而且该位置保存了该任务的任务控制块指针。

4、μC/OS-II提供的两个系统任务是__空闲任务和统计任务_

5、当需要实现多个任务同步一个任务时,一般采用信号量集事件标志组

三、判断题(每小题2分,共20分)

1、任务控制块(TCB)是专为任务设置的私有数据结构,每个任务仅有一个TCB。

2、在采用消息邮箱进行数据通信时,消息邮箱中存放的是消息指针。

3、通过信号量实现任务之间行为同步时,优先级低的任务一般发送信号,优先级高的任务一般接受信号。

4、通过消息邮箱进行任务之间数据通信时,为了防止消息丢失,一般发送消息任务的执行频率较快,接受消息任务的执行频率较慢。

5、可以在一个中断服务程序ISR中调用发送信号量函数OSSemPost()。

6、可以在任务调度器加锁情况下调用发送消息函数OSMboxPost()。

7、任务删除就是将任务置为休眠状态,并将其占用的任务控制块归还到空任务控制块链表中。

8、中断服务程序执行完成后不一定返回到被中断的任务。

9、μC/OS-II采用完全不同的数据结构来描述信号量、互斥型信号量、消息邮箱等事件。

10、在基于μC/OS-II的应用程序中,任务的优先级是唯一的,而且是不可以改变的。

 

四、简答题(共5题,每小题6分,共30分)

1、任务的存储结构主要由哪三部分组成?画出任务存储结构示意图。

答:任务程序代码,任务堆栈,任务控制块。

2、什么是任务切换?任务切换时主要完成哪些工作?

中止正在运行的任务,转而去运行另外的一个任务的工作。

1. 把被中止任务的断点指针保存到任务堆栈中;

2. 把CPU通用寄存器的内容保存到任务堆栈中;

3. 把被中止任务的任务堆栈指针保存到该任务的任务控制块的OSTCBStkPtr中;

4. 获得待运行任务的任务控制块;

5. 使CPU通过任务控制块获得待运行任务的任务堆栈指针;

6. 把待运行任务堆栈中通用寄存器的内容恢复到CPU的通用寄存器中;

7. 使CPU获得待运行任务的断点指针(该指针是待运行任务在上一次被调度器中止运行时保留在任务堆栈中的)。

3、请说明占先式内核(可剥夺型内核)和非占先式内核(不可剥夺型内核)之间的区别?

4、请分析优先级反转产生的原因,并说明μC/OS-II解决优先级反转的方法。

1)在可剥夺型内核中任务以独占方式使用共享资源时会出现低优先级任务先于高优先级任务而被运行的现象这种现象叫做任务优先级反转。

2)使获得信号量任务的优先级在使用共享资源期间暂时提升它的优先级以使该任务不被其他的任务所打断从而能尽快使用完共享资源并释放资源使用权信号量然后在释放了资源使用权信号量之后再恢复该任务原来的优先级别。

5、写出将一个优先级别为prio的任务脱离就绪状态的示意性代码。假设已定义如下查找表OSMapTbl[]。

OSRedTbl[prio>>3] &=OSMapTbl[prio&0x07]=0;

OSRedGrp &= OSMapTbl[prio>>3]=0;

6、说明消息队列需要用到的数据结构,并通过示意图说明它们之间的关系。

你可能感兴趣的:(μC/OS-II练习题)