【OS】IO
IO层析结构
用户层软件
假脱机技术(SPOOLing)
组成
输入缓冲区和输出缓冲区
是在内存中开辟的两个缓冲区,用来暂存输入设备传入的数据和从输出井准备传给输出设备的数据
输入进程和输出进程
- 输入进程也称为预输入进程,模拟脱机输入时的外围控制机,将用户要求的数据从输入设备送到输入缓冲区,再存放到输入井
- CPU需要输入设备时,直接从输入井读入内存
- 输出进程也称缓输出进程,用于模拟脱机输出时的外围控制机,把数据从内存传送并存放在输出井,输出设备空闲时再从输出井经过缓冲区输出到输出设备
输入井和输出井
是在磁盘上开辟出来的两个存储区域,输入井模拟脱机输入时的磁盘,用来收容IO设备输入的数据
输出井模拟脱机输出时的磁盘,收容用户程序的输出数据
输入输出井中的数据一般以文件的形式组织管理,把这些文件称为井文件
一个文件仅存放某一个进程的输入或输出数据,所有进程的数据输入文件连接成一个输入队列,输出同理
井管理程序
控制作业和磁盘井之间的信息交换,作业执行过程中发出输入输出请求时,操作系统调用井管理程序,控制信息输入输出
特点
提高了IO速度
把独占设备改造成共享设备
实现了虚拟设备功能
应用程序接口
块设备接口
流设备接口
网络设备接口
设备独立性(无关性)软件
IO调度
内核缓冲区
提前读
比请求更多地读取磁盘上的数据,保存在缓冲区,以备程序后续使用
延迟写
不会直接把数据写入到磁盘文件中,而仅仅是写入到缓冲区中,如果当前进程或其他进程再次访问该数据时,内核可以从直接从缓冲区中提供更新的文件数据
目的
减少io次数
用户缓冲区
提前读
从内核缓冲区拷贝比请求更多的数据,保存在用户缓冲区,以备程序后续使用
延迟写
不会把数据写入到内核缓冲区,而仅仅是写入到用户缓冲区中,如果当前进程或其他进程再次访问该数据时,可以从直接从用户缓冲区中提供更新的文件数据
目的
减少cpu变态次数
设备的分配与回收
逻辑设备表LUT
- 整个系统设置一张LUT,记录所有进程的分配情况,这样就不能有相同的逻辑设备名,多用户环境下难以做到
- 每个用户设置一张LUT,用户登陆时就为用户建立一个进程,同时建立LUT,并放入PCB中
缓冲区管理
单缓冲区
磁盘把数据输入到缓冲区时间为T OS将缓冲区数据传到用户区时间为M CPU的处理时间为C
T=C时,处理一块数据的时间是M+T或M+C
T>C时,处理一块数据的时间是M+T
T<C时,处理一块数据的时间是M+C
每一块数据处理时间为Max(C,T)+M
双缓冲区
若C<T,可让块设备连续输入
若C>T,可使CPU不必等待设备输入
每一块数据处理时间为Max(C+M,T)
设备驱动程序
功能
接受上层软件发来的命令和参数,转换为与设备相关的底层操作序列(如逻辑盘块号转换为磁盘的磁道号、扇区号)
检查用户IO请求的合法性,了解IO设备的工作状态,传递与IO设备操作有关的参数,设置设备的工作方式
发出IO命令,如果设备空闲则启动IO设备,设备忙碌则将请求者的请求挂在队列等待
及时响应由设备控制器发来的中断请求,根据其中断类型,调用相应的中断处理程序进行处理
特点
驱动程序是实现在与设备无关的软件和设备控制器之间通信和转换的程序,它将抽象的IO请求转换成具体的IO操作后传送给控制器,又把控制器中记录的设备状态和IO操作完成情况反映给请求IO的进程
驱动程序与设备控制器和IO设备的硬件特性紧密相关,不同的设备要配置不同的驱动程序。但可以为相同的多个终端设置一个终端驱动程序
驱动程序与IO设备所采用的IO控制方式紧密相关,常用的IO控制方式是中断驱动和DMA方式(就是根据外设的类型来选择io方式,并且写驱动程序的,这两件事都取决于外设类型,由驱动完成)
驱动程序和硬件紧密相关,一部分必须用汇编语言书写
驱动程序应允许可重入,正在运行的驱动程序常会再一次调用完成前被再次调用
中断处理程序
用户保存被中断进程的CPU环境,转入相应的中断处理程序进行处理,处理完毕后恢复被中断进程的现场后,返回到被中断进程
磁盘
磁盘格式化
低级格式化(物理格式化)
将磁盘分成扇区,以便磁盘控制器能够进行读/写操作
一些非常底层、非常硬件、非常不可能由用户拿到磁盘才会做的事情
磁盘分区
将磁盘分成C盘、D盘等
创建分区表
高级格式化(逻辑格式化)
将初始文件系统数据结构存储到磁盘上,包括空闲空间、已分配空间
调度算法
先来先服务FCFS
最短寻道时间优先SSTF
扫描SCAN
循环扫描C-SCAN
2011
2012
2013
2020
2011
2013
2015
2016
2020
2022
2009
2012
2017
2018
2022
2010
2019
2021