作者:小鱼2502907687 | 来源:互联网 | 2023-06-17 18:25
操作系统 错题记录 《961计算机基础综合配套习题》
Q: 有3个进程P1、P2和P3并发工作。进程P1需用资源S3和S1;进程P2需用资源S1和S2;进程P3需用资源S2和S3。回答(北航期末考试题) (1)若对资源分配不加限制,会发生什么情况?为什么? (2)为保证进程正确地工作,应采用怎样的资源分配策略?为什么?
A: (1)若对资源分配不加限制,上述进程可能会进入死锁状态。因为P1、P2、P3是兵法工作的,所以完全有可能发生下述情况,此时P1获得了S3,P2获得了S1,P3获得了S2,但同时他们又循环等待下一个进程释放锁占用的资源,从而进入死锁状态。
(2)为保证进程正确地工作,可采取下列资源分配策略: ①要求进程一次性的申请它所需的全部资源。这样可破坏“请求与保持”条件。 ②要求进程严格按资源号递增的顺序申请资源,即P1先申请S1,再申请S3;P2先申请S1,再申请S2; P3先申请S2,再申请S#。这样可破坏“环路等待”条件。 ③当一个进程申请资源时,如果系统已无此类资源可用,但某个拥有该资源的其他进程处于阻塞状态,则允许前者抢占后者的资源。这样可破坏“不剥夺”条件。
Q: (1)主存利用率不高主要体现为哪几种形式? (2)可以通过哪些途径来提高主存利用率?
A: (1)内存利用率不高,主要有四种表现形式: ①内存存在着大量的、分散的难以利用的碎片; ②暂时不用或长期不能运行的程序或数据,占据了大量的存储空间; ③当作业较大时,内存中只能装入少量的作业,当其阻塞时,将使CPU空闲,从而降低了内存利用率; ④内存中存在着重复的拷贝。
(2)针对上述问题,可采用以下方法提高内存利用率: ①改连续分配方式为离散分配方式以减少内存的零头; ②增加对换机制,将那些暂时不能运行的进程或暂不需要的程序和数据环换出至外存,以腾出内存来装入运行的进程; ③引入动态链接机制,当程序在运行中需要调用某段程序时才将该程序装入内存,从而避免装入不会用到的程序段和数据; ④引入虚拟存储器机制,使更多的作业能够装入内存,提高CPU和内存利用率; ⑤引入存储器共享机制,允许一个正文段或数据段被若干进程共享以消除内存中的重复拷贝现象。
Q:在采用首次适应算法回收内存时,可能出现哪几种情况?应怎么样处理这些情况?
A: a. 回收区与插入点的前一个分区相邻接,此时可将回收区与插入点的前一分区合并,不再为回收分区分配新表项,而只修改前邻接分区的大小; b. 回收分区与插入点的后一分区相邻接,此时合并两区,然后用回收区的首址作为新空闲区的首址,大小为两者之和; c. 回收区同时与插入点的前后两个分区邻接,此时将三个分区合并,使用前邻接分区的首址,大小为三区之和,取消后邻接分区的表项; d. 回收区没有邻接空闲分区,则应为回收区单独建立一个新表项,填写回收区的首址和大小,并根据其首址,插入到空闲链中的适当位置.
Q:详述在设有快表的请求分页存储管理系统中,一个虚地址转换成物理内存地址的过程。
A:当CPU给出逻辑地址后,地址变换机构自动讲逻辑地址划分成页号和页内偏移两部分。然后将页号与快表中的所有页号进行比较,若快表中由于此匹配的页号,则表示所要访问的页表项在快表中,于是取出该页对应的物理块号,与页内地址拼接形成物理地址。同时还应修改页表项中的访问位,对于写指令还需要将修改位置为1.若快表中的所有页号与所查找页号不匹配,则还需要在访问主存中的页表。若该页在主存,则从页表中取出物理块号,与页内地址拼接形成物理地址。若该页不在内存,则产生缺页中断,请求操作系统将缺页调入内存,再按前述方式进行地址变换。如果地址变换是通过查找内存中表项完成的,则还应将这次所查到的页表项存入快表中,若快表已满,则必须按某种置换算法淘汰一个表项,以腾出位置存入此页表项。
Q:一个文件系统中有一个20MB大文件和一个20KB小文件,当分别采用连续、链接、链接索引、二级索引和LINUX分配方案时,每块大小为4096B,每块地址用4B表示。问: (1)各文件系统管理的最大文件是多少? (2)每种方案对大、小两文件各需要多少专用块来记录文件的物理地址(说明各块的用途)? (3)如需要读大文件前面第5.5KB的信息和后面第(16M+5.5KB)的信息,则每个方案各需要多少次盘I/O操作?
A: (1)
连续分配:理论上是不受限制,可大到整个磁盘文件区。
隐式链接:由于块的地址为4字节,所以能表示的最多块数为 232=4G,而每个盘块中存放文件大小为4092字节。链接分配可管理的最大文件为:4G×4092B=16368GB
链接索引:由于块的地址为4字节,所以最多的链接索引块数为 232=4G,而每个索引块有1023个文件块地址的指针,盘块大小为4KB。假设最多有n个索引块,则1023×n+n=232,算出n=222,链接索引分配可管理的最大文件为:4M1023 4KB=16368GB
二级索引:由于盘块大小为4KB,每个地址用4B表示,一个盘块可存1K个索引表目。 二级索引可管理的最大文件容量为4KB×1K×1K=4GB。
LINUX混合分配:LINUX的直接地址指针有12个,还有一个一级索引,一个二级索引,一个三级索引。因此可管理的最大文件为48KB+4MB+4GB+4TB。 (2)
连续分配:对大小两个文件都只需在文件控制块FCB中设二项,一是首块物理块块号,另一是文件总块数,不需专用块来记录文件的物理地址。
隐式链接:对大小两个文件都只需在文件控制块FCB中设二项,一是首块物理块块号,另一是末块物理块块号;同时在文件的每个物理块中设置存放下一个块号的指针。
一级索引:对20KB小文件只有5个物理块大小,所以只需一块专用物理块来作索引块,用来保存文件的各个物理块地址。对于20MB大文件共有5K个物理块,由于链接索引的每个索引块只能保存(1K-1)个文件物理块地址(另有一个表目存放下一个索引块指针),所以它需要6块专用物理块来作链接索引块,用于保存文件各个的物理地址。
二级索引:对大小文件都固定要用二级索引,对20KB小文件,用一个物理块作第一级索引,用另一块作二级索引,共用二块专用物理块作索引块,对于20MB大文件,用一块作第一级索引,用5块作第二级索引,共用六块专用物理块作索引块。
LINUX的混合分配:对20KB小文件只需在文件控制块FCB的i_addr[15]中使用前5个表目存放文件的物理块号,不需专用物理块。对20MB大文件,FCB的i_addr[15]中使用前12个表目存放大文件前12块物理块块号(48K),用一级索引块一块保存大文件接着的1K块块号(4M),剩下还有不到16M,还要用二级索引存大文件以后的块号,二级索引使用第一级索引1块,第二级索引4块(因为4KB×1K×4=16 M)。总共也需要6块专用物理块来存放文件物理地址。 (3)
连续分配:为读大文件前面和后面信息都需先计算信息在文件中相对块数,前面信息相对逻辑块号为5.5K/4K=1(从0开始编号),后面信息相对逻辑块号为(16M+5.5K)/4K=4097。再计算物理块号=文件首块号+相对逻辑块号,最后化一次盘I/O操作读出该块信息。
链接分配:为读大文件前面5.5KB的信息,只需先读一次文件头块得到信息所在块的块号,再读一次第1号逻辑块得到所需信息,共2次。而读大文件16MB+5.5KB处的信息,逻辑块号为(16M+5.5K)/4092=4107,要先把该信息所在块前面块顺序读出,共化费4107次盘I/O操作,才能得到信息所在块的块号,最后化一次I/O操作读出该块信息。所以总共需要4108次盘I/O才能读取(16MB+5.5KB)处信息。
链接索引:为读大文件前面5.5KB处的信息,只需先读一次第一个索引块得到信息所在块的块号,再读一次第1号逻辑块得到所需信息,共化费2次盘I/O操作。为读大文件后面16MB+5.5KB处的信息,(16MB+5.5KB)/(4KB×1023)=4,需要先化5次盘I/O操作依次读出各索引块,才能得到信息所在块的块号,再化一次盘I/O操作读出该块信息。共化费6次盘I/O操作。
二级索引:为读大文件前面和后面信息的操作相同,首先进行一次盘I/O读第一级索引块,然后根据它的相对逻辑块号计算应该读第二级索引的那块,第一级索引块表目号=相对逻辑块号/1K,对文件前面信息1/1K=0,对文件后面信息4097/1K=4,第二次根据第一级索引块的相应表目内容又化一次盘I/O读第二级索引块,得到信息所在块块号,再化一次盘I/O读出信息所在盘块,这样读取大文件前面或后面处信息都只需要3次盘I/O操作。
LINUX混合分配:为读大文件前面5.5KB处信息,先根据它的相对逻辑块号,在内存文件控制块FCB的i_addr第二个表目中读取信息所在块块号,而只化费一次盘I/O操作即可读出该块信息。为读大文件后在(16MB+5.5KB)信息,先根据它的相对逻辑块号判断要读的信息是在二级索引管理范围内,先根据i_addr内容化一次盘I/O操作读出第一级索引块,再计算信息所在块的索引块号在第一级索引块的表目号为(4097-12-1024)/1024=2,根据第一级索引块第3个表目内容再化费一次盘I/O操作,读出第二级索引块,就可以得到信息所在块块号,最后化一次盘I/O读出信息所在盘块,这样总共需要3次盘I/O操作才能读出文件后面的信息。