热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【操作系统】输入/输出(I/O)管理

IO设备IO控制方式程序直接控制方式。计算机从外部设备读取数据到存储器,每次读一个字的数据。对读入的每个字,CPU需要对外设状态进行循环检查知道确定该字已经在&#1

I/O设备

I/O控制方式

  1. 程序直接控制方式。计算机从外部设备读取数据到存储器,每次读一个字的数据。对读入的每个字,CPU 需要对外设状态进行循环检查知道确定该字已经在 I/O 控制器的数据寄存器中。
  2. 中断驱动方式。允许 I/O 设备主动打断 CPU 的运行并请求服务,从而“解放” CPU,使得其向 I/O 控制器发送读命令后可以继续做其他有用的工作。
  3. DMA 方式。DMA(直接存储器)方式的基本思想是在 I/O 设备和内存之间开辟直接的数据交换通路,彻底“解放” CPU。DMA特点如下:(1)基本单位是数据块 (2)所传送的数据,是从设备直接送入内存的,或者相反 (3)仅在传送一个或多个数据块的开始和结束时,才需 CPU 干预,整块数据的传送是在 DMA 控制器的控制下完成的。

    为了在主机与控制器之间实现成块数据的直接交换,必须在 DMA 控制器中设置如下4类寄存器:

    • 命令/状态寄存器(CR)。用于接收从 CPU 发来的 I/O 命令或有关控制信息,或设备的状态。
    • 内存地址寄存器(MAR)。在输入时,它存放把数据从设备传送到内存的起始目标地址;在输出时,它存放由内存到设备的内存源地址。
    • 数据寄存器(DR)。用于暂存从设备到内存或从内存到设备的数据。
    • 数据计数器(DC)。存放本次要传送的字(节)数。
  4. 通道控制方式。I/O 通道是指专门负责输入/输出的处理机。I/O 通道是 DMA 方式的发展,它可以进一步减少 CPU 的干预,即把对一个数据块的读(或写)为单位的干预,减少为对一组数据块的读(或写)及有关控制和管理为单位的干预。I/O 通道与一般处理机的区别是:通道指令的类型单一没有自己的内存,通道所执行的通道程序是放在主机内存中的,也就是说通道与 CPU 共享内存。I/O 通道与 DMA 方式的区别是:DMA 方式需要 CPU 来控制传输的数据块大小、传输的内存位置,而通道方式中这些信息是由通道控制的。另外,每个 DMA 控制器对应一台设备与内存传递数据,而一个通道可以控制多台设备与内存的数据交换

 

整个I/O系统可以视为具有4个层次的系统结构,如下图:

 

各层次及其功能如下:

  1. 用户层  I/O 软件。实现与用户交互的接口,用户可直接调用在用户层提供的、与 I/O 操作有关的库函数,对设备进行操作。
  2. 设备独立性软件。用于实现用户程序与设备驱动器的统一接口、设备命令、设备保护及设备分配与释放等,同时为设备管理和数据传送提供必要的存储空间。
  3. 设备驱动程序。与硬件直接相关,负责具体实现系统对设备发出的操作指令,驱动 I/O 设备工作的驱动程序。
  4. 中断处理程序。用于保护被中断进程的 CPU 环境,转入相应的中断处理程序进行处理,处理完并恢复被中断进程的现场后,返回到被中断程序。
  5. 硬件设备。I/O 设备通常包括一个机械部件和一个电子部件。为了达到设计的模块性和通用性,一般将其分开:电子部件称为设备控制器(或适配器),在个人计算机中,通常是一块插入主板扩充槽的印制电路板;机械部件则是设备本身。

 

可寻址是块设备的基本特征。

共享设备必须是可寻址的和可随机访问的设备。

在操作系统中,通道技术指的是一种硬件技术。

字节多路通道用作连接大量的低速或中速 I/O 设备。数组选择通道用作连接多台告诉设备,但一段时间内只能执行一道通道程序。数组多路通道前两者优点结合。

通道控制设备控制器、设备控制器控制设备工作。

系统按照设备类型配置设备驱动程序。

 

I/O核心子系统

磁盘高速缓存。指利用内存中的存储空间来暂存从磁盘中读出的一系列盘块中的信息。因此,磁盘高速缓存逻辑上属于磁盘,物理上则是驻留在内存中的盘块。

 

在设备管理子系统中,引入缓冲区的主要目的如下:

  1. 缓和 CPU 与 I/O 设备间速度不匹配的矛盾。
  2. 减少对 CPU 的中断频率,放宽对 CPU 中断响应时间的限制。
  3. 解决基本数据单元大小(即数据粒度)不匹配的问题
  4. 提高 CPU 与 I/O 设别之间的并行性。

 

根据系统设置缓冲器的个数,缓冲技术可以分为如下几种:

  1. 单缓冲。在块设备输入时,假定从磁盘把一块数据输入缓冲区的时间为 T,操作系统将该缓冲区中的数据传送到用户区的时间为 M,而 CPU 对这一块数据处理的时间为 C。单缓冲区处理每块数据的用时为 max( C, T ) + M。
  2. 双缓冲。双缓冲区处理每块数据的用时为 max( C + M, T )。
  3. 循环缓冲。包含多个大小相等的缓冲区,每个缓冲区中有一个链接指针指向下一个缓冲区,最后一个缓冲区指针指向第一个缓冲区,多个缓冲区构成一个环形。循环缓冲用于输入/输出时,还需要有两个指针 in 和 out。
  4. 缓冲池。由多个系统公用的缓冲区组成,缓冲区按其使用情况可以形成三个队列:空缓冲队列、装满输入数据的缓冲队列和装满输出数据的缓冲队列。还应具有4种缓冲区:用于收容输入数据的工作缓冲区、用于提取输入数据的工作缓冲区、用于收容输出数据的工作缓冲区及用于提取输出数据的工作缓冲区。

 

设备分配方式有静态分配和动态分配两种:

静态分配主要用于对独占设备的分配,在用户作业开始执行前,由系统一次性分配该作业所要求的全部设备、控制器(如通道等)。

动态分配在进程执行过程中根据执行需要分配。

 

为了实现设备独立性,在应用程序中使用逻辑设备名来请求使用某类设备,在系统中设置一张逻辑设备表(LUT),用于将逻辑设备名映射为物理设备名。

 

为了缓和 CPU 的高速性与 I/O 设备低速性之间的矛盾,引入了脱机输入/输出技术。该技术利用专门的外围控制机,将低速 I/O 设备上的数据传送到高速磁盘上,或者相反。SPOOLing 的意思是外部设备同时联机操作,又称假脱机技术,是操作系统中采用的一项将独占设备改造成共享设备的技术。

SPOOLing 系统的组成如图:

输入井和输出井是指在磁盘上开辟出的两个存储区域。

输入缓冲区和输出缓冲区是指在内存中开辟的两个缓冲池。

 

SPOOLing 系统的主要特点有:提高了 I/O 速度;将独占设备改造为共享设备;实现了虚拟设备功能。

SPOOLing 技术实质上是一种以空间换时间的技术,请求分页技术中的页面调度算法是以时间换空间的技术

 

设备的独立性主要是指用户使用设备的透明性,即用户程序和实际使用的物理设备无关。

提高单机资源利用率的关键技术是多道程序设计基础。

SPOOLing 技术不需要外围计算机的支持。

SPOOLing 系统由预输入程序、井管理程序和缓输出程序组成。

 

以上内容均来自王道书籍及相关课程等


推荐阅读
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 开发笔记:计网局域网:NAT 是如何工作的?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了计网-局域网:NAT是如何工作的?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 本文介绍了在Oracle数据库中创建序列时如何选择cache或nocache参数。cache参数可以提高序列的存取速度,但可能会导致序列丢失;nocache参数可以避免序列丢失,但在高并发访问时可能导致性能问题。文章详细解释了两者的区别和使用场景。 ... [详细]
  • 本文介绍了Java的集合及其实现类,包括数据结构、抽象类和具体实现类的关系,详细介绍了List接口及其实现类ArrayList的基本操作和特点。文章通过提供相关参考文档和链接,帮助读者更好地理解和使用Java的集合类。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
  • 给定一个二维平面上的一些点,通过计算曼哈顿距离,求连接所有点的最小总费用。只有任意两点之间有且仅有一条简单路径时,才认为所有点都已连接。给出了几个示例并给出了对应的输出。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
author-avatar
mobiledu2502872733
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有