当前位置: 首页 > news >正文

【操作系统】第五章 IO

第五章 IO系统

3.1 IO设备管理

3.1.1 IO设备

1.分类

块设备:信息交换以数据块为单位,属于有结构设备,比如磁盘等
字符设备:信息交换以自负为单位,信息没有固定结构,比如打印机,键盘等,使用流传输

2.IO接口(设备控制器)

IO接收器又称为设备控制器,位于CPU和设备之间,承担着CPU和设备之间通信的中介功能
(1)设备控制器和CPU的接口:包含三类控制线数据线、地址线和控制线。数据线通常和数据寄存器(存放从设备送来的输入数据和CPU送来的输出数据)以及控制/状态寄存器(存放从CPU送来的控制信息和设备送来的状态信息)
(2)设备控制器和设备的接口:一个设备控制器可以连接多个设备,每个接口中都存在着数据、控制和状态三种信号
(3)IO逻辑:用于实现对设备的控制。通过一组控制线和CPU交互,对从CPU收到的IO命令进行译码
主要作用:
1.接收和识别CPU发来的命令
2.数据交换
3.标识和报告设备的状态
4.地址识别
5.数据缓冲
6.差错控制

3.IO端口

IO端口指的是设备控制器中可以被CPU直接访问的寄存器,主要有三类

  • 数据寄存器:实现CPU和设备之间的缓冲
  • 状态寄存器:获取执行结果和设备状态信息
  • 控制寄存器:由CPU写入的控制设备 的寄存器
    为了实现CPU和IO端口的通信,一般由两种方法:
    在这里插入图片描述

3.1.2 IO控制方式

1.程序直接控制

特点:每次只读写一个字
数据流向
每个字的读写都需要CPU的帮助
优点:简单且易于实现
缺点:CPU和IO只能串行工作,CPU利用率低,CPU频繁轮询检查状态寄存器,干预频率高。

2.中断驱动方式

在这里插入图片描述
TIPS:

  1. CPU会在每个指令周期的末尾检查中断
  2. 中断会有一定开销
  3. 每次只读写一个字
  4. 每次读写都需要CPU干预
    优点:CPU干预频率比1低,并且CPU和IO可以并行工作
    缺点:每次只能传输一个字,并且频繁的中断会消耗CPU时间
DMA方式(直接存储器存储)

DMA是一种特殊的控制器,主要用于对块设备的管理,有几个改进

  1. 数据传输单位是块
  2. 数据流向是设备直接传输到内存,而不经过CPU
  3. 仅在一个或多个块开始和结束时才需要CPU干预
    在这里插入图片描述
    可以看出,DMA控制器就像是一个中介,只需要CPU发出指令,他就可以完成将数据从IO到内存的迁移过程,而不需要CPU亲力亲为。
    优点:数据传输以块为单位,CPU介入频率低,并行性得到提升
    缺点:CPU每发出一条IO指令,只能读写一个或者多个连续的数据块。如果需要读写多个离散存储到数据块,或者要将数据分别写到了不同的内存区域时,CPU就要分别发出多条IO指令,进行多次中断处理。
通道控制方式

通道,一种硬件,可以理解为弱鸡版的CPU,通道可以识别并且执行一系列的通道指令。
在这里插入图片描述
CPU干预频率很低,只需要将一组任务交给通道就可以去执行其他任务了。
同时,每次可以读写一组数据块。CPU、通道和IO可以并行工作,资源利用率高,但是实现较为复杂,需要专门的硬件支持,成本较高。

在这里插入图片描述

5.1.3 IO软件层次结构

IO软件层次结构
用户层软件
设备独立性软件(内核)
设备驱动程序(内核)
中断处理程序(内核)
硬件

用户层软件
提供与用户交互的接口,用户可以调用接口。将用户请求翻译成格式化的IO请求,并且通过系统调用请求操作系统内核服务
设备独立性软件
设备无关性软件,与设备的硬件属性无关的功能都在这一层实现是对底层的进一步抽象。另外还有差错控制和设备保护功能,以及设备的分配和回收和数据缓冲区管理。
建立逻辑设备到物理设备的映射,并且根据设备类型选择调用相应的驱动程序。设备独立性软件会通过逻辑设备表LUT确定对应物理设备

逻辑设备名物理设备名驱动程序入口地址

有的一整个系统只设置一张LUT,适用于单用户系统;多用户系统需要给每个用户分配一张LUT

设备驱动程序
驱动程序主要负责对硬件设备的具体控制,将上层发出的一系列指令转化为设备指令。
中断处理程序
IO任务完成时,IO控制器会发出一个中断信号,系统会根据中断信号类型找到相应的中断处理程序执行。

5.2 IO核心子系统

核心子系统主要包括设备独立性软件、设备驱动程序和中断处理程序三个

相关文章:

  • 互联网大厂高频面试专题 500 道:并发编程 /Spring/MyBatis(附答案解析)
  • javaweb医院门诊管理系统
  • Python从入门到高手的80行代码
  • 回顾大一|我们要做的是提前准备,而不是提前焦虑
  • Docker - 编译安装nginx镜像
  • 【云原生|设备云】设备APP开发软件细节详解
  • 动态规划 - 字符串分割(Word Break) + 三角矩阵(Triangle)
  • 一种自适应模拟退火粒子群优化算法-附代码
  • 大模型系统和应用——Transformer预训练语言模型
  • fastapi定时任务,增量构建可转债交易数据入mongo和qlib
  • python+java+springboot快递物流之家管理系统
  • k8s之ConfigMap和Secret
  • 停更的公众号
  • 商汤绝影车路协同“进城”!10+个智能网联应用,100+场景算法应用,感知范围扩大1000倍...
  • 阿里“通义”大模型炸场WAIC,背后要从一篇论文讲起
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • 0x05 Python数据分析,Anaconda八斩刀
  • JavaScript 基本功--面试宝典
  • js学习笔记
  • Nodejs和JavaWeb协助开发
  • React Native移动开发实战-3-实现页面间的数据传递
  • Redux 中间件分析
  • vue中实现单选
  • 百度小程序遇到的问题
  • 构建二叉树进行数值数组的去重及优化
  • 聚类分析——Kmeans
  • 聊聊sentinel的DegradeSlot
  • 那些年我们用过的显示性能指标
  • 爬虫模拟登陆 SegmentFault
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​TypeScript都不会用,也敢说会前端?
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (11)MSP430F5529 定时器B
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (推荐)叮当——中文语音对话机器人
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)重识new
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .net web项目 调用webService
  • .NET 常见的偏门问题
  • .Net 应用中使用dot trace进行性能诊断
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——
  • [20180129]bash显示path环境变量.txt
  • [8481302]博弈论 斯坦福game theory stanford week 1
  • [Android]Android P(9) WIFI学习笔记 - 扫描 (1)
  • [BPU部署教程] 教你搞定YOLOV5部署 (版本: 6.2)
  • [C++]STL之map
  • [C++]类和对象(中)
  • [CDOJ 838]母仪天下 【线段树手速练习 15分钟内敲完算合格】