UCOS 学习笔记之重要概念问答

说明

这是任哲版本书的部分答案,我看了之后收获颇丰,分享给需要的人

第一章

1.什么是操作系统?它应具备什么功能?
操作系统是控制其他程序运行,管理系统资源并为用户提供操作界面的系统软件的集合。
功能:
1.计算机硬件的封装和扩充;
2.计算机资源的管理,包括处理器管理、存储器存储空间管理、外部输入输出(I/O)设备管理、文件管理、网络和通信管理、提供用户接口。
2.简述嵌入式操作系统与普通操作系统的区别。
嵌入到对象体系中,为实现对象体系智能化控制的计算机系统,简称嵌入式系统。嵌入式系统应具有的特点是:高可靠性;在恶劣的环境或突然断电的情况下,系统仍然能够正常工作;许多嵌入式应用要求实时性,这就要求嵌入式操作系统具有实时处理能力;嵌入式系统和具体应用有机地结合在一起,它的升级换代也是具体产品同步进行;嵌入式系统中的软件代码要求高质量、高可靠性,一般都固化在只读存储器中或闪存中,也就是说软件要求固态化存储,而不是存储在磁盘等载体中。 
3.什么是实时系统?对实时系统有什么要求?
如果一个系统能及时响应外部事件的请求,并能在规定的时间内完成对事件的处理,这种系统称为实时系统。
对实时系统的两个基本要求:
1.实时系统的计算必须产生正确的结果,称为逻辑或功能正确。
2.实时系统的计算必须在预定的时间内完成,称为时间正确。
4.什么是可剥夺内核?
当一个进程正在被处理器所运行时,其他就绪进程可以按照事先规定的规定的规则,强行剥夺正在运行进程的处理器使用权,而使自己获得处理器使用权并得以运行。
5.计算:RM等三种算法;实时进程的可调度性。
一个事件发生周期为T=200ms,一般需要运行50ms才完毕。试按RM算法确定该进程的优先级别prio。
答:如果取k=1,根据T=200ms=0.2S,则

这里写图片描述
结果:prio=5。
假如有三个同时发生的周期型进程:进程1,进程2,进程3,周期分别为P1=70ms,P2=80ms,P3=30ms,它们完成任务的时间分别为:C1=20ms,C2=15ms,C3=10ms。试判断该进程是否为可调度的。
答:
这里写图片描述
不满足公式
这里写图片描述

要求,所以三个进程是不可调度的。

满足公式

(截止期优先算法或最小裕度算法)
要求,所以三个进程是可调度的。

第二章

1.一个应用程序为什么一定要使用空闲任务?
在多任务系统运行时,系统经常会在某个时间内无用户任务运行而处于空闲状态,为了使CPU在此时有事可作,uC/OS—II提供了空闲任务OSTaskIdle。空闲任务是不能被软件删除的。
2.统计任务是必须使用的吗?简述它的功能。
每秒计算一次CPU在单位时间内被使用的时间,并把计算结果以百分比的形式存放在变量OSCPUsage中,以便应用程序通过访问它来了解CPU的利用率。用户应用程序可根据实际需要来选择是否使用统计任务。
3.什么是任务的优先权?UC/OS-II是用什么来描述任务的优先权的。
uC/OS-II是按可剥夺型内核来设计的,为此,每一个任务都必须具有唯一的优先级别,用来表示该任务在抢夺处理器时所具有的优先权力,共有64个优先级别,用数字“0”-“63”表示,数字“0”所表示的优先级最高,通常将空闲任务和统计任务设为最低优先级别。
对于任务数较少的应用,为节省内存,可通过OS_CFG.H中的OS_LOWEST_PRIO赋值来确定系统的最大(<=64)用户数。
4.在uC/OS-II中任务有哪5种状态?分别简述5个状态的特征。
睡眠状态:任务只是以代码的形式驻留在内存,还没有交给操作系统管理。
就绪状态:任务配备了任务控制块且在任务就绪表中登记,具备了任务运行的充分条件。
运行状态:处于就绪状态的任务获得了CPU的使用权,任何时候只有一个任务处于运行。
等待状态:正在运行的任务,把CPU的使用权让给其他任务。
中断服务状态:正在运行的任务一旦响应中断申请,就会中止运行而去执行中断服务程序。
5.任务控制块记录了任务的那些信息?
*OSTCBStkPtr        指向任务堆栈栈顶的指针;
*OSTCBExtPtr        指向任务控制快扩展的指针;
*OSTCBStkBottom 指向任务堆栈栈底的指针;
OSTCBStkSize        任务堆栈的长度;
OSTCBOpt        创建任务时的选择项;
OSTCBId         任务 ID;
*OSTCBNext      指向后一个任务控制快的指针;
*OSTCBPrev      指向后一个任务控制快的指针;
*OSTCBEventPtr  指向事件控制快的指针;
*OSTCBMsg       传递给任务消息的指针;
OSTCBDelReq     请求删除任务时用到的标志;
OSTCBStat       任务的当前状态标志;
OSTCBDly        任务等待的时限(节拍数);
OSTCBPrio       任务的优先级别(0 == highest, 63 == lowest);
OSTCBX          用于快速访问就绪表的数据;
OSTCBY          用于快速访问就绪表的数据;
OSTCBBitX       用于快速访问就绪表的数据;
OSTCBBitY       用于快速访问就绪表的数据;
6.什么是空任务控制块链表?什么是任务控制块链表?
空任务块链表,其中所有任务控制块还没有分配给任务。空任务块链表是在应用程序调用函数OSInit()对UC/OS-II系统初始化时建立的。链表的元素一共有OS_MAX_TASKS+OS_N_SYS_TASKS个元素。
任务控制块链表,其中所有任务块已经分配给任务。任务控制块链表在应用程序调用函数OSTaskCreate()创建任务时建立的。
7.数组OSTCBTbl[]有什么用途?
    专门用来以任务的优先级别为顺序在各个数组元素里存放指向各个任务控制块的指针,这样系统在访问一个任务的任务控制块时,就不必遍历任务控制块链表,从而加快对任务控制块的访问速度。
8.正在运行任务的任务控制块指针存放在哪个指针变量中?
OSTCBCur。
9.变量OSRdyGrp有什么用?
uC/OS-II定义了一个类型为INT8U的变量OSRdyGrp,使该变量的每一位都对应OSRdyTbl[ ]的一个任务组.如果某任务组中有任务就绪,则在变量OSRdyGrp里把该任务组所对应的位置为1,否则置为0 ,从而快速对任务就绪表OSRdyTbl[ ]查找。
10.计算:由任务就绪表OSRdyGrp和OSRdyTbl[]的内容通过查找OSUnMapTal[]表和公式
y = OSUnMapTal[OSRdyGrp]; 
x = OSUnMapTal[OSRdyTbl[y]];
prio = (y<<3) + x;
找出具有最高优先级别的就绪任务。
设OSRdyGrp的值为01101000B,即0x68,则查表y=OSUnMapTal[0x68]=3,它相应于OSRdyGrp第3位bit3,另设OSRdyTbl[3]=11100100B,即0xE4,则查表x=OSUnMapTal[0xE4]=2
最后:
Prio=(y<<3)+x=(3<<3)+2=26
即:
00000011<<3=00011000
00011000+0000010=00011010B=26

第三章

1.简述UC/OS-II的中断响应过程。
中断响应过程:系统接收到中断请求后,如果这是CPU处于中断允许状态,系统会中止正在运行的当前任务,而按照中断向量的指向转而去运行中断服务子程序;当中断服务子程序的运行结束后,系统会根据情况返回到被中止的任务,或转向更高优先级的任务。
2.全局变量OSIntNesting的作用是什么?
    全局变量OSIntNesting记录中断嵌套的层数。
3.什么叫作操作系统的时钟?
任何操作系统都要提供一个周期性的信号源,以供系统处理诸如延时,超时等与时间有关的事件,这个周期性的信号源叫做时钟。
4.在UC/OS-II中,时钟节拍服务做了什么工作?
uC/OS-II需要提供周期性信号源,用于实现时间时间延时和确认超市。节拍率应为10-100次/秒,或者说10-100Hz。时钟节拍率越高,系统的额外符合就越重。
5.说明延时函数OSTimeDly()与OSTimeDlyHMSM()的区别。
所有用户任务必须在任务中合适的位置调用函数OSTimeDly(),或通过调用函数OSTimeDlyHMSM()调用OSTimeDly()。OSTimeDly()的参数ticks为以时钟节拍数为单位的延时时间的,而OSTimeDlyHMSM()的参数分别是时,分,秒。

第四章

1.使用信号量可在应用程序中完成哪些工作?
1.创建信号量;
2.请求信号量;
3.发送(释放)信号量;
4.删除信号量;
5.查询信号量的状态。
2.什么叫优先级反转?这种现象什么情况下发生?有什么危害?
在可剥夺型内核中,当任务以独占方式使用共享资源时,会出现低优先级任务先于高优先级任务而被运行的情况,优为先级反转。
产生优先级反转现象的原因:这是因为一个低优先级任务在获得信号量使用共享资源期间,被高优先级任务所打断而不能释放信号量,从而使正在等待该信号量的高优先级任务因得不到信号量而被迫处于等待状态。在等待期间,就让占据该信号量的低优先级任务先运行。
后果:如果这种情况发生较多,则会极大地恶化优先级任务地运行环境。
3.互斥型信号量是如何防止优先级反转的?
任务可以用互斥型信号量实现对共享资源的独占式处理,为了降解优先级反转,内核可以将低优先级提升到高于那个高优先级的任务,直到低优先级的任务用完占用的共享资源。
4.能否使用全局变量来实现任务间的通信?它有什么缺点?
全局变量只能传递信息,但不能同步任务。因此只能用于两种情况:
1.不需要行为同步,想用时就用这个全局变量。
2.同步要求不实时, 可以让另一个任务定期去查询该全局变量是否被“生产”。

第五章

1.uC/OS-II为什么要定义信号量集?
在实际运用中,任务常常需要与多个事件同步,即要根据多个信号量组合作用得结果来决定任务得运行方式。信号量集(事件标志组) 就是实现这种功能的数据结构。
2.信号量集所管理的是什么信号?
信号量集所管理的信号量都是二值信号。它实质上是一种可以对多个输入的逻辑信号进行基本逻辑运算(“与”运算(AND),“或”运算(OR))的组合逻辑。
3.使用信号量集可以在程序中完成哪些工作?
1.创建信号量集;
2.请求信号量集;
3.向信号量集发信号;
4.查询信号量集的状态;
5.删除信号量集。

第六章

1.什么叫内存分区?什么叫内存块?内存分区与内存块之间有什么关系?
uC/OS-II能够解决内存碎片问题及执行时间固定,对内存进行两级管理。将大片连续内存分成若干个分区,每个分区又分成若干大小相等的内存块来进行管理。操作系统以分区为单位管理动态内存,任务以内存块为单位来获得与释放动态内存。内存分区及内存块的使用情况由内存控制块来记录,内存控制块是由uC/OS-II为每个内存分区定义的一个数据结构,系统用它来记录和跟踪每一个内存分区的状态。
2.在同一个内存分区中内存块是按什么方式组织起来的?
同一分区中内存块的字节数必须相等。每个分区与该分区内存块的数据类型必须相同。应用程序用数组定义内存分区与内存块。INT16U IntMemBuf[I][J]分区内有I个存储块,每个存储块长度为J。
3.什么叫内存控制块?它记录了一些什么信息?
内存控制块是由uC/OS-II为每个内存分区定义的一个数据结构,系统用它来记录和跟踪每一个内存分区的状态。
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值