缓存
缓冲的引入
引入缓冲区的主要原因归结为以下几点:
●缓和CPU 与I/O设备间速度不匹配的矛盾。
●减少对CPU的中 断频率,放宽对CPU中断响应时间的限制
●提高CPU和I/O设 备之间的并行性。
单缓冲(Single Buffer)
在单缓冲情况下,每当用户进程发出I/O请求时,OS便在主存中为之分配缓冲区。
在字符设备输入时,缓冲区用于暂存用户输入的一行数据, 在输入期间,用户进程被挂起以等待数据输入完毕;在输出时,用户进程将一行 数据输入到缓冲区后,继续执行处理。当用户进.程己有第二行数据输出时,如果第一-行数据尚未被提取完毕,则此时用户进程应阻塞。
双缓冲( Double Buffer)
为了加快输入和输出速度,提高设备利用率,人们又引入了双缓冲区机制,也称为缓冲对换( Buffer Swapping)
在设备输入时,先将数据送入第一-缓冲区, 装满后便转向第二缓冲区。此时OS可以从第一缓冲区中移出数据, 并送入用户进程。
循环缓冲的组成
多个缓冲区。循环缓冲有多个大小相同的缓冲区,作为输入的缓冲区有三种类型:
用于装输入数据的空缓冲区R
已装满数据的缓冲区G
计算进程正在使用的现行工作缓冲区C
多个指针。作为输入的缓冲区可设置三个指针:
用于指示计算进程下一个可用缓冲区G的指针Nextg
指示输入进程下次可用的缓冲区R的指针Nexti
用于指示计算进程正在使用的缓冲区C的指针Current
循环缓冲区的使用
计算进程和输入进程可利用两个过程来使用循环缓冲区。
●GetBuf过程。 当计算进程要使用缓冲区中的数据时,可调用该过程。
●ReleaseBuf过程。 当计算进程把C缓冲区中的数据提取完毕时,便调用该过程将缓冲区G释放。当输入进程把缓冲区装满时,也调用该进程将缓冲区释放。
设备分配
设备分配中的数据结构
在进行设备分配时,通常都要借助一-些表格的帮助。在表格中记录了相应设备或控制器的状态及对设备或控制器进行控制所
需的信息。
在进行设备分配时所需的数据结构有:设备控制表、控制器控制表、通道控制表和系统设备表等。
设备的固有属性
设备的固有属性可分为三种:独占性、共享性和虚拟性设备。
●独占设备在一-段时间内只能由一个进程使用。
●共享设备允许多个进程共享。
●虚拟设备是经过某种处理由独 占设备变为虚拟设备。
设备分配中的安全性
从进程运行的安全性上考虑,设备分配有以下两种方式。
●安全分配方式:每当进程发出1/0请求后便阻塞,直到I/0完成后被唤醒。虽安全但缓慢。
●不安全分配方式:不断发出1/0请求,直到所请求的设备已经被另一进程占用才阻塞。虽迅速但不安全。
设备独立性
●设备独立性( Device Independence )的概念-应用程序独立
于具体使用的物理设备。
●物理设备和逻辑设备:类似于物理地址和逻辑地址的概念。
使用逻辑设备名称来请求使用某类设备;系统实际执行时,必
须使用物理设备名称。
什么是SPOOLing
为缓和CPU的高速性与I/O设备低速性间的矛盾而引入了脱机输入脱机输出技术。该技术是利用专门]的外围控制机,将低速设备上的数据传送到高速磁盘上;或者相反。
这样就可以在主机的直接控制下实现脱机输入输出。此时外围操作与CPU对数据的处理同时进行,我们把这种在联机情况下实现的同时外围操作称为SPOOLing ( Simultaneaus Periphernal Operating On- Line ) , 或称为假脱机操作。