全部科目 > 信息系统运行管理员 >
2020年下半年 上午试卷 综合知识
第 30 题
知识点 信息系统软件缺陷的分类   队列   死锁  
关键词 队列   释放资源   死锁  
章/节 信息系统运维的过程  
 
 
使用未经批准的资源、使用后未释放资源、资源死锁、把资源链接到错误的队列中等,这些缺陷属于(30)。
 
  A.  数据缺陷
 
  B.  加工缺陷
 
  C.  功能缺陷
 
  D.  系统缺陷




 
 
相关试题     信息系统运维的过程 

  第30题    2019年下半年  
对于造成软件崩溃、数据丢失的软件缺陷,其优先级属于(30)。

  第28题    2018年下半年  
日常运行流程的关键点不包括:(28)。

  第7题    2021年上半年  
配置管理数据库、变更咨询委员会和变更请求的英文缩写分别是()。

 
知识点讲解
· 信息系统软件缺陷的分类
· 队列
· 死锁
 
        信息系统软件缺陷的分类
        从软件测试观点出发,信息系统软件缺陷可以分为五大类,如下表所示。
        
        信息系统软件缺陷类型
        续表
 
        队列
               队列的定义
               队列(queue)是一种只允许在一端进行插入,而在另一端进行删除的线性表,是一种操作受限的线性表。在表中只允许进行插入的一端称为队尾(rear),只允许进行删除的一端称为队头(front)。队列的插入操作通常称为入队列或进队列,而队列的删除操作则称为出队列或退队列。当队列中无数据元素时,称为空队列。
               由队列的定义可知,队头元素总是最先进队列的,也总是最先出队列;队尾元素总是最后进队列,因而也是最后出队列。这种表是按照先进先出(First In First Out, FIFO)的原则组织数据的,因此,队列也被称为"先进先出"表。
               下图是一个队列的进出示意图,通常用指针front指示队头的位置,用指针rear指向队尾的位置。
               
               队列的进出示意图
               队列的基本操作
               队列的基本操作主要有以下6种。
               .InitQueue(&Q):初始化操作,构造一个队列Q。
               .QueueEmpty(Q):若栈Q为空队列,返回1,否则返回0。
               .EQueue(&Q, e):插入元素e到队列Q的尾部。
               .OQueue(&Q,&e):删除Q的队首元素,并用e返回其值。
               .GetQhead(Q,&e):用e返回Q的队首元素。
               .ClearQueue(&Q):将Q清空为空队。
               队列的顺序存储结构
               顺序存储结构采用一维数组(向量)实现,设队列头指针front和队列尾指针rear,并且假设front指向队头元素的前一位置,rear指向队尾元素。若不考虑队满,则入队操作语句为Q[rear++]=x;若不考虑队空,则出队操作语句为x=Q[++front]。当然,出队时,并不一定需要队头元素(与退栈类似)。
               按上述的做法,有可能出现假溢出,即队尾已到达一维数组的高端,不能再入队,但因为连续出队,队列中元素个数并未达到最大值。解决这种问题,可用循环队列。在循环队列中,需要区分队空和队满:仍用front=rear表示队列空,在牺牲一个单元的前提下,用front==(rear+1)% MAX表示队列满。在这种约定下,入队操作的语句为:rear=(rear+1)%MAX, MAX, Q[rear]=x;出队操作语句为:front=(front+1)% MAX。
               顺序队列的类型定义如下:
               
               顺序队列定义为一个结构类型,该类型变量有3个数据域:data、front、rear。其中data为存储队中元素的一维数组。队头指针front和队尾指针rear定义为整型变量,取值范围是0~QueueSize-1。约定队尾指针指示队尾元素在一维数组中的当前位置,队头指针指示队头元素在一维数组中的当前位置的前一个位置,这种顺序队列说明如下。
               .初始化时,设置SQ.front=SQ.rear=0。
               .队头指针的引用为SQ.front,队尾指针的引用为SQ.rear。
               .队空的条件为SQ.front==SQ.rear;队满的条件为SQ.front=(SQ.rear+1)% QueueSize。
               .入队操作:在队列未满时,队尾指针先加1(要取模),再送值到队尾指针指向的空闲元素。出队操作:在队列非空时,队头指针先加1(要取模),再从队头指针指向的队头元素处取值。
               .队列长度为(SQ.rear+QueueSize-SQ.front)% QueueSize。
               特别应注意的是:在循环队列的操作中队头指针、队尾指针加1时,都要取模,以保持其值不出界。
               在循环队列上队列的实现基本操作的函数如下。
               1)初始化initqueue(SQueue *SQ)
               
               2)判空QueueEmpty(SQueue SQ)
               
               3)入队EQueue(SQueue *SQ, ElemType e)
               
               4)出队OQueue(SQueue *SQ, ElemType *e)
               
               5)取队首元素GetQhead(SQueue *SQ, ElemType *e)
               
               6)清队列ClearQueue(SQueue *SQ)
               
               队列的链式存储结构
               队列的链接实现称为链队,链队实际上是一个同时带有头指针和尾指针的单链表。头指针指向队头节点,尾指针指向队尾节点即单链表的最后一个节点。为了简便,链队设计成一个带头节点的单链表。
               链队的类型定义如下:
               
               链队列的说明如下。
               .队列以链表形式出现,链首节点为队头,链尾节点为队尾。
               .队头指针为LQ→front,队尾指针为LQ→rear,队头元素的引用为Q→front→data,队尾元素的引用为LQ→rear→data。
               .初始化时,设置LQ→front=LQ→rear=NULL。
               .进队操作与链表中链尾插入操作一样;出队操作与链表中链首删除操作一样。
               .队空的条件为LQ→front==NULL。理论上,只要系统内存足够大,链队是不会满的。
               在链队上实现队列基本操作的函数如下。
               1)队列初始化InitQueue(LQueue *LQ)
               
               2)入队EQueue(LQueue *LQ, ElemType e)
               
               3)出队OQueue(LQueue *LQ, ElemType *e)
               
               4)判空QueueEmpty(LQueue *LQ)
               
               5)取队首元素GetQhead(LQueue *LQ, ElemType *e)
               
               6)清队列ClearQueue(LQueue *LQ)
               
               循环队列中的边界条件判别准则
               判别循环队列的"空"或"满"不能以头尾指针是否相等来确定,一般是通过以下几种方法:一是另设一个布尔变量来区别队列的空和满;二是少用一个元素的空间,每次入队前测试入队后头尾指针是否会重合,如果会重合就认为队列已满;三是设置一个计数器记录队列中元素总数,不仅可判别空或满,还可以得到队列中元素的个数。
               双端队列的作用
               双端队列是限定插入和删除操作在线性表的两端进行,可将其看成是栈底连在一起的两个栈,但其与两个栈共享存储空间是不同的。共享存储空间中的两个栈的栈顶指针是向两端扩展的,因而每个栈只需一个指针;而双端队列允许两端进行插入和删除元素,因而每个端点必须设立两个指针,如下图所示。
               
               双端队列的示意图
               在实际应用中,可对双端队列的输出进行限制(即一个端点允许插入和删除,另一个端点只允许插入),也可对双端队列的输入进行限制(即一个端点允许插入和删除,另一个端点只允许删除)。可见,采用双端队列可增加应用中的灵活性。
 
        死锁
        在计算机系统中有许多互斥资源(如磁带机、打印机和绘图仪等)或软件资源(如进程表、临界区等),若两个进程同时使用打印机,或同时进入临界区必然会出现问题。所谓死锁,是指两个以上的进程互相都要求对方已经占有的资源导致无法继续运行下去的现象。
               死锁举例
               根据例4.4~例4.6的情况分析不难看出,产生死锁的原因为竞争资源及进程推进顺序非法。当系统中有多个进程所共享的资源不足以同时满足它们的需求时,将引起它们对资源的竞争导致死锁。其中,进程推进顺序非法,是指进程在运行的过程中请求和释放资源的顺序不当,导致进程死锁。
               进程资源图
               进程资源有向图由方框、圆圈和有向边三部分组成。其中方框表示资源,圆圈表示进程。请求资源:〇→□,箭头由进程指向资源;分配资源:〇←□,箭头由资源指向进程。
               例如,系统中有进程P1P2P3,资源R1R2R3。假设系统中R1R2R3的资源数分别为1、1和2,其中P1占用了1台R1,又申请1台R3P2占用了1台R2,又申请1台R1P3占用了2台R3,又申请1台R2。对于这种情况可用进程资源图来描述,如下图所示。
               
               进程资源有向图
               死锁产生的原因及4个必要条件
               产生死锁的4个必要条件是互斥条件、请求保持条件、不可剥夺条件和环路条件。当发生死锁时,在进程资源有向图中必构成环路,其中每个进程占有了下一个进程申请的一个或多个资源,导致进程申请的资源无法满足而产生死锁。
               死锁的处理
               死锁的处理策略主要有4种:鸵鸟策略(即不理睬策略)、预防策略、避免策略和检测与解除死锁。
                      死锁预防
                      死锁预防是采用某种策略限制并发进程对资源的请求,破坏死锁产生的4个必要条件之一,使系统在任何时刻都不满足死锁的必要条件。预防死锁的两种策略如下:
                      (1)预先静态分配法。破坏了“不可剥夺条件”,预先分配所需资源,保证不等待资源。该方法的问题是降低了对资源的利用率,降低进程的并发程度;有时可能无法预先知道所需资源。
                      (2)资源有序分配法。破坏了“环路条件”,把资源分类按顺序排列,保证不形成环路。该方法存在的问题是限制进程对资源的请求;由于资源的排序占用系统开销。
                      死锁避免
                      死锁预防是设法破坏产生死锁的4个必要条件之一,严格防止死锁的产生。死锁避免则不那么严格地限制产生死锁的必要条件。最著名的死锁避免算法是Dijkstra提出的银行家算法,死锁避免算法需要很大的系统开销。
                      银行家算法对于进程发出的每一个系统可以满足的资源请求命令加以检测,如果发现分配资源后系统进入不安全状态,则不予分配;若分配资源后系统仍处于安全状态,则实施分配。与死锁预防策略相比,它提高了资源的利用率,但检测分配资源后系统是否安全增加了系统开销。
                      所谓安全状态,是指系统能按某种顺序如<P1P2,…,Pn>来为每个进程分配其所需资源,直到最大需求,使每个进程都可顺序完成。通常称<P1P2,…,Pn>序列为安全序列。若系统不存在这样一个安全序列,则称系统处于不安全状态。
                      死锁检测
                      解决死锁的另一条途径是使用死锁检测方法,这种方法对资源的分配不加限制,即允许死锁产生。但系统定时地运行一个死锁检测程序,判断系统是否发生死锁,若检测到有死锁,则设法加以解除。
                      死锁解除
                      死锁解除通常采用资源剥夺法和撤销进程法。资源剥夺法从一些进程那里强行剥夺足够数量的资源分配给死锁进程;撤销进程法根据某种策略逐个地撤销死锁进程,直到解除死锁为止。



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

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