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

计算机操作系统学习(五、输入输出管理)

目录

一、IO设备概述

二、IO控制器的组成

1.概述

2.主要过程

三、IO控制器的主要方式

1.程序直接控制方式

2.中断驱动方式

3.DMA方式

4.通道方式

四、IO的软件层次IO

五、IO调度和保护

1.IO调度

2.IO保护

六、假脱机技术,

七、设备分配的数据结构

八、缓冲区管理

(1)单缓冲

(2)双缓冲

(3)循环缓冲

(4)缓冲池


一、IO设备概述

对于IO设备需要理解的就是,IO设备通过总线挂在到计算机上,计算机通过不同的协议给IO设备通讯从而读写IO设备。比如,网卡,磁盘,键盘鼠标等。

二、IO控制器的组成

1.概述

上面提到,计算机和IO设备之间交互,需要通讯。有些通信可以硬件实现的,比如硬件SPI,当然也可以软件实现。CPU配置好IO控制器之后,把需要发送的数据和内容告诉这个IO硬件(也就是IO控制器),之后这个IO控制器自动使用对应的协议发送出去。总结就是,IO控制器是接受CPU指令,之后硬件实现协议

2.主要过程

比如用户进程要向磁盘里面写一些东西。

首先进程调用相关函数,由用户态转化成内核态,可以访问相关外设。

之后呢,调用相关外设的驱动,这些驱动会配置IO控制器,比如配置IO控制器使用什么协议,通信频率是多少。

之后CPU可以向IO控制器发送写指令,之后通过地址线可以知道写到哪里,通过控制线可以知道写还是读。

CPU写数据的时候,把数据放到数据寄存器,之后通过IO逻辑发送出去。

CPU读数据的时候,从数据寄存器中读数据。CPU如果有很多读写指令,还可以缓存到控制寄存器里面,之后IO控制器从这个寄存器取指令执行。

CPU可以通过状态寄存器来感知到当前接口状态,处于空闲还是繁忙。

IO逻辑接口三根线,分别传数据,状态(空闲还是忙碌),控制(读还是写)。

三、IO控制器的主要方式

1.程序直接控制方式

当读数据的时候,通过地址总线告诉IO逻辑要读数据了。此时状态寄存器肯定是free。

之后IO逻辑从对应的接口读数据,此时状态寄存器变成busy。

之后cpu一直不断的检测状态寄存器的状态,如果变成free,那么读取完毕。

这样导致cpu一直死等状态寄存器,比较浪费资源。

2.中断驱动方式

与上面不同的是,状态寄存器从忙碌到free,会产生一个中断,所以cpu在数据读取的过程中可以干其他事情。

缺点是每次读几个字节,中断频繁产生,这样其实不断的保存现场和恢复现场,比较浪费资源。

3.DMA方式

DR:数据寄存器

DC:数据计数器

MAR:内存地址

CR:控制寄存器(负责读还是写)

在DMA使用之前,会配置好DC和MAR,DC表示我要读多少字节,每成功读一个字节,这个--,-到0触发中断,说明读完一次了。

之后MAR的地址从开始连续的++,不断的把数据读到内存里面。

缺点是,只能连续读取。优点是,CPU配置完DMA就不管这事了,比较省CPU。

4.通道方式

通道也是个小型CPU,可以这样理解。

工作的时候呢,CPU告诉通道,我要在一个地址是读还是写。

之后通道按照上面的方式呢,和设备交互。

交互完成之后呢,触发中断,告诉CPU完成任务了。

四、IO的软件层次IO

用户层软件:就是比如WPS这种,用户程序。

设备独立性软件:主要负责设备的分配与回收。下面有详细解释。

设备驱动软件:设备是需要驱动的,驱动是告诉与设备 的通讯方式,比如SPI还是IIC。驱动被下载到电脑里面,每个驱动都有对应的设备,找到设备之后,选择对应的驱动,如果驱动没安装,那么设备也无法使用。

之后有了驱动,有了设备。之后CPU就可以发送指令,IO执行对应的协议,就可以和设备通讯,控制设备了,读写完成之后,产生中断,告诉进程,读写完毕。

五、IO调度和保护

1.IO调度

以读取磁盘数据为例。可能同一时间有很多磁盘读取的任务,那么如何安排这些任务呢,让磁盘读写的效率最高,就和华为软挑一样。IO调度由设备独立性软件负责,简单理解,相当于对IO任务排个顺序了。

排好顺序之后哦,就调用驱动,总线发送信息,一步一步的执行任务了。

2.IO保护

IO设备就是文件。从文件读取内容,相当于读设备,从文件写内容,相当于写设备。

比如打印机相当于一个文件,向打印机文件写数据,相当于发送信息给打印机。

比如键盘相当于一个文件,向键盘文件读数据,相当于读取键盘数据。

所以可以像操作文件一样操作设备,给设备设置权限,加密码啥的。

六、假脱机技术,

如果由很多进程都需要使用打印机,当一个使用打印机的时候,其他进程就阻塞,就等着,这样不太好。我们想要其他进程也可以继续执行其他的。

所以就专门再设计一个进程Spooler,当进程A使用打印机的时候,他告诉Spooler,我要打印什么什么。之后就去做其他事情了。之后进程B使用打印机的时候就告诉Spooler,打印什么什么,之后也去做其他的事情了。(怎么告诉? 实际上是进程之间的通讯嘛,本质是共享内存)

之后Spooler就维护了一个任务队列,Spooler从共享内存里面把数据读到磁盘里面。之后当运行的之后,再把磁盘的任务读出来,一个一个的运行。

七、设备分配的数据结构

系统会维护一个SDT,这个每个表目里面都由设备的类型,是什么驱动啊等信息,之后他还标识了这个设备的设备控制表的入口。

之后设备控制表也有当前设备的相关信息啊,当分配设备的时候,如果设备不够用了,那么就把他放到设备队列指针里面。

通过控制器表可以找到当前设备的控制器,查看控制器的相关信息。如果控制器处于忙碌,那么就把当前任务放到控制器队列里面。

之后通过设备控制器表还可以找到通道控制表。这个也是记录了通道的相关信息。之后如果申请通道时资源不够,那么把任务放到通道队列里面。

通过通道控制表还可以找到挂在这个通道下的控制器。

八、缓冲区管理

(1)单缓冲

(2)双缓冲

先往M1写,M1被处理的过程中,可以继续向M2写,这样提高了效率。

(3)循环缓冲

搞了一个循环队列,告诉从那个缓冲区读,从那个缓冲区写。他的缓冲区多了,那样其实效率肯定又高了一点。

比如,缓冲1数据满了,进程没来得及处理,之后不断的向缓冲2,3,4,5写数据。写完了进程来处理了。比双缓冲省时间了,因为双缓冲只能写俩,之后就等待进程,这个可以写5个。

(4)缓冲池

反正就是有一个空闲的内存

当输入数据的时候,把这个空闲内存搞出来一部分加入到输入队列,之后存数据,当进程读完数据之后,把这个内存重新放到空队列。

当输出数据的时候,把从空队列里面搞出来一部分,放数据,之后数据发给IO设备之后,把这个内存释放掉,重新放回空队列。


文章转载自:

http://NzZU56qy.qtfss.cn
http://LzLx1IpK.qtfss.cn
http://xtOtAggr.qtfss.cn
http://KJzzRc1F.qtfss.cn
http://d0hmFjrp.qtfss.cn
http://diBr5anU.qtfss.cn
http://GC0GQPhl.qtfss.cn
http://BLFMdQfC.qtfss.cn
http://hoqlfG4N.qtfss.cn
http://sut92uUz.qtfss.cn
http://pLPVXzT4.qtfss.cn
http://18OPLfcx.qtfss.cn
http://ytGslAY2.qtfss.cn
http://phLgWWUJ.qtfss.cn
http://HuOSnav1.qtfss.cn
http://DQCqoNDc.qtfss.cn
http://HR3zCgJO.qtfss.cn
http://N8deiBv4.qtfss.cn
http://O8OggYAh.qtfss.cn
http://lp59YmQG.qtfss.cn
http://bOwjtzwz.qtfss.cn
http://1cFwq3Tl.qtfss.cn
http://At2BPUrv.qtfss.cn
http://UfXKYAei.qtfss.cn
http://ButYjmYh.qtfss.cn
http://I5MuWuOA.qtfss.cn
http://gwafvlfs.qtfss.cn
http://yqc4Dz1R.qtfss.cn
http://XRDFa1Zh.qtfss.cn
http://mBRvnAjr.qtfss.cn
http://www.dtcms.com/a/387430.html

相关文章:

  • Rocksteady开发新《未来蝙蝠侠》游戏 有望登陆PS5/PS6
  • Python爬虫实战——使用NetNut网页解锁器获取亚马逊电商数据的入门指南
  • 【 mq】 mq学习笔记
  • 科学研究系统性思维的理论基础:传统研究工具应用
  • Java基础:基本数据类型与变量(详解)
  • VsCode中配置Git-Bash终端
  • 《无人机政务应用视频图像服务成本度量规范》(T/DGAG025-2024)标准解读
  • 2/3维旋转矩阵推导与助记--记录
  • 【代码随想录算法训练营——Day15】二叉树——110.平衡二叉树、257.二叉树的所有路径、404.左叶子之和、222.完全二叉树的节点个数
  • 《从终端到内核:Linux 指令体系的入门与技术解构(第二篇)》
  • 实验5:组件应用(4学时)
  • 精选40道Kafka面试
  • web自动化随笔
  • HarmonyOS 多线程编程:Worker 使用与性能优化指南
  • 卫星通信大爆发:未来,你的手机将不再“失联”
  • 带你了解STM32:EXTI外部中断
  • Charles抓包工具新手入门教程 安装配置、手机代理与基础使用指南
  • 鸿蒙智能设备自动诊断实战:从传感器采集到远程上报的完整实现
  • 第五章 Arm C1-Premium 内存管理单元详解
  • 第七章 Arm C1-Premium L1数据内存系统解析
  • ARM(10) - I2C
  • 计算机视觉(opencv)实战二十六——背景建模与运动目标检测
  • 《详解Maven的继承与聚合》一篇理解分模块设计理念,以及私服的使用
  • Linux系统服务Syslog服务
  • 985高校标杆项目:基于大数据的商店销售数据分析与可视化系统技术解析
  • OpenCV内置分类器实现简单的人脸识别
  • 基于vue社区养老管理系统3849x(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 破解云VR教育普及难题:点量实时云渲染——实现跨终端无界协同
  • 智能合约安全常见攻击与防御
  • Docker多容器编排:Compose 实战教程