嵌入式实时操作系统复习

发布 2022-10-21 10:42:28 阅读 7576

a.计算机操作系统的作用和功能是什么?

计算机操作系统为应用程序提供了一个界面友好,性能稳定、安全,效率高,操作方便的虚拟计算机。它的主要功能有:

1、处理器的管理。

2、存储的管理。

3、设备的管理。

4、文件的管理。

5、网络和通信管理。

6、提供用户接口。

b什么是实时操作系统?它应满足那三个条件?试列举几个日常生活中的实时操作系统。(至少两个)

操作系统能使计算机系统及时响应外部事件的请求,并能及时控制所有实时设备与实时任务协调运行,且能在一个规定的时间内完成对事件的处理,那么这种操作系统就称之为实时操作系统。

实时操作系统满足的三个条件:

1、实时操作系统必须是多任务系统。

2、任务的切换时间应与系统中的任务数无关。

3、中断延迟时间可预知并尽可能段。

常见的几种实时操作系统有: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个任务,它包含用户任务和系统任务,它有两个系统任务,空闲任务和统计任务;空闲任务几乎不做任何工作,它只是对系统变量空闲任务运行次数计数器osdlectr进行加1操作,设置该任务的目的在于:系统在某个时间内无用户任务执行时,运行空闲任务,使cpu在没有用户任务执行时有事可做;统计任务每秒计算一次cpu在单位时间内被使用的时间,并把计算结果以百分比的形式存放在变量oscpusage中,以便其他应用程序来了解cpu的利用率。

3.3 μc/os-ii操作系统中任务有哪5种状态?并画出任务状态及其转换关系图(不必标出它们的转换条件)。

μc/os-ii操作系统中任务状态有:睡眠状态、等待状态、就绪状态、运行状态、中断服务状态。关系图见p17

3.4 μc/os-ii优先级别最多有多少级?在实际应用中用户可以通过配置那个系统参数来设置最低优先级?此时空闲任务和统计任务的优先级分别为多少?

c/os-ii优先级别最多有64级,可以通过配置os_lowest_prio来设置最低优先级,此时空闲任务和统计任务的优先级分别为os_lowest_prio-1和os_lowest_prio-2

3.5 若应用程序中任务的优先级别为18个,则表示最低优先级别的常数os_lowest_prio值应该是多少?如果应用程序中使用了空闲任务和统计任务,那么他们的优先级别分别为多少?

应用程序最多可以安排多少个任务?

最低优先级别的常数os_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位无符号整型),任务堆栈长度为节,任务参数pdata的实参为空,任务堆栈方向为向下,优先级别为36,试写出ostaskcreate()的调用**。

#define mytaskstkn 128

os_stk mytaskstk[mytaskstkn ]

ostaskcreate(mytask,(void*)0,mytaskstk[mytaskstkn -1]

3.8 什么是任务控制块? μc/os-ii使用哪两条链表对任务控制块进行管理?初始化任务控制块函数ostcbinit()的主要操作是什么?

用来记录任务的堆栈指针、任务的当前状态、任务的优先级别等一些与任务管理有关的属性的表叫做任务控制块。 μc/os-ii使用空任务控制块链表和任务控制块链表对任务控制块进行管理。初始化任务控制块函数ostcbinit()的主要操作是:

1、为被创建的任务从空任务控制块链表获取一个任务控制块。

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来管理任务就绪表,已知某一个就绪任务的优先级别为prio=26,试判断应该在osrdytbl和osrdygrp的哪一位置1。试写出把优先级别为prio的任务置为就绪态的**。

26的二进制形式为00011010,其低6位为011010,可知应该在osrdytbl[3]的d2位上置1,同时把osrdygrp的d3位置1。

将优先级别为prio的任务置为就绪态的**如下:

osrdygrp | osmaptbl[prio>>3];

osrdytbl[prio>>3] |osmaptbl[prio&0x07];

3.11 μc/os-ii中调度器的主要工作有哪两项?有哪两种调度器?这两种调度器是通过调用哪两种系统函数实现任务调度的?

μc/os-ii中调度器的主要工作有:

1、在任务就绪表中查找具有最高优先级别的就绪任务。

2、实现任务切换。

两种调度器为:任务级的调度器和中断级的调度器;任务级的调度器调用函数ossched()来实现,而中断级的调度器调用函数osintext()来实现。

3.12 在μc/os-ii中,可通过调用哪两个函数来创建任务?函数ostasksuspend()和函数ostaskresume()的作用是什么?

函数ostaskdel()的主要操作什么?

可通过调用函数ostaskcreate()和ostaskcreateext()来创建任务;函数ostasksuspend()可用来挂起自身或者除空闲任务之外的其他任务,函数ostaskresume()用来恢复被挂起任务的就绪态;函数ostaskdel()的主要操作是:把被删除任务的任务控制块从任务控制块链表中删除,并归还给空任务控制块链表,然后再任务就绪表中把该任务的就绪状态位置0。

4.1 什么叫做中断?简述μc/os-ii系统响应中断的过程?

任务在运行过程中,应内部或外部异步事件的请求中止当前任务,而去处理异步事件所要求的过程叫做中断。

μc/os-ii系统响应中断的过程:系统接收到中断请求后,如果此时cpu处于中断允许状态,系统就会中止正在运行的任务,而按照中断向量的指向转而去运行中断服务子程序;中断服务子程序运行结束后,系统将会根据情况返回到被中止的任务继续运行,或者转向运行另一个具有更高优先级别的就绪任务。

4.2 在编写μc/os-ii的中断服务子程序时,要用到两个重要的函数osintenter()和osintexit(),它们的作用是什么?

函数osintenter()是在进入中断服务子程序时调用的,它用来记录中断嵌套的层数,它的操作就是简单对全局变量中断嵌套层数计数器。

osintnesting加1; 函数osintexit()是在退出中断服务子程序时调用的,它在中断嵌套层数计数器为0、调度器未被锁定且从任务就绪表中查找到的最高级就绪任务又不是被中断的任务的条件下将要进行任务切换,否则就返回到被中断的任务。

4.3 什么叫做时钟节拍? μc/os-ii在每次响应定时中断时调用时钟节拍服务函数ostimetick(),ostimetick() 所做的工作有哪些?

最小时钟单位就是两次中断之间相间隔的时间,这个最小时钟单位叫做时钟节拍。 ostimetick() 所做的工作有:

1、给系统时间计数器ostime加1

2、遍历任务控制块链表中的所有任务控制块,把各个任务控制块中用来存放任务延时时限变量ostcbdly减1,并使该项为0,同时又不使被挂起的任务进入就绪态。

4.4 在编写μc/os-ii的中断服务子程序时,要用到两个重要的函数osintenter()和osintexit(),它们的作用是什么?

函数osintenter()是在进入中断服务子程序时调用的,它用来记录中断嵌套的层数,它的操作就是简单对全局变量中断嵌套层数计数器。

osintnesting加1; 函数osintexit()是在退出中断服务子程序时调用的,它在中断嵌套层数计数器为0、调度器未被锁定且从任务就绪表中查找到的最高级就绪任务又不是被中断的任务的条件下将要进行任务切换,否则就返回到被中断的任务。

5.1 信号量由哪两部分组成?简述信号量的工作过程?

信号量由信号量计数器和等待任务列表组成。每当有任务申请信号量时,如果信号量计数器oseventcnt的值大于0,则把oseventcnt的值减1并使任务继续运行;如果oseventcnt值为0,则会将任务列入等待任务表oseventtbl,而使任务处于等待状态。如果有正在使用信号量的任务释放了该信号量,则会在任务等待表中找出优先级别最高的等待任务,并在使它就绪后调用调度器引发一次调度。

如果任务等待表中已经没有等待任务,则信号量计数器就只简单的加1。

5.2 什么是任务优先级反转现象?互斥信号量是如何防止优先级反转现象出现的?

在可剥夺性内核中,当任务以独占方式使用共享资源时,会出现低优先级任务先于高优先级任务而被运行的现象,称之为任务优先级反转现象。互斥信号量解决优先级反转的方法是:使获得信号量任务的优先级别在使用共享资源期间暂时提升到所有任务最高优先级别的高一个级别上,以使该任务不被其他任务所打断,从而能尽快地使用完共享资源并释放信号量,然后在释放信号量之后,再恢复该任务原来的优先级别。

嵌入式实时操作系统复习

任务就绪组是 为了查找高级优先级的任务与正在运行任务的优先级进行比较,以确定是否进行切换。typedef struct os event int8u oseventtype事件控制块的类型 void oseventptr指向下一个ecb或消息队列的指针 int16u oseventcnt 信号量计数...

嵌入式实时操作系统

嵌入式实时操作系统 embedded real time operation system,rtos 当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。1 多任务 2 有线...

Nucleus嵌入式实时操作系统

一 mentor graphics esd公司简介。二 nucleus操作系统的特点。三 源 操作系统的优势。四 nucleus操作系统开发环境的配置。五 nucleus的网络浏览器 webbrowse 介绍。六 nucleus操作系统的应用领域及在国内外的用户。七 nucleus操作系统的成功案例...