老规矩,仅为整理知识点,知识框架来自于王道操作系统
并且IO控制的更多知识其实是在计算机组成原理的部分,所以这里一些关于中断具体措施这种细节就先跳过了
io设备是计算机中最复杂的一类设备,涉及到的基本都是系统层面的调用
例如显示器,键盘,音响这种,按照不同的方式可以有不同的分类
另外存在一个名为IO控制器的电子部件
负责(1)识别cpu命令(2)向cpu报告状态(3)数据交换(4)地址识别
IO控制方式一共有4种
1.程序控制方法:
程序控制方法最大的特点就是,程序和cpu是串行的,cpu会不断查询程序的完成程度,直到完成了所有的任务,cpu才会继续执行自己的内容
2.程序中断方法:
允许IO设备打断cpu,但是cpu不需要一直等待IO设备的准备,可以在IO设备的准备期间完成一些自己的任务,直到IO设备发出信号表示可以进行数据传输
这种方法的缺点就是数据必须经过IO,会稍微慢一点.但是中断是不能消失的,因为这东西在其他方面也有应用(甚至DMA本身在初始阶段和结束阶段都需要中断向CPU报告)
3.DMA控制方式
CPU会把数据传输的工作委托给DMA控制器,在DMA控制器的传输下,可以直接在IO设备以及内存之间传递数据,不需要cpu作为中转站了
特点有三条
1.数据以数据块的形式传送,并且只能传递数据不能处理异常
2.传送的数据是从设备和内存之间进行直接链接的
3.仅在DMA方式开始和结束的时候才需要CPU进行干预
4.通道控制方式
IO通道是专门用来负责处理输入和输出的虚拟机,可以进一步减少cpu的干预
和dma方法的主要区别就算
IO传输的数据块是由IO管理信息的,并且IO系统的有关指令存在内存中,和cpu共享内存
另外管道可以对应多个IO设备,而一共DMA控制器只能对应一个设备
io系统的层次结构可以分为
用户层IO软件:实现和用户的接口
设备独立性程序:设备独立也叫设备无关,所有与硬件无关的功能军在这里实现
设备驱动程序:接收上面发来的抽象请求,并且变成具体的IO
中断处理程序:处理中断
硬件:执行
举个例子:比如用户发出一个read操作的指令,则接下来要完成的任务是
(1)用户层提供read指令
(2)设备独立层进行校验,转化为驱动设备能理解的指令
(3)设备驱动将操作转化为具体的要求,,驱动io工作
(4)中断当前程序
(5)硬件执行对应的操作
IO核心子系统,其实就是IO层次结构中,偏向核心的部分:设备独立层,设备驱动层,中断处理程序
IO调度其实指的是任务对于设备的请求,每个设备都有一个请求队列,按照某种算法,把设备分配给不同的IO任务
1.磁盘高速缓存
磁盘高速缓存,disk cache.看到cache就知道是啥了吧
但是磁盘缓存虽然和cache很像,区别在于指的是在内存中开辟一块存储空间,用来暂存磁盘文件的副本,逻辑上属于磁盘,物理上属于内存 . 而cache是独立于内存的一共结构
2.缓冲区
缓冲区使用了类似的思路,主要用来环节CPU和IO设备之间速度不匹配的矛盾,减少CPU中断,并且解决数据单元大小不匹配的问题
另外缓冲区有个特点,和管道非常相似
当缓冲区的数据非空的时候,不能写入
当缓冲区数据为空的时候,不能读出
缓冲区是独立于cpu和磁盘的区域,所以需要完成的任务主要是
T(从IO设备输入缓冲区)
M(从缓冲区发往处理器)
C(处理器进行计算)
根据缓冲区数目的不同,一共有以下四种方式
(1)单一缓冲区(2)双缓冲(3)循环缓冲(4)缓冲池
最重要的是前两种,前两种可以根据情况计算出一个任务的时间
首先是单一缓冲区域,T和C是可以并行的但是M和TC不可并行
则消耗时间为M+MAx(T,C)
双缓冲的带来的效果就算T和C可以并行,T和M也可以并行,但是C和M不可以
所以消耗时间为MAX(T,M+C)
3.这俩玩意的对比
高速缓存的特点是单向传输数据,并且存放的都是低速设备上数据的副本,可能会发生未命中的情况
缓冲区的特点是数据交换都要通过缓冲区,因此不存在命中不命中的问题,永远不会去访问低速设备
设备分配指的是按照用户的io需求进行设备的分配,分配到原则是让设备尽可能忙碌又不会造成死锁
按照使用方式方式别可以分为三种
(1)独占式使用设备:同一个时间内只允许一个进程使用当前设备
(2)分时共享设备:顾名思义
(3)使用spooling技术虚拟化
设备的分配信息,被一种数据结构所管理
DCT设备控制表,里面是一个设备的具体信息
SDT系统设备表,SDT中的每个条都是一个DCT,整个系统中只有这么一张系统设备表
设备分配的基本原则其实就算:根据设备特性,用户需要和系统配置,充分发挥设备的使用效率,也要避免造成进程死锁
设备的分配方式有两种:静态分配主要用于对独占设备的分配,在作业开始之前,系统一次性分配完所有需要的设备..
动态分配则根据运行过程中的需要来进行执行
(4)spooling技术(假脱机技术)
spooling用于把一个独占设备变成能够分时共享的片段
目的是未来缓解高速cpu,低速IO之间的矛盾,可以完成分时的操作,营造出虚拟设备的假象
(1)输入井和输出井,是指在磁盘上开辟出的两个存储区域,用来暂存数据,因为磁盘是告诉设备,这两个井就能起到协调速度并且暂存数据的作用,相当于一个代理
(2)输入缓冲区和输出缓冲区:在井和cpu之间,作为数据传输的媒介,进一步协调
在这种技术下,CPU要打印的数据可以先放到磁盘的输出井口中,然后做其他事情
打印则会等待井口的数据,而不是等cpu