操作系统关键词——多道程序设计、SPOOLing技术

多道程序设计技术

在之前的计算机上,如果当前作业因等待磁带或其它I/O操作而暂停时,CPU只能等待直到该I/O操作结束。这会浪费大量的时间。但多道程序设计技术设计的操作系统将内存分成几个部分,每一部分存放不同的作业,当一个作业等待I/O操作结束的时候,另一个作业就可以使用CPU。这样一来,采用多道程序设计实际上就提高了CPU的利用率。值得一提的是,这些计算机常常还需要配备一种特殊的硬件,用于保护内存中的作业

多道程序设计举例

image.png
从上图可以看出,多道程序设计技术的特点大致为:多道、宏观上并行和微观上串行这三个特点。其优点很明显,多道程序设计使得多道程序能够共享计算机资源,从而使得各种资源得到充分利用,CPU也容易持续处于“忙碌”的状态;然而多道程序设计技术的用户响应时间较长,且并没有与用户交互的能力,用户不能及时地了解或控制自己程序的运行情况。

多道程序设计模型

假设内存中同时有 n n n个进程,在一定理想情况下假设每个进程等待I/O操作的时间与其停留在内存中的时间的比 p p p。那么当内存中同时有 n n n个进程的时候,所有 n n n个进程都在等待I/O(此时CPU空转)的概率为 p n p^n pn,换句话说就是CPU 的利用率为 1 − p n 1-p^n 1pn。这里 n n n称为多道程序设计的道数(degree of multiprogramming)。容易发现, n n n越大,CPU利用率越高。
这个模型虽然很简单而粗略,却可以大致预测CPU的性能。比如,假设一台计算机有512MB内存,操作系统占用128MB,每个用户程序也占用128MB,那么,这些空间允许3个用户程序同时驻留在内存中。若80%的时间用于I/O等待(事实上,这么高的I/O等待时间是非常普遍的),那么CPU的利用率只有大约49%。而如果再增加512MB内存,可从3道程序设计提高道7道程序设计,而CPU的利用率可以提高到约79%。但如果再增加512MB内存,只能提高到约91%。因此显然第二次增加内存并没有第一次增加内存那么划算

参考

[1] 《现代操作系统》安德鲁 S. 塔嫩鲍姆, 赫伯特 · 博斯

SPOOLing技术

SPOOLing 是 Simultaneous Peripheral Operation On-Line (即时外部设备联机操作)的缩写,它是关于慢速输入输出设备如何与计算机主机交换信息的一项技术,通常称为**“假脱机技术”**。

脱机技术

所谓脱机,就是不与主计算机联机,而脱机技术指的就是输入/输出操作在要进行操作的计算机以外的设备上进行,在需要时再送计算机处理
image.png
在上述过程中,首先在输入室收集全部的作业(job,一个或一组程序),然后来到机房用一台相对便宜的计算机(图示1401)把它们全都读到磁带上;在收集到足量的批量作业后,将这些磁带送到机房里,操作员会使用一个特殊的程序来对它们进行处理(这个特殊的程序就是现代操作系统的前身);这个程序会从磁带上读入一个作业并运行,然后将输出结果写到另一盘磁带上(不会立即打印),然后再去读入下一个作业;在这一批作业完成后,操作员会将输入磁带更换为下一批作业,并把输出磁带拿到另一台相对便宜的机器上进行打印。

SPOOLing技术

SPOOLing技术又称假脱机技术,可以理解成使用软件实现脱机技术。随着计算机技术的发展,当卡片被拿到机房后能够很快将作业从卡片读入磁盘,因此任何时刻一个作业运行结束后,操作系统就可以将一个新作业从磁盘读出,装入空出来的内存区域运行,这就是SPOOLing技术。SPOOLing技术显然同样可以用于输出,因此采用SPOOLing技术后,就不需要1401机,也不需要将磁带搬来搬去了。
采用SPOOLing技术的系统的大致结构如下所示,可见SPOOLing技术是建立于多道程序设计技术之上的:
image.png
输入井和输出井是磁盘上开辟出的两个存储区域。输入井模拟脱机技术的输入磁盘,用于收容I/O设备输入的数据;而输出井则模拟脱机输出时的输出磁盘,用于收容用户程序的输出数据。
输入缓冲区和输出缓冲区是在内存中开辟的两个缓冲区。输入缓冲区用于暂存输入设备送来的数据,以后再传送到输入井;输出缓冲区用于暂存从输出井送来的数据,以后再传送到输出设备。
输入进程和输出进程模拟的是脱机输入/输出时的外围控制机。用户要求的数据从输入设备经过输入缓冲区送入输入井,当CPU需要输入数据之时,直接从输入井读入内存,而用户要求输出的数据先从内存送到输出井,待输出设备空闲时,再将输出井中的数据经过输出缓冲区送入输出设备。值得一提的是,这其中就会涉及到一系列调度问题。

实例:共享打印机

将一台独享打印机改造为可供多个用户共享的打印机,是应用SPOOLing技术的典型实例。具体做法是:系统对于用户的打印输出,但并不真正把打印机分配给该用户进程,而是先在输出井中申请一个空闲盘块区,并将要打印的数据送入其中;然后为用户申请并填写请求打印表,将该表挂到请求打印队列上。(这时虽然没有任何实际的打印输出,但是对于用户进程而言,其打印任务已经完成。)若打印机空闲,输出程序从请求打印队列队首取表,将要打印的数据从输出井传送到内存缓冲区,再进行打印,直到打印队列为空。这时打印任务才真正完成。
SPOOLing技术成功提高了I/O的速度,对低速I/O设备执行的I/O操作演变为对磁盘缓冲区中数据的存取,就如同脱机技术中的输入/输出一样;同时这种方法也将独占设备改造成了共享设备,而同时对于每个进程而言它们又都认为自己独占了一个设备

参考

[1] 《现代操作系统》安德鲁 S. 塔嫩鲍姆, 赫伯特 · 博斯

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值