计算机中输入信息,输出结果的部分是I/O系统。没有I/O系统,人们无法使用计算机,计算机将没有意义。

I/O系统结构:

I/O设备管理:

应用程序若想访问磁盘上文件,要多经过文件系统,之后通过I/O设备管理来对相应的硬件进行操作。

I/O设备管理软件包括:

逻辑I/O,设备驱动程序,中断服务程序

I/O设备特点:

I/O性能经常成为系统性能的瓶颈

操作系统庞大复杂的原因之一:资源多、杂,并发,均来自I/O

与其他功能联系密切,特别是文件系统

设备分类:

块设备:

  • 存储单位: 以数据块为单位存储、传输信息
  • 特点:传输速率较高、可寻址(随机读写)

字符设备

  • 存储单位: 以字符为单位存储、传输信息
  • 特点:传输速率低、不可寻址

I/O管理的目标和任务:

  1. 数据传输,完成设备和内存的数据交换实现设备分配与回收记录设备的状态根据用户的请求和设备的类型,采用一定的分配算法,选择一条数据通路执行设备驱动程序,实现真正的I/O操设备中断处理:处理外部设备的中断缓冲区管理:管理I/O缓冲区
  2. 建立方便、统一的独立于设备的应用接口
  • 向用户提供使用外部设备的方便接口
  • 对不同的设备采取统一的操作方式,屏蔽硬件细节
  1. 充分利用各种技术(通道,中断,缓冲,异步I/O等)提高CPU与设备、设备与设备之间的并行工作能力
  2. 保护设备传送或管理的数据是安全的、不被破坏的、保密的

I/O硬件:

I/O设备一般由机械(设备本身)和电子(设备控制器)两部分组成

设备控制器操作过程:

  1. 操作系统将命令写入控制器的接口寄存器(或接口缓冲区)中,以实现对IO的管理。
  2. 当控制器接受一条命令后,可独立于CPU完成指定操作(如设置寄存器的值,或者传输辅助存储器的数据进入内存),CPU可以另外执行其他计算;命令完成时,控制器产生一个中断,CPU响应中断,控制转给操作系统;通过读控制器寄存器中的信息,获得操作结果和设备状态。

I/O端口地址:

接口电路中每个寄存器具有唯一的地址,所有I/O端口地址形成I/O端口空间(受到保护)

I/O指令形式与I/O地址是相互关联的, 主要有两种形式:

  • 内存映像编址(内存映像I/O模式)
  • I/O独立编址(I/O专用指令)

内存镜像编址:

  • a,b,c代表三种不同的内存编址方式,最后一种应用了缓冲技术,即I/O端口地址映射到内存中某个区域。
  • 分配给系统中所有端口的地址空间与内存的地址空间统一编址
  • 把I/O端口看作一个存储单元,对I/O的读写操作等同于对内存的操作
  • 优点:凡是可对内存操作的指令都可对I/O端口操作不需要专门的I/O指令I/O端口可占有较大的地址空间不需要特殊的保护机制来阻止用户进程执行I/O操作,但是OS必须保证那部分内存空间不能分配给其他用户进程可以引用内存的每一条指令也可以引用控制寄存器
  • 缺点:占用内存空间

I/O独立编址:

  • 分配给系统中所有端口的地址空间完全独立,与内存地址空间无关
  • 使用专门的I/O指令对端口进行操作
  • 优点:外设不占用内存的地址空间,导致编程时易于区分是对内存操作还是对I/O端口操作
  • 缺点:I/O端口操作的指令类型少,操作不灵活例子:在8086/8088中,分配给I/O端口的地址空间64K,0000H~0FFFFH,只能用in和out指令进行读写操作对一个设备控制寄存器不能进行高速缓存例子: LOOP:TEST PORT-4 //检测端口4是否为0 BEQ READY //如果为0,转向READY BRANCH LOOP //否则,继续测试 READY: 第一次引用PORT_4将导致它被高速缓存,随后的引用将只从高速缓存中取值(因为端口已在cache中)并且不会再查询设备,之后当设备最终变为就绪时,软件将没有办法发现这一点,结果循环将永远进行下去。 为避免这一情形,硬件必须针对每个页面具备选择性禁用高速缓存的能力,操作系统必须管理选择性高速缓存,所以这一特性为硬件和操作系统两者增添了额外的复杂性

I/O控制方式:

  • 可编程I/O(轮询/查询)
    由CPU代表进程给I/O模块发I/O命令,进程进入忙等待,直到操作完成才继续执行操作过程: 应用程序发送信息给设备驱动程序,设备驱动程序会检查设备状态,如果设备为空闲状态,再往设备发送控制命令,之后不断测试设备是否完成任务,完成后就把数据返回到应用程序
  • 中断驱动I/O
    -为了减少设备驱动程序不断地询问控制器状态寄存器的开销,I/O操作结束后,由设备控制器主动通知设备驱动程序操作过程:
    应用程序发送信息给设备驱动程序,设备驱动程序会检查设备状态,如果设备为空闲状态,再往设备发送控制命令,然后把设备状态记录在设备状态表中,若设备完成后就向CPU发送中断信号,CPU接收到该信号,就执行中断处理程序,若发现I/O设备本次操作正常,将CPU执行权再交给设备处理程序,其将设备中对应设备信息取出,发送给应用程序。
  • DMA

I/O软件组成:

分层思想:

  • 把I/O软件组织成多个层次
  • 每一层都执行操作系统所需要的功能的一个相关子集,它依赖于更低一层所执行的更原始的功能,从而可以隐藏这些功能的细节;同时,它又给高一层提供服务
  • 较低层考虑硬件的特性,并向较高层软件提供接口
  • 较高层不依赖于硬件,并向用户提供一个友好的、清晰的、简单的、功能更强的接口

I/O软件层次:

  1. 用户进程层执行输入输出系统调用,对I/O数据进行格式化,为假脱机输入/输出作准备
  2. 独立于设备的软件实现设备的命名、设备的保护、成块处理、缓冲技术和设备分配
  3. 设备驱动程序设置设备寄存器、检查设备的执行状态
  4. 中断处理程序负责I/O完成时,唤醒设备驱动程序进程,进行中断处理
  5. 硬件层实现物理I/O的操作

I/O相关技术:

缓冲技术的引入:这是操作系统中最早引入的技术
解决CPU与I/O设备之间速度的不匹配问题:凡是数据到达和离去速度不匹配的地方均可采用缓冲技术
提高CPU与I/O设备之间的并行性
减少了I/O设备对CPU的中断请求次数,放宽CPU对中断响应时间的要求

缓冲区分类:

  • 硬缓冲:由硬件寄存器实现(例如:设备中设置的缓冲区)
  • 软缓冲:在内存中开辟一个空间,用作缓冲区

缓冲区管理:

  1. 单缓冲
  2. 双缓冲
  3. 缓冲池(多缓冲,循环缓冲):统一管理多个缓冲区,采用有界缓冲区的生产者/消费者模型对缓冲池中的缓冲区进行循环使用例如:终端输入软件中的键盘驱动程序其任务之一:收集字符,所使用的缓冲区

I/O设备管理:

数据结构:

  • 描述设备、控制器等部件的表格:系统中常常为每一个部件、每一台设备分别设置一张表格,常称为设备表或部件控制块。这类表格具体描述设备的类型、标识符、状态,以及当前使用者的进程标识符等
  • 建立同类资源的队列:系统为了方便对I/O设备的分配管理,通常在设备表的基础上通过指针将相同物理属性的设备连成队列(称设备队列)
  • 面向进程I/O请求的动态数据结构:每当进程发出I/O请求时,系统建立一张表格(称I/O请求包),将此次I/O请求的参数填入表中,同时也将该I/O有关的系统缓冲区地址等信息填入表中。I/O请求包随着I/O的完成而被删除
  • 建立I/O队列:如请求包队列

独占设备的分配:

静态分配:

  • 在进程运行前, 完成设备分配;运行结束时,收回设备
  • 缺点:设备利用率低

动态分配:

  • 在进程运行过程中,当用户提出设备要求时,进行分配,一旦停止使用立即收回
  • 优点:效率高
  • 缺点:分配策略不好时, 产生死锁

分时式共享设备的分配:

  • 所谓分时式共享就是以一次I/O为单位分时使用设备,不同进程的I/O操作请求以排队方式分时地占用设备进行I/O
  • 由于同时有多个进程同时访问,且访问频繁,就会影响整个设备使用效率,影响系统效率。因此要考虑多个访问请求到达时服务的顺序,使平均服务时间越短越好

设备驱动程序:

  1. 与设备密切相关的代码放在设备驱动程序中,每个设备驱动程序处理一种设备类型
  2. 一般,设备驱动程序的任务是接收来自与设备无关的上层软件的抽象请求,并执行这个请求
  3. 每一个控制器都设有一个或多个设备寄存器,用来存放向设备发送的命令和参数。设备驱动程序负责释放这些命令,并监督它们正确执行
  4. 在设备驱动程序的进程释放一条或多条命令后,系统有两种处理方式,多数情况下,执行设备驱动程序的进程必须等待命令完成,这样,在命令开始执行后,它阻塞自已,直到中断处理时将它解除阻塞为止;而在其它情况下,命令执行不必延迟就很快完成

设备驱动程序与外界的接口:

  1. 与操作系统的接口:为实现设备无关性,设备作为特殊文件处理。用户的I/O请求、对命令的合法性检查以及参数处理在文件系统中完成。在需要各种设备执行具体操作时,通过相应数据结构转入不同的设备驱动程序
  2. 与系统引导的接口(初始化,包括分配数据结构,建立设备的请求队列)
  3. 与设备的接口(对设备控制器的设置)

驱动程序中函数:

  • 驱动程序初始化函数(如向操作系统登记该驱动程序的接口函数,该初始化函数在系统启动时或驱动程序安装入内核时执行)
  • 驱动程序卸载函数
  • 申请设备函数
  • 释放设备函数
  • I/O操作函数:对独占设备,包含启动I/O的指令;对共享设备,将I/O请求形成一个请求包,排到设备请求队列,如果请求队列空,则直接启动设备
  • 中断处理函数:对I/O完成做善后处理,一般是唤醒等待刚完成I/O请求的阻塞进程,使其能进一步做后续工作;如果存在I/O请求队列,则启动下一个I/O请求

I/O进程:

I/O进程专门处理系统中的I/O请求和I/O中断工作

I/O请求的进入:

  • 用户程序:调用send将I/O请求发送给I/O进程;调用block将自己阻塞,直到I/O任务完成后被唤醒
  • 系统:利用wakeup唤醒I/O进程,完成用户所要求的I/O处理I/O中断的进入
  • 当I/O中断发生时,内核中的中断处理程序发一条消息给I/O进程,由I/O进程负责判断并处理中断

I/O进程特点:

  1. I/O进程系统进程,一般赋予最高优先级。一旦被唤醒,它可以很快抢占处理机投入运行
  2. I/O进程开始运行后,首先关闭中断,然后用receive去接收消息
  3. 接收消息情况:1.没有消息,则开中断,将自己阻塞2.有消息,则判断消息类型(I/O请求或I/O中断) 1. I/O请求 - 准备通道程序,发出启动I/O指令,继续判断有无消 2. I/O中断,进一步判断正常或异常结束 - 正常:唤醒要求进行I/O操作的进程 - 异常:转入相应的错误处理程序

I/O性能:

为了使CPU利用率尽可能不被I/O降低,使CPU尽可能摆脱I/O,我们:

  • 减少或缓解速度差距 使用 缓冲技术
  • 使CPU不等待I/O 使用 异步I/O
  • 让CPU摆脱I/O操作 使用 DMA、通道

异步传输(不要求立刻返回结果):

  • 通过异步I/O,应用程序可以启动一个I/O操作,然后在I/O请求执行的同时继续处理
  • 基本思想:填充I/O操作间等待的CPU时间

同步I/O(等待直到返回一个结果):

  • 应用程序被阻塞直到I/O操作完成

无法绑定由多个部分组成的标识符_「计算机组成原理」:I/O系统整体管理机制...相关推荐

  1. bluez 设置绑定pin码_「RT-Thread笔记」IO设备模型及PIN设备

    RTT内核对象--设备 RT-Thread有多种内核对象,其中设备device就是其中一种. 内核继承关系图如下: 设备继承关系图如下: device对象对应的结构体如下: 其中,设备类型type有如 ...

  2. pcb可以给用户进程读吗_「TCP/UDP」一个端口号可以同时被两个进程绑定吗? - 一口Linux...

    一.1个端口号可以同时被两个进程绑定吗? 根据端口号的绑定我们分以下几种情况来讨论: 2个进程分别建立TCP server,使用同一个端口号8888 2个进程分别建立UDP server,使用同一个端 ...

  3. 无法绑定由多个部分组成的标识符“System.Data.DataRowView”

    comboBox1_SelectedIndexChanged     方法 (省市联动项目练习) 在定义的sql语句中想通过之前定义的comboBox1.SelectedValue,通过获得他的值(非 ...

  4. v-for 给每项绑定事件时,需要使用「事件代理」吗❓

    Vue 开发者在日常码业务中,或多或少都需要对列表项绑定事件完成需求,那你有没有思考过,用 v-for 时,给每个列表项绑定事件时,是否需要使用「事件代理/(委托)」呢?还是说你觉得 Vue 内部帮我 ...

  5. 绑定成员函数表达式上的非法操作_在优麒麟上使用MPV编写自己的播放器

    上一期,小编给大家简要介绍了MPV的配置和使用方法,虽然MPV功能强大,但默认情况下,MPV无GUI图形界面,用户需要通过命令行或者手动修改其配置文件达到配置MPV的目的,这样就给普通用户带来了诸多不 ...

  6. 手机号微信号绑定微信号_相关计算机,新手机号被绑定过微信号怎么办?这是个“二次”放号的号码...

    新买一个手机号经常会发现手机号之前被绑定过账号的情况,这很正常,由于运营商有回收手机号的机制,因此买到一个被"二次"放号的新手机号,也就是说这个手机号的上一个主人在注销此号是并没有 ...

  7. 手机号微信号绑定微信号_相关计算机,如果你在绑定手机和微信时遇到问题

    从2018年8月15日开始,发布公开文章/领取任务中心权益,需要同时绑定手机号和微信,网站和app都可以在设置->个人资料中进行绑定. 一.提示微信被占用怎么办? 出现这种情况,是你曾经使用微信 ...

  8. sql server无法绑定由多个部分组成的标识符_HTML5服务器推送事件(Server-sent-event)...

    在前端开发中,实现界面推送的方式,这里大概总结下三种方式 轮询(ajax),比较耗费服务器资源.COMET方式(COMET 技术并不是 HTML 5 ) websocket 双向数据推送,灵活,功能强 ...

  9. Linux操作Oracle(13)——java执行sql查询语句 报错 “无法绑定由多个部分组成的标识符“ 解决方案

    目录 问题描述: 问题分析 1.sql语句写的有问题 2.java项目 没有及时清理 问题解决

最新文章

  1. JS break语句和continue语句
  2. 创建文件夹(如果已经存在就清空)python脚本
  3. conductor任务域
  4. 关于语音发送/接收 方法和装置发明专利正式发布
  5. C++跨平台开发方法/工具
  6. Web应用程序中的Spring JDBC入门
  7. sql join语句语法_SQL Left Join语句:示例语法
  8. c语言编程软件有个a开头的,厦门理工软件c语言程序设计A卷及答案
  9. 线性方程组(A是上三角矩阵时)的C++求解
  10. css3的target伪类
  11. php 变量 unset,在PHP中unset变量
  12. 华为交换机初始化_华为交换机初始设置
  13. 访问本机php文件无法解析_浏览器访问.php文件不解析直接下载
  14. 揭秘终南山隐士:在山中修炼完后还回到红尘中
  15. Discuz deleterow函数解析
  16. 大白菜U盘重装Win10系统教程
  17. 六种正确清理C盘的方法,解决你的红色烦恼
  18. 性能服务器电路,【干货分享】服务器Power电路设计(上)
  19. 按键精灵 对文本的读取与 写入
  20. pap认证失败_PPP(CHAP 或 PAP)认证故障排除

热门文章

  1. angular $observe() 和$watch的区别
  2. IOS之未解问题--关于IOS图像渲染CPU和GPU
  3. 构建JSE 开发环境(图文并茂)
  4. 数据泄露 安全狗捍卫服务器安全
  5. Servlet的Web应用---三种方法获取表单的各种属性(源码)
  6. 斯洛文尼亚最大零售商接受BCH支付
  7. BCH升级新版本,实不相瞒该抄底了
  8. 为什么说BCH是最安全的数字货币之一?
  9. base64编码的作用【转】
  10. java B2B2C 多租户电子商城系统-Spring Cloud Zipkin