操作系统之I/O设备管理

I/O系统的组成

I/O系统的结构

微机I/O系统
  • 总线型I/O系统结构,CPU与内存之间可以直接进行信息交换,但是不能与设备直接进行信息交换,必须经过设备控制器。
主机I/O系统
  • I/O系统可能采用四级结构,包括主机、通道、控制器和设备。
  • 一个通道客户已控制多个设备控制器,一个设备控制器也可以控制多个设备。

I/O设备的分类

按传输速录分类
  • 低速设备
    • 键盘和鼠标
  • 中速设备
    • 打印机
  • 高速设备
    • 磁带机、磁盘机、光盘机
按信息交换的单位分类
  • 块设备
    • 数据的存取以数据块为单位,如磁盘
  • 字符设备
    • 传送字节流,没有使用块结构,如鼠标
按设备的共享属性分类
  • 独占设备
    • 是必须作为临界资源以互斥方式访问的设备
      • 如打印机
  • 共享设备
    • 是允许多个进程共同访问的设备
      • 如硬磁盘
  • 虚拟设备
    • 是通过某种虚拟技术把一台物理设备变成若干逻辑设备,从用户的角度看,多个用户拥有各自的设备,可以随时向设备发出访问请求并得到系统应答

设备控制器

I/O设备分为机械和电子两部分,设备控制器对应电子部分,通常是可编程的
  • 什么是设备控制器
    • 设备控制器是CPU与I/O设备之间的接口,接收I/O的命令并控制设备完成I/O工作
    • 设备控制器是一个可编址设备,连接多个设备时可有多个设备地址
  • 设备控制器的功能
    • 接收和识别命令
    • 数据交换
    • 设备状态的了解和报告
    • 地址识别
    • 数据缓冲
      • 设备控制器可以存储数据,作为CPU和I/O之间的缓冲
  • 设备控制器的组成
    • 设备控制器与处理机的接口
      • 数据线、控制器、和地址线
    • 设备控制器与设备的接口
      • 设备与设备控制器接口中的3类信号为数据、状态和控制信号
    • I/O逻辑
      • 主要有指令译码器和地址译码器两部分功能部件构成

I/O通道

I/O通道式一种特殊的处理机,它具有执行I/O指令的能力,并通过执行通道程序来控制I/O操作
引入通道能够使CPU从控制I/O的任务重解脱,使CPU与I/O并行工作,提高CPU的利用率和系统的吞吐量

I/O控制方式

轮询

早期的计算机系统,因为没有中断机制,处理器对输入/输出的控制不得不采取程序轮询的方式

中断

现代计算机系统广泛采用中断控制方式完成对I/O的控制

DMA控制方式

对于磁盘驱动器这类的设备,每次数据传输量较大,采用中断控制方式,传输一个数据块就需要进行多次中断处理
DMA控制需要特殊结构的设备控制器
  • 命令/状态寄存器CR
  • 内存地址寄存器MAR
  • 数据计数器DC
  • 数据寄存器DR

缓冲管理

缓冲的引入

在数据到达速率与数据离去速率不同的地方,都可以引入缓冲区。引入缓冲区的主要原因有
  • 处理数据流的生产者与消费者之间的速度差异
  • 协调传输数据大小不一致的设备

单缓冲

对于面向块的设备
  • 输入数据被传送进入系统缓冲区,当传送完成是,进程把该快移到用户空间,并立即请求另一块系统缓冲区。
  • 用户进程可以在下一块数据正在读入系统缓冲区时,处理用户去中的那一块数据
对于面向流的I/O
  • 键盘。打印机和传感器等都属于面向流的设备

双缓冲

当一个进程往这一个缓冲区中传送数据(或从这个缓冲区中读取数据)时,操作系统正在清空(或填充)另一个缓冲区,这种技术称为双缓冲,或缓冲交换

循环缓冲

双缓冲方案可以平滑I/O设备和进程之间的数据流,如果某个特定进程的性能是关注的焦点,常常会希望相关I/O操作能够跟得上这个进程。如果这个进程突然快速执行了大量的I/O,仅有双缓冲就不够了
  • 循环缓冲的组成
    • 多个缓冲区
      • 空缓冲区R:生产者进程下一个可用的空缓冲区
      • 已装满数据的缓冲区G:用于指示消费者进程下一个可用的装有产品的缓冲区
      • 现行工作缓冲区C:消费者进程正在使用的工作缓冲区
    • 多个指针
      • Nextg
        • 用于指示消费者进程下一个可用的装有数据的缓冲区
      • Nexti
        • 用于指示生产者进程下一个可用的空缓冲区
      • Current
        • 用于指示进程正在使用的工作缓冲区
  • 循环缓冲的使用
    • Getbuf过程
      • 消费者进程要使用缓冲区中的数据时,该过程将Nextg指向的缓冲区提供给进程使用,并吧他改成有Current指针指向的现行工作缓冲区,同时使Nextg指向下一个可用的装有数据的缓冲区G
      • 而当生产者进程要使用空缓冲区来装数据时,也通过调用Getbuf过程,把Nexti指示的空缓冲区提供给生产者进程使用,然后使Nexti指向下一个空缓冲区R
    • Releasebuf过程
      • 当进程使用完缓冲区之后,调用Releasebuf过程释放缓冲区
  • 进程同步
    • Nexti指针追上Nextg
      • 生产者进程速度大于消费者进程速度
        • 阻塞生产者进程,等待消费者进程为生产者进程释放空缓冲区R
    • Nextg指针追上Nexti
      • 消费者进程速度大于生产者进程速度
        • 阻塞消费者进程,等待生产者进程为消费者进程释放装有数据的缓冲区G
  • 缓冲池
    • 缓冲池的组成
      • 3种类型的缓冲区
        • 空缓冲区
        • 装满输入数据的缓冲区
        • 装满输出数据的缓冲区
      • 3种队列
        • 空缓冲队列emq
        • 输入队列inq
        • 输出队列outq
      • 4种工作缓冲区
        • 收容输入数据的缓冲区
        • 提取输入数据的缓冲区
        • 收容输出数据的缓冲区
        • 提取输出数据的缓冲区
    • Getbuf过程和Putbuf过程
    • 缓冲区的工作方式
      • 收容输入
        • 在进程需要收容输入数据时,需要先从空缓冲队列提取一个空缓冲区,将输入数据写入缓冲后,再把装入了输入数据的缓冲区插入到输入队列中去
          • Getbuf(emq)
          • 将输入数据写入缓冲区
          • putbuf(inq,hin)
      • 提取输入
        • 当进程需要输入数据时(如计算进程需要提取输入数据,然后对数据进行计算处理),先从输入队列提取输入缓冲区,然后从中提取输入数据,最后把缓冲区作为空缓冲区插入空缓冲队列。
          • Getbuf(inq)
          • 从缓冲区提取数据
          • putbuf(emq,sin)
      • 收容输出
        • 在进程需要收容输出数据时,要先从空缓冲队列提取一个空缓冲区,将输入数据写入缓冲后,再把装入了输出数据的缓冲区插入到输出队列中去。
          • Getbuf(emq)
          • 将输入数据写入缓冲区
          • putbuf(outq,hout)
      • 提取输出
        • 当进程需要输出数据时(如打印进程需要提取输出数据送入打印机),先从输出队列提取输出缓冲区,然后从中提取输出数据,最后把这个缓冲区插入空缓冲队列。
          • Getbuf(outq)
          • 输出数据
          • putbuf(emq,sout)

设备分配

设备分配中的数据结构

设备控制表DCT
控制器控制表COCT
通道控制表CHCT
系统设备表SDT

设备分配

设备的固有属性
  • 独占设备
  • 共享设备
  • 可虚拟设备
设备分配算法
  • 先来先服务
  • 基于优先权的分配算法
设备分配方式
  • 安全分配方式
    • 这种分配方式中,每当进程发出I/O请求后,便进入阻塞状态,直到其I/O操作完成时才被唤醒。
  • 不安全分配方式

设备独立性

设备独立性的概念
  • 为了提高操作系统的可适应性和可扩展性,在现代操作系统中都毫无例外地实现了设备独立性,也称设备无关性。
    • 逻辑设备
    • 物理设备
    • 系统必须具有将逻辑设备名称转换为物理设备名称的功能
实现设备独立性带来的好处
  • 应用程序与物理设备无关
  • 易于处理输入/输出设备的故障
  • 提高了系统的可靠性,增加了设备分配的灵活性
设备独立软件
  • 执行所有设备的共有操作
  • 向用户层软件提供统一的接口

独占设备的分配程序

分配设备
分配控制区
分配通道

SPOOLing技术

什么是SPOOLing(假脱机技术)
  • SPOOLing系统的组成
    • 输入井和输出井
    • 输入缓冲区和输出缓冲区
    • 输入进程SPi和输出进程SPo
利用SPOOLing技术实现共享打印机

I/O软件原理

设备管理软件的功能
  • 实现I/O设备的独立性
  • 错误处理
  • 异步传输
  • 缓冲管理
  • 设备的分配和释放
  • 实现I/O控制方式
中断处理程序
设备驱动程序
与硬件无关的I/O软件

磁盘管理

磁盘结构

数据的组织和格式
  • 存储面
    • 磁道
    • 扇区
磁盘的类型
  • 固定头磁盘
  • 移动头磁盘
磁盘的访问时间
  • 寻道时间
  • 旋转延迟时间
  • 传输时间

磁盘调度

先来先服务
扫描算法
循环扫描算法
NStepSCAN和FSCAN调度算法

提高磁盘I/O速度的方法

提前读
延迟写
优化物理块的分布
虚拟盘
  • 虚拟盘通常用于存放临时文件,如编译程序产生的目标程序等
磁盘高速缓存
  • 一组逻辑上属于磁盘,而物理上是驻留在内存中的盘块

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

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

相关文章

Linux:login shell和non-login shell以及其配置文件

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 shell是Linux与外界交互的程序,登录shell有两种方式,login shell与non-login shell,它们的区别是读取的配置文件不同,本…

算法学习2

学习目录 一.插入排序 一.插入排序 从数组的第一个元素开始,当前元素与其前一个元素进行比较; 大于(或小于时)将其进行交换,即当前元素替换到前一位; 再将该元素与替换后位置的前一个元素进行交换&#xf…

树莓派配置Qt+OpenCV

本次教程使用的树莓派镜像:树莓派镜像带图像界面下载 Qt的安装: 在命令行依次输入以下命令安装Qt: sudo apt-get updatesudo apt-get upgrade sudo apt-get install qtbase5-dev qtchooser sudo apt-get install qt5-qmake qtbase5-dev-t…

某花顺爬虫逆向分析

目标网站: aHR0cHM6Ly9xLjEwanFrYS5jb20uY24v 一、抓包分析 携带了cookie,每次请求的cookie都不一样,且不携带cookie不能成功返回数据 hook Cookie代码 _cookie document.cookie Object.defineProperty(document, cookie, {get(){con…

分子动力学工具篇一:TAB与moltemplate的安装与使用

文章目录 1. 介绍1.ATB (Automated Topology Builder)2. Moltemplate 2. 展出讲讲怎么使用ATB3. 展开讲讲怎么安装和使用moltemplate 1. 介绍 1.ATB (Automated Topology Builder) ATB网站网址(需要用学术邮箱注册) ATB (Automated Topology Builder) …

【数据结构】经典题

所以,语句 x; 的语句频度为:n(n1)(n2)/6 选C 临时变量 t:只使用了一个额外的变量来存储交换的值。 没有使用额外的数组:所有的操作都是在原数组 a 上进行的。 因此,算法的空间复杂度是常数级别的&#xff0…

Java中List、ArrayList与顺序表

List、ArrayList与顺序表 List什么是List常用方法介绍List的使用 ArrayList与顺序表线性表顺序表接口的实现 ArrayList简介ArrayList的使用ArrayList的构造ArrayList的常见操作ArrayList的遍历ArrayList的扩容机制 ArrayList的具体使用杨辉三角简单的洗牌算法 ArrayList的问题及…

某招标公告公示搜索引擎爬虫逆向

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前言 网站:aHR0cHM6Ly9jdGJwc3AuY29tLyMv 提示:以下是本篇文章正文内容,下面案例可供参考 一、抓包分析 请求参数和返回数据都进行了加…

AIGC7: 高通骁龙AIPC开发者沙龙过程记录A

图中是一座高耸的宫殿。 就像AI的出现,慢慢初现端倪,头角峥嵘。 背景 一直以来都比较关注AI的发展,有幸再一次参加异常AI的盛会。 从我的角度看。 高通是一家生产芯片的公司,国内的小米,荣耀,Oppo , Vi…

SGFormer:简化并增强Transformer以应对大型图表示的挑战

人工智能咨询培训老师叶梓 转载标明出处 大型图数据的表示学习面临的主要挑战是如何在有限的计算资源下,有效地捕捉节点间的依赖关系并生成有用的节点表示。现有的基于Transformer的方法通常采用多层多头注意力机制,这虽然能够捕获全局信息,…

fasterRCNN模型实现飞机类目标检测

加入会员社群,免费获取本项目数据集和代码:点击进入>> 关于python哥团队 我们是一个深度学习领域的独立工作室。团队成员有:中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等,曾在腾讯、百度、德勤等担任算法工程师…

13.面试算法-字符串常见算法题(二)

1. 字符串反转专题 我们知道反转是链表的一个重要考点,反转同样是字符串的重要问题。常见问题也就是在LeetCode中列举的相关题目: 【1】LeetCode344. 反转字符串:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符…

【多维动态规划】64. 最小路径和(面试真题+面试官调整后的题目)

64. 最小路径和 难度:中等 力扣地址:https://leetcode.cn/problems/minimum-path-sum/description/ 1. 原题以及解法 1.1 题目 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和…

Redis——redispluspls库list及set类型相关接口使用

文章目录 list 类型相关接口lpush和lrangerpushlpop和rpopblpop和brpopllen set 类型相关接口sadd和smemberssismemberscardspopsinstersinterstore list 类型相关接口 lpush和lrange void lrange_lpush(sw::redis::Redis& redis){std::cout<<"lpush 和 lrang…

Windows控制台中文乱码怎么解决?(nes,一些exe窗口程序)

当我们打开一些Window窗口程序出现中文乱码时&#xff0c;可以像这样设置一下&#xff01; 1、打开 设置-->时间和语言-->语言和区域 2、 管理语言设置 3、更改系统区域设置 4、取消勾选 Beta版&#xff1a;UTF-8 5、效果演示 这下中文不乱码了&#xff01;

多维系统下单点登录之生产实践(2种方案3种实践)

1、基于 Cookie 跨域与分布式 Session 的技术实践 1、XXL-SSO 整体价格 2、实现原理剖析 首次请求 第二次请求 跨域请求 注销流程 3、案例演示 首次登陆跳转至统一认证中心 访问&#xff1a;http://xxlssoclient1.com:8081/ 登陆成功&#xff0c;写入 Cookie&#…

MySQL record 06 part

事务、存储过程 事务&#xff1a; MySQL的同步&#xff0c;同步是指 together done&#xff0c;要么一起前进&#xff0c;要么一起后退的意思。 注意&#xff0c;回滚 rollback 对已经提交 commit 的数据是无效的&#xff0c;也就是说&#xff0c;只能对没有被提交 commit …

【iOS】KVC的学习

【iOS】KVC的学习 文章目录 【iOS】KVC的学习前言KVC定义KVC设值KVC取值KVC使用keyPathKVC处理异常处理nil异常 KVC的一些应用修改动态的设置值实现高阶的消息传递 小结 前言 笔者简单学习了有关与KVC的相关内容&#xff0c;这里写一篇博客简单介绍一下相关内容。 KVC 定义 KV…

saas收银系统源码

1. 线下门店多样化收银 ①门店有社区小店、也会有大店&#xff0c;甚至还会有夫妻店&#xff0c;同时还要有Windows版和安卓版&#xff0c;需满足不同门店的收银需求。 ②支持Windows收银、安卓收银、无人自助收银、聚合码收银等&#xff0c;支持ai智能称重、收银称重一体机等…

『功能项目』QFrameWorkBug拖拽功能【66】

我们打开上一篇65QFrameWork道具栏物品生成的项目&#xff0c; 本章要做的事情是实现物品的拖拽功能 修改脚本&#xff1a;UISlot.cs 实现接口后编写脚本&#xff1a; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; namespace QFramework {publi…