操作系统-第六章

输入输出系统

注:为方便书写,文中所有的IO都代表I/O

操作系统-第六章_第1张图片

IO系统的功能、模型和接口

IO软件的层次

  • 用户层软件:产生IO请求、格式化IO、Spolling
  • 设备独立性软件:映射、保护、分块、缓冲、分配
  • 设备驱动程序:设置设备寄存器;检查状态
  • 中断处理程序
  • 硬件:执行IO操作

IO系统的模型

操作系统-第六章_第2张图片

IO设备和设备控制器

即硬件部分

IO设备一般由两部分组成:

  • 机械部分
  • 电子部分

IO设备的类型:(不同分类标准)

输入设备、输出设备、交互式设备

低速设备(键盘、鼠标)、中速设备(打印机)、高速设备(磁盘、光盘)

数据传输单位:块设备、流设备

共享属性:独占设备、共享设备

硬件部分的通信方式:设备和设备控制器通信、设备控制器和CPU通信

IO设备和设备控制器之间通过三种类型信号通信:

  • 数据信号线
  • 状态信号线
  • 控制信号线

CPU和设备控制器之间通过三种类型信号通信:

  • 数据信号线
  • 地址信号线(通知设备控制器需要开启哪个设备,因为一台设备控制器有可能连接多台同类型的设备)
  • 控制信号线

IO通道——CPU的新替身

IO通道不仅可以接收CPU传来的命令进行译码执行,也可以通过访问内存,取指执行,特点如下:

  • 能够执行的指令类型单一——仅限于IO指令
  • 没有自己的内存,和CPU共享内存

IO通道的类型:

  • 字节多路通道
  • 数组选择通道
  • 数组多路通道

中断机构和中断处理程序

  • 中断在操作系统中有着特殊重要的地位
  • 是进程切换的重要技术

外中断和内中断

  • 外中断(中断):中断由外部设备引起

  • 内中断(陷入):中断来源于CPU内部

中断向量表:

序号 中断处理程序入口
1 0x11234

中断信号到来时,中断控制器(硬件)确定中断号,再去调用相应的处理程序

处理中断具有不同的优先级,因此对多源中断产生了两种处理方式:

  • 屏蔽(禁止)中断——不让插队
  • 嵌套中断——让插队

操作系统-第六章_第3张图片

设备驱动程序

中断是IO结束的时候用的,驱动则主要是IO启动时用的。

驱动程序是IO系统的高层和设备控制器之间的通信程序,其需要接收抽象的IO指令,例如read或者write,然后将其转换为适合改硬件的具体指令和参数,发送给设备控制器。

设备驱动程序和一般应用/系统程序的不同

  • 仅转换IO相关操作
  • 和硬件紧密关联,同类终端可以共享一个驱动
  • 驱动程序与IO采用的控制方式相关,一般为中断驱动或者DMA方式
  • 和硬件紧密相关,因此一部分是汇编语言,固化在ROM中
  • 允许可重入,正在运行的驱动程序常会在一次调用完成前再次被调用

设备驱动程序的处理过程

  1. 将抽象要求转换为具体要求(e.g. 磁盘,需要将逻辑地址转换为盘号、磁道号和扇区号)
  2. 对服务请求进行校验,检查用户请求的合理性(e.g. 从打印机读入数据是不合理的)
  3. 检查设备的状态。启动IO设备前,该设备应该是就绪状态,需要检查设备控制器的状态寄存器;如果不是,则阻塞进程到该设备的等待队列上。
  4. 传送参数
  5. 启动IO设备,传送指令
  6. 将自己阻塞,等待设备IO结束后的中断信号再被唤醒

驱动程序中最重要的技术:对IO设备的控制方式

  • 程序控制方式
  • 中断驱动方式
  • DMA方式
  • IO通道控制方式

程序控制方式(轮询的可编程IO方式):

  1. CPU发出一条IO指令启动输入设备输入数据时,要同时令状态寄存器中的忙/闲标志busy置1,并循环检查busy的值。(CPU总要一直检查busy的值,需要额外的开销)
  2. 当busy=1时,表示尚未完成一个字(符)的输入,此时CPU应继续对busy进行检查,直至busy=0,表明已完成数据的输入。
  3. 于是,CPU将数据寄存器中的数据取出,送入内存中,这样便完成了一个字(符)的IO。
  4. 接着再去启动读下一个数据,并置busy=1,如此反复下去

中断驱动方式(中断的可编程IO方式):

  1. 进程要启动IO设备工作时,由CPU向该设备控制器发出一条IO命令,然后便可以立即返回继续执行原来的任务。
  2. 设备控制器按照命令要求去控制指定设备。此时,CPU与IO设备并行操作
  3. 设备处理完数据后,便产生一个中断信号。此时,CPU转而处理该信号。

特点:在IO设备处理每个数据的过程中,由于无需CPU干预,因而可使CPU与IO设备并行工作。仅当处理完一个数据时,才需CPU花费极短的时间去做中断处理。但对于块设备,如果有100个字,则需要中断100次。

DMA方式(直接存储器方式):

  1. 传输的基本单位——数据块。CPU与IO设备之间每次传送至少一个数据块。
  2. 所传送的数据从设备直接送入内存,或者相反。
  3. 仅在传送一个或多个数据块的开始和结束时,才需CPU干预。传送是在控制器的控制下完成的。
  4. DMA方式较之中断驱动方式,又成百倍地减少了CPU对IO的干预,进一步提高了CPU与IO设备的并行程度。

操作系统-第六章_第4张图片

  1. 从磁盘读入数据块时,CPU将一条读指令送至磁盘控制器的命令寄存器(CR)中
  2. 将数据读入的内存起始目标地址送入内存地址寄存器(MAR)中;将读数据的字(节)数送入数据计数器(DC)中
  3. 将磁盘的源地址送至DMA控制器的IO逻辑中。
  4. 启动DMA控制器进行数据传送,CPU便可以去处理其他任务。
  5. 此后,整个数据传送过程便由DMA控制器进行控制。
  6. 当DMA控制器已从磁盘读入一个字(节)的数据并送入数据寄存器(DR)后,将该字(节)传送到指定的内存单元中。
  7. 接着便对MAR内容加1,将DC内容减1.
  8. 若减1后DC内容不为0,表示传送未完,便继续传送下一个字(节);
  9. 否则,由DMA控制器发出中断请求。

IO通道控制方式:

是DMA方式的发展,把对一个数据块的读写,改为对一组数据块的读写。

通道程序包含:

  • 操作码
  • 内存地址
  • 计数
  • 通道程序结束位P
  • 记录结束标志R

e.g.

操作 P R 计数 内存地址
Write 0 0 80 813
Write 0 0 140 1034
Write 0 1 60 5830
Write 0 1 300 2000
Write 0 0 250 1850
Write 1 1 250 720

多条指令操作的内存写到一起,通过R的值来识别(R=1代表这组数据块的结束);通道程序的最后一条指令通过P来识别

与设备无关的IO软件

与设备无关的含义:应用程序中所用的设备,不必局限于使用某个具体的物理设备

与设备无关的IO软件在驱动之上,也称为设备独立性软件

功能:

  1. 设备驱动程序的统一接口
  2. 缓冲管理
  3. 差错控制
  4. 对独立设备的分配与回收
  5. 独立于设备的逻辑数据块

4个数据结构

  • 设备控制表DCT
  • 控制器控制表COCT
  • 通道控制表CHCT
  • 系统设备表SDT

设备控制表:

设备控制表(DCT)
设备类型
设备标识符
设备状态
指向控制器表的指针
重复执行次数或时间
设备队列的队首指针

控制器控制表:

控制器控制表(COCT)
控制器标识符
控制器状态
指向通道表的指针
控制器队列的队首指针
控制器队列的队尾指针

通道控制表:

通道控制表(CHCT)
通道标识符
通道状态
与通道连接的控制器表首址
通道队列的队首指针
通道队列的队尾指针

系统设备表:

操作系统-第六章_第5张图片

物理设备的分配过程:物理设备名→SDT→DCT→COCT→CHCT

设备分配时需要考虑的因素

  1. 设备的固有属性(独占设备、共享设备)
  2. 设备的分配算法(先来先服务、优先级高者优先)
  3. 设备分配中的安全性(安全分配方式、不安全分配方式)

用户层的IO软件

用户层的IO软件:包括帮助用户进程实现系统调用的库函数假脱机系统

假脱机技术可以将一台物理IO设备虚拟为多台逻辑IO设备,这样也就允许多个用户共享物理IO设备。

假脱机系统:

操作系统-第六章_第6张图片

其中的输入井和输出井是在硬盘上分出的空间进行数据存储。

Spooling系统(假脱机系统)的优势:

  • 提高IO的速度
  • 将独占设备改为共享设备
  • 实现了虚拟设备功能

缓冲区管理

为什么引入缓冲区?

  • 缓解CPU和IO设备速度不匹配的矛盾
  • 减少对CPU的中断频率
  • 解决数据粒度不匹配的问题
  • 提高CPU和IO设备的并行性

单缓冲区:每当用户申请IO的时候,OS就给该用户分配一个缓冲区

操作系统-第六章_第7张图片

双缓冲区:每当用户申请IO的时候,OS就给该用户分配两个缓冲区,也叫缓冲对换

操作系统-第六章_第8张图片

双机通讯时的双缓冲区设置

操作系统-第六章_第9张图片

也可以采用环形缓冲区:多个缓冲区形成唤醒的数据结构,类似生产者消费者问题

操作系统-第六章_第10张图片

emq - empty queue

inq - in queue

ouq - out queue

收容输入:

Getbuf(emq);
Putbuf(inq, hin);

提取输入:

Getbuf(inq);
Putbuf(emq, sin);

收容输出:

Getbuf(emq);
Putbuf(ouq, hout);

提取输出:

Getbuf(ouq);
Putbuf(emq, sout);

磁盘存储器的性能和调度

磁盘调度算法:

  • 先来先服务(FCFS)
  • 最短寻道时间优先(SSTF)-要求访问的磁道与当前所在磁道之间的距离最短
  • 扫描算法(SCAN)-在SSTF的基础上,要求考虑磁头的移动方向(会调转方向)
  • 循环扫描算法(CSCAN)-磁头只朝一个方向移动

你可能感兴趣的:(操作系统笔记_Peter,学习,笔记)