什么是多道程序设计技术?试述多道程序运行的特征?
多道程序设计技术是指同时把多个作业(程序)放入内存并允许它们交替执行和共享系统中的各类资源;当一道程序因某种原因(如IO请求〉而暂停执行时,CPU立即转去执行另一道程序。
多道程序运行具有如下特征:多道计算机内存中同时存放几道相互独立的程序。
宏观上并行:同时进入系统的几道程序都处于运行过程中,它们先后开始了各自的运行,但都未运行完毕。
微观上串行:从微观上看,内存中的多道程序轮流或分时地占有处理机,交替执行。
设一计算机系统有输入机一台、打印机两台,现有A、B两道程序同时投入运行,且程序A先运行,程序B后运行。程序A的运行轨迹为:计算50
ms,打印信息100 ms,再计算50 ms,打印信息100 ms,结束。程序B运行的轨迹为:计算50 ms,输人数据80
ms,再计算100 ms,结束。要求: (1)用图画出这两道程序并发执行时的工作情况。
(2)在两道程序运行时,CPU有无空闲等待?若有,在哪段时间内等待?为什么会空闲等待?
(3)程序A、B运行时有无等待现象?在什么时候会发生等待现象?为什么会发生?
(2)CPU有空闲等待,发生在100ms,150ms时间段内,此时间与程序B都在进行I/O操作。
(3)程序A无等待现象,程序B在0ms,50ms时间段内与180ms时间段内有等待现象。
什么是中断?在计算机系统中为什么要引用中断?
中断是指某个事件(例如,电源掉电、浮点运算溢出、外部设备传输完成或出错等)发生时,系统中止现运行程序的执行,引出处理事件程序对相应事件进行处理,处理完毕后返回断点继续执行。
引用中断是为了实现并发活动,为了实现计算机系统的自动化工作。中断可以解决主机与外设的并行工作问题,提高可靠性,实现多机联系,实现实时控制。
软件的中断处理过程主要分为哪几个阶段?试用图画出软件的中断处理过程。
四个阶段。保存进程状态的其余信息,中断处理程序处理中断,恢复进程状态信息,从系统堆栈恢复原PSW和PC。
中断过程:
用户与操作系统的接口是什么?一个分时系统提供什么接口,一个批处理系统又提供什么接口?
操作系统的用户界面即是用户与操作系统的接口,分时系统提供的操作界面是键盘命令,这一类操作系统采用的是联机处理的方式,批处理系统提供的操作界面称为作业控制语言,这类操作系统采用的是脱机处理方式。
简述系统调用的执行过程
为实现系统调用,必须事先准备好能够实现各种共能的例行子程序,然后要建造例行子程序的地址表。假设该表首地址为A,每个例行子程序的入口地址占一个字长,将各例子程序的入口地址分别送入A+0,A+1……中,另外,系统还需编制访管中断处理程序,其功能是:做常规的现场保护后,取i值,然后安排一条转移命令,按A+i的单元中的内容转移。而在用户程序中,在需要程序系统服务的地方安排一条系统调用。这样,当程序执行到这一条命令时,就发生中断,系统由用户态转为管态,操作系统的访管中断处理程序得到控制权,他将按系统调用的功能号,借助例行子程序入口地址表转到相应的例行程序去执行,在完成了用户所需要的服务功能后,退出中断,返回到用户程序的断点继续执行。
图4.32(a)、(b)分别给出了两个进程流图。试用信号灯的P、V操作分别实现如图4.32(a)、(b)所示的两组进程之间的同步,并写出程序描述。
程序task1(图(a))
main(){
int s12 = 0; /* 表示p2进程是否执行 /
int s13 = 0; / 表示p3进程是否执行 /
int s14 = 0; / 表示p4进程是否执行 */
cobegin
p1();
p2();
p3();
p4();
coend
}
程序task2(图(b))
main(){
int s13 = 0; /* 表示p1执行是否完成 /
int s23 = 0; / 表示p2执行是否完成 */
cobegin
p1();
p2();
p3();
coend
}
判断下列同步算法是否有错,若有错,请指出错误原因并改正。 (1)三个进程并发活动的进程流图如图4.35所示,其同步算法描述如下。
进程p3开始执行的先决条件是p1和p2,因此执行p3的时候需要两个信号量。用信号量s1、s2分别表示当p1进程执行完毕时和当p2进程执行完毕时,该同步算法应该为:
main(){
int s1 = 0;
int s2 = 0;
cobegin
p1();
p2();
p3();
coend
}
当进程A写入消息之后需要通知进程B去取出消息,因此两进程之间是同步进程。定义两个信号量s1、s2,s1=1表示缓存区为空,s2为0表示缓存区没有消息。算法描述为:
main()
{
int s1 = 1; /* 表示缓存区是否为空 /
int s2 = 0; / 表示缓存区是否有消息 */
cobegin
pa();
pb();
coend
}
进程A、B互斥,只需要一个信号量s,用来表示临界资源初始情况下是否有进程使用。
main(){
int s = 1;
cobegin
pa();
pb();
coend
}
图5.9表示一带闸门的运河,其上有两架吊桥。吊桥坐落在一条公路上,为使该公路避开一块沼泽地而令其横跨运河两次。运河和公路的交通都是单方向的。运河上的基本运输由驳船担负。在一船驳船接近吊桥A时就拉响汽笛警告,若桥上无车辆,吊桥就吊起,直到驳船尾部通过此桥为止。对吊桥B也按同样次序处理。
(1) 一艘典型驳船的长度为200米,当它在河上航行时是否会产生死锁?若会,其理由是什么?
当它在桥上航行的时候,会产生死锁。因为吊桥的长度长200米,当吊桥吊起且驳船到达吊桥B后,请求吊桥B吊起,但是驳船的尾部已然占据着吊桥A,而汽车又要通过吊桥A,这就导致了驳船和汽车都无法通行的局面,造成死锁。
(2) 如何能克服一个可能的死锁?请提出一个防止死锁的办法。
可以一次性申请所有需要的资源。当驳船到达吊桥A的时候,吊桥A和吊桥B都吊起且都不允许汽车通行,等到驳船船身全部通过后,吊桥A和吊桥B才放下,这是才允许汽车通行。
(3) 如何利用信号灯的P、V操作,,实现车辆和驳船的同步?
设置两个互斥信号量mutex1、mutex2分别表示驳船和汽车对桥A和桥B的互斥使用,设置count信号量用来记录当前占用吊桥A和B的汽车数,设置互斥信号量matex3表示汽车对共享变量count的互斥访问。
main(){
int mutex1=1; /* 表示驳船和汽车对桥A的互斥使用 /
int mutex2=1; / 表示驳船和汽车对桥B的互斥使用 */
int mutex3=1;
int count=0;
cobegin
p1();//i=1,2,…,m
carj;//j=1,2,…,n
coend
}
讨论图5.10描述的交通死锁的例子(设各方向上的汽车是单线、直线行驶):
(1) 对于产生死锁的四个必要条件中的哪些条件在此例中是适用的?
互斥条件:路口必须互斥使用,即汽车对它所需要的路口是排他性控制的。
不剥夺条件:汽车一旦占用了路口,除非自己让出路口,别人无权剥夺。
部分分配条件:每个方向的车队都占有一个路口,同时因申请新路口而等待。
环路等待条件:占有路口的车都在等待其它占有的路口,循环等待。
(2) 提出一个简单的原则,它能避免死锁。
可以在每个路口进行红绿灯控制,只有当正前方绿灯亮起时,南北方向的车辆才可以通行,东西方向的车辆则禁止通行,反之,红灯亮起时,南北方向的车辆禁止通行,东北方向的车辆则可以通行。
(3)若用计算机实现交通自动管理,请用信号灯的P、V操作来实现各方向上汽车行驶的同步。
设信号量p1、p2分别表示东西方向和南北方向是否通行,mutex互斥信号量表示路口的红绿灯,则:
main(){
int S1=1; /* 表示东西方向可以通行 /
int S2=0; / 表示南北方向可以通行 /
int mutex=1; / 表示路口的互斥使用 */
cobegin
p1();
p2();
coend
}
在单道批处理系统中,有下列四个作业分别用先来先服务调度算法和最短作业优先调度算法进行调度,哪一种算法调度性能好些?请按表6.5的格式,分别用两张表正确填补表中未填写的各项。
已知主存有256KB容量,其中os占用低址20KB,现有如下一个作业序列: 作业1 要求 80KB; 作业2 要求 16KB; 作业3 要求
140KB; 作业1 完成; 作业3 完成; 作业4 要求 80KB; 作业5 要求 120KB。
试分别用首次适应算法和最佳适应算法处理上述作业序列(在存储分配时,从空闲区高址处分割作为已分配区),并完成以下各步骤。
(1) 画出作业1、2、3进入主存后主存的分配情况。
(2) 画出作业1、3完成后主存的分配情况。
(3) 试分别用上述两种算法画出作业1、3完成后的空闲区队列结构(要求画出分区描述器信息,假定分区描述器所需占用的字节数已包含在作业所要求的的主存容量中)。
(4)哪种算法对该作业序列是适合的?简要说明分配过程。
采用首次适应法,将起始地址为19KB的空白区(大小为140KB)分配给程序4,还剩下96KB空白区。此时系统中有两个空白区,它们的大小分别为96KB和80KB,都不能满足程序5的需求。所以这种方法对该程序序列是不合适的。
采用最佳适应法,先将起始地址为176KB的空白区(大小为80KB)分配给程序4。此时系统中还有一个空白区,即起始地址为19KB,大小为 40KB的空白区,它可以满足程序5的需求(120KB)。因此最佳适应法对该程序序列是合适的。
综上,最佳适应算法是合适的。因为他每次分配给文件的都是最合适该文件大小的分区,既能满足要求,又是最小的空闲分区分配给作业。
常用的缓冲技术有哪些?
常用的缓冲技术有双缓冲、环形缓冲和缓冲池。
什么是spool系统?什么是预输入?什么是缓输出?
(1)spool系统(假脱机系统):操作系统提供外部设备联机同时操作的功能设备。
(2)预输入:spool系统在应用程序执行前将应用程序的信息通过独占设备预先输入到辅存上的一个特定的存储区域存放好。
(3)缓输出:在应用程序执行中,也不必直接启动独占设备输出数据,而只要将其输出数据写入磁盘中存取,在应用程序执行完毕后,由操作系统来组织信息输出。
设文件B按串联文件构造,并由四个逻辑记录组成(其大小与磁盘块大小相等,均为512B)。这四个逻辑记录分别存放在第100、157、66、67号磁盘块上,回答如下问题:
(1) 画出串联文件的结构; (2) 若要读出文件B第1560字节处的信息,问要访问哪一个磁盘块?为什么? (3)
读文件B第1560字节处的信息需要进行多少次I/O操作?为什么?
(2)1560/512=3,访问第3个逻辑块号,所以访问的是磁盘块67;
(3)4次。
什么是索引文件?要随机存取某一个记录时需要经过几步操作?
将逻辑文件顺序地划分成长度与物理存储块长度相同的逻辑快,然后为每个文件分别建立逻辑块号与物理块号的对照表,即索引表,用这种方法构造的文件称为索引文件。
访问索引文件需两步:第一步是查文件索引,由逻辑块号查得物理块号;第二步是由此物理块号而获得所要求的信息。