软件设计师—操作系统

496 阅读30分钟

2.1 进程管理

2.1.1 操作系统概述

    1、作用

        通过资源管理提高计算机系统的效率;改善人机界面向用户提供友好的工作环境。

    2、特征

        并发性、共享性、虚拟性、不确定性。

    3、功能

        进程管理、存储管理、文件管理、设备管理。

    4、分类

        批处理操作系统、分时操作系统(轮流使用CPU工作片)、实时操作系统(快速响应)、网络操作系统、分布式操作系统(物理分散的计算机互联系统)、微机操作系统(Windows)、嵌入式操作系统。

    5、启动基本流程

        BIOS -> 主引导记录 -> 操作系统。

2.1.2 进程的组成和状态

    1、组成

        进程控制块PCB(唯一标志)、程序(描述进程要做什么)、数据(存放进程执行时所需数据)。

    2、状态

        进程基础的状态是下左图中的三态图,这是系统自动控制时只有三种状态,而下右图中的五态,是多了两种状态:静止就绪和静止阻塞,需要人为的操作才会进入对应状态,活跃就绪即就绪,活跃阻塞即等待。
image.png                  可知,当人为干预后,进程将被挂起,进入静止状态。此时,需要人为激活,才能恢复到活跃状态,之后的本质还是三态图。 

2.1.3 前趋图 

    用来表示哪些任务可以并行执行,哪些任务之间有顺序关系,具体如下图:

image.png

    可知,A B C可以并行执行,但是必须A B C都执行完后,才能执行D,这就确定了两点:任务间的并行、任务间的先后顺序。

2.1.4 进程资源图

    用来表示进程和资源之间的分配和请求关系,如下图所示:

image.png

    P代表进程,R代表资源,R方框中有几个圆球就表示有几个这种资源,在图中,R1指向P1,表示R1有一个资源已经分配给了P1,P1指向R2,表示P1还需要请求一个R2资源才能执行。

    1、阻塞节点

        某进程所请求的资源已经全部分配完毕,无法获取所需资源,该进程被阻塞了无法继续。如上图中P2。

    2、非阻塞节点

        某进程所请求的资源还有剩余,可以分配给该进程继续运行。如上图中P1、P3。

    3、当一个进程资源图中所有进程都是阻塞节点时,即陷入死锁状态。

2.1.5 同步和互斥

    1、互斥

        某资源(即临界资源)在同一时间内只能由一个任务单独使用,使用时需要加锁,使用完后解锁才能被其他任务使用:如打印机。

    2、同步

        多个任务可以并发执行,只不过有速度上的差异,在一定情况下停下等待,不存在资源是否单独或共享的问题:如自行车和汽车。

    3、临界资源

        各进程间需要以互斥方式对其进行访问的资源。

    4、临界区

        指进程中对临界资源实施操作的那段程序。本质是一段程序代码。

    5、互斥信号量

        对临界资源采用互斥访问,使用互斥信号量后其他进程无法访问,初值为1。

    6、同步信号量

        对共享资源的访问控制,初值一般是共享资源的数量。

    7、信号量操作

        (1)P操作

            申请资源,S=S-1,若S>=0,则执行P操作的进程继续执行;若S<0,则置该进程为阻塞状态(因为无可用资源),并将其插入阻塞队列。

        (2)V操作

            释放资源,S=S+1,若S>0,则执行V操作的进程继续执行;若S<=0,则从阻塞状态唤醒一个进程,并将其插入就绪队列(此时因为缺少资源被P操作阻塞的进程可以继续执行),然后执行V操作的进程继续。

image.png

    8、经典问题:生产者和消费者

        三个信号量:互斥信号量S0(仓库独立使用权),同步信号量S1(仓库空闲个数),同步信号量S2(仓库商品个数)

        生产者流程:                        消费者流程:

        生产一个商品S                      P(S0)

        P(S0)                                     P(S2)

        P(S1)                                     取出一个商品

        将商品放入仓库中                V(S1)    

        V(S2)                                     V(S0)

        V(S0)

       (1)问题分析

           这里有3个概念,分别是生产者、仓库、消费者。生产者把商品存进仓库,消费者从仓库取出商品。其中涉及到3个信号量,仓库的互斥信号量,因为仓库是独立使用的,生产者在使用的时候消费者不能使用。同步信号量S1代表仓库空闲个数,假设仓库可以容纳100个商品,里面一个商品都没有,它空闲的数量就是100。同步信号量S2代表仓库商品个数,这跟S1其实是对应的。

           仓库商品个数S2初始值就是0,互斥信号量S0初始值都是1,默认是可以使用。

       (2)生产者流程

           生产者生产完商品之后,要把它放进仓库里,有以下步骤:

           1.申请仓库的独立使用权,也就是申请互斥信号量S0

           2.申请仓库的空闲资源,也就是同步信号量S1。

           3.申请完之后,把商品放到仓库里,此时商品数量就多了一个,因此是V(S2)

           4.最后把仓库使用权释放掉,也就是释放互斥信号量S0

           所以整个生产者的流程是:P(S0) -> P(S1) -> V(S2) -> V(S0)。

       (3)消费者流程

           消费者要从仓库取商品,有以下步骤:

           1.申请仓库的独立使用权,也就是申请互斥信号量S0

           2.申请仓库商品个数资源,也就是同步信号量S2

           3.取出商品之后,仓库的空闲个数增加了,相当于释放了仓库空闲个数信号量S1

           4.最后把仓库使用权释放掉,也就是释放互斥信号量S0。

           所以整个消费者的流程是:P(S0) -> P(S2) -> V(S1) -> V(S0)。

2.1.6 死锁

    当一个进程在等待永远不可能发生的事件时,就会产生死锁,若系统中有多个进程处于死锁状态,就会造成系统死锁。

    1、死锁产生的四个必要条件

       (1)资源互斥

       (2)每个进程占有资源并等待其他资源

       (3)系统不能剥夺进程资源

       (4)进程资源图是一个环路

    2、打破死锁方法

       (1)死锁预防

           采用某种策略限制并发进程对于资源的请求,破坏死锁产生的四个条件之一,使用系统任何时刻都不满足死锁的条件

       (2)死锁避免

           一般采用银行家算法来避免,银行家算法,就是提前计算出一条不会死锁的资源分配方法,才分配资源,否则不分配资源,相当于借贷,考虑对方还得起才借钱,提前考虑好以后,就可以避免死锁。

       (3)死锁检测

           允许死锁产生,但系统定时运行一个检测死锁的程序,若检测到系统中发生死锁,则设法加以解除。

       (4)死锁解除

           即死锁发生后的解除方法,如强制剥夺资源,撤销进程等。

    3、死锁计算问题

       系统内有n个进程,每个进程都需要R个资源,那么其发生死锁的最大资源数为n*(R-1)。其不发生死锁的最小资源数为n*(R-1)+1

2.1.7 线程

    传统的进程有两个属性:可拥有资源的独立单位;可独立调度和分配的基本单位。

    引入线程后,线程是独立调度的最小单位,进程是拥有资源的最小单位,线程可以共享进程的公共数据、全局变量、代码、文件等资源,但不能共享线程独有的资源,如线程的栈指针等标识数据。

2.2 存储管理

2.2.1 页式存储管理

    将进程空间分为一个个页,假设每隔页大小为4K(不一定是4K,举例说明而已),同样的将系统的物理空间也分为一个个4K大小的物理块(页帧号),这样,每次将需要运行的逻辑页装入物理块中,运行完再装入其他需要运行的页,就可以分批次运行完进程,而无需将整块逻辑空间全部装入物理内存中。

image.png

    根据页式存储管理,哪怕只有4G内存也能带得动10几G的游戏,它不是把整个游戏全部加载在内存里,而是分页加载,需要哪个页就把哪个页调到内存里面运行。

    优点:利用率高、碎片小(只在最后一个页有)、分配及管理简单

    缺点:增加了系统开销,可能产生抖动现象

2.2.2 页面置换算法

    有时候,进程空间分为100个页面,而系统内存只有10个物理块,无法完全满足分配,就需要将马上要执行的页面先分配出去,而后根据算法进行淘汰,使100个页面能够按执行顺序调入物理块中执行完。

    1、最优算法

        OPT,理论上的算法,无法实现,是在进程执行完后进行的最佳效率计算,用来让其他算法比较差距。原理是选择未来最长时间内不被访问的页面置换,这样可以保证未来执行的都是马上要访问的。

    2、先进先出算法

        FIFO,先调入内存的页先被置换淘汰,会产生抖动现象,即分配的页数越多,缺页率可能越多(即效率越低),缺页计算如下:

    3、最近最少使用

        LRU,在最近的过去,进程执行过程中,过去最少使用的页面被置换淘汰,根据局部性原理,这种方式效率高,且不会产生抖动现象。

    缺页表示需要执行的页不在内存物理块中,需要从外部调入内存,会增加执行时间,因此,缺页数越多,系统效率越低。

2.2.3 快表

    1、快表是一块小容量的相联存储器,由快速存储器组成,按内容访问,速度快,并且可以从硬件上保证按内容并行查找,一般用来存放当前访问最频繁的少数活动页面的页号。

    2、快表是将页表存于Cache中:慢表是将页表存于内存上。

    3、因此慢表需要访问两次内存才能取出页,而快表是访问一次Cache和一次内存,因此更快。

    快表本质上也是页表,页表就是逻辑页号跟物理块号之间的对应关系,我们可以通过页表迅速找到物理地址。

    快表就是一种很快的页表,它是由快速存储器组成,里面存放的是一个页表。而且,快表是将页表存放在Cache里,这样我们读取页表的时候,先访问Cache里面的页表,找到页表对应的物理块号,然后组成物理地址,再去主存里面取出对应的页,也就是说,快表访问一次Cache再访问一次页。

    慢表是将页表存在内存里面,而页也是存在内存里,CPU访问这个页要先从内存里查找这个页表,取出页表对应的物理块号,组成物理地址,再去内存里访问这个页,也就是说它会访问两次内存;而快表只访问一次Cache加一次内存,所以快表比慢表要快得多。

2.2.4 段式存储管理

    将进程空间分为一个个段,每段也有段号和段内地址,与页式存储不同的是,每段物理大小不同,分段是根据逻辑整体分段的

    页是根据进程的逻辑地址按固定大小分页,物理块号也是按固定大小分。而段不是按固定大小分的,它是按逻辑整体分的,它的意思是根据一个功能或者一个函数分成一个段。例如一个函数实现了一个递归排序,那么把这个函数作为单独的段,每个函数的大小肯定不一样的。

    地址表示:(段号,段内偏移):其中段内偏移不能超过该段号对应的段长,否则越界错误,而此地址对应的真正内存地址应该是:段号对应的基地址+段内偏移。

image.png

    段表存的是段长和基址,因为每个段大小不一样,所以必须要知道每个段的基地址是多少,也就是起始地址在哪个地方,再加上段长才能确定整个段。例如段长30K,基址40K,也就是说在内存空间,第40K开始的地方,长是30K,那么这个段就是从40K-70K。

    优点:程序逻辑完整,修改互不影响。

    缺点:内存利用率低,内存碎片浪费大。因为段大小不固定,分配内存空间的时候不知道完整功能需要多大,往往会分配比较大的空间,相当于每个段都有内存碎片。

2.2.5 段页式存储管理

    对进程空间先分段,后分页,具体原理图和优缺点如下:

image.png

    优点:

        1、空间浪费小、存储共享容易、能动态连接

        2、优点:程序逻辑完整,修改互不影响

    缺点:

        1、由于管理软件的增加,复杂性和开销也增加,执行速度下降

        2、内存利用率低,内存碎片浪费大

2.3 文件结构

2.3.1 索引文件

    计算机系统中采用的索引文件结构如下图所示:

image.png

    1、直接索引

        系统中有13个索引节点,0-9为直接索引,即每个索引节点存放的是内容,假设每个物理盘大小为4KB,共可存4KB*10=40KB的数据;

    2、一级间接索引

        10号索引节点为一级间接索引节点,大小为4KB,存放的并非直接数据,而是链接到直接物理盘块的地址,假设每个地址占4B,则共有1024个地址,对应1024个物理盘,可存1024*4KB=4096KB数据。

    3、二级间接索引

        二级索引节点类似,直接盘存放一级地址,一级地址再存放物理盘块地址,而后链接到存放数据的物理盘块,容量又扩大了一个数量级,为1024*1024*4KB数据。

2.3.2 树形目录

    1、相对路径:是从当前路径开始的路径。

    2、绝对路径:是从根目录开始的路径。

    3、全文件名=绝对路径+文件名。

        绝对路径和相对路径是不加最后的文件名的,只是单纯的路径序列。

    4、树形结构主要是区分相对路径和绝对路径,如下图所示:

image.png

2.3.3 空闲存储管理

    1、空闲区表法:将所有空闲空间整合成一张表,即空闲文件目录。

    2、空闲链表法:将所有空闲空间链接成一个链表,根据需要分配。

    3、成组链接法:既分组,每组内又链接成链表,是上述两种方法的综合。

    4、位示图法:对每个物理空间用一位标识,为1则使用,为0则空闲,形成一张位示图

2.4 设备管理

2.4.1 I/O软件

    1、设备的分类方式

        (1)按数据组织分类:块设备、字符设备。

        (2)资源分配角度分类:独占设备、共享设备和虚拟设备。

        (3)数据传输速率分类:低速设备、中速设备和高速设备。

    2、I/O软件层次结构

image.png

2.4.2 输入输出技术

    1、程序控制(查询)方式

        CPU主动查询外设是否完成数据传输,效率极低。

    2、程序中断方式

        外设完成数据传输后,向CPU发送中断,等待CPU处理数据,效率相对较高。适用于键盘等实时性较高的场景。

    3、中断响应时间

        它指的是从发出中断请求到开始进入中断处理程序;中断处理时间指的是从中断处理开始到中断处理结束。中断向量提供中断服务程序的入口地址。多数中断嵌套,使用堆栈来保护断点和现场。

    4、DMA方式(直接主存存取)

        CPU只需完成必要的初始化等操作,数据传输的整个过程都由DMA控制器来完成,在主存和外设之间建立直接的数据通路,效率很高。适用于硬盘等高速设备。

    在一个总线周期结束后,CPU会影响DMA请求开始读取数据;CPU响应程序中断方式请求是在一条指令执行结束时;区分指令执行结束和总线周期结束。

2.4.3 SPOOLING

    1、一台实际的物理设备,例如打印机,在同一时间只能由一个进程使用,其他进程只能等待,且不知道什么时候打印机空闲,此时,极大的浪费了外设的工作效率。

    2、引入SPOOLING技术,就是在外设上建立两个数据缓冲区,分别称为输入井和输出井,这样,无论多少进程,都可以共用这一台打印机,只需要将打印命令发出,数据就会排队存储在缓冲区中,打印机会自动按顺序打印,实现了物理外设的共享,使得每个进程都感觉在使用一个打印机,这就是物理设备的虚拟化。如下图所示:

image.png

2.4.4 磁盘结构

    1、磁盘有正反两个盘面,每个盘面有多个同心圆,每个同心圆是一个磁道,每个同心圆又被划分为多个扇区,数据就被存放在一个个扇区中。

    1、读取数据时,磁头首先要寻找到对应的磁道,然后等待磁盘进行周期旋转,旋转到指定的扇区,才能读取到对应的数据,因此,会产生寻道时间和等待时间,就是磁头移动到磁道所需的时间和等待读写的扇区转到磁头的下方所用的时间。其中寻道时间耗时最长,寻道时间的调度算法如下:

    1、先来先服务FCFS:根据进程请求访问磁盘的先后顺序进行调度。

    1、最短寻道时间优先SSTF:请求访问的磁道与当前磁道最近的进程优先调度,使得每次的寻道时间最短。会产生"饥饿"现象,即远处进程可能永远无法访问。

    1、扫描算法SCAN:又称"电梯算法":磁头在磁盘上双向移动,其会选择离磁头当前所在磁道最近的请求访问的 磁道,并且与磁头移动方向一致,磁头永远都是从里向外或者从外向里一致移动完才掉头,与电梯类似。

    1、单向扫描调度算法CSCAN:与SCAN不同的是,其只做单向移动,即只能从里向外或者从外向里。

2.5 操作系统类型

    1、微内核操作系统

        微内核,顾名思义,就是尽可能的将内核做得很小,只将最为核心必要的东西放进内核中,其他能独立的东西都放入用户进程中,这样,系统就被分为了用户态和内核态,如下图所示:

image.png

    2、嵌入式操作系统

        (1)嵌入式操作系统特点:微型化、代码质量高、专业化、实时性强、可裁剪可配置。

        (2)实时嵌入式操作系统的内核服务:异常和中断、计时器、I/O管理。

        (3)常见的嵌入式RTOS(实时操作系统):VxWorks、RT-Linux、QNX、pSOS。

        (4)嵌入式系统初始化过程按照自底向上、从硬件到软件的次序依次为:

            1.片级初始化->板级初始化->系统初始化

            2.芯片级是微处理器的初始化,板卡级是其他硬件设备初始化,系统级初始化就是软件及操作系统初始化。

2.6 历年真题

2.6.1 进程管理

2.6.1.1 进程资源图

    1、在如下所示的进程资源图中,();该进程资源图是()。

image.png

       A.P1、P2、P3都是阻塞节点

       B.P1是阻塞节点,P2、P3是非阻塞节点

       C.P1、P2是阻塞节点,P3是非阻塞节点     

       D.P1、P2是非阻塞节点,P3是阻塞节点       

       答案:C

       解析:R1只有2个资源,分别给了P1和P3,因此P2请求R1资源已经是没有了,所以P2是阻塞节点。R2有3个资源,分别给了P1、P2、P3,但是P1仍需要一个R2资源,注意P1虽然已经得到R2的一个资源,但它还缺一个R2资源,也就是说它总共需要R2的两个资源,此时R2已经把资源分配完了,没有剩余资源给P1,因此P1也是阻塞节点。对于P3而言,它得到R1和R2的资源,还需要一个R3资源,R3有2个资源,把1个资源给了P2还剩一个资源可以给P3,因此P3是非阻塞节点。最终答案是C。

       A.可以化简的,其化简顺序为P1->P2->P3

       B.可以化简的,其化简顺序为P3->P1->P2

       C.可以化简的,其化简顺序为P2->P1->P3    

       D.不可以化简的,因为P1、P2、P3申请的资源都不能得

       答案:B

       解析:进程资源图化简的方法是:先看系统还剩下多少资源没分配,再看有哪些进程是不阻塞的,接着把不阻塞的进程的所有边都去掉,形成一个孤立的点,再把系统分配给这个进程的资源回收回来,这样,系统剩余的空闲资源便多了起来,接着又去看看剩下的进程有哪些是不阻塞的,然后又把它们逐个变成鼓励的点。最后,所有的资源和进程都变成孤立的点。图中P3是不阻塞的,故P3为化简图的开始,把P3孤立,再回收分配给它的资源,可以看到P1也变为不阻塞节点了,故P3、P1、P2是可以的。

2.6.1.2 同步和互斥

    1、进程P1、P2、P3、P4和P5的前趋图如下图所示:

image.png

image.png         若用PV操作控制进程P1、P2、P3、P4和P5并发执行的过程,则需要设置5个信号S1、S2、S3、S4和S5,且信号量S1~S5的初值都等于零。下图中a和b处应分别填(26);c和d处应分别填写(27);e和f处应分别填写(28)。

       26、A.V(S1)P(S2)和V(S3)    B.P(S1)V(S2)和V(S3)

              C.V(S1)V(S2)和V(S3)    D.P(S1)P(S2)和V(S3)    

       27、A.P(S2)和P(S4)    B.P(S2)V(S4)

              C.V(S2)和P(S4)    D.V(S2)V(S4)       

       28、A.P(S4)和V(S4)V(S5)    B.V(S5)和P(S4)P(S5)

              C.V(S3)和V(S4)V(S5)    D.P(S3)和P(S4)V(P5)

       答案:26选C,27选B,28选B

       分析:这里有5个信号量是因为它的前趋图有5根线,信号量主要是控制同步和互斥的,同步和互斥是由这些线来控制的,箭头指向代表一个进程必须等待另一个进程执行完才能执行,所以箭头才是真正的信号量。

           (1)P1执行完之后,它的前趋图箭头指向P2、P3,也就是说它释放了两个信号量S1、S2,这个编号惯例就是从小到大编号,因此先假设它就是S1和S2,因此a就是V(S1)和V(S2)

           (2)P1释放了S1和S2之后,P2、P3就可以执行了。在流程图中,P2执行需要一个P(S1),这也印证了P1->P2这条线就是S1,P1->P3这条线就是S2。P2执行完释放了P4需要的信号量,可以假设为S3,所以b就是V(S3)。

           (3)P3执行需要S2信号量,因此c就是P(S2)。P3执行完释放了P5需要的信号量,可以假设为S4,那么d就是V(S4)。

           (4)P4执行需要S3信号量,P4执行完释放了P5需要的信号量S5(因为前面已经出现了S1S2S3S4了,只剩S5),那么e就是V(S5)。

           (5)P5执行需要S4和S5信号量,所以f就是P(S4)P(S5)。

image.png

    2、进程P1、P2、P3、P4和P5的前趋图如下所示,若用PV操作控制这6个进程的同步与互斥的程序如下,那么程序中的空①和空②处应分别为();空③和空④处应分别为();空⑤和空⑥处应分别为()。

image.png

image.png

       若用PV操作控制进程P1、P2、P3、P4和P5并发执行的过程,则需要设置5个信号S1、S2、S3、S4和S5,且信号量S1~S5的初值都等于零。下图中a和b处应分别填(26);c和d处应分别填写(27);e和f处应分别填写(28)。

       A.V(S1)V(S2)和P(S2)    B.P(S1)P(S2)和V(S2)

       C.V(S1)V(S2)和P(S1)    D.P(S1)P(S2)和V(S1)    

       A.V(S3)和V(S5)V(S6)    B.P(S3)和V(S5)V(S6)

       C.V(S3)和P(S5)P(S6)    D.P(S3)和P(S5)P(S6)       

       A.P(S6)和P(S7)V(S8)    B.V(S6)和V(S7)V(S8)

       C.P(S6)和P(S7)P(S8)    D.V(S7)和P(S7)P(P8)

       答案:C B D

       分析:其实这个题目跟上一题很类似,只不过用的是一段伪代码来表示而已。

           (1)P1执行完之后,它的前趋图箭头指向P2、P3,也就是说它释放了两个信号量S1、S2,这个编号惯例就是从小到大编号,因此先假设它就是S1和S2,因此①就是V(S1)和V(S2)

           (2)在流程图中,P2执行需要一个信号量的,可能是S1,也可能是S2,所以还不确定②是P(S1)还是P(S2),A还是C还要往下观察。

           (3)在流程图中,P3执行之前需要P(S2),这里可以确定P1->P3的是S2,而P1->P2的是S1。所以②是P(S1)。P3除了需要S2,还需要③,这个③就是P2->P3的信号量,从答案中已经得知P2->P3就是S3,P2->P4就是S4。P3执行完之后,会释放P4和P5需要的信号量,假设它们为S5和S6,那么④就是V(S5)V(S6)。

           (4)P4执行需要S4和S5信号量,说明P3->P4的是S5,P3->P5的是S6。执行完释放了P6需要的信号量,假设这个信号量是S7,那么⑤就是V(S7)。

           (5)P6执行需要S7和S8信号量,所以⑥是P(S7)P(S8)。

    3、假设某系统采用非抢占式优先级调度算法,若该系统有两个优先级相同的进程P1和P2,各进程的程序段如下所示,若信号量S1和S2的初值都为0,进程P1和P2并发执行后a, b和c的结果分别为:a=(),b=(),c=()。

image.png

       A.6    B.7   C.10    D.13    

       A.4    B.6   C.9      D.10

       A.4    B.6   C.10    D.13

       答案:D B C

       分析:进程调度分为抢占式和非抢占式。有一个进程在运行的时候,它占用了CPU资源,如果有一个进程的优先级比当前正在运行的优先级高,如果系统也是抢占式的,那就可以强制抢占当前的CPU,把正在运行的进程挤下去。如果是非抢占式的话,就算优先级再高也只能等着它运行完,释放CPU。

           (1)P1程序段

               1.a:=1相当于a=1

               2.a:=a+2就是a=a+2=3

               3.V(S1),S1初值是0,那就是0+1=1,它现在是大于0的状态,可以继续执行

               4.c:=a+1,那就是c=3+1=4

               5.P(S2),S2初值是0,申请一个S2资源,因此S2=0-1=-1,此时S2小于0,进程就阻塞在这里。

               6.a:=a+c,在P2进程的第5步释放了S2资源之后,等待P2进程完全执行结束,此时c的值为10,因此a=3+10=13。

           (2)P2程序段

               1.b:=1相当于b=1

               2.b:=b+2就是b=b+2=3

               3.P(S1),由于P1程序段释放了S1资源,因此S1的值是1,此时申请一个S1资源,那就是1-1=0,只要是不小于0的那就可以继续执行。

               4.b:=a+b,那就是b=3+3=6

               5.V(S2),S2初值是0,释放一个S2的资源,那么S2=0+1=1,此时可以唤醒P1的进程。`注意:它虽然唤醒了P1进程,但是要先执行完当前进程,所以这里继续往下执行。

               6.c:=b+c,那就是c=6+4=10。

               7.P2进程全部执行完毕,继续执行P1进程。

2.6.1.3 死锁

    1、某系统中有3个并发进程竞争资源R,每个进程都需要5个R,那么至少有()个R,才能保证系统不会发生死锁。

       A.12    B.13   C.14    D.15

       答案:B

       分析:每个进程需要5个R才能执行,则当每个进程都只有4个R时是死锁最坏的情况,即3*4=12个资源是死锁发生的最大资源数,再加1就能保证不发生死锁,因此是13。

    2、银行家算法真题

       假设系统中有三类互斥资源R1、R2和R3,可用资源数分别为10、5和3。在T0时刻系统中有P1、P2、P3、P4和P5五个进程,这些进程对资源的最大需求和已分配资源数如下表所示,此时系统剩余的可用资源数分别为()。如果进程按()序列执行,那么系统状态是安全的。

image.png

       A.1、1和0    B.1、1和1   C.2、1和0    D.2、0和1

       A.P1->P2->P4->P5->P3    B.P5->P2->P4->P3->P1

       C.P4->P2->P1->P5->P3    D.P5->P1->P4->P2->P3

       答案:D B

       分析:

           (1)剩余的可用资源数

               R1、R2、R3可用资源数分别为10、5、3,已分配资源数分别为8、5、2,所以剩余的可用资源数分别为2、0、1。

           (2)系统安全执行序列

               首先P1是不行的,因为P1还需要4个R1资源,目前只剩余2个。同样P4也不行,虽然R1能满足,但R2还缺两个,目前R2是没有空闲资源的。因此P5为第一个先执行,执行完释放了2、1、1资源,接下来就应该执行P2,所以选择B。

2.6.2 存储管理

2.6.2.1 页式存储管理

    1、某计算机系统页面大小为4K,若进程的页面变换表如下所示,逻辑地址为十六进制1D16H。该地址经过变换后,其物理地址应为十六进制()。

image.png

       A.1024H    B.3D16H   C.4D16H    D.6D16H

       答案:B

       分析:页面大小为4K,4K就是4096B,也就是2^12次方,因此页内偏移地址为12位,才能表示4K大小空间;因为12位的二进制只能表示3位16进制的数,由此可知逻辑地址1D16H的低12位D16H为偏移地址,高4位1为逻辑页号,在页表中对应物理块号3,因此物理地址为3D16H。

2.6.2.2 页面置换算法

    1、某进程有4个页面,页号为0~3,页面变换表及状态位、访问位和修改位的含义如下图所示,若系统给该进程分配了3个存储块,当访问前页面1不在内存时,淘汰表中页号为()的页面代价最小。

image.png

       A.0    B.1   C.2    D.3

       答案:D

       分析:根据LRU最近最少使用算法的局部性原理,应该优先淘汰最近未被访问过的,而后淘汰最近未被修改过的,由页表可知,023最近都被访问过,而只有3最近未被修改过,应该淘汰3。

       然而其实这种题目,就算不知道上述原理,也能做出,答案只有一个,肯定是与其他不同的具有唯一性的一个,在023中,02的访问位和修改位一样,只有3不同,答案就是3。

2.6.2.3 段式存储管理

    1、设某进程的段表如下所示,逻辑地址()可以转换为对应的物理地址。

image.png

       A.(0,1597)、(1,30)和(3,1390)    

       B.(0,128)、(1,30)和(3,1390)  

       C.(0,1597)、(2,98)和(3,1390)  

       D.(0,128)、(2,98)和(4,1066)  

       答案:B

       分析:因为0段的段长只有600,而逻辑地址(0,1597)中的1597已经越界,不能转换成逻辑地址,而选项A和选项C中都包含逻辑地址(0,597)所以是错误的。又因为4段的段长只有960,而逻辑地址(4,1066)中的1066已经越界,也不能转换成逻辑地址,而选项D中包含逻辑地址(4,1066)所以是错误的。

2.6.3 文件结构

2.6.3.1 索引文件

    1、设文件索引节点中有8个地址项,每个地址项大小为4字节,其中5个地址项为直接地址索引,2个地址项是一级间接地址索引,1个地址项是二级间接地址索引,磁盘索引块和磁盘数据块大小均为1KB,若要访问文件的逻辑块号分别为5和518,则系统应分别采用(),而且可表示的单个文件最大长度是()KB。

       A.直接地址索引和一级间接地址索引    

       B.直接地址索引和二级间接地址索引  

       C.一级间接地址索引和二级间接地址索引

       D.一级间接地址索引和一级间接地址索引  

       A.517    B.1029   C.16513    D.66053

       答案:C D

       分析:依题意,有5个地址项为直接地址索引,所以直接地址索引涉及到的逻辑块号为:0-4。2个地址项为一级间接索引,每个一级间接索引结点对应的逻辑块个数为:1KB/4B=256个。所以一级间接索引涉及到的逻辑块号为:5-516。二级间接索引所对应的逻辑块号即为:517以上。可表示的单个文件长度,首先计算直接地址索引,就是5个数据块,为5KB,而后一级间接地址索引,可表示256个数据块,即256KB,二级间接地址索引可存储1KB/4B=256个一级间接地址索引,每个一级间接地址索引又可存储256KB,因此是256*256KB,全部加起来共5+256*2+256*256=66053。

2.6.3.2 树形目录

    1、若某文件系统的目录结构如下图所示,假设用户要访问文件Fault.swf,且当前工作目录为swshare,则该文件的全文件名为(),相对路径和绝对路径分别为()。

image.png

       A.fault.swf

       B.flash\fault.swf

       C.swshare\flash\fault.swf

       D.\swshare\flash\fault.swf

       A.swshare\flash\和\flash\

       B.flash和\swshare\flash\

       C.\swshare\flash\和flash\

       D.\flash\和\swshare\flash\

       答案:D B

2.6.3.3 空闲存储管理

    1、某文件管理系统采用位示图(bitmap)记录磁盘的使用情况。如果系统的字长为32位,磁盘物理块的大小为4MB,物理块依次编号为:0、1、2、...,位示图字依次编号为:0、1、2、...,那么16385号物理块的使用情况在位示图中的第()个字中描述:如果磁盘的容量为1000GB,那么位示图需要()个字来表示。

       A.-128    B.256   C.512    D.1024 

       A.1200    B.3200   C.6400    D.8000

       答案:C D

       分析:在位示图中,一个物理块占1个字中的1位,第16385占到16386位(从0编号),16386/32=512余数2,可知,其在513个字中描述,但因为从0开始编号,是第512个字;磁盘容量1000GB,共1000GB/4MB=2501024个物理块,需要250Kb表示,即2501024bit/32bit=8000个字。

2.6.4 设备管理

2.6.4.1 输入输出技术

    1、计算机系统中主机与外设间的输入输出控制方式有多种,其中占用主机CPU时间最多的是()方式。

       A.通道    B.DMA   C.中断    D.程序查询

       答案:D

       分析:在计算机中,输入输出控制方式主要有5种,分别是程序查询方式(程序控制方式)、程序中断方式、DMA工作方式、通道方式、I/O处理机。这5种方式占用主机CPU时间按多到少排序为:程序查询方式(程序控制方式)、程序中断方式、DMA工作方式、通道方式、I/O处理机

2.6.4.2 磁盘结构

    1、某磁盘有100个磁道,磁头从一个磁道移至另一个磁道需要6ms。文件在磁盘上非连续存放,逻辑上相邻数据块的平均距离为10个磁道,每块的旋转延迟时间及传输时间分别为100ms和20ms,则读取一个100块的文件需要()ms。

       A.12060    B.12600   C.18000    D.186000

       答案:C

       分析:磁盘读取时间=寻道时间+等待时间。此题中平均寻道时间为10*6=60ms,等待时间为100+20=120ms,因此每个磁道读取时间为180ms,100个磁道就是18000ms。