I/O软件的分层设计结构
• 用户层软件。是用户交互的接口,可以直接调用与I/O操作相关的库函数。
• 设备独立性软件。实现与设备驱动器的统一接口、设备保护、设备分配。
• 设备驱动程序。与硬件直接相关,负责实现系统对设备发出的操作指令,
驱动I/O设备工作。
• 中断处理程序。保存被中断进程的CPU环境,转入相应的中断处理程序,
恢复被中断进程的现场后返回到被中断进程。
• 硬件。执行IO操作。
•用户层软件
•设备独立性软件
•设备驱动程序
•中断处理程序
•硬件
当一个进程从文件中读一个数据块时,需要通过
系统调用取得OS服务来完成;设备独立性软件接收到
I/O请求后,首先在高速缓存中查找相应的页面,如果
没有,则调用设备驱动程序向硬件发出一个请求,由
驱动程序负责从磁盘读取目标数据块。当磁盘操作完
成后,由硬件产生一个中断,并转入中断处理程序,
检查中断原因,提取设备状态,转入相应的设备驱动
程序,唤醒用户进程,结束此次I/O请求,继续用户进
程的运行。
设备驱动程序的特点
(1) 驱动程序主要是指在请求I/O的进程与设备控制器之间的一个通信和转换程序。
(2) 驱动程序与设备控制器和I/O设备的硬件特性紧密相关, 因而对不同类型的设备应配置不同的驱动程序。
(3) 驱动程序与I/O设备所采用的I/O控制方式紧密相关。
(4) 由于驱动程序与硬件紧密相关。
设备驱动程序的处理过程
1.设备独立性的概念
设备独立性的基本含义是: 应用程序独立于具体使用的物理设备。
为了实现设备独立性而引入了逻辑设备和物理设备这两个概念。在应用程序中,使用逻辑设备名称来请求使用某类设备;而系统在实际执行时,还必须使用物理设备名称。因此,系统须具有将逻辑设备名称转换为某物理设备名称的功能。
2. 设备独立性软件
(1)执行所有设备的公有操作
① 对独立设备的分配与回收;
② 将逻辑设备名映射为物理设备名;
③ 对设备进行保护,禁止用户直接
访问设备;
④ 缓冲管理;
⑤ 差错控制;
⑥ 提供独立于设备的逻辑块。
(2)向用户层软件提供统一接口
无论何种设备, 它们向用户所提
供的接口应该是相同的。 例如,
对各种设备的读操作,在应用程
序中都使用read; 而对各种设备
的写操作,也都使用write。
3.逻辑设备名到物理设备名映射的实现
为实现设备的独立性,系统必须设置一
张逻辑设备表,用于将应用程序中所使用的
逻辑设备名 映射 为物理设备名。
当进程使用逻辑设备名请求分配I/O设
备时,系统在逻辑设备表中建立一个表目,
填入应用程序中使用的逻辑设备名、系统分
配的物理设备名、以及设备驱动程序的入口
地址。
(2)逻辑设备表的设置方式第二种方式是为每个用户设置一张逻辑设备表。将逻辑设备表放入用户进程的PCB中,这样,不同用户可以使用相同的逻辑设备访问物理设备。
第一种是在整个系统中只设置一张逻辑设备
表,这要求所有用户不能使用相同的逻辑设
备名。
4. 设备独立性的优点
(1)设备分配时的灵活性。当进程使用物理设备名请求设备时,如果设备忙碌,进程会阻塞。当进程使用逻辑设备名请求某类设备时,系统可将任一台空闲的设备分配给进程,仅当所有设备全忙碌时,进程才会阻塞。
(2)易于实现I/O重定向。I/O重定向,指用于I/O操作的设备可以更换,而不必改变应用程序。例如:当调试程序时,可将程序的所有输出送往屏幕显示;如果将输出结果打印时,不必修改应用程序,只须将I/O重定向的逻辑设备表中的显示端,改为打印机。
大部分I/O软件在OS内部,仍有小部分在用户层,如C语言中的一些
库函数write,在用户程序中,利用库函数可以进行系统调用。
下节课要讲到的SPOOLING技术,也属于I/O软件。
1. 设备控制表DCT
系统为每个设备设置一张设备控制表,
用于记录该设备的情况。
在设备控制表中,包含:
(1)设备类型
(2)设备标识符
(3)设备队列的队首指针(队列中存
放请求设备未被满足的PCB)
(4)设备状态
(5)与设备相连的控制器表指针
(6)重复执行次数。系统规定在设备
工作中发生错误时可重复执行次数。
2. 控制器控制表
系统为每个设备控制器设置一张设备控制器
表,用于记录该设备控制器的情况。包含:
• 设备控制器标识符
• 设备控制器状态
• 与设备控制器相连的通道表指针
• 控制器队列的队首指针
• 控制器队列的队尾指针
3. 通道控制表
系统为每个通道配有一张通道表,用于
记录该通道的情况。包含:
通道标识符
通道状态
与通道连接的设备控制器表首址
通道队列的队首指针
通道队列的队尾指针
4. 系统设备表
系统设备表是个系统范围的数据结构,
记录了系统中全部设备的情况。
每个设备占一个表目,其中包括:
设备类型
设备标识符
设备控制表
设备驱动程序的入口
1. 设备的固有属性
(1) 独享设备。采取独占分配策略
(2) 共享设备。可以通过某种调度方式,分配给多个进程使用。
(3) 虚拟设备。 指通过采用虚拟技术,使一台物理设备可变成多台逻辑上的共享设备。可以分配给多个进程使用。
2. 设备分配算法
(1) 先来先服务
当多个进程对同一设备提出I/O请求时,该算法根据进程提出请求的先后次序,排成一个设备请求队列,总是将设备分配给队首进程。
(2) 优先级高者优先
在这种算法中,总是优先权高的进程优先获得资源。对于优先权相同的进程,按照先来先服务的原则排队
3.设备分配中的安全性
(1) 安全分配方式
当进程请求资源时,便进入阻塞状态,直到I/O操作完成才被唤醒。但进程的并发度低,资源的利用率低。
(2)不安全分配方式
当进程请求资源时,仍继续运行,需要时又发出第2个I/O请求,第3个I/O请求等,按照安全性算法进行计算,仅当状态安全时,才分配。这种方式稍复杂,但进程的并发度高。
(1) 分配设备
首先,根据I/O请求中的物理设备名,查找SDT,找出该设备的设备控制表
DCT,根据DCT中的设备状态字段,可知设备是否正忙。
若忙,将该进程的PCB挂在设备的等待队列中;
若不忙,按照一定的算法计算设备分配的安全性,来分配设备。
(2) 分配控制器
在系统将设备分配给请求进程后,从DCT中找到与该设备相连的控制器的COCT,根据COCT中的状态字段,可知该设备控制器是否正忙。
若忙,将该进程的PCB挂在设备控制器的等待队列中;
若不忙,将设备控制器分配给进程
(3) 分配通道
在系统将设备控制器分配给请求进程后,从控制器控制表COCT中找到与该控制器相连的通道的通道控制表CHCT,根据CHCT中的状态字段,可知该通道是否正忙。若忙,将该进程的PCB挂在通道的等待队列中;若不忙,将通道分配给进程。
(1) 增加设备的独立性
进程利用逻辑设备名请求I/O。系统首先从系统设备表SDT中找出第一个该类设备的设备控制表DCT,若设备忙,再查找第2个该类设备的DCT;仅当所有该类设备都忙时,才将该进程的PCB挂在该类设备的等待队列中。
(2)考虑多通路情况可以按照多通路情况进行改进。例如,若设备连接的第一个控制器忙碌时,应查看第2个控制器,仅当所有该类设备控制器都忙时,才将该进程的PCB挂在该类设备控制器的等待队列中。
同理,通道分配也是一样的。
(1) 输入井、输出井
(2) 输入缓冲区、输出缓冲区
(3) 输入进程、输出进程
当用户进程请求打印输出时,SPOOLing系统同意为它打印输出,但并不立即把打印机分配给该用户进程,只为它做两件事:
① 由输出进程在输出井中为之申请一个空闲磁盘块区,并将要打印的数据送
入其中;
② 输出进程再为用户进程申请一张空白的用户请求打印表,并将用户的打印
要求填入其中, 再将该表挂到请求打印队列上。
(1) 提高了I/O的速度。
(2) 将独占设备改造为共享设备。
(3) 实现了虚拟设备功能。
磁盘存储器是存放大量数据的理想设备,容量大,可实现随机存取。磁盘设备是一个相当复杂的机电设备,有专门课程来讲述
磁盘设备可包括一到多个物理盘片,每个磁盘片分一个或者两个存储面;
每个磁盘面被组织成若干个同心环,称为磁道,各磁道之间留有必要的间隙。
每条磁道存储相同数目的二进制位,磁盘密度指每英寸中所存储的位数,内层磁道的密度比外层高。
每个磁道逻辑上划分成若干个扇区,一个扇区称为一个盘块,各扇区之间保留一定的间隙
一个物理记录存储在一个扇区上。
磁盘在使用前,一定要低级格式化。
磁盘格式化后,要对磁盘分区
在真正使用磁盘前,还要进行一次高级格式化,即设置一个引导块、空闲存储管理、根目录、和
一个空文件系统。
常用的分区格式有:FAT32、NTFS等
(1)固定头磁盘
这种磁盘在每条磁道上都有一读/写磁头,所有的磁头都被装在一刚性磁臂中。通过这些磁头可访问所有各磁道,进行并行读/写,有效地提高了磁盘的I/O速度。
这种结构的磁盘主要用于大容量磁盘上。
(2)移动头磁盘
每一个盘面仅配有一个磁头,也被装入磁臂中。为能访问该盘面上的所有磁道,该磁头必须移动以进行寻道。可见,移动磁头仅能以串行方式读/写,致使其I/O速度较慢;但由于其结构简单,故仍广泛应用于中小型磁盘设备中。
(1)寻道时间Ts
指把磁臂(磁头)移动到指定磁道上所经历的时间。该时间是启动磁臂的时间s与磁头移动n条磁道所花费的时间之和,即 Ts=m×n+s
其中,m是一常数,与磁盘驱动器的速度有关,对一般磁盘,m=0.2;对高速磁盘,m≤0.1, 磁臂的启动时间约为2ms。
(2)旋转延迟时间Tτ
指定扇区移动到磁头下面所经历的时间。
对于硬盘,典型的旋转速度大多为5400 r/min,每转需时11.1
ms,平均旋转延迟时间Tτ为5.55 ms;对于软盘,其旋转速度为300
r/min或600 r/min,这样,平均Tτ为50~100 ms。
(3)传输时间Tt
指把数据从磁盘读出或向磁盘写入数据所经历的时间。Tt的大小与每
次所读/写的字节数b和旋转速度有关。(T1 = b/rN)其中,r为磁盘每秒钟的转数;N为一条磁道上的字节数,当一次读/写的字节数相当于半条磁道上的字节数时,Tt与Tτ相同。
指利用内存中的存储空间,来暂存从磁盘中读出的一系列盘块中的信息。高速缓存是一组在逻辑上属于磁盘, 物理上是驻留在内存中的盘块。
高速缓存在内存中可分成两种形式。
(1)在内存中开辟一个单独的存储空间来作为磁盘高速缓存,其大小是固定的,不会受应用程序多少的影响;
(2)把所有未利用的内存空间变为一个缓冲池,供请求分页系统和磁盘I/O时(作为磁盘高速缓存)共享。当磁盘I/O的频繁程度较高时,该缓冲池可能包含更多的内存空间;而在应用程序运行得较多时,该缓冲池可能只剩下较少的内存空间。
系统可以采取两种方式,将数据交付给请求进程:
(1) 数据交付。直接将高速缓存中的数据,传送到请求者进程的内存工作区中。
(2) 指针交付。只将指向高速缓存中某区域的指针,交付给请求者进程。
后一种方式由于所传送的数据量少,节省了数据从磁盘高速缓存存储空间到进程的内存工作区的时间。
由于请求调页中的联想存储器与高速缓存的工作情况不同,因而使得在置换算法中所应考虑的问题也有所差异。现在不少系统在设计其高速缓存的置换算法时,除了考虑到最近最久未使用这一原则外,还考虑了以下几点:
(1) 访问频率。
(2) 可预见性。
(3) 数据的一致性。
在UNIX系统中专门增设了一个修改程序,在后台运行,该程序周期性地调用一个系统调用SYNC,其主要功能是强制性地将所有在高速缓存中已修改的盘块数据写回磁盘,一般是把两次调用SYNC的时间间隔定30s。这样,因系统故障所造成的工作损失不会超过30s的劳动量。
1. 提前读。 对于顺序文件的访问,可以采用预告读文件的方式,将下一个盘块的
数据也读入缓冲区。
2. 延迟写 。 如:在缓冲区A中的数据,不马上写回磁盘,只挂在空闲区的末尾。
当进程使用缓冲区快到A时,再将A中的数据写入磁盘后,把缓冲区分配出去。
3. 优化物理块的分布。 一个文件的多个物理块安排的分散,会增加磁头的移动时
间,寻道时间增大。可以将同一个磁道上的若干个盘块组成一个簇,如一个簇
包含4个盘块,以簇为单位进行分配,提高访问速度。
4. 虚拟盘。 指利用内存空间去仿真磁盘,称为RAM盘。当创建虚拟盘后,其操作
与硬盘一样;但虚拟盘是易失性存储器,当关机或重新启动计算机时,虚拟盘
上的信息将被丢失,所以在关机或重新启动计算机前,一定要及时把在虚拟盘
上的重要的数据存放到真正的硬盘中。
廉价磁盘冗余阵列是1987年,由美国加利福尼亚大学伯克莱分校提出的,现已广泛应用于大、中型计算机系统和网络管理中。它利用硬盘阵列控制器,统一管理和控制一组磁盘驱动器,组成一个可靠、快速的大容量磁盘系统。
(1) RAID 0级。采用了并行交叉存取技术,提高了I/O速度。但无冗余校验功能,
可靠性不好。
(2) RAID 1级。具有磁盘镜像功能。如:当磁盘阵列中具有8个盘时,利用4个作为数据盘,4个作为镜像盘,当读写数据时,同时写入数据盘和镜像盘。其可
靠性较好,但磁盘利用率只有50%。
(3) RAID 3级。具有并行传输功能的磁盘阵列。它利用一台奇偶校验盘来完成数据的校验功能。如:当阵列中有7个盘时,利用6个作为数据盘,1个作为校验盘,
其磁盘利用率为6/7;常用于科学计算、图像处理等。
(4) RAID 5级。是一种具有独立传送功能的磁盘阵列。每个驱动器都有各自独立的数据通路,独立地进行读写,无专门的校验盘;其校验信息,是以螺旋的方式,散布在所有数据盘上,故可靠性好。其磁盘利用率高;常用于I/O较频繁的事务处理中。
(5) RAID 6级和RAID 7级。在RAID6中,设置了1个专用的、可快速访问的异步校验盘;RAID7是RAID6的改进;所有磁盘都具有较高的传输速率、优异的
性能,但价格昂贵。
(1) 可靠性高。
(2) 磁盘I/O速度高。
(3) 性能/价格比高。