0203-2-输入输出系统

第六章:输入输出系统

在这里插入图片描述

I/O系统的功能,模型和接口

I/O系统管理的对象是I/O设备和相应的设备控制器。

I/O系统的基本功能

  • 隐藏物理设备的细节
  • 与设备的无关性
  • 提高处理机和I/O设备的利用率
  • 对I/O设备进行控制
  • 确保对设备的正确共享
  • 错误处理

I/O软件的层次结构

  • 用户层I/O软件
  • 设备独立性软件
  • 设备驱动程序(厂家开发)
  • 中断处理程序
  • 硬件

I/O系统的分层

  • 中断处理程序
  • 设备驱动程序
  • 设备独立性软件

I/O系统接口

  • 块设备接口
    • 指以数据块为单位来组织和传送数据信息的设备
    • 典型的块设备是磁盘、光盘
    • 块设备的基本特征
      • ①传输速率较高,通常每秒钟为几兆位;
      • ②它是可寻址的,即可随机地读/写任意一块;
      • ③磁盘设备的I/O采用DMA方式。
  • 流设备接口
    • 又称字符设备指以单个字符为单位来传送数据信息的设备
    • 这类设备一般用于数据的输入和输出,有交互式终端、打印机
    • 字符设备的基本特征
      • ①传输速率较低;
      • ②不可寻址,即不能指定输入时的源地址或输出时的目标地址;
      • ③字符设备的I/O常采用中断驱动方式。
  • 网络通信接口
    • 提供网络接入功能,使计算机能通过网络与其他计算机进行通信或上网浏览。

I/O设备和设备控制器

分类

  • 使用特性分
    • 存储设备
    • I/O设备
  • 传输速率分
    • 低速设备(几字节——几百字节)
      • 典型的设备有键盘、鼠标、语音的输入
    • 中速设备(数千——数万字节)
      • 典型的设备有行式打印机、激光打印机
    • 高速设备(数十万——千兆字节)
      • 典型的设备有磁带机、磁盘机、光盘机

设备并不是直接与CPU进行通信,而是与设备控制器通信。在设备与设备控制器之间应该有一个接口。

  • 数据信号:控制器 ← 设备 ← 控制器
    • 传送数据信号,输入、输出bit
  • 控制信号: 控制器 → 设备
    • 执行读、写操作的信号
  • 状态信号:设备当前使用状态

设备控制器

  • 主要功能:控制一个或多个I/O设备,以实现I/O设备和计算机之间的数据交换
  • 基本功能
    • 接收和识别命令
      • 控制寄存器、命令译码器
    • 数据交换
      • 实现CPU与控制器,控制器与设备间的数据交换
    • 标识和报告设备的状态
    • 地址识别
      • 配置地址译码器,识别不同的设备
    • 数据缓冲区
    • 差错控制
  • 设备控制器的组成
    • 设备控制器与处理机(CPU)的接口
      • 实现CPU与设备控制器之间的通信
    • 设备控制器与设备的接口
      • 控制器可连接多个设备
    • I/O逻辑
      • 实现对设备的控制
      • CPU利用该逻辑向控制器发送I/O命令
      • 命令、地址译码

内存映像I/O

  • 驱动程序将抽象I/O命令转换出的一系列具体的命令,参数等数据装入设备控制器的相应寄存器,由控制器来执行这些命令,具体实施对I/O设备的操作

I/O通道

  • 目的:建立独立的I/O操作(组织, 管理和结束),使由CPU处理的I/O工作转由通道完成(解放CPU,实现并行)

  • 什么是I/O通道?

    • 是一种特殊的处理机,具有通过执行通道程序完成I/O操作的指令
    • 特点:指令单一(局限于与I/O操作相关的指令),与CPU共享内存
  • 基本过程:

    • CPU向通道发出I/O指令->通道接收指令->从内存取出通道程序处理I/O->向CPU发出中断
  • 通道类型

    • 字节多路通道
      • 低中速连接子通道时间片轮转方式共享主通道
      • 字节多路通道不适于连接高速设备,这推动了按数组方式进行数据传送的数组选择通道的形成。
    • 数组选择通道
      • 这种通道可以连接多台高速设备,但只含有一个分配型子通道,在一段时间内只能执行一道通道程序, 控制一台设备进行数据传送, 直至该设备传送完毕释放该通道。这种通道的利用率很低。
    • 数组多路通道
      • 含有多个非分配型子通道,前两种通道的组合,通道利用率较好
  • 瓶颈问题

    • 原因;通道不足
    • 解决办法:增加设备到主机间的通路,而不增加通道(结果类似RS触发器)

中断机构和中断处理程序

中断

  • 分类
    • 中断(外部触发)
      • 对外部I/O设备发出的中断信号的响应
    • 陷入(内部原因:除0)
      • 由CPU内部事件引起的中断
  • 中断向量表(类比51单片机)
    • 中断程序的入口地址表
  • 中断优先级
    • 对紧急程度不同的中断处理方式
  • 对多中断源的处理方式
    • 屏蔽中断
    • 嵌套中断

中断处理程序

  • 测定是否有未响应的中断信号
  • 保护被中断进程的CPU环境
  • 转入相应的设备处理程序
  • 中断处理
  • 恢复CPU 的现场并退出中断

设备驱动程序

是I/O进程与设备控制器之间的通信程序,又由于它常以进程的形式存在,故以后就简称为设备驱动进程

主要任务是接受来自它上一层的与设备无关软件的抽象请求,并执行这个请求。

功能

    1. 接收由I/O进程发来的命令和参数, 并将命令中的抽象要求转换为具体要求。例如,将磁盘块号转换为磁盘的盘面、 磁道号及扇区号。
    1. 检查用户I/O请求的合法性,了解I/O设备的状态,传递有关参数,设置设备的工作方式。
    1. 发出I/O命令,如果设备空闲,便立即启动I/O设备去完成指定的I/O操作;如果设备处于忙碌状态,则将请求者的请求块挂在设备队列上等待。
    1. 及时响应由控制器或通道发来的中断请求,并根据其中断类型调用相应的中断处理程序进行处理。
    1. 对于设置有通道的计算机系统,驱动程序还应能够根据用户的I/O请求,自动地构成通道程序。

设备驱动程序的处理过程

  • 将用户和上层软件对设备控制的抽象要求转换成对设备的具体要求,如对抽象要求的盘块号转换为磁盘的盘面、磁道及扇区。
  • 检查I/O请求的合理性。
  • 读出和检查设备的状态,确保设备处于就绪态。
  • 传送必要的参数,如传送的字节数,数据在主存的首址等。
  • 工作方式的设置。
  • 启动I/O设备,并检查启动是否成功,如成功则将控制返回给I/O控制系统,在I/O设备忙于传送数据时,该用户进程把自己阻塞,直至中断到来才将它唤醒,而CPU可干别的事。

对I/O设备的控制方式

  • I/O控制的宗旨
    • 减少CPU对I/O控制的干预
    • 充分利用CPU完成数据处理工作
  • I/O 控制方式
    • 轮询的可编程I/O方式
    • 中断驱动I/O方式
    • DMA控制方式
    • I/O通道控制方式

DMA控制器组成

  • 主机与DMA控制器的接口
  • DMA控制器与块设备的接口
  • I/O控制逻辑

与设备无关的I/O软件

基本概念

  • 含义: 应用程序独立于具体使用的物理设备。
  • 驱动程序是一个与硬件(或设备)紧密相关的软件。为实现设备独立性,须在驱动程序上设置一层软件,称为设备独立性软件。
  • 设备独立性(Device Independence)的优点
    • 以物理设备名使用设备
    • 引入了逻辑设备名
    • 逻辑设备名称到物理设备名称的转换(易于实现I/O重定向)

与设备无关的软件

  • 设备驱动程序的统一接口
  • 缓存管理
  • 差错控制
  • 对独立设备的分配与回收
  • 独立于设备的逻辑数据块

设备分配中的数据结构

  • 设备控制表DCT
  • 控制器控制表COCT
  • 通道控制表CHCT
  • 显然,在有通道的系统中,一个进程只有获得了通道,控制器和所需设备三者之后,才具备了进行I/O操作的物理条件
  • 系统设备表SDT
  • 逻辑设备表LUT
  • 分配的流程,从资源多的到资源紧张的:LUT->SDT->DCT->COCT->CHCT
  • 在申请设备的过程中,根据用户请求的I/O设备的逻辑名,查找逻辑设备和物理设备的映射表;以物理设备为索引,查找SDT,找到该设备所连接的DCT;继续查找与该设备连接的COCT和CHCT,就找到了一条通路。

用户层的I/O软件

系统调用与库函数

  • OS向用户提供的所有功能,用户进程都必须通过系统调用来获取
  • 在C语言以及UNIX系统中,系统调用(如read)与各系统调用所使用的库函数(如read)之间几乎是一一对应的。而微软的叫Win32API

假脱机系统(spooling)

  • spooling技术是对脱机输入/输出系统的模拟
  • 主要组成
    • 输入/输出井
    • 输入/输出缓冲区
    • 输入/输出进程
    • 井管理程序
  • 特点(体现操作系统的虚拟性)
    • 提高了I/O的速度
      • 对数据所进行的I/O操作,已从对低速设备演变为对输入井或输出井中的数据存取。
    • 将独占设备改造为共享设备
      • 实际分给用户进程的不是打印设备,而是共享输出井中的存储区域
    • 实现了虚拟设备功能
      • 将独占设备变成多台独占的虚拟设备。

缓冲区管理

缓冲的引入(原因)

  • 缓和CPU与I/O设备间速度不匹配的矛盾
  • 减少对CPU的中断频率,放宽对CPU中断响应时间的限制
  • 提高CPU和I/O设备之间的并行性
  • 解决数据粒度不匹配的问题

单缓冲区

  • 即在CPU计算的时候,将数据数据输入到缓冲区(大小取决与T和C的大小)

双缓冲区

  • 即允许CPU连续工作(T不断)

环形缓冲区(专为生产者和消费者打造)

  • 组成
    • 多个缓冲区
    • 多个指针
  • 使用
    • Getbuf过程
    • Releasebuf过程
  • 同步问题

缓冲池(理解为更大的缓冲区)

  • 组成
    • 空白缓冲队列(emq)
      • 由空缓冲区链接而成F(emq),L(emq)分别指向该队列首尾缓冲区
    • 输入队列(inq)
      • 由装满输入数据的缓冲区链接而成F(inq),L(inq)分别指向该队列首尾缓冲区
    • 输出队列(outq)
      • 由装满输出数据的缓冲区链接而成F(outq), L(outq)分别指向该队列首尾缓冲
  • Getbuf和Putbuf过程
    • 收容:缓冲池接收外界数据
    • 提取:外界从缓冲池获得数据
  • 缓冲区工作方式(从缓冲区的角度来看)
    • 收容输入
    • 提取输入
    • 收容输出
    • 提取输出

磁盘存储器的性能和调度

数据的组织和格式

磁盘的类型

  • 固定头磁盘(贵)
  • 移动头磁盘

磁盘访问的时间(关键)

  • 寻道时间Ts=m*n+s
  • 旋转延迟时间Tr
  • 传输时间Tt=b/rN
  • 总时间Ta=Ts+1/2r+b/rN

磁盘的调度算法(掌握图表)

  • 先来先服务(FCFS)
    • 优点:公平,简单
    • 缺点:可能导致某些进程的请求长期得不到满足
  • 最短寻道时间优先(SSTF)
    • 说明:要求访问的磁道和当前磁头所在的磁道距离最近,以使每次的寻道时间最短
  • 扫描算法(SCAN)
    • 扫描算法不仅考虑到欲访问的磁道与当前磁道间的距离,更优先考虑的是磁道当前的移动方向
    • 联想电梯的运行
    • 可防止低优先级进程出现“饥饿”的现象
  • 循环扫描算法(CSCAN)
    • 算法规定磁头单向移动,例如,只是自里向外移动,当磁头移到最外的磁道并访问后,磁头立即返回到最里的欲访问磁道,亦即将最小磁道号紧接着最大磁道号构成循环,进行循环扫描
  • NStepScan算法
    • N步SCAN算法是将磁盘请求队列分成若干个长度为N的子队列,磁盘调度将按FCFS算法依次这些子队列。
  • FSCAN算法
    • 是Nstepscan算法的简化,将磁盘请求队列分成两个子队列

XMind: ZEN - Trial Version

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/450319.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 索引和事务

目录 1 索引1.1 简介1.2 使用1.3 示例 2 事务2.1 简介2.2 使用 1 索引 1.1 简介 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。 索引底层是…

Windows、Linux、Mac数据库的安装(mysql、MongoDB、Redis)

数据库的安装 作为数据存储的重要部分,数据库同样是必不可少的,数据库可以分为关系型数据库和非关系型数据库。 关系型数据库如 SQLite、MySQL、Oracle、SQL Server、DB2 等,其数据库是以表的形式存储;非关系型数据库如 MongoDB…

flutter开发实战-Camera自定义相机拍照功能实现

flutter开发实战-Camera自定义相机拍照功能实现 一、前言 在项目中使用image_picker插件时候,在android设备上使用无法默认设置前置摄像头(暂时不清楚什么原因),由于项目默认需要使用前置摄像头,所以最终采用自定义…

stack_queue:三个关键注意事项解析

一、stack与容器 template<class T, class Container> class stack { private:Container _con; };Container 为容器&#xff0c;在实例化创建对象时&#xff0c;我们可以传 vector<T> 或 list<T> 等作为栈的底层。 举例&#xff1a; int main() {stack<i…

《苍穹外卖》知识梳理P1-多模块项目的创建

《苍穹外卖》知识梳理P1 一.多模块项目的创建 个人认为对于一个项目的学习&#xff0c;应当先从它的项目结构入手&#xff0c;明确了各个模块的职责与功能&#xff0c;后边尽心编写以及改写的时候会更加得心应手。 该项目分为了3个模块&#xff1a;sky-common模块&#xff0…

西瓜书学习笔记——核化线性降维(公式推导+举例应用)

文章目录 算法介绍实验分析 算法介绍 核化线性降维是一种使用核方法&#xff08;Kernel Methods&#xff09;来进行降维的技术。在传统的线性降维方法中&#xff0c;例如主成分分析&#xff08;PCA&#xff09;和线性判别分析&#xff08;LDA&#xff09;&#xff0c;数据被映…

【备战蓝桥杯】——循环结构终篇

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-yl4Tqejg4LkjZLAM {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

云尘 -- 铁三域控

描述&#xff1a; flag1 直接fscan开扫 发现存活两台机子123和141&#xff0c;其中141这台机子扫出来有ms17-010漏洞 继续信息收集&#xff0c;用nmap扫一波全端口&#xff0c;看看有没有遗漏 141这台机子一开始没扫到&#xff0c;看着提示使用-Pn再扫一遍就行了。因为如果当…

如何回答消息确认不丢失

1、如何知道有消息丢失&#xff1f; 2、哪些环节可能d 3、如何确保消息不丢失 二、消息丢失的环节 三&#xff0c;防止消息丢失的阶段操作 消息生产阶段 消息存储阶段 消息消费阶段 如何解决消息积压的问题 从消费端解决问题&#xff1a;

Leetcode—203. 移除链表元素【简单】

2024每日刷题&#xff08;一零九&#xff09; Leetcode—203. 移除链表元素 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(n…

BUUCTF-Real-[struts2]s2-013

struts2的标签中 <s:a> 和 <s:url> 都有一个 includeParams 属性&#xff0c;可以设置成如下值none - URL中不包含任何参数&#xff08;默认&#xff09; get - 仅包含URL中的GET参数 all - 在URL中包含GET和POST参数 当includeParamsall的时候&#xff0c;会将本次…

力扣刷题之旅:启程篇(二)

力扣&#xff08;LeetCode&#xff09;是一个在线编程平台&#xff0c;主要用于帮助程序员提升算法和数据结构方面的能力。以下是一些力扣上的入门题目&#xff0c;以及它们的解题代码。 --点击进入刷题地址 1.最后得到的余数 题目描述&#xff1a; 给定两个非空字符串 nu…