全部科目 > 嵌入式系统设计师 >
2011年下半年 上午试卷 综合知识
第 49 题
知识点 操作系统   队列   进程  
关键词 操作系统   队列   进程  
章/节 嵌入式操作系统基础知识   嵌入式系统程序设计  
 
 
以下关于操作系统进程队列队列管理的叙述中,不正确的是(49)。
 
  A.  进程队列实际上就是通过PCB队列指针将若干个进程控制块组成一张链表
 
  B.  操作系统的进程队列分为三类:运行队列、就绪队列和等待队列
 
  C.  队列管理的操作只有入列、出列两种
 
  D.  队列的入列,是将一个PCB链入队列的队尾、队首,或插在中间
 
 




 
 
相关试题     进程、线程和任务 

  第57题    2018年下半年  
在进程状态转换过程中,(57)是不可能发生的。

  第49题    2012年下半年  
下列进程调度算法中,综合考虑进程等待时间和执行时间的是(49)。

  第59题    2016年下半年  
某系统中有3个并发进程,都需要同类资源4个,试问该系统不会发生死锁的最少资源数是(59)。

相关试题     软件平台的选择 

  第46题    2009年下半年  
操作系统在(46)向用户提供目录管理类命令、文件操作类命令、文件管理类命令;操作系统在(47)向用户提供创建文件、撤销文件、打开文件、关闭文件、读文件、写文件等系统调用。

  第35题    2015年下半年  
以下描述中不属于嵌入式操作系统特点的是(35)。

  第45题    2014年下半年  
近年来具有健壮分区功能的嵌入式实时操作系统(例如VxWorks653)在嵌入式领域得到了广泛应用,以下不属于分区操作系统特点的是(45)。

相关试题     栈与队列 

  第48题    2013年下半年  
有空栈S,对下列待进栈元素序列a、b、c、d、e、f进行进栈、进栈、出栈、进栈、进栈、出栈的操作后,桟S的栈顶和栈底元素分别为(48)。

  第34题    2019年下半年  
为解决计算机与打印机之间速度不匹配的问题,通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。该缓冲区的逻辑结构应该是(34)。

  第44题    2012年下半年  
为解决计算机与打印机之间速度不匹配的问题,通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。该缓冲区的逻辑结构应该是(44)。

 
知识点讲解
· 操作系统
· 队列
· 进程
 
        操作系统
        编写嵌入式软件有两种选择:一是自己编写内核;二是使用现成的操作系统。如果嵌入式软件只需要完成一项非常小的工作,例如在电动玩具、空调中,就不需要一个功能完整的操作系统。但如果系统的规模较大、功能较复杂,那么最好还是使用一个现成的操作系统。可用于嵌入式系统软件开发的操作系统有很多,但关键是如何选择一个适合开发项目的操作系统,可以从以下几点进行考虑:
        (1)操作系统提供的开发工具。有些实时操作系统只支持该系统供应商的开发工具,因此,还必须从操作系统供应商处获得编译器、调试器等;而有的操作系统应用广泛,且有第三方工具可用,因此选择的余地比较大。
        (2)操作系统向硬件接口移植的难度。操作系统到硬件的移植是一个重要的问题,是关系到整个系统能否按期完工的一个关键因素。因此,要选择那些可移植性程度高的操作系统,以避免因移植带来的种种困难。
        (3)操作系统的内存要求,有些操作系统对内存有较大要求。
        (4)操作系统的可剪裁性、实时性能等。
 
        队列
        队列常用于需要排队的场合,如操作系统中处理打印任务的打印队列、离散事件的计算机模拟等。
        队列是一种先进先出(FIFO)的线性表,只允许在队列的一端插入元素,而在另一端删除元素。在队列中,允许插入元素的一端称为队尾(rear),允许删除元素的一端称为队头(front)。
        队列的基本运算如下。
        (1)初始化队列initQueue(Q):创建一个空的队列Q。
        (2)判队空isEmpty(Q):当队列为空时返回“真”值,否则返回“假”值。
        (3)入队enQueue(Q,x):将元素x加入到队列Q的队尾,并更新队尾指针。
        (4)出队delQueue(Q):将队头元素从队列Q中删除,并更新队头指针。
        (5)取队头元素frontQueue(Q):返回队头元素的值,但不更新队头指针。
        可以用一组地址连续的存储单元存放队列中的元素,称为顺序队列。由于队中元素的插入和删除限定在两端进行,因此设置队头指针和队尾指针,分别指示出当前的队首元素和队尾元素。
        设队列Q的容量为6,其队头指针为front,队尾指针为rear,头、尾指针和队列中元素之间的关系如下图所示。
        
        队列的头、尾指针与队列中元素之间的关系
        在顺序队列中,为了降低运算的复杂度,元素入队时只修改队尾指针,元素出队时只修改队头指针。由于顺序队列的存储空间容量是提前设定的,所以队尾指针会有一个上限值,当队尾指针达到该上限时,就不能只通过修改队尾指针来实现新元素的入队操作了。若将顺序队列设想为一个环状结构(通过整除取余运算实现),则可维持入队、出队操作运算的简单性,如下图所示,称之为循环队列。
        
        循环队列的头、尾指针示意图
        设循环队列Q的容量为MAXSIZE,初始时队列为空,且Q.rear和Q.front都等于0,如下图(a)所示。元素入队时修改队尾指针,即令Q.rear=(Q.rear+1)% MAXSIZE,如下图(b)所示。元素出队时修改队头指针,即令Q.front=(Q.front+1)% MAXSIZE,如下图(c)所示。
        
        循环队列的头、尾指针示意图
        根据队列操作的定义,当出队操作导致队列变为空时,就有Q.rear==Q.front,如上图(d)所示;若入队列操作导致队列满,则也有Q.rear==Q.front,如上图(e)所示。在队列空和队列满的情况下,循环队列的队头、队尾指针指向的位置是相同的,此时仅根据Q.rear和Q.front之间的关系无法判定队列的状态。为了区分队空和队满,可采用两种处理方式:其一是设置一个标志域,以区别头、尾指针的值相同时队列是空还是满;其二是牺牲一个元素空间,约定以“队列的尾指针所指位置的下一个位置是头指针”表示队列满,如上图(f)所示,而头、尾指针的值相同时表示队列为空。
        设队列中的元素类型为整型,则循环队列的类型定义为:
        
        【函数】创建一个空的循环队列。
        
        【函数】判断队列是否为空。
        
        【函数】元素入循环队列。
        
        【函数】元素出循环队列。
        
        队列的链式存储也称为链队列。为了便于操作,可给链队列添加一个头结点,并令头指针指向头结点,如下图所示。在这种情况下,队列为空的判定条件是头指针和尾指针相同,且均指向头结点。
        
        链队列示意图
 
        进程
        简单而言,一个进程就是一个正在运行的程序。一般来说,一个进程至少应该包括以下几个方面的内容。
        .相应的程序:进程既然是一个正在运行的程序,当然需要有相应程序的代码和数据。
        .CPU上下文:指程序在运行时,CPU中各种寄存器的当前值,包括:程序计数器,用于记录将要取出的指令的地址;程序状态字,用于记录处理器的运行状态信息;通用寄存器,用于存放数据或地址;段寄存器,用于存放程序中各个段的地址;栈指针寄存器,用于记录栈顶的当前位置。
        .一组系统资源:包括操作系统用来管理进程的数据结构、进程的内存地址空间、进程正在使用的文件等。
        进程有动态性、独立性和并发行三个特性。
        (1)动态性。进程是一个正在运行的程序,而程序的运行状态是在不断地变化的。例如,当一个程序在运行的时候,每执行完一条指令,PC寄存器的值就会增加,指向下一条即将执行的指令。而CPU中用来存放数据和地址的那些通用寄存器,它们的值肯定也不断地变化。另外,堆和栈的内容也在不断地变化,每当发生一次函数调用时,就会在栈中分配一块空间,用来存放此次函数调用的参数和局部变量。而当函数调用结束后,这块栈空间就会被释放掉。
        (2)独立性。一个进程是一个独立的实体,是计算机系统资源的使用单位。每个进程都有自己的运行上下文和内部状态,在它运行的时候独立于其他的进程。
        (3)并发性。从宏观上来看,在系统中同时有多个进程存在,它们相互独立地运行。
        下图表示四个进程A、B、C、D在系统中并发地运行。从中可以看出,虽然从宏观上来说,这四个进程都是在系统中运行,但从微观上来看,在任何一个特定的时刻,只有一个进程在CPU上运行。从时间上来看,开始是进程A在运行,然后是进程B在运行,然后是进程C和进程D。接下来又轮到了进程A去运行。因此,在单CPU的情形下,所谓的并发性,指的是宏观上并发运行,而微观上还是顺序运行,各个进程轮流去使用CPU资源。
        
        四个进程在并发运行
        在具体实现上,以CPU中的程序计数器PC为例,真正物理上的PC寄存器只有一个。当四个进程在轮流执行时,PC取值的运动轨迹是先在进程A内部流动,然后再到进程B的内部流动,再到进程C和D。从进程的独立性角度来说,每个进程都有“自己”独立的PC寄存器,即逻辑上的PC寄存器,它们的取值相互独立、互不影响。所谓的逻辑PC,其实就是一个内存变量。例如,在上图中,当进程A要执行的时候,就把A的逻辑PC的值拷贝到物理PC中,然后开始运行。当轮到B运行的时候,先把物理PC的当前值保存到A的逻辑PC中,然后再把B的逻辑PC的值装入到物理PC中,即可运行。这样就实现了各个进程的轮流运行。



更多复习资料
请登录电脑版软考在线 www.rkpass.cn

京B2-20210865 | 京ICP备2020040059号-5
京公网安备 11010502032051号 | 营业执照
 Copyright ©2000-2023 All Rights Reserved
软考在线版权所有