[操作系统]5.IO控制

老规矩,仅为整理知识点,知识框架来自于王道操作系统

并且IO控制的更多知识其实是在计算机组成原理的部分,所以这里一些关于中断具体措施这种细节就先跳过了

1.关于IO设备的概述

(1)IO设备概述

io设备是计算机中最复杂的一类设备,涉及到的基本都是系统层面的调用

例如显示器,键盘,音响这种,按照不同的方式可以有不同的分类

另外存在一个名为IO控制器的电子部件

负责(1)识别cpu命令(2)向cpu报告状态(3)数据交换(4)地址识别

(2)IO控制方式

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控制器只能对应一个设备

(3)IO子系统的结构

io系统的层次结构可以分为

用户层IO软件:实现和用户的接口

设备独立性程序:设备独立也叫设备无关,所有与硬件无关的功能军在这里实现

设备驱动程序:接收上面发来的抽象请求,并且变成具体的IO

中断处理程序:处理中断

硬件:执行

举个例子:比如用户发出一个read操作的指令,则接下来要完成的任务是

(1)用户层提供read指令

(2)设备独立层进行校验,转化为驱动设备能理解的指令

(3)设备驱动将操作转化为具体的要求,,驱动io工作

(4)中断当前程序

(5)硬件执行对应的操作

2.IO关键子系统

IO核心子系统,其实就是IO层次结构中,偏向核心的部分:设备独立层,设备驱动层,中断处理程序

(1)IO调度的概念

IO调度其实指的是任务对于设备的请求,每个设备都有一个请求队列,按照某种算法,把设备分配给不同的IO任务

(2)关于高速缓存和缓冲区

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.这俩玩意的对比

高速缓存的特点是单向传输数据,并且存放的都是低速设备上数据的副本,可能会发生未命中的情况

缓冲区的特点是数据交换都要通过缓冲区,因此不存在命中不命中的问题,永远不会去访问低速设备

(3)关于设备的分配与回收

设备分配指的是按照用户的io需求进行设备的分配,分配到原则是让设备尽可能忙碌又不会造成死锁

按照使用方式方式别可以分为三种

(1)独占式使用设备:同一个时间内只允许一个进程使用当前设备

(2)分时共享设备:顾名思义

(3)使用spooling技术虚拟化

设备的分配信息,被一种数据结构所管理

DCT设备控制表,里面是一个设备的具体信息

SDT系统设备表,SDT中的每个条都是一个DCT,整个系统中只有这么一张系统设备表

设备分配的基本原则其实就算:根据设备特性,用户需要和系统配置,充分发挥设备的使用效率,也要避免造成进程死锁

设备的分配方式有两种:静态分配主要用于对独占设备的分配,在作业开始之前,系统一次性分配完所有需要的设备..

动态分配则根据运行过程中的需要来进行执行

(4)spooling技术(假脱机技术)

spooling用于把一个独占设备变成能够分时共享的片段

目的是未来缓解高速cpu,低速IO之间的矛盾,可以完成分时的操作,营造出虚拟设备的假象

(1)输入井和输出井,是指在磁盘上开辟出的两个存储区域,用来暂存数据,因为磁盘是告诉设备,这两个井就能起到协调速度并且暂存数据的作用,相当于一个代理

(2)输入缓冲区和输出缓冲区:在井和cpu之间,作为数据传输的媒介,进一步协调

在这种技术下,CPU要打印的数据可以先放到磁盘的输出井口中,然后做其他事情

打印则会等待井口的数据,而不是等cpu

你可能感兴趣的:(操作系统,运维)