操作系统学习笔记_5 IO;缓冲区

news2025/7/11 11:02:46

I/O 设备

I/O 设备分类

按使用特性分类

人机交互类外设:如鼠标打印机键盘等。数据传输慢。

存储设备:移动硬盘、光盘等,数据传输速率快。

网络通信设备:调制解调器等用于网络通信,速度中等。

按速率分类

低速设备:鼠标键盘。

中速:激光打印机。

高速:移动硬盘等。

按信息交换的单位分类

块为单位:磁盘。

字符为单位:鼠标键盘等。

I/O 控制器

IO设备包括:

  • 机械部件:用于执行具体 IO 操作的,如鼠标按钮、显示器屏、磁盘盘面。

  • 电子部件:插入主板扩充槽的印刷电路板。

CPU 要通过 IO 控制器作为中介才能控制机械部件。

image-20221213200720497

image-20221213200846891

一个 IO 控制器可能控制多个设备;而且可能有多个寄存器。有的操作系统让这些寄存器存到内存里,叫做内存映像 IO;有的采用专门的地址,即寄存器独立编址。独立编址不在内存里,因此还要设置专门的指令来实现对其的操作,还要指明具体对哪个控制器操作。

IO 控制方式

关注:一次读写操作的流程;CPU 干预的频率;数据传送单位;数据流向;优缺点。

程序直接控制

读:

image-20221213201440173

重点在轮询。CPU要不断轮询。

数据传送单位:每次一个字。

数据流向:内存和 IO 设备经由 CPU 读写。每个字读写都需要 CPU 帮助。

简单,但是 CPU 和 IO 只能串行工作,CPU 一直轮询检查效率也很低。

中断驱动方式

CPU 发出读写命令后,等待 IO 的进程暂时阻塞,先运行其他程序。IO 完成后控制器会向 CPU 发一个中断信号,CPU 收到后继续执行。

image-20221213203221153

CPU 执行完每个指令的周期末尾检查中断。中断处理过程需要保存、恢复进程的运行环境,也需要一定时间开销。

CPU 只有 IO 开始时干预一下,等待 IO 过程中就运行其他进程了。

数据传送单位:每次一个字。

数据流向:内存和 IO 设备经由 CPU 读写。每个字读写都需要 CPU 帮助。

相比程序直接控制,CPU 利用率高一点了。但是一个字一个字的传,速度还是慢。

DMA 方式

数据传输单位是块;设备和内存之间数据传输不用每次都经过 CPU ,只有开始传输或结束时才需要干预。

image-20221213214114491

缺点:CPU 每发一条 IO 指令,只能读写几次连续的数据块。离散的数据块就要多次中断。

通道控制方式

通道相当于简化版的 CPU。CPU向通道发出指令,指明通道程序在内存中的位置,并指明要操作的是哪个 IO 设备,然后 CPU 就去运行其他程序了。

image-20221213215048076

通道能执行的指令很单一,而且放在内存中。

CPU 干预次数极少,效率也高,就是需要专门的通道程序支持。

I/O 软件层次

image-20221213215341827

设备独立性软件:向上提供接口(入库函数)。校验用户是否有权限使用当前设备。差错处理。分配和回收设备。管理数据缓冲区。建立逻辑设备名到物理设备名的映射,并根据实际的物理设备选择合适的驱动程序。

image-20221213220547401

可以只设立一个系统 LUT,但是所有用户的逻辑设备名不能重复;也可以给每个用户设计一个。

为什么不同设备驱动程序也不同?因为不同设备内部结构也不一样。比如不同打印机内部寄存器数量可能不一样。驱动程序一般作为单独的进程。

设备驱动程序:主要负责具体控制硬件设备。

中断处理程序:IO 顺利完成后,进行中断处理。并从设备读入一个字长的数据。

I/O 核心子系统

假脱机技术

脱机技术是什么?我们记得最早期的计算机是人手动打孔纸带放入计算机中的,因为人打孔太慢,CPU 运行再快也得等着。

批处理几段引入了脱机输入,先通过外围控制机把数据输入到更快速的磁带上再让主机读入。脱机指的是脱离主机控制的 IO 操作。

不仅 IO 快了,而且 CPU 忙的时候用户也可以先处理数据到磁带上。

假脱机技术 SPOOLing 用软件模拟脱机技术。

image-20221213222958979

输入输出进程模拟外围控制机。

借助 SPOOLing 技术,可以让打印机实现共享。收到用户的打印请求时,在输出井里申请空闲缓冲区(在磁盘上),并放入要打印的数据;且给用户进程申请一张空白的打印请求表,里面存储打印的相关信息,并把该表挂到假脱机文件队列上。打印机空闲时从队列中取出打印请求表,根据表取出打印的数据到输出缓冲区,再到打印机打印。

设备的分配和回收

分配设备要考虑:设备属性(独占?共享?虚拟?虚拟就是假脱机技术等独占改成共享)。设备分配算法(FCFS 优先级高的优先 短任务优先)。安全性

分配分为静态分配和动态分配。

设备分配管理中的数据结构

image-20221213224041439

设备控制表 DCT

image-20221213224208534

控制器控制表 COCT

image-20221213224340187

通道控制表 CHCT

系统设备表 SDT

image-20221213224501959

设备分配步骤

  1. 根据进程的物理设备名,去 SDT 找设备。
  2. 根据 SDT 找 DCT,空闲就直接把设备分给这个进程,忙碌就把这个进程的 PCB 挂到设备等待队列中。
  3. 根据 DCT 找到 COCT,空闲就分配,不空闲就等待。
  4. 根据 COCT 找到 CHCT,空闲就分配,不空闲就等待。

以上方法缺点在于用户要知道物理设备名,不透明;而且只指定这一个设备,如果该设备坏了或者堵塞哪怕其他设备能用也无法切换。

可以建立逻辑设备,用逻辑设备找物理设备。

SDT 中设备类型就是逻辑设备名。

通过逻辑设备表 LUT 建立逻辑设备名和物理设备名之间的映射关系。

缓冲区

缓冲区是一个存储区域,可以用专门的硬件寄存器,也可以用内存做。速度快,成本高,容量小,比如快表。本节中介绍的主要是内存缓冲区。

可以缓冲 CPU 和 IO 之间速度不匹配的矛盾,进而 CPU 中断次数也会减少;解决数据颗粒度不匹配的问题;提高 CPU 与 IO 的并行性。

单缓冲区

某用户进程请求设备读入若干个块的数据。。如果采用单缓冲策略,主存中会被分配一个缓冲区(一般是一个块大小)。缓冲区中只有空的时候才能冲入数据,只有非空的时候才能传出数据。

image-20221213231116133

image-20221213231551012

双缓冲区

一满一空,可以空的边读,满的边往工作区写。

image-20221213232144595

image-20221213232106544

用时=Max(C+M, T)

如果两台机器各配置2个缓冲区,就能同时收发了。

循环缓冲区

多个大小相同的缓冲区链接成一个循环队列。

image-20221213232951510

缓冲池

放满了各种各样缓冲区的池子。

image-20221213233107985

输入:取出一个空缓冲区挂到收容输入队列中,输入放到收容输入队列中,装好了挂到输入队列中。

提取输入:从输入队列取下来,放到提取输入队列中提取到用户进程,再挂回空缓冲区。

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

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

相关文章

组合模式详解

简介:就是树状图结构的多个类 Component(抽象构件):它可以是接口或抽象类,为叶子构件和容器构件对象声明接口,在该角色中可以包含所有子类共有行为的声明和实现。在抽象构件中定义了访问及管理它的子构件的…

常见react面试题

React组件命名推荐的方式是哪个? 通过引用而不是使用来命名组件displayName。 使用displayName命名组件: export default React.createClass({ displayName: TodoApp, // ...})React推荐的方法: export default class TodoApp extends …

【实时数仓】CDC简介、实现DWD层业务数据的处理(主要任务、接收kafka数据、动态分流*****)

文章目录一 CDC简介1 什么是CDC2 CDC的种类3 Flink-CDC二 准备业务数据-DWD层1 主要任务(1)接收Kafka数据,过滤空值数据(2)实现动态分流功能(3)把分好的流保存到对应表、主题中2 接收Kafka数据&…

VCL界面组件DevExpress VCL v22.1 - 支持新的格式标签和矢量图标

DevExpress VCL是Devexpress公司旗下最老牌的用户界面套包,所包含的控件有:数据录入、图表、数据分析、导航、布局等。该控件能帮助您创建优异的用户体验,提供高影响力的业务解决方案,并利用您现有的VCL技能为未来构建下一代应用程…

Altium Designer 22 安装过程

Altium Designer 22 安装过程1、开始安装 Altium Designer,点击 Next 2、选择需要安装的语言,勾选上接受协议,然后点击 Next 3、默认即可,其中 Touch Sensor Support 主要是用于触摸屏,然后点击 Next 4、接着&#xff…

C#语言实例源码系列-实现自己的进程管理器

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 👉关于作者 众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中…

CENTO OS上的网络安全工具(十七)搭建Cascade的Docker开发环境

这一篇,我们继续在Docker上折腾。之前我们已经展示了如何在容器上搭建安全产品的部署环境,这里我们需要更进一步,讨论如何在容器上搭建开发与调试环境。这是学习安全产品并且自己构建安全产品的基础步骤。 一、 构建开发镜像 鉴于前期我们…

如何使用 AWS 和 ChatGPT 创建最智能的多语言虚拟助手

上周ChatGPT发布了,每个人都在尝试令人惊奇的事情。我也开始使用它并想尝试它如何使用AWS的AI 服务进行集成,结果非常棒! 在这篇文章中,我将逐步解释我是如何创建这个项目的,这样你也可以做到! 最重要的是…

Tuxera NTFS2023免费版Mac电脑系统读写软件

使用 Mac 的巨大痛点之一:移动硬盘只能打开文件,但是无法写入新的资料ntfs。有人说格式化硬盘,改成苹果的 macOS扩展格式,但是原先硬盘的数据要转移,而且拿到 Windows 系统里无法被识别。 有人说格式化硬盘&#xff0…

C++ Reference: Standard C++ Library reference: Containers: list: list: emplace

C官网参考链接&#xff1a;https://cplusplus.com/reference/list/list/emplace/ 公有成员 <list> std::list::emplace template <class... Args> iterator emplace (const_iterator position, Args&&... args);构造并插入元素 通过在position上插入一个…

SpringMVC+SSM整合(完整版)

文章目录一、SpringMVC&#xff08;一&#xff09;SpringMVC简介1、什么是MVC2、什么是SpringMVC3、SpringMVC的特点4、MVC的工作流程&#xff08;二&#xff09;入门案例1、创建maven工程①引入依赖②配置web.xml③扩展配置方式2、总结&#xff08;三&#xff09;RequestMappi…

大学生个人网页模板 简单网页制作作业成品 极简风格个人介绍HTML网页设计代码下载

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

TZ-PEG-N3 四嗪聚乙二醇叠氮 Tetrazine-PEG-azide

四嗪可用于许多生物成像和生物共轭应用的生物正交反应。目前被广泛应用于蛋白质特定位点功能阐释、亚细胞结构选择性标记、药物靶向传递、活体动物分子影像和生物兼容性材料的制备等。 产品名称 Tetrazine-PEG-N3 四嗪聚乙二醇叠氮 中文名称 四嗪聚乙二醇叠氮 英文名称 …

[附源码]Nodejs计算机毕业设计基于Web的摄影爱好者交流社区Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

java计算机毕业设计ssm在线学习交流平台97t28(附源码、数据库)

java计算机毕业设计ssm在线学习交流平台97t28&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff0…

[附源码]Python计算机毕业设计SSM基于web的教学资源管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

sql错误分析--SQLSyntaxErrorException-

### Error updating database-----指数据库database update错误. Cause: java.sql.SQLSyntaxErrorException--sql语法错误: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near > 2…

微信公众号开发——向指定用户发送模板消息

&#x1f60a; 作者&#xff1a; 一恍过去&#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390&#x1f38a; 社区&#xff1a; Java技术栈交流&#x1f389; 主题&#xff1a; 微信公众号开发——向指定用户发送模板消息⏱️ 创作时间&#xff1a; 20…

ArrayList源码解析与相关知识点

ArrayList源码解析于相关知识点&#xff08;超级详细&#xff09; 文章目录ArrayList源码解析于相关知识点&#xff08;超级详细&#xff09;ArrayList的继承关系Serializable标记接口Cloneable标记接口RandomAccess标记接口AbstractList类属性构造函数无参构造函数指定初始容量…

网络工程毕业设计 SSM疫情期间医院门诊管理系统(源码+论文)

文章目录1 项目简介2 实现效果2.1 界面展示3 设计方案3.1 概述3.2 系统开发流程3.3 系统结构设计4 项目获取1 项目简介 Hi&#xff0c;各位同学好呀&#xff0c;这里是M学姐&#xff01; 今天向大家分享一个今年(2022)最新完成的毕业设计项目作品&#xff0c;【基于SSM的疫情…