操作系统——I/O系统

news2025/2/23 13:06:58

笔记内容及图片整理自XJTUSE “操作系统” 课程ppt,仅供学习交流使用,谢谢。

概述

计算机的两个主要工作是I/O和处理。I/O系统的目标是提高设备利用率,尽量提高CPU与I/O设备间的并行工作程度,I/O主要技术包括中断技术、DMA技术、通道技术、缓冲技术。I/O系统能为用户提供方便(用户能独立于具体设备的复杂物理特性之外而方便地使用设备)、统一(对不同设备尽量使用统一操作方式,例如各种字符设备用一种I/O操作方式)的界面。

I/O设备技术呈现两个冲突趋势。一方面,软件和硬件的接口标准化日益增长,有助于将改进升级设备集成到现有计算机和操作系统;另一方面,I/O设备的种类也日益增多,新设备和原先设备的巨大差异导致难以集成到现有计算机和操作系统。解决这种冲突需要采用硬件和软件的组合技术。为了封装各种设备的细节与特点,操作系统内核采用设备驱动程序模块。设备驱动程序为I/O子系统提供了统一的设备访问接口,就像系统调用为应用程序与操作系统间提供了标准接口。

I/O硬件

计算机系统中,除了需要直接用于I/O和存储信息的设备外,还需要有相应的设备控制器。对于大、中型计算机系统,还需有I/O通道,由这些设备以及相应的总线构成了I/O系统。设备与计算机的通信通过一个连接点或端口实现,若设备共享一组通用线路,则这种连接称为总线,总线是一组线路和通过线路传输信息的严格定义的一个协议。若设备A通过线路连接设备B,设备B又通过线路连接设备C,设备C通过端口连接计算机,则此方式被称为菊花链,菊花链通常按照总线运行。

以下是一个典型的PC总线结构:

I/O设备类型繁多,从操作系统的角度看,其性能指标包括数据传输速率、数据传输单位和设备共享属性等。

数据传输速率

低速设备——传输速率仅为每秒钟几个字节至数百个字节。属于低速设备的典型设备有键盘、 鼠标器、语音的输入和输出等设备。

中速设备——传输速率在每秒钟数千个字节至数万个字节。典型的中速设备有行式打印机、激光打印机等。

高速设备——传输速率在数百K个字节至数十兆字节。 典型的高速设备有磁带机、磁盘机、光盘机等。

数据传输单位

块设备——用于存储信息。 由于信息的存取总是以数据块为单位,故而得名。 典型的块设备是磁盘,每个盘块的大小为512B~4KB。磁盘设备的基本特征是其传输速率较高,通常每秒钟为几兆位;另一特征是可寻址,即对它可随机地读/写任一块;此外,磁盘设备的I/O常采用DMA 方式。

字符设备——用于数据的输入和输出。其基本单位是字符,故称为字符设备。

设备共享属性

独占设备——在一段时间内只能有一个进程使用的设备,一般为低速I/O设备(如打印机,磁带等)

共享设备——在一段时间内可有多个进程共同使用的设备,多个进程以交叉的方式来使用设备,其资源利用率高(如硬盘)

虚拟设备——通过虚拟技术把一台独占设备变换为若干台逻辑设备,可供多个用户使用。

控制器:设备并不是直接与CPU进行通信,而是与设备控制器通信。每个 I/O 设备通过设备控制器与计算机的数据总线和地址总线相连接,某些设备(磁盘设备)有内置的控制器。

设备控制器是一个可编址设备,由设备控制器与CPU的接口、设备控制器与设备的接口和I/O逻辑组成。当它仅控制一个设备时,它只有一个唯一的设备地址;若控制器可连接多个设备时,则应具有多个设备地址,使每一个地址对应一个设备。它还是CPU与I/O设备间的接口,它接收从CPU发来的命令,并去控制I/O设备工作。

I/O通道:通道位于CPU和设备控制器之间,是独立于CPU的专门负责数据I/O传输工作的处理机,对外部设备实现统一管理,代替CPU对I/O操作进行控制,从而使I/O操作可与CPU并行操作。通道可以执行通道程序,建立独立的I/O操作,不仅使数据的传送独立于CPU,而且使有关对I/O操作的组织、管理及其结束处理也尽量独立,即把CPU从繁杂的I/O任务中解放出来,提高CPU与设备,设备与设备之间的并行工作能力。

字节多路通道——主要连接以字节为单位的低速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方式,即轮询。

轮询在进行数据I/O之前先查询设备的状态

——已准备好?传送数据

——未准备好?继续查询

是否准备好的依据为设备控制器的状态位

——Busy=1?未准备好

——Busy=0?已准备好

轮询模式中CPU与设备串行工作、循环测试,浪费大量CPU时间。

中断

现代计算机系统中对I/O设备的控制广泛采用中断驱动方式,即在I/O设备输入/输出每个数据的过程无须CPU干预,仅当输完一个数据时,才需CPU花费极短时间去做些中断处理。

1)CPU向设备控制器发出一条I/O命令后,立即返回继续执行原来的任务

2)设备控制器控制I/O设备进行I/O操作

3)当设备完成了一个字节数据的I/O时,设备控制器产生一个中断信号

4)CPU检测到中断信号后,进行相应的处理工作。

中断模式中CPU与I/O设备并行工作,仅当输完一个数据时才需CPU花费极短时间做中断处理,提高了系统的资源利用率及吞吐量。

直接内存访问

中断驱动方式以字节为单位进行I/O,若将这种方式用于块设备I/O,显然极其低效。因此为了进一步减少CPU对I/O的干预,引入直接内存访问DMA方式。此方式拥有一个专用的DMA控制器,启动DMA传输时主机将DMA命令块(包含传输来源地址的指针、传输目标地址的指针、传输字节数)写到内存,CPU将DMA命令块地址写到DMA控制器后便继续其他工作。DMA控制器继续直接操作内存总线,将地址放到总线,在没有主CPU的帮助的情况下执行传输。

DMA控制器由主机与DMA控制器接口、DMA控制器与块设备接口和I/O控制逻辑组成,DMA控制器中设四类寄存器:命令/状态寄存器CR、内存地址寄存器MAR、数据寄存器DR、数据计数器DC。

DMA方式中,数据传输的基本单位是数据块,所传输的数据是从设备直接送入内存或者从内存直接读入设备,整块数据的传送是由控制器完成的。这种方式较中断驱动方式成百倍地减少了CPU对I/O的干预,进一步提高了CPU与I/O设备的并行操作程度。

I/O通道

DMA每次只能执行一条I/O指令,不能满足复杂的I/O操作要求。大、中型计算机系统中普遍采用由专用I/O处理机来接受CPU的委托,独立执行自己的通道程序来实现I/O设备与内存之间的信息交换,这就是I/O通道技术。

I/O通道方式是DMA方式的发展,它进一步减少了CPU的干预,即将以一个数据块的I/O为单位的干预减少到以一组数据块的I/O及有关的控制和管理为单位的干预,从而实现CPU、通道和I/O设备三者的并行工作。

例如当CPU要完成一组相关的I/O操作及有关控制时,只需向I/O通道发出一条I/O指令,并给出通道程序的首地址和要访问的I/O设备,通道接到该指令后,通过执行通道程序便可自动完成CPU指定的I/O任务。通道相当于一个功能简单的处理机,包含通道指令(空操作,读操作,写操作,控制,转移操作),并可执行用这些指令编写的通道程序。

内核I/O子系统

缓冲

缓冲技术:为提高I/O速度和设备的利用率,几乎所有I/O设备在与CPU/内存交换数据时,都使用了缓冲区。引入缓冲技术的主要原因有以下三点:

1)缓和CPU与I/O设备间速度不匹配的矛盾

2)减少对CPU的中断频率,放宽对中断响应时间的限制

3)提高CPU和I/O设备之间的并行性

例如一个程序,它时而长时间计算而没有输出,时而阵发性把输出送到打印机。由于打印机速度跟不上CPU,这导致CPU长时间等待。如果设置了缓冲区,程序输出数据先送到缓冲区暂存,然后由打印机慢慢地输出,则CPU不必等待,可以继续执行程序。实现了CPU与I/O设备之间的并行工作。操作系统提供的缓冲形式有单缓冲、双缓冲、循环缓冲和缓冲池。

缓冲池:循环缓冲属于专用缓冲。当系统较大时,为了提高缓冲区的利用率,目前广泛流行公用缓冲池,池中的缓冲区可供多个进程共享。缓冲池由空闲缓冲区、输入缓冲区(装满输入数据)、输出缓冲区(装满输出数据)组成。为了管理上的方便,可将相同类型的缓冲区链成一个队列,形成空缓冲队列emq、输入队列inq、输出队列outq三个队列,工作缓冲区包括收容输入缓冲区、提取输入缓冲区、收容输出缓冲区、提取输出缓冲区。

缓冲池使用具有Getbuf、Putbuf两个过程,为使各进程能互斥地和同步地访问缓冲池队列,可分别为每一队列设置一个互斥信号量MS(type)和资源信号量RS(type)。

Getbuf:

Putbuf:

缓冲区具有以下工作方式:

收容输入——输入进程需输入数据时,调用Getbuf(emq),从emq队首摘下一空缓冲区,作为收容输入缓冲区hin,把数据装入其中,再调用Putbuf(inq,hin),把hin挂在inq队列上。

提取输入——计算进程需输入数据时,调用Getbuf(inq),从inq队首摘下一缓冲区,作为提取输入缓冲区sin,从中提取数据,然后调用Putbuf(emq,sin),将该缓冲区挂在空缓冲队列emq上。

收容输出——计算进程需输出数据时,调用Getbuf(emq),从emq队首摘下一空缓冲区,作为收容输出缓冲区hout,把数据装入其中,再调用Putbuf(outq,hout),把hout挂在outq队列末尾。

提取输出——输出进程调用Getbuf(outq),从outq的队首摘取一装满数据的缓冲区,作为提取输出缓冲区sout,数据提取完后,再调用Putbuf(emq,sout),将该缓冲区挂在空缓冲区的末尾。

应用程序I/O接口

设备驱动程序隐藏了I/O控制器的差别,I/O系统调用把设备行为封装在通用类中,操作系统对不同的设备提供不同的接口(块设备——读、写、搜索,字符设备——输入、输出)。下图说明了内核中的I/O相关部分是如何按照软件层次来组织的。

I/O系统管理

I/O软件具有以下系统功能

1)提供设备使用的用户接口——命令接口和编程接口。设备的符号标识

2)设备分配和释放——使用设备前需要分配设备和相应的通道、控制器。

3)设备的访问和控制——包括并发访问和差错处理。

4)I/O缓冲和调度——目标是提高I/O访问效率

I/O软件具有以下基本思想

1)按分层思想构造软件

2)较低层软件要使较高层软件独立于硬件

3)较高层软件要向用户提供一个友好、规范、清晰的界面

I/O软件具有以下组织层次

1)用户空间的I/O软件

2)设备独立软件(与设备无关的I/O软件)

3)设备驱动程序

4)中断处理程序

用户空间的I/O软件

大部分I/O软件都包含于操作系统的内核中,但一小部分I/O软件由与用户程序连接在一起的库函数构成,它们运行在操作系统的内核外。例如下列C语言程序调用了write库函数,并包含在运行时的二进制程序代码中count=write(fd, buffer, nbytes)。显然,write库函数是I/O系统的组成部分。

设备独立软件

完成与设备无关的I/O操作,具体包括向上层提供统一接口、分配和释放独占设备、实现设备独立性等。设备独立软件包括设备命名、设备保护、设备分配。

设备命名——负责把设备的符号名映射到相应的设备驱动程序。设备完成命名后,所有设备的名字集合即设备的名字空间。

设备保护——大多数计算机系统中,用户进程对I/O设备的访问被完全禁止。用户进程通过调用系统调用实现申请设备、使用设备和释放设备。

设备分配——多道程序环境下,系统中的设备不允许用户自行使用,必须由系统分配。为了实现设备分配,必须在系统中设置相应的数据结构。在进行设备分配时所需的数据结构包括设备控制表DCT(系统为每一个设备都配置了一张设备控制表,用于记录本设备的情况)、控制器控制表COCT(包含控制器标识符、控制器状态、与控制器连接的通道表指针、控制器队列的队首指针和队尾指针)、通道控制表CHCT(包含通道标识符、通道状态、与通道连接的控制器表指针、通道队列的队首指针和队尾指针)、系统设备表 SDT(整个系统有一张系统设备表)。

设备分配时应充分考虑设备固有属性(独占/共享)、分配算法(先来先服务/优先级高者优先)、分配安全性(安全分配方式指进程发出I/O请求后进入阻塞状态,直到I/O操作完成才被唤醒,否则为非安全分配方式)和设备独立性(应用程序独立于具体使用的物理设备,应用程序使用逻辑名称发起请求,系统将逻辑名称转换为具体物理设备进行相应)。

SPOOLing技术——用于将一台独占设备改造成共享设备,它在批处理操作系统时代引入,即所谓假脱机输入/输出技术。将这种技术用于对设备使用实质就是对I/O操作成批处理。具体而言,SPOOLing利用多道程序中的一道程序来模拟脱机输入时的外围控制机的功能,把低速I/O设备上的数据传送到高速磁盘上;用另一道程序来模拟脱机输出时的外围控制机的功能,把数据从磁盘传送到低速I/O设备上。这样便能在主机的直接控制下实现脱机I/O功能。此时,外围操作与CPU对数据的处理同时进行,这种在联机情况下实现的同时外围操作称为SPOOLing假脱机操作,它能提高I/O速度、将独占设备改造为共享设备并且实现虚拟设备功能。

例如SPOOLing技术可将一台打印机改造成一台可供多个用户共享的设备。当用户进程请求打印输出时,SPOOLing进行以下操作:

1)由输出进程在输出井中为之申请一块空闲盘块区,并将要打印的数据送入其中;

2)输出进程为用户进程申请一张空白的用户请求打印表,并将用户的打印要求填入其中,再将该表挂到请求打印队列上

3)输出进程从请求打印队列中依次取出请求打印表,根据表中要求将要打印的数据从输出井传送到内存缓冲区,最后由打印机打印

设备驱动程序

设备驱动程序是I/O进程与设备控制器之间的通信程序,因为它常以进程的形式存在,故也可以称为设备驱动进程。不同的I/O设备具有很大的差异,之所以操作系统能够以统一的方式对待不同的I/O设备,是因为具体的差别被设备驱动程序内核模块所封装。设备驱动程序层的作用是为内核 I/O子系统隐藏设备控制器之间的差异。所有与具体设备相关的代码被放在设备驱动程序中,系统应为每一类设备配置至少一种驱动程序。一个特定设备可能带有多种设备驱动程序,例如MS-DOS、Win98、Win2000、Windows XP和Solaris驱动程序。

设备驱动程序的处理过程如下:

1)将接收的抽象要求转换为具体要求

2)检查用户I/O请求合法性,了解I/O设备的状态,传递有关参数,设置设备的工作方式

3)发出I/O命令,启动分配的I/O设备,完成指定I/O操作

4)及时响应由控制器或通道发来的中断请求,并根据中断类型调用相应中断处理程序

5)对于有通道的计算机系统,驱动程序还应能够根据用户I/O请求自动构建通道程序

中断处理程序

I/O子系统中时,设备控制器如果准备好服务会向CPU发出中断请求以表示输入数据已有或输出已完成或已检测到错误,CPU响应后便转而运行中断处理程序。无论哪种I/O设备,其中断处理程序的处理过程都包含以下步骤:

1)唤醒被阻塞的驱动程序进程

2)保护被中断进程的CPU环境

3)分析中断原因,运行相应的设备中断处理程序

4)进行中断处理

5)恢复被中断进程的现场

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【 工具变量】IPCC碳排放因子数据测算表

一、数据简介: 排放因子法是IPCC提出的一种碳排放估算方法,也是目前适用范围最广、应用最为普遍的方法。将各类能源消耗的实物统计量转变为标准统计量,再乘以各自的碳排放因子,加总之后就可以得到碳排放总量。如果按照ISO14064标…

无插件直播流媒体音视频播放器EasyPlayer.js播放器的g711系列的音频,听起来为什么都是杂音

在数字化时代,流媒体播放器已成为信息传播和娱乐消遣的重要工具。随着技术的进步,流媒体播放器的核心技术和发展趋势不断演变,以满足用户对于无缝播放、低延迟和高画质的需求。 EasyPlayer播放器属于一款高效、精炼、稳定且免费的流媒体播放…

63 基于单片机的四个速度比较

所有仿真详情导航: PROTEUS专栏说明-CSDN博客 目录 一、主要功能 二、硬件资源 三、主程序编程 四、资源下载 一、主要功能 基于51单片机,采用四个滑动变阻器连接数模转换器模拟四个速度值,通过LCD1602显示,然后检测出最高的…

4.模块化技术之子程序

总学习目录请点击下面连接 SAP ABAP开发从0到入职,冷冬备战-CSDN博客 目录 ​编辑 1.模块化基础和概述 使用模块化有什么好处 两大类模块化技术 程序局部的模块化 SAP系统内全局模块化 封装有什么好处? 2.子程序模块化 三种传递类型 子程序结构…

利用Python实现子域名简单收集

免责申明 本文仅是用于学习研究子域名信息收集,请勿用在非法途径上,若将其用于非法目的,所造成的一切后果由您自行承担,产生的一切风险和后果与笔者无关;本文开始前请认真详细学习《‌中华人民共和国网络安全法》【学法…

k8s,进一步理解Pod

比如,凡是调度、网络、存储,以及安全相关的属性,基本上是Pod 级别的。 这些属性的共同特征是,它们描述的是“机器”这个整体,而不是里面运行的“程序”。比如,配置这个“机器”的网卡(即&#…

Unity 使用LineRenderer制作模拟2d绳子

效果展示: 实现如下: 首先,直接上代码: using System.Collections; using System.Collections.Generic; using UnityEngine;public class LineFourRender : MonoBehaviour {public Transform StartNode;public Transform MidNod…

博物馆导览系统方案(一)背景需求分析与核心技术实现

维小帮提供多个场所的室内外导航导览方案,如需获取博物馆导览系统解决方案可前往文章最下方获取,如有项目合作及技术交流欢迎私信我们哦~撒花! 一、博物馆导览系统的背景与市场需求 在数字化转型的浪潮中,博物馆作为文化传承和知…

14.在 Vue 3 中使用 OpenLayers 自定义地图版权信息

在 WebGIS 开发中,默认的地图服务通常会带有版权信息,但有时候我们需要根据项目需求自定义版权信息或添加额外的版权声明。在本文中,我们将基于 Vue 3 的 Composition API 和 OpenLayers,完成自定义地图版权信息的实现。 最终效果…

详解下c语言中的typedef

相信学习过c语言的很多同学都对typedef很陌生,感觉它离自己很遥远,自己很少用到。但实际上,我们看很多地方,包括很多大神级别的代码中,它却又经常使用。今天我们就详细描述下它,使我们对它有一个更深的认识…

19. Three.js案例-创建一个带有纹理映射的旋转平面

19. Three.js案例-创建一个带有纹理映射的旋转平面 实现效果 知识点 WebGLRenderer (WebGL渲染器) WebGLRenderer 是 Three.js 中用于渲染场景的主要类。它利用 WebGL 技术在浏览器中绘制 3D 图形。 构造器 new THREE.WebGLRenderer(parameters)参数类型描述parametersobj…

Ensemble Learning via Knowledge Transfer for CTR Prediction 论文阅读

Abstract:点击率(CTR)预测在推荐系统和网络搜索中起着关键作用。虽然许多现有的方法利用集成学习来提高模型性能,但它们通常将集成限制在两个或三个子网络中,很少探索更大的集成。在本文中,我们研究了更大的集成网络&a…

苍穹外卖项目练习总结

做这个练习项目已经接近两年之久,现在拿出来复习一遍,主要就是里面处理问题的流程,以及整体思考的逻辑需要重新回顾一遍,后续会逐渐总结这一段时间以来学习到的知识。 项目整体包含两部分,一个是管理端,一…

数学拯救世界(三)———破魔

题目一: 还记不记得,出现带分数的话可以怎么办? 题目二: 还记不记得,昨天讲的重叠数 题目三: 提公因数,抓住问题本质 题目四:

JAVA |日常开发中连接Sqlite数据库详解

JAVA |日常开发中连接Sqlite数据库详解 前言一、SQLite 数据库概述1.1 定义与特点1.2 适用场景 二、Java 连接 SQLite 数据库的准备工作2.1 添加 SQLite JDBC 驱动依赖2.2 了解 JDBC 基础概念 三、建立数据库连接3.1 代码示例3.2 步骤解析 四、执行 SQL 语句4.1 创建…

对 JavaScript 说“不”

JavaScript编程语言历史悠久,但它是在 1995 年大约一周内创建的。 它最初被称为 LiveScript,但后来更名为 JavaScript,以赶上 Java 的潮流,尽管它与 Java 毫无关系。 它很快就变得非常流行,推动了 Web 应用程序革命&…

解谜类游戏《迷失岛2》等如何抽象出一套通用高效开发框架?

解谜类游戏以精妙的谜题设计和引人入胜的故事叙述为特点,考验着玩家的智慧与观察力。《迷失岛2》与《南瓜先生2九龙城寨》正是这一领域的佳作。游戏以独特的艺术风格和玩法设计吸引了大量玩家,而它们背后隐藏着一套强大的框架。 上海胖布丁游戏的技术总…

CID引流电商

ClickID技术是基于多家媒体平台开发的电商引流服务,通过媒体提供的宏参数,间接解决电商平台订单数据的回传问题,帮助账户收集到极致精准的数据模型,搭建不同媒体往各平台引流的桥梁。简单来说就是通过ClickID数据监测到另外一个平…

保姆级教程Docker部署Redis镜像

目录 1、创建挂载目录和配置文件 2、运行Redis镜像 3、查看redis运行状态 1、创建挂载目录和配置文件 # 创建宿主机Redis配置文件存放目录 sudo mkdir -p /data/docker/redis/conf# 创建Redis配置文件 cd /data/docker/redis/conf sudo touch redis.conf 到Github上找到Redi…