(1)需要高精度的实时时钟管理。
(2)需要高可靠性和安全性作保证。
(3)需要连续的人机对话功能及快速的中断响应、中断处理能力。
(4)过载的防护等问题。
3.为了节省内存,UNIX系统把进程控制块分成两部分。一部分为进程的基本控制块,简称proc结构,它存放着进程最常用的一些信息,所以proc结构一般常驻内存。另一部分称为进程扩充控制块,简称user结构,它存放着进程的一些必要但不常使用的信息。ppda(进程系统数据区)包含user结构和系统栈,ppda可以不常驻内存是为了减少内存的开销。把ppda和其他数据结构(指用户栈区和用户数据区)合起来形成进程的数据段,其好处是方便一起调入调出内存。
4.所谓地址重定位,就是当一个程序装入到与其地址空间不一致的存储空间而进行的地址变换过程,即将地址空间给出的逻辑地址映射到内存的物理地址。地址重定位有静态重定位和动态重定位两种方式。
采用内存分区管理时,在硬件上设置一个“重定位寄存器”可以实现程序运行时的动态重定位。这种情况下地址重定位是在程序执行期间由地址变换机构动态实现的,主要的计算依据是:
物理地址=逻辑地址+重定位寄存器的内容
5.所有字符设备都是独享设备并属于慢速设备,本质上属于顺序存取设备。因此,一个进程在某台字符设备上进行数据交换时,往往要等待较长时间,并且在该数据交换完成之前,其他进程不能同时访问这台设备。而且动态分配也不能真正提高这类设备的利用率,当一个进程正在使用这类设备进行一次较大量的数据交换时,其他需要同时访问该设备的进程就要等待较长时间,从而降低了整个系统的并发能力。SPOOLing技术正是针对上述问题提出的一种设备管理技术。
SPOOLing系统可带来的好处是:
(1)字符设备和各虚拟设备之间的数据交换由SPOOLing进程统一调度实施,而且这种数据交换以并行方式进行,系统呈现出高度的并行性;
(2)用户使用的是虚拟设备,可以减少用户进程的等待时间。
在多道程序系统中,用程序模拟脱机输入/输出时外围控制机的功能,这样便可在主机的直接控制下实现脱机输入/输出功能。此时的外围操作与CPU对数据处理同时进行,这种在联机情况下实现的外围设备同时操作称为SPOOLing,也称伪脱机。
SPOOLing系统的核心思想是利用一台可共享性、高速大容量的块设备(磁盘)来模拟独占设备的操作,使一台独占设备变成多台可并行使用的虚拟设备。SPOOLing系统主要由输入井和输出井、输入缓冲区和输出缓冲区、输入进程和输出进程三部分组成。它的好处是提高了I/0操作的速度,将独占设备改造为共享设备,实现了虚拟设备功能。
6.在文件系统中,文件目录记录文件的管理信息,又称为文件控制块,或文件说明信息。文件系统把同一卷上的若干文件的文件目录组成一个独立的文件,这个文件全部由文件目录组成,称为目录文件。
文件目录用于对单个文件的控制,它记录文件的名字、文件长度、文件存放在外存的物理地址,以及文件属性和文件建立时间、日期等信息。目录文件是全部文件目录组成的文件,用于整个文件系统的管理。
文件的目录结构一般有三种形式:一级目录,二级目录,多级树型目录。一级目录简单方便,但不允许文件重名。二级目录由主目录和用户文件目录两极组成,可以解决文件的重名和别名问题。多级树型目录是二级目录的扩充。
目前,广泛采用的目录结构形式是树型目录结构。它的主要优点是:
(1)检索效率高;
(2)允许文件重名;
(3)确切反映了信息的层次结构,并可以利用层次结构实现文件共享和保护。
三、(本题10分)
(1)采用FCFS的调度算法时,各作业在系统中的执行情况表附2—1所示。表附2—1
作业执行次序 |
执行时间 |
优先数 |
等待时间 |
周转时间 |
带权周转时间 |
1 |
10 |
3 |
0 |
10 |
1 |
2 |
1 |
1 |
10 |
11 |
11 |
3 |
2 |
3 |
11 |
13 |
6.5 |
4 |
1 |
4 |
13 |
14 |
14 |
5 |
5 |
2 |
14 |
19 |
3.8 |
系统中作业的平均周转时间为:T=(10+11+13+14+19)/5=13.4。
系统中作业的平均带周转时间为:W=(1+11+6.5+14+3.8)/5=7.26
(2)采用RR(时间片=1)时,各作业在系统中的执行情况为:(1,2,3,4,5),(1,3,5),(1,5,1,5,1,5),(1,1,1,1,1,)。假设作业1~5的周转时间分别为T1~T5,显然:T1=T9,T2=T2,T3=7,T4=4,T5=14。系统中作业的平均周转时间为:
T=(19+2+7+4+14)/5=9.2
假设作业1~5的带权周转时间分别为W1~W5,那么,W1=19/10=1.9,W2=2/I=2,W3=7/2=3.5,W4=4/1=4,W5=14/5=2.8。系统中作业的带权平均周转时间为:
W=(1.9+2+3.5+4+2.8)/5=2.84
(3)采用SJF算法时,各作业在系统中的执行情况如表附2—2所示。
表附2—2
作业执行次序 |
执行时间 |
优先数 |
等待时间 |
周转时间 |
带权周转时间 |
2 |
1 |
1 |
0 |
1 |
1 |
4 |
1 |
4 |
1 |
2 |
2 |
3 |
2 |
3 |
2 |
4 |
2 |
5 |
5 |
2 |
4 |
9 |
1.8 |
1 |
10 |
3 |
9 |
19 |
1.9 |
系统中作业的平均周转时间为:T=(1+2+4+9+19)/5=7.0。
系统中作业的平均带周转时间为:W=(1+2+2+1.8+1.9)/5=1.74。
(4)采用非剥夺的优先级调度算法时,各作业在系统中的执行情况如表附2—3所示(假设优先数越小优先级越高)。
表附2—3
作业执行次序 |
执行时间 |
优先数 |
等待时间 |
周转时间 |
带权周转时间 |
2 |
1 |
1 |
0 |
1 |
1 |
5 |
5 |
2 |
1 |
6 |
1.2 |
1 |
10 |
3 |
6 |
16 |
1.6 |
3 |
2 |
3 |
16 |
18 |
9 |
4 |
1 |
4 |
18 |
19 |
19 |
系统中作业的平均周转时间为:T=(1+6+16+18+19)/5=12.0。
系统中作业的带权平均周转时间为:W=(1+1.2+1.6+9+19)/5=6.36。
四、(本题10分)
FIFO算法的基本思想是先淘汰那些驻留在主存时间最长的页面,LRU算法的实质是淘汰最近一段时间内最久未用的页面,Optimal算法所选择的被淘汰页面,将是永不使用的或者是在最长时间内不再被访问的页面。
本题答案结果数据如表附2—4所示。
表附2—4
淘汰算法 物理块数 |
FIFO |
LRU |
Optimal |
4 |
14 |
10 |
8 |
5 |
12 |
8 |
7 |
6 |
9 |
7 |
7 |
五、(本题10分)
引入缓冲区的主要原因如下:
(1)缓和CPU与I/O设备间速度不匹配的矛盾;
(2)减少对CPU的中断频率,放宽对中断响应时间的限制;
(3)提高CPU与I/O设备之间的并行操作程度。
UNIX操作系统将设备分为字符设备和块设备分别进行管理。块设备是指磁盘、
磁鼓、磁带等高速设备,它们传送信息的单位是块(512字节)。字符设备是指打印机、键盘、卡片机等低速设备,它们传送信息的单位是字节。UNIX操作系统分别为字符设备和块设备设置了缓冲区。字符设备缓冲区的大小以字节为单位,块设备的缓冲区则以盘块大小(一般为512字节)为单位。
(1)字符设备缓冲区管理:UNIX在系统中设置了一组字符缓冲区,供各种字符设备使用。其中,每个缓冲区的大小为70个字节,包括四项:第一个字符位置,最后一个字符位置,指向下一个缓冲区的指针和余下的用于存放64个字符的缓冲区。所有的空闲缓冲区链接成一个队列。缓冲区的分配和释放均可在链首处进行。
(2)块设备缓冲区管理:UNIX操作系统的块设备缓冲区管理采用类似缓冲池管理的方法。每个缓冲区由两部分组成:第一部分是缓冲区首部,用于存放缓冲区的管理和控制信息;第二部分是真正的缓冲区,用于存放数据。两者一一对应,但物理上并不相连,而是独立存储。缓冲区动态地组织成空闲缓冲区队列、设备缓冲区队列和设备I/O请求队列。空闲缓冲区队列是有空闲缓冲区构成的,设备缓冲区队列是按占用缓冲区的设备块号构成的多个散列队列,设备缓冲区队列中正在进行读写的缓冲区构成设备I/O请求队列。缓冲区的分配有两个过程:getblk( )和getblk(dev,blkno),缓冲区的回收由brelse(bufno)完成。
六、(本题10分)
UNIX操作系统实现文件共享的方式有两种:
(1)i结点法:不同目录中的文件指向同一个i节点,就可以实现共享。
(2)符号链法:利用符号链也可以实现文件共享。
共享i节点方式只能共享同一文件系统的文件,而符号链法可以跨文件系统共享。
七、(本题10分)
设互斥信号量S1,S2初值为1,分别用于对bufferl和buffer2的互斥访问;同步信号量Snl,Sn2初值为1,分别表示bufferl和buffer2初始状态为空闲,可以放一张卡片信息;同步信号量Snl,Sn2初值为0,分别表示bufferl和buffer2中的信息还没有(或已被取用了)。用P,V操作完成这三个并发进程间能正确运行的程序如下:
BEGIN
S1,S2,Snl,Sn2,Sml,Sm2:semaphore;
S1=S2=1
Snl=Sn2=1;
Sml=Sm2=0;
Cobegin
Process produce get
Begin
L1:从读卡机读进一张卡片信息;
P(Snl);
P(S1);
将信息放入bufferl;
V(Sml);
V(S1);
Goto L1
End
Process produce copy
Begin
L2:P(Sml);