实时与嵌入式操作系统

《实时与嵌入式操作系统》复习提纲

期末考试

时间:2016-06-2208:30-10:30

地点:3A212教室

考试形式为开卷,允许查阅教材,参考书,作业及实验讲义.

算法描述使用以C为基础的伪语言,可用自然语言附加说明.编程序要求用C语言.

答题直接写在试卷上.

一、"操作系统概念"部分:

此部分内容是操作系统的基本原理.

参考书:《操作系统概念》(Silberschatz等着)

复习范围:

四个主题的相关概念--进程管理与处理机调度,内存管理,文件系统,I/O管理

理解掌握算法或机制--包括进程调度算法,进程同步问题的算法,虚存管理中地址转换过程,页面置换算法,银行家算法(安全性算法),磁盘调度算法

应用及编程--以教材中的算法和典型问题为基础,解决类似的问题或综合问题.Linux系统下编程:要求掌握在实验中用到的相关系统调用,库函数.

1os概述

分时与实时操作系统:分时系统:把CPU的时间分成很短的时间片

4文件管理(重点难点:目录与文件系统的实现方法)

文件的逻辑结构(文件组织):从用户观点出发所观察到的文件组织形式,是用户可以直接处理的数据及其结构,它独立于文件的物理特性.文件的逻辑结构类型:1有结构文件:由一个以上的记录构成的文件.2无结构文件(流式文件):由字符流构成的文件.

文件的物理结构(文件的存储结构):是文件在外存上的存储组织形式,不仅与存储介质的存储性能有关,还与采用的外存分配方式有关.根据用户和系统的管理上的需要,可以由以下几种方式组织这些记录:顺序文件,索引文件,索引顺序文件.

目录管理的要求:实现"按名存取",提高对目录的检索速度,文件共享,允许文件重名.

文件控制块(FCB):能对一个文件进行正确的存取,必须为文件设置用于描述和控制文件的数据结构.通常含有三类信息:基本信息类,存取控制信息和使用信息.

索引结点(i-node)的引入:让目录瘦身,提高查询速度.i-node结构.

空闲表法:属于连续分配方式,与内存的动态分配方式雷同,为每个文件分配一块连续的存储空间,即系统也为外存上的所有空闲区建立一张空闲表,每个空闲区对应一个空闲表项,包括表项序号,该空闲区的第一张空闲表,该区的空闲盘快数等信息.空闲链表法,位示图法.

5设备管理

I/O设备类型,按信息交换单位分为:块设备和字符设备,块设备:用于存储信息,属于结构设备,典型的块设备是磁盘,基本特征是传输速率较高,每秒为几兆位,另一特征是可寻址,即随意地读/写任一块.字符设备:用于数据的输入和输出,属于无结构类型,如交互式终端,打印机等.基本特征是传输速率较低,通常是几个字节至几千字节.且是不可寻址,即输入输出不能指定数据的输入源地址和输出的目标地址,此外字符设备在输入输出时,常采用中断驱动方式.

按设备的共享属性分:独占设备,共享设备,虚拟设备.独占设备:是指再一段时间内只允许一个用户(进程)访问的设备,即临界资源.独占设备的分配可能引起死锁,如打印机.共享设备:是指在一段时间内允许多个进程同时访问的设备.共享设备必须是可寻址和科随机访问的设备,如磁盘.虚拟设备:通过虚拟技术将一占设备变换为若干台逻辑设备,供若干个用户(进程)同时使用.

I/O系统的层次:用户层软件,设备独立性软件,设备驱动程序和中断处理程序.

当一个进程请求I/O操作时,该进程将被挂起,直到I/O设备完成I/O操作后,设备控制器便向CPU发送中断请求,CPU响应后便转向中断处理程序,中断程序执行响应处理,处理完后解除相应进程的阻塞状态.

设备独立性:应用程序独立于集体使用的物理设备.

逻辑设备表(LUT)的设置问题:第一种方式是在整个系统中只置一张LUT.第二种是为每个用户设置一张LUT.设备分配需要的四张表:设备控制表(DCT),控制器控制表,通道控制表,系统设备表.

SPOOLing技术:将一台物理I/O设备虚拟为多台逻辑I/O设备,同样允许多个用户共享一台物理I/O设备.SPOOLing(假脱机操作):在联机情况下,操作与CPU对数据的处理同时进行的操作.

磁盘调度:先来先服务(FCDS),最短寻道时间优先(SSTF),循环扫描算法(CSCAN).

二、嵌入式实时操作系统μC/OS—Ⅱ

内容以系统源码为基础,理解嵌入式实时操作系统μC/OS—Ⅱ的实现及其简单应用.

参考书:《嵌入式实时操作系统μC/OS—Ⅱ》,第2版,JeanLabrosse着,邵贝贝译,北京航空航天大学出版社

复习范围:

理解掌握--嵌入式实时操作系统主要概念和μC/OS—Ⅱ中主要数据结构与算法

利用μC/OS—Ⅱ内核中的主要函数实现简单的应用任务.掌握程序的结构和函数调用.

1实时系统概念

中断和时间管理(概念,实现过程,内核函数):

中断,中断延迟,响应及恢复.关中断开中断的实现.

系统时间与时钟节拍.任务延时函数.

μC/OS—Ⅱ的优先级

动态优先级-优先级在运行过程中可以变化vs静态优先级--在执行过程中优先级不变

优先级反转--避免优先级反转的方法是使占有共享资源的任务的优先级升到(相对或绝对)最高(优先级继承或天花板算法).

2内核结构

临界段,μC/OS—Ⅱ实现开中断,关中断的方法.

OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL().

它们可以用不同的方法去实现,用定义(#define)常数OS_CRITICAL_METHOD(1,2,3)来选择用哪种方法来实现.

当OS_CRITICAL_METHOD等于1时,表示用处理器指令关中断,完成OS_ENTER_CRITIACL,用开中断完成OS_EXIT_CRITICAL.利用这种方法有点小问题,即是调用UCOS功能函数之前,无论中断是否是关掉的,返回后,中断就打开了.

当OS_CRITICAL_METHOD等于2时,这种方法是在堆栈中保存中断的开关状态,然后再关中断.在实现OS_EXIT_CRITICAL时,只需简单的从堆栈中弹出原来中断的开关状态.利用这种方法,不论用户在调用函数之前中断是开着的还是关着的,函数的进入和返回状态都得到了保护.

当OS_CRITICAL_METHOD等于3时,一些编译器提供了扩展功能,用户可以得到当前处理器的状态字,并保存在C函数的局部变量中,这个变量可以用于恢复PSW.

任务的状态

睡眠态:通过调用下述两个函数(OSTaskCreat()或OSTaskCreatExt())之一来实现的.就绪态:任务一旦建立这个任务就进入了就绪态,准备运行.可以通过调用OSTaskDel()返回到睡眠态.

运行态:调用OSStart()可以启动多任务.

等待状态:正在运行的任务可以通过调用以下两个函数(OSTimeDly()或OSTimeDlyHM())之一,将自身延迟一段时间.正在运行的任务可能需要等待某一事件的发生,可以调用函数(OlagPend(),OSSempend(),OutexPend(),OboxPend(),OSQPend())之一来实现.

中断服务态:正在运行的任务可以被中断.

优先级,就绪表每个就绪的任务都放在就绪表中,就绪表中有两个变量,OSRdyGRP和OSRdyTbl

OSRdyGrp中每一位表示8组任务中每一组是否有进入就绪态的任务.当有任务进入就绪态时,就绪表OSRdyTbl[]中相应元素的相应位也置为1.

OSRdyGrp|等于OapTbl[prio>,>,3],

OSRdyTbl[prio>,>,3]|等于OapTbl[prio&,0x07],

O apTbl[]是屏蔽字,将0-7的下标转换成各自位置1的8位值(模式串)

任务调度OS_SCHED()总是进行进入就绪态任务中优先级最高的任务,确定哪个任务优先级最高,这一工作就是有调度器完成的.

任务切换OS_TASK_SW()需恢复该任务在CPU使用权被剥夺时保存下来的全部寄存器的值,之后,运行被切换的任务.

时钟节拍OSTimTick()注意点:必须在多任务系统启动后,也就是调用OSStart()之后,再开启时钟节拍器.

3任务管理

建立任务OSTaskCreat()/OSTaskCreatExt()

如果想让UCOS管理用户的任务,必须先建立任务.可以通过将任务的地址和其他参数传递到以下两个函数之一来建立任务.当调用OSTaskCreat()时,需要四个参数:OSTaskCreate(void(*task)(void*pd),void*pdata,OS_STK*ptos,INTUprio)

Task:是指向任务代码的指针,pdata:是任务开始执行是,传递给任务的参数的指针,ptos:是分配给任务的堆栈的栈顶指针,prio是分配给任务的优先级.

OSTaskCreateExt()函数来建立任务会更加灵活,但是会增加一些额外的开销.

任务堆栈OS_STK()

每个任务都有自己的堆栈,堆栈必须申明为OS_STK类型,并且由连续的内存空间组成.可以静态分配堆栈空间,也可以动态分配堆栈空间.3:堆栈检验OSTaskStkChk()

有时确定任务实际需要的堆栈空间的大小是很有必要的,因为这样就可以避免为任务分配过多的堆栈空间,从而减少应用程序代码所需的RAM空间.

删除任务OSTaskDel()有时需要删除任务,删除任务,是说任务返回并处于休眠态,并不是说任务的代码被删除了,只是任务的代码不再被UCOS调用.

改变任务的优先级OSTaskChangePrio()

在建立任务是,会分配给任务一个优先级.在程序运行期间,可以通过调用该函数改变任务的优先级.也就是说,UCOS允许动态的改变任务的优先级.

挂起任务OSTaskSuspend()任务挂起是一个附加功能,也就是说,如果任务在被挂起的同时也在等待延迟时间到,那么,需要对任务做取消挂起的操作,并且等待延迟时间到,任务才能转让就绪状态.任务可以挂起自己或者其他任务.

恢复任务OSTaskResume()

别挂起的任务只有通过该函数才能被恢复.

4时间管理

1:任务延迟函数OSTimeDly()

Ucos提供一个可以被任务调用而将任务延时一段特定时间的功能函数,即OSTimeDly().任务调用OSTimeDly()后,一旦规定的时间期满或者有其他的任务通过调用OSTimeDlyResume()取消了延时,他就会进入就绪状态.只有当该任务在所有就绪态任务中具有最高的优先级,它才会立即运行.

2:按时,分,秒延时函数OSRimeDLyHM()

与OSTimeDly()一样,调用OSRimeDlyHM()函数也会是UCOS进行一次任务调度,并且执行下一个优先级最高的就绪任务.当OSTimeDlyHM()后,一旦规定的时间期满,或者有OSTimeDlyResume(),它就会马上处于就绪态.同样,只有当该任务在所有就绪态任务中具有最高的优先级,他才开始运行.

3:恢复延时的任务OSTimeDlyResume()延时的任务可以不等待延时的期满,而是通过其他任务取消延时而使自己处于就绪态,可以通过该函数来实现,实际上,OSTimeDlyResume()也可以唤醒正在等待的事件.

4:系统时间OSTimeGet()和OSTimeSet()

5事件控制块(ECB)

任何任务或中断服务子程序可以通过事件控制块ECB向另外的任务发信号,这里信号看成是事件.

事件控制块ECB的数据结构

Typedefstruct

{

INT8UOSEventType,,定义了事件的具体类型

INT8UOSEventGrp,,

INT16UOSEventCnt,,当事件控制块用于信号量时,该变量用于信号量的计数器.

Void*OSEventPtr,,只有所定义的事件是消息或者消息队列时才使用.

INT8UOSEventTbl[OS_EVENT_TBL_SIZE],

}OS_EVENT,

1:初始化一个事件控制块,OS_EventWaitLListInit()

当建立一个信号量,或者消息队列时,通过调用该函数,对事件控制块中的等待任务列表进行初始化.

2:使一个任务进入就绪态,OS_EventTaskRdy()

该函数从等待任务队列中使最高优先级任务脱离等待状态,并把该任务置于就绪态.3:使一个任务进入等待某事件发生状态OS_EventTaskWait()

当某个任务需等待一个事件的发生时,信号量,互斥型信号量,及消息队列会通过相应的PEND函数调用该函数,使当前任务从就绪任务表中脱离就绪态,并放到相应事件的事件控制块的等待任务表中.

4:由于等待超时而降任务置为就绪态OS_EventTo()

如果在预先指定的等待时限内任务等待的事件没有发生,那么该函数就会因为等待超时而将任务的状态量置为就绪态.在这种情况下,信号量,互斥型信号量及消息队列会通过PEND调用该函数,以完成这项工作.

6信号量管理

信号量有两部分组成:一部分是16位无符号整型信号量的计数值,另一部分是有等待该信号量的任务组成的等待任务表.

1:建立一个信号量,OSSemCreate()


使用一个信号量之前,首先须建立该信号量,可以调用该函数来建立信号量,并对信号量赋予初始计数值.该初始值为0~65535.如果该信号量是用来表示一个或者多个事件发生,那么该信号量的初始值通常赋为0,如果该信号量用于对共享资源的访问,那么该信号量的初始值应赋为1,如果该信号量用来表示允许任务访问n个相同的资源,那么该信号量的初始值应赋为n,并把该信号量作为一个可记数的信号量使用.

2:删除一个信号量,OSSemDel()

如果要删除一个信号量,在OS_CFG.H中,OS_SEM_DEL_EN须置为1,该函数才能被使用.

3:等待一个信号量OSSemPend()4:发出一个信号量OSSempend()

5:无等待的请求一个信号量OSSemAccept()

当一个任务请求一个信号量时,如果该信号量暂时无效,也可以让该任务简单的返回,而不是进入睡眠等待状态.这种操作由该函数完成.6:查询一个信号量的当前状态,OSSemQuerey()可以通过该函数,来查询一个信号量的当前状态.

7互斥信号量管理

任务可以使用互斥型信号量实现对共享资源的独占式处理,互斥型信号量mutex.

1:建立一个互斥型信号量,OutexCreate()

在使用mutex之前,必须建立它,建立mutex是通过该函数来实现的,当mutex的初始值为1时,表示资源是可以利用的.

2:删除一个互斥型信号量,OutexDel()

只有当OS_CFG.H文件中OS_MUTEX_DEL_EN的值为1时,该函数才有效.3:等待一个互斥信号量,OutexPend()4:释放一个互斥型信号量,OutexPost()5:无等待的获取互斥型信号量(任务不挂起),OutexAccept()

如果要得到mutex,而当前mutex无效,那么不让任务进入休眠态也是可以的,这时可以通过调用该函数来实现.

6:获取互斥型信号量的当前状态,OutexQuery()用来获取互斥型信号量的事件控制块的当前状况.

8事件标志组管理

事件标志组由两部分组成:一是用来保存当前事件中各事件状态的一些标志位,二是等待这些标 志位置位或清除的任务列表.

事件标志组数据结构

Typedefstruct{

INT8UOlagType,,用来检验指针的类型是否是事件标志组的指针.

Void*OlagwaitList,,包含一个等待事件标志组的任务列表.

OS_FLAGSOlagFlags,,包含一系列表明当前事件标志状态的位.

}OS_FLAG_GRP,

1:建立一个事件标志组,OlagCreate()

2:删除一个事件标志组,Olagdel()

3:等待事件标志组的事件标志位,OlagPend()

4:置位或清0事件标志组中的事件标志,OlagPost()

5:无等待的获得时间标志组中的事件标志,OlagAccept()

9消息管理

消息是一种通信机制,可以使一个任务或者中断服务子程序向另一个任务发送一个指针型变量.

1:建立一个,OboxCreate()

使用之前,必须建立,该操作可以通过调用该函数来实现,并且须定时指针的初始值.一般情况下,这个初始值为NULL,但也可以初始化一个,使其在最开始就包含一条消息.

2:删除一个,OboxDel()

3:等待中的消息,OboxPend()

4:向发送一则消息,OboxPost()

5:向发送一则消息,OboxPostOpt()(该函数比OboxPost()函数功能更强大.)

6:无等待的从中得到一则消息,OboxAccept()

7:查询一个的状态,OboxQuery()

8:用作为二值信号量

9:用实现延时,而不是用OSTimeDly()

10消息队列管理

消息队列是UCOS的另一种通信机制.它允许一个任务或者中断服务子程序向另一个任务发送以指针方式定义的变量或其他任务.

1:建立一个消息队列,OSQCreate()

该函数建立一个队列,并赋值给它2个参数:指向消息数组的指针和数组的大小.该指针数组必须声明为voidOS_EVENT*OSQCreate(void**start,int16usize)

2:删除一个消息队列,OSQDel()!!!:在删除一个消息队列之前,应该首先删除所有可能用到这个消息队列的任务.

3:等待消息队列中的消息,OSQPend()

4:向消息队列发送一则消息,OSQPost(),

5:向消息队列发送一则消息,OSQPostFront()

该函数和上述基本一样,只是在插入新的消息到消息队列时,使用OSQOut,而不是OSQIn,作为指向下一个插入消息的单元指针.

6:向消息队列发送一则消息,OSQPostOpt()该函数最新,包含上述两函数的功能.

7:无等待的从消息队列中获得消息,OSQAccept()

8:清空消息队列,OSQFlush()OSQFlush()允许清空一个消息队列中的所有消息,以重新开始使用.

9:获取当前消息队列的状态,OSuery()

11内存管理

内存控制块的数据结构

Typedefstruct

{void*oemaddr,指向内存分区起始地址的指针.

Void*oemfreelist,,指向下一个空余内存控制块或者下一个空余内存块的指针,

Int32uoemblksize,,内存分区中内存块的大小,是建立内存分区时定义的.

Int32uoemnblks,,内存分区中总的内存块数量,也是建立该内存分区时定义的.

Int32uoemnfree,,内存分区块中当前获得的空余块数量.

}os_mem,

1,建立一个内存分区,OemCreate()2:分配一个内存块,OemGet()应用程序通过调用该函数,从已经建立的内存分区中申请一个内存块.该函数唯一的参数是指向特定内存分区的指针.

3:释放一个内存块,OemPut()

当应用程序不再使用一个内存块时,必须及时的把它释放,并放回到相应的内存分区中,这个操作就是通过调用该函数实现的.

4:查询一个内存分区的状态,OSQMemQuery().

【题型】:开卷,故题型以应用题为主.

【end】

类似论文

《嵌入式操作系统》课程实践教学

摘 要:计算机操作系统相关课程是计算机专业的主干课程之一 为适应物联网发展需要,对《嵌入式操作系统》课程实践。
更新日期:2024-4-5 浏览量:12100 点赞量:4298

嵌入式操作系统在智能手机中的应用

摘 要:本文结合嵌入式操作系统的功能,介绍手机和PDA的融合产品──智能手机的功能和特点,分析了嵌入式操作系统。
更新日期:2024-2-9 浏览量:10694 点赞量:4175

嵌入式操作系统概述

BO-220C嵌入式工业平板显示器服务指南BO-220C是一款嵌入式超薄型工业平板显示器,配备22"分辨率为1920x1080的液晶显示屏,。
更新日期:2024-9-20 浏览量:117641 点赞量:25127

嵌入式操作系统采购,嵌入式操作系统安装

重庆市局北碚区分局黄桷派智能弱电管理项目招标技术参数,功能要求及数量根据重庆市局北碚区分局黄桷派出所建设要求,局碚区分派出所智能弱电。
更新日期:2024-4-6 浏览量:13621 点赞量:5019

嵌入式操作系统的趋势

嵌入式操作系统的特点嵌入式操作系统正变得流行,因为处理器变得越来越复杂,嵌入式系统正朝网络连接化发展,系统必&。
更新日期:2024-10-14 浏览量:129581 点赞量:27666

Linux在嵌入式操作系统中的应用

摘 要:随着信息技术的迅猛发展,Linux在嵌入式操作系统中广泛应用并显示了其特有的优势 嵌入式Linux系统所适用的。
更新日期:2024-3-10 浏览量:44329 点赞量:10737

嵌入式操作系统采购

东莞市第二市区人民检察院侦查指挥设备,机房观察室监视系统采购项目公开招标文件采购编号:东采公〔2016〕号第一部分投标邀。
更新日期:2024-3-11 浏览量:42642 点赞量:9858