操作系统12:I/O系统的功能、模型、接口及 I/O 设备和设备控制器

news2024/12/26 22:47:45

目录

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

(1)I/O系统的基本功能

1.1 - 隐藏物理设备的细节

1.2 - 与设备的无关性

1.3 - 提高处理机和I/O设备的利用率

1.4 - 对 I/O 设备进行控制

1.5 - 确保对设备的正确共享

1.6 - 错误处理

(2)I/O系统的层次结构和模型

2.1 - I/O 软件的层次结构

2.2 - I/O 系统中各种模块之间的层次视图

(3)I/O系统接口

3.1 - 块设备接口

3.2 - 流设备接口

2.3 - 网络通信接口

2、I/O 设备和设备控制器

(1)I/O 设备

1.1 - I/O 设备类型

1.2 - 设备与控制器之间的接口

(2)设备控制器

2.1 - 设备控制器的基本功能

2.2 - 设备控制器的组成

(3)内存映像 I/O

(4)I/O 通道


        I/O 系统管理的主要对象是 I/O 设备和相应的设备控制器。其最主要的任务是,完成用户提出的 I/O 请求,提高 I/O 速率,以及提高设备的利用率,并能为更高层的进程方便地使用这些设备提供手段。

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

(1)I/O系统的基本功能

1.1 - 隐藏物理设备的细节

        I/O 设备控制器是一种硬件设备,用来对各类型的 I/O 设备进行控制,其中包含有若干个用于存放控制命令的寄存器和存放参数的寄存器。用户通过这些命令和参数,可以控制外部设备执行所要求的操作。

        对于不同的设备,需要有不同的命令和参数。例如,在对磁盘进行操作时,不仅要给出本次是读还是写的命令,还需给出源或目标数据的位置,包括磁盘的盘面号、磁道号和扇区号。由此可见,如果要求程序员或用户编写直接面向这些设备的程序,是极端困难的。因此,I/O 系统必须通过对设备加以适当的抽象,以隐藏掉物理设备的实现细节,仅向上层进程提供少量的、抽象的读/写命令,如 read、write 等。//让设备易用

1.2 - 与设备的无关性

        与设备的无关性是是在隐藏物理设备细节的基础上实现的。

        一方面,用户不仅可以使用抽象的 I/O 命令,还可使用抽象的逻辑设备名来使用设备,例如,当用户要输出打印时,他只须提供读(或写)的命令(提出对 I/O 的要求),和提供抽象的逻辑设备名如 /dev/printer,而不必指明是哪一台打印机。

        另一方面,也可以有效地提高 OS 的可移植性和易适应性,对于 OS 本身而言,应允许在不需要将整个操作系统进行重新编译的情况下,增添新的设备驱动程序,以方便新的 I/O 设备的安装。如 Windows 中,系统可以为新 I/O 设备自动安装和寻找驱动程序,从而做到即插即用。

1.3 - 提高处理机和I/O设备的利用率

        I/O 系统要尽可能地让处理机和 I/O 设备并行操作,以提高它们的利用率。

  • 一方面,要求处理机能快速响应用户的 I/O 请求,使 I/O 设备尽快地运行起来;
  • 另一方面,也应尽量减少在每个 IO 设备运行时处理机的干预时间。

1.4 - 对 I/O 设备进行控制

        对 I/O 设备进行控制是驱动程序的功能。目前对 I/O 设备有四种控制方式:

  • 采用轮询的可编程 I/O 方式
  • 采用中断的可编程 I/O 方式
  • 直接存储器访问方式
  • I/O 通道方式。

        具体应采用何种控制方式,与 I/O 设备的传输速率、传输的数据单位等因素有关。//比如传输的数据是字节还是数据块等

1.5 - 确保对设备的正确共享

        从设备的共享属性上,可将系统中的设备分为如下两类:

  • 独占设备,进程应互斥地访问这类设备,即系统一旦把这类设备分配给了某进程后,便由该进程独占,直至用完释放。典型的独占设备有打印机、磁带机等。系统在对独占设备进行分配时,还应考虑到分配的安全性。
  • 共享设备,是指在一段时间内允许多个进程同时访问的设备。典型的共享设备是磁盘,当有多个进程需对磁盘执行读、写操作时,可以交叉进行,不会影响到读、写的正确性。

1.6 - 错误处理

        大多数的设备都包括了较多的机械和电气部分,运行时容易出现错误和故障。从处理的角度,可将错误分为临时性错误持久性错误

        对于临时性错误,可通过重试操作来纠正,只有在发生了持久性错误时,才需要向上层报告。例如,在磁盘传输过程中发生错误,系统并不认为磁盘已发生了故障,而是可以重新再传,一直要重传多次后,若仍有错,才认为磁盘发生了故障。

        由于多数错误是与设备紧密相关的,因此对于错误的处理,应该尽可能在接近硬件的层面上进行,即在低层软件能够解决的错误就不向上层报告,因此高层也就不能感知;只有低层软件解决不了的错误才向上层报告,请求高层软件解决。//错误解决的思路和指导思想,软件也适用,错误尽可能的在底层解决

总结:

  • 第 1、2 方面的功能是为了方便用户使用 I/O 设备
  • 第 3、4 方面的功能是用于提高 CPU 和 I/O 设备的利用率
  • 第 5、6 方面的功能是为用户在共享设备时提供方便,以保证系统能有条不紊的运行,当系统发生错误时能及时发现错误,甚至于能自动修正错误

(2)I/O系统的层次结构和模型

        I/O 软件涉及的面很宽,向下与硬件有密切关系,向上又与文件系统、虚拟存储器系统和用户直接交互,它们都需要 I/O 系统来实现 I/O 操作。为使十分复杂的 I/O 软件能具有清晰的结构、更好的可移植性和易适应性,目前已普遍采用层次式结构的 I/O 系统。这是将系统中的设备管理模块分为若干个层次,每一层都是利用其下层提供的服务,完成输入输出功能中的某些子功能,并屏蔽这些功能实现的细节,向高层提供服务。//计算机网络的指导思想也是层次结构,就面向对象来说,这种做法叫做封装

2.1 - I/O 软件的层次结构

        通常把 I/O 软件组织成四个层次,如下图所示,各层次及其功能如下,图中的箭头表示 I/O 的控制流://分层是解决复杂问题的一种指导思想:由繁到简、由易到难

  • 用户层 I/O 软件,实现与用户交互的接口,用户可直接调用该层所提供的、与 I/O 操作有关的库函数对设备进行操作。
  • 设备独立性软件,用于实现用户程序与设备驱动器的统一接口、设备命名、设备的保护以及设备的分配与释放等,同时为设备管理和数据传送提供必要的存储空间。
  • 设备驱动程序,与硬件直接相关,用于具体实现系统对设备发出的操作指令,驱动 I/O 设备工作的驱动程序。
  • 中断处理程序,用于保存被中断进程的 CPU 环境,转入相应的中断处理程序进行处理,处理完毕再恢复被中断进程的现场后,返回到被中断的进程。//计算机组成里有详细介绍

2.2 - I/O 系统中各种模块之间的层次视图

        《1》I/O 系统的上、下接口

        I/O 系统接口:它是 I/O 系统与上层系统之间的接口,向上层提供对设备进行操作的抽象 I/O 命令,以方便高层对设备的使用。有不少 OS 在用户层提供了与 I/O 操作有关的库函数,供用户使用。在上层系统中有文件系统、虚拟存储器系统以及用户进程等。//操作设备的入口

        软件/硬件(RW/HW)接口:软件和硬件之间的接口,由于设备种类繁多,该接口相当复杂。

        下边这个图,清晰的展示的 I/O 系统中各种模块之间的层次结构://不复杂,好好看

        《2》I/O 系统的分层

        与 I/O 软件组织的层次结构相对应,I/O 系统本身也可分为如下三个层次:

  • 中断处理程序。它处于 I/O 系统的底层,直接与硬件进行交互。
  • 设备驱动程序。它是进程和设备控制器之间的通信程序。其主要功能是,将上层发来的抽象 I/O 请求转换为对 I/O 设备的具体命和参数,并把它装入到设备控制器中的命令和参数寄存器中,或者相反。由于设备之间的差异很大,每类设备的驱动程序都不相同,故必须由设备制造厂商提供,而不是由 OS 设计者来设计。因此,每当在系统中增加一个新设备时,都需要由安装厂商提供新的驱动程序。//驱动程序由设备制造商提供
  • 设备独立性软件。现代 OS 中的 I/O 系统基本上都实现了与设备无关性,也称为与设备无关的软件。其基本含义是:I/O 软件独立于具体使用的物理设备。由此带来的最大好处是,提高了 I/O 系统的可适应性和可扩展性。使它们能应用于许多类型的设备,而且在每次增加新设备或替换老设备时,都不需要对 I/O 软件进行修改,这样就方便了系统的更新和扩展。设备独立性软件的内容包括设备命名、设备分配、数据缓冲和数据高速缓冲一类软件等。

(3)I/O系统接口

3.1 - 块设备接口

        块设备接口是块设备管理程序与高层之间的接口。该接口反映了大部分磁盘存储器和光盘存储器的本质特征,用于控制该类设备的输入或输出。

        所谓块设备,是指数据的存取和传输都是以数据块为单位的设备。典型的块设备是磁盘

        该设备的基本特征是传输速率较高,通常每秒钟为数 MB 到数十 MB。另一特征是可寻址,即能指定数据的输入源地址及输出的目标地址,可随机地读/写磁盘中任一块;磁盘设备的 I/O 常采用 DMA 方式

3.2 - 流设备接口

        流设备接口是流设备管理程序与高层之间的接口。该接口又称为字符设备接口,它反映了大部分字符设备的本质特征,用于控制字符设备的输入或输出。

        所谓字符设备,是指数据的存取和传输是以字符为单位的设备,如键盘、打印机等。

        字符设备的基本特征是传输速率较低,通常为每秒几个字节至数千字节。另一特征是不可寻址,即不能指定数据的输入源地址及输出的目标地址。字符设备在输入/输出时,常采用中断驱动方式

        由于字符设备是不可寻址的,因而对它只能采取顺序存取方式。通常是为字符设备建立一个字符缓冲区(队列),设备的 I/O 字符流顺序地进入字符缓冲区(读入),或从字符缓冲区顺序地送出到设备(输出)。// 批量的 I/O 读写,提升 I/O 效率

        由于大多数流设备都属于独占设备,必须采取互斥方式实现共享,为此,流设备接口提供了打开和关闭操作。在使用这类设备时,必须先用打开操作来打开设备。如果设备已被打开,则表示它正被其它进程使用。

2.3 - 网络通信接口

        在现代OS中,都提供了面向网络的功能。但首先还需要通过某种方式把计算机连接到网络上。同时操作系统也必须提供相应的网络软件和网络通信接口,使计算机能通过网络与网络上的其它计算机进行通信或上网浏览。//该部分在网络操作系统中详细介绍

2、I/O 设备和设备控制器

        I/O 设备一般是由执行 I/O 操作的机械部分执行控制 I/O 的电子部件组成。通常将这两部分分开,执行 I/O 操作的机械部分就是一般的 I/O 设备,而执行控制 I/O 的电子部件则称为设备控制器或适配器(adapter)。

        在微型机和小型机中的控制器常做成印刷电路卡形式,因而也常称为控制卡、接口卡或网卡,可将它插入计算机的扩展槽中。在有的大、中型计算机系统中,还配置了 I/O 通道或 I/O 处理机。

(1)I/O 设备

1.1 - I/O 设备类型

        I/O 设备的类型繁多,除了能将它们分为块设备和字符设备、独占设备和共享设备外,还可从设备使用特性上,分为存储设备和 I/O 设备;从设备的传输速率上,又分为低速设备、中速设备和高速设备。//各种概念性的东西

1.2 - 设备与控制器之间的接口

        通常,设备并不是直接与 CPU 进行通信,而是与设备控制器通信,因此,在 I/O 设备中应含有与设备控制器间的接口,在该接口中有三种类型的信号,各对应一条信号线。

  • 数据信号线。这类信号线用于在设备和设备控制器之间传送数据信号。对输入设备而言,由外界输入的信号经转换器转换后,所形成的数据通常先送入缓冲器中,当数据量达到一定的比特(字符)数后,再从缓冲器通过一组数据信号线传送给设备控制器。对输出设备而言,则是将从设备控制器经过数据信号线传送来的一批数据先暂存于缓冲器中,经转换器作适当转换后,再逐个字符地输出。//用来传输 I/O 数据
  • 控制信号线。这是作为由设备控制器向 I/O 设备发送控制信号时的通路。该信号规定了设备将要执行的操作,如读操作(指由设备向控制器传送数据)或写操作(从控制器接收数据),或执行磁头移动等操作。//用来指定操作类型,读或者写
  • 状态信号线。该信号线用于传送指示设备当前状态的信号。设备的当前状态有正在读(或写);设备已读(写)完成,并准备好新的数据传送。//传送设备状态

(2)设备控制器

        设备控制器的主要功能是,控制一个或多个 I/O 设备,以实现 I/O 设备和计算机之间的数据交换。它是 CPU 与 I/O 设备之间的接口,接收从 CPU 发来的命令,去控制 I/O 设备工作,使处理机能够从繁杂的设备控制事务中解脱出来。设备控制器是一个可编址的设备当它仅控制一个设备时,它只有一个唯一的设备地址;若控制器可连接多个设备,则应含有多个设备地址,每一个设备地址对应一个设备。可把设备控制器分成两类:一类是用于控制字符设备的控制器,另一类是用于控制块设备的控制器。

2.1 - 设备控制器的基本功能

  • 接收和识别命令。设备控制器能接收并识别处理机发来的多种命令。在控制器中具有相应的控制寄存器,用来存放接收的命令和参数,并对所接收的命令进行译码。//设置命令译码器
  • 数据交换。设备控制器可实现 CPU 与控制器之间、控制器与设备之间的数据交换。//设置数据寄存器
  • 标识和报告设备的状态。控制器应记下设备的状态供 CPU了解。//设置状态寄存器
  • 地址识别。设备控制器必须能够识别其所控制的每个设备的地址。//配置地址译码器
  • 数据缓冲区。由于 I/O 设备的速率较低,而 CPU 和内存的速率却很高,故在控制器中必须设置一缓冲区。//设置缓冲区
  • 差错控制。对于由 I/O 设备传送来的数据,设备控制器还兼管进行差错检测。若发现传送中出现了错误,通常是将差错检测码置位,并向 CPU 报告,于是 CPU 将本次传送来的数据作废,并重新进行一次传送。这样便可保证数据输入的正确性。

2.2 - 设备控制器的组成

  • 设备控制器与处理机的接口。该接口用于实现CPU 与设备控制器之间的通信,在该接口中共有三类信号线:数据线、地址线和控制线。
  • 设备控制器与设备的接口
  • I/O 逻辑。逻辑用于实现对设备的控制。它通过一组控制线与处理机交互,处理机利用该逻辑向控制器发送 I/O 命令。

(3)内存映像 I/O

        驱动程序将抽象 I/O 命令转换出的一系列具体的命令、参数等数据装入设备控制器的相应寄存器,由控制器来执行这些命令,具体实施对 I/O 设备的控制。这一工作可用如下两种方法完成:

  • 利用特定的 I/O 指令,该方法的主要缺点是,访问内存和访问设备需要两种不同的指令。
  • 内存映像 I/O,在这种方式中,在编址上不再区分内存单元地址和设备控制器中的寄存器地址。内存映像 I/O 方式统一了对内存和对控制器的访问方法,有利于简化 I/O 的编程。

(4)I/O 通道

        虽然在 CPU 与 I/O 设备之间增加了设备控制器后,已能大大减少 CPU 对 I/O 的干预,但当主机所配置的外设很多时,CPU 的负担仍然很重。为此,在 CPU 和设备控制器之间又增设了 I/O 通道(I/O Channel)。

        其主要目的是为了建立独立的 I/O 操作,不仅使数据的传送能独立于 CPU,而且也希望有关对 I/O 操作的组织、管理及其结束处理尽量独立,以保证 CPU 有更多的时间去进行数据处理;或者说,其目的是使一些原来由 CPU 处理的 I/O 任务转由通道来承担,从而把 CPU 从繁杂的 I/O 任务中解脱出来。//使用 I/O 通道的原因

        在设置了通道后,CPU 只需向通道发送一条 I/O 指令。通道在收到该指令后,便从内存中取出本次要执行的通道程序然后执行该通道程序,仅当通道完成了规定的 I/O 任务后,才向 CPU 发中断信号。// I/O通道工作原理

        实际上,I/O 通道是一种特殊的处理机。它具有执行 I/O 指令的能力,并通过执行通道(I/O)程序来控制 I/O 操作。但 I/O 通道又与一般的处理机不同,主要表现在以下两个方面:

  • 一是其指令类型单一,这是由于通道硬件比较简单,其所能执行的命令,主要局限于与 I/O 操作有关的指令
  • 二是通道没有自己的内存,通道所执行的通道程序是放在主机的内存中的,换言之,是通道与 CPU 共享内存。

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

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

相关文章

浅谈用于配电室的内部环境监控系统设计

摘要:配电室是配电系统的重要组成部分,影响着电力用户的用电需求,需要保障其安全、可靠运行。针对配电室内部环境进行了深入分析,设计了一种内部环境监控系统。通过该系统可以采集配电室内部的温度、湿度、液位、SF6气体和烟雾&am…

Unity游戏开发智能巡逻兵

完整资料进入【数字空间】查看——baidu搜索"writebug" 1.1 游戏设计要求: 创建一个地图和若干巡逻兵(使用动画); 每个巡逻兵走一个3~5个边的凸多边型,位置数据是相对地址。即每次确定下一个目标位置,用自己当前位置…

STM32单片机不同型号之间的HAL库代码移植浅谈(代码解析)

在嵌入式系统开发中,STM32HAL库是一种常用的软件开发工具,用于开发STM32系列微控制器的应用程序。由于不同型号的芯片具有不同的硬件架构和外设,因此在将代码移植到不同类型的芯片上时,需要进行一些适配和调整。 首先,…

wps中excel如何实现模糊搜索匹配的内容(可以匹配想要的各种格式)

1,在某一列进行搜索-筛选搜索-如包含“XXX信息XX公司XX”这种格式的。 输入 :信息*公司 (1)选择第一种搜索方式代表寻找符合条件: 包含信息和公司两个关键字, 且信息在前公司在后, 且两个词语之…

SIP 抓包后获取媒体内容备忘(解析RTP)

SIP呼叫并抓包 从网上找免费的sip 软中端, 两个转中端建立呼叫且抓包 详情可以参考 https://blog.csdn.net/liuxingrui4p/article/details/96709136?spm1001.2014.3001.5502 使用wireshark检查SIP flow: 点击Telephony > SIP Flows 打开页面如下…

下一代边缘计算技术在哪里?

扫描文末二维码,立刻免费报名 云网一体,超大规模流量下 边缘云的架构与技术揭秘 伴随超高清视频时代的开启,热点赛事、晚会直播等特殊场景的巨大流量对业务的带宽储备、节点资源、流量调度和安全保障能力提出了新的挑战。 火山引擎边缘云基于…

JUC之十一:CompletableFuture用法详解

JUC之十一:CompletableFuture用法详解 文章目录 JUC之十一:CompletableFuture用法详解一、前言二、CompletableFuture类简介三、功能分类3.1、获取结果3.2、依赖关系3.3、and聚合关系3.4、or聚合关系3.5、并行执行3.6、结果处理 四、方法详解4.1、结果转…

【JavaScript】ES6新特性(5)

16. Promise Promise 是异步编程的一种解决方案,比传统的解决方案回调函数, 更合理和更强大 ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象 指定回调函数方式更灵活易懂解决异步 回调地狱 的问题 16.1 回调地狱 当一个回调函数…

Linux 进程管理与调度

一、前言 本篇文章是对Liunx的进程管理调度的实验过程记录,读者可以通过这篇文章加深对Liunx中进程管理和调度的理解,本文所使用的操作系统为RHEL 8.0版本,为在Vmware workstation中运行的虚拟机。 二、实验目的 ① 掌握linux进程相关操作 ②…

RabbitMQ学习笔记9 TTL死信队列+延迟队列实战

我们去新建一个交换机: 然后我们再用这种方法直接创建一个队列: 点击bind这样我们的交换机和队列就绑定到一起了。 然后我们要新建普通队列,设置过期时间,指定死信交换机。 发布一条消息。 它会把队列传递到死信队列中去。

Openlayers实战:overlay上播放视频

在企业或者城市等的宣传上,视频能很好的传达出一些信息。 那么在openlayer中如何展示视频呢, 可以通过overlay的方式,点击某一个点,弹出overlay层,展示出视频,并自动播放。下面的实战就能够达到这种效果。 效果图 源代码 /* * @Author: 大剑师兰特(xiaozhuanlan),还…

记忆——记忆宫殿——数字编码

数字编码 数字编码相对简单,与乘法口诀的工作量类似。如果想要达到高手的水平,熟练程度也需要达到乘法口诀的程度。 数字编码的方式是直接创造出数字与形象的唯一的对应关系,然后熟记。 0-9,00-99是什么 最常用的编码是将0-9和…

【C++11】lambda表达式 的定义、性质和用法

定义 Lambda表达式是C11引入的一种函数对象的匿名表示方法。它可以用于定义轻量级的、临时的、内联的函数对象,通常用于函数式编程的场景。 语法结构 Lambda表达式的 基本语法 如下: lambda表达式书写格式:[capture-list] (parameters) m…

java8 新特性 —— Lambda 表达式

我们来看一段老版本的示例代码,其对一个含有字符串的集合进行排序:(示例代码创建了一个匿名内部类作为入参。) // Collections 工具类提供了静态方法 sort 方法,入参是一个 List 集合,和一个 Comparator 比…

C++栈和队列(详解+刷题)

👂 爱要坦荡荡 - 萧潇 - 单曲 - 网易云音乐 👂 武侯祠 - 闫东炜 - 单曲 - 网易云音乐 👂 You Are My Sunshine - Angelika Vee - 单曲 - 网易云音乐 (๑•̀ㅂ•́)و✧ O(∩_∩)O (ง •_•)ง (~﹃~)~zZ …

微鳄三六五软件,企业实现数字化转型仅需2万

关键词:OA办公系统、知识管理系统、群晖NAS 编者按: 疫情对全球经济有着巨大冲击,有调查表明80%的中小企业营收下滑,有30%的中小企业营收减半。天翎特此推出万元即可实现数字化管理方案,为企业提供办公管理、项目管理、…

Canvas.arcTo() 的使用,画一条带圆角的线段,画一个思维导图一基础

Canvas.arcTo() 的使用,画一条带圆角的线段,画一个思维导图一基础 一、方法定义 canvas.arcTo 这个方法还是比较难理解的。因为它不是直观的绘制路径,而是间接的。 它的参数是这样的。 canvas.arcTo(ax,ay,bx,by,radius)它是由两个点和一个…

密码学学习笔记(十):Digital Signatures - 数字签名1

什么是数字签名? 想象一下一下情景: Alice生成两个密钥:一个公钥𝑃𝐾𝐴 & 对应的密钥𝑆𝐾𝐴, 发布公钥,保留密钥然后Alice使用𝑆&#x1d4…

ARG DEBIAN_FRONTEND=noninteractive作用说明

使用 在Dockerfile中使用ARG指令定义变量并为其指定一个默认值。ARG指令用于在构建过程中传递变量的值。 对于DEBIAN_FRONTENDnoninteractive,它定义了一个名为DEBIAN_FRONTEND的变量,并将其默认值设置为noninteractive。在这个上下文中,no…

【uniapp开发h5】点击复制微信号并自动打开微信应用,类似可以唤起淘宝、知乎应用等

效果展示: 准备工作: 引用jquery.js 和 clipboard.min.js jQuery就不用多说了,而clipboard.min.js 是一个 JavaScript 库,用于实现网页上的复制到剪贴板功能。它提供了一种简单的方式来处理复制操作,无需使用浏览器原…