进程的等待时间:进程1:9,进程2:2,进程3:3,进程4:5,进程5:10
平均等待时间(9+2+3+5+10)/5=5.8 SPF算法:
进程 1 2 3 4 5 提交时结束时等待时周转间 0 9 2 1 4 间 1 19 4 2 9 间 0 9 2 1 4 时间 1 19 4 2 9 平均等待时间:16/5=3.2 非剥夺优先级算法
进程 1 2 3 4 5 提交时结束时等待时周转间 1 18 11 0 13 间 11 19 13 1 18 间 1 18 11 0 13 时间 11 19 13 1 18 平均等待时间:43/5=8.6
SPF算法具有最短平均等待时间。
11 / 34
3.19 什么是批处理作业和交互式作业?它们的特点是什么?系统如何管理?
答:批处理作业是指用户将若干用户任务合成一批,一起提交给系统进行处理的任务集合。交互式作业是指用户的一次上机交互过程,用户通过命令语言逐条地与系统进行应答式的交互,提交作业步。
特点:批处理作业的处理过程由计算机自动运行,不需人为干预,用户也看不到中间结果。交互式作业需要系统提供终端供用户与系统交互,作业的运行由人控制,便于作业的调试以及将作业按人预想的方向进行。
4.1 并行任务如何在程序中表示?(P74)
答:并行任务在程序中主要通过并发语句来表示。如Parbegin/Parend语句
4.2 并行任务并行(并发)运行的操作系统支持基础是什么? 答:支持基础是进程和线程的引入。在多道程序设计系统中,进程之间可以并发执行,这就使多任务并行执行成为可能。同时,线程的引入,同一进程内的多个线程也可以并行运行,这也提供了任务内部的并行。提高了效率。 4.3 题略
答:答:进程P0在flag[0]=false后,进程P1跳出循环,此时刚好来了一个中断。中断使得进程P0又再次执行,此时由于P1并没有给turn赋值,从而P0可以顺利进入临界段,在P0进
12 / 34
入临界段时产生中断,P1恢复执行,将turn赋值为1,从而P1也可以进入临界段。从而产生错误。
4.4 何谓原语?它与系统调用有何区别?如何实现原语执行的不可分割性?
答:原语是指完成某种功能且不被分割、不被中断执行的操作序列。有时也称为原子操作。
它与系统调用的区别:原语和系统调用是两个不同的概念,原语主要强调操作的不可分割性,可以认为是一个不可中断的子程序调用,但是系统调用是由用户态进入核心态,虽然系统调用一般也不被中断,但是如果有更高更紧迫的系统调用的话,还是能够打断原来的系统调用的。
实现原语执行的不可分割性:通常由硬件来实现,也可以由软件通过中断屏蔽的方法来实现。
4.6 如果P,V操作不作为原语(可分割执行),那么是否还可用于解决互斥问题?如果不能,则举例说明。
答:如果P,V操作不作为原语,那么不可用于解决互斥问题。因为如果那样的话,则:程序语言s = s-1。翻译成机器语言为:load R1, s。 load R2, 1。 sub R1, R2。 此时,他们之间的操作可以分割执行,假设有两个进程P1、P2,s初值为1,当P1进入P操作时,s大于0,可以进入,因此会执行上面的机器语言,将s的值取出来,放入R1寄存器中,而此时,有可能P2进程要进入临界段,因此,它也比较s的值是否小于0,因为此
13 / 34
时s的值仍为1,所以P2也进入临界段,出现错误。 4.13 题略 答:①
empty1=1。 empty2=1。 full1=0。 full2=0。 parbegin P: While(1) {P(empty1)。 put to buffer1。 V(full1)。 } Q: While(1) {P(full1)。
get from buffer1。 V(empty1)。 P(empty2)。 put to buffer2。 V(full2)。 }
R: While(1) { P(full2)。 get from buffer2。 V(empty2)。
14 / 34
} parend。 ②
empty1=m。 empty2=n。 full1=0。 full2=0。mutex1=1。mutex2=1。 parbegin P: While(1) { P(empty1)。
P(mutex1)。
put to buffer1。
V(full1)。 V(mutex1)。 } Q: While(1) { P(full1)。 P(mutex1)。 get from buffer1。 V(empty1)。 V(mutex1)。 P(empty2)。 P(mutex2)。 put to buffer2。 V(full2)。 V(mutex2)。 }
15 / 34

