操作系统——输入输出IO管理

文章目录

  • **1 I/O管理概述**
    • **1.1 I/O设备**
    • **1.2 I/O控制方式**
      • **1.2.1 程序直接控制方式**
      • **1.2.2 中断驱动方式**
      • **1.2.3 DMA方式**
      • **1.2.4 通道控制方式**
    • **1.3 I/O软件层次结构**
    • **1.4 应用程序I/O接口**
  • **2 设备独立性软件**
    • **2.1 高速缓冲与缓冲区**
    • **2.2 设备分配和回收**
    • **2.3 SPOOLing技术(假脱机技术)**
  • **3 磁盘和固态硬盘**
    • **3.1 磁盘的管理**
    • **3.2 磁盘调度算法**

1 I/O管理概述

1.1 I/O设备

分类

按信息交换单位分:

(1)块设备:以数据块为单位,属于有结构设备,如磁盘,传输速率较高,可寻址,可随机读写

(2)字符设备:以字符为单位,属于无结构类型,如交互式终端机,打印机等,传输速率低,不可寻址,时常采用中断I/O方式

按传输速率分类:

(1)低速设备:如键盘,鼠标

(2)中速设备:如激光打印机

(3)高速设备:磁盘机,光盘机等

I/O接口

设备控制器位于CPU与设备之间

在这里插入图片描述

(1)设备控制器与CPU的接口,有三类信号线:数据线,地址线和控制线

(2)设备控制器与设备的接口,每个接口都存在数据,控制和状态三种类型的信号

(3)I/O逻辑,实现对设备的控制,对地址进行译码,并相应的对所选设备进行控制

主要功能:接收和识别CPU发来的命令;数据交换,如设备和控制器之间的数据,控制器和主存之间的数据;标识和报告设备的状态供CPU处理;地址识别;数据缓冲;差错控制

I/O端口

指设备控制器可被CPU直接访问的寄存器

  • 数据寄存器:实现CPU和外设之间的数据缓冲
  • 状态寄存器:获取执行结果和设备的状态信息
  • 控制寄存器:CPU写入,启动命令或更改设备模式

为实现CPU与I/O端口进行通信,有两种方法:

(1)独立编址:每个端口分配一个端口号,所有I/O端口形成I/O端口空间,普通用户程序不能访问

(2)统一编址(内存映射I/O):每个端口被分配唯一的内存地址,且不会有内存被分配这一地址,通常分配给端口的地址靠近地址空间的顶端

在这里插入图片描述

1.2 I/O控制方式

http://t.csdn.cn/tEgy1

设备管理主要任务之一是控制设备和内存或CPU之间的数据传送,外围设备和内存之间的输入输出控制方式有4种

在这里插入图片描述

1.2.1 程序直接控制方式

从外部设别读取的每个字,CPU需要对外设状态进行循坏检查,直到确定该字已经在I/O控制器的数据寄存器中

导致CPU长时间等待,效率低

1.2.2 中断驱动方式

一旦数据读入数据寄存器就通过控制线给CPU发送中断信号,表示数据准备好,然后等待CPU请求该数据

但是数据中的每个字在存储器和I/O控制器之间的传输都要经过CPU,还是会消耗CPU时间

1.2.3 DMA方式

在I/O设备和内存之间直接开辟数据交换通路,彻底解放CPU

特点:基本单位是数据块;传输数据直接从设备送入内存或相反;尽在传输数据的开始和结束CPU才干预,数据传送在DMA控制器的控制下完成

  • 命令/状态寄存器:接收从CPU发来的I/O命令,有关控制信息,或设备状态
  • 内存地址寄存器MAR:输入时存放把数据从设备传送到内存的起始目标地址;输出时,存放由内存到设备的内存源地址
  • 数据寄存器DR:暂存数据
  • 数据计数器DC:存放背刺传送的字节数

CPU会在开始时设备MAR和DC初值,然后继续其他工作

在这里插入图片描述

1.2.4 通道控制方式

I/O通道是指专门负责输入/输出的处理机,是DMA方式的发展,进一步减少CPU的干预,把对一个数据块的读写为单位的干预,减少为对一组数据块的读写及有关控制和管理为单位的干预,又可以实现CPU,通道和I/O设备三者的并行操作,有效的提高系统的资源利用率

I/O通道与一般处理机:通道指令的类型单一,没有自己的内存,通道程序放在主机的内存中,与CPU共享内存

I/O通道与DMA方式:DMA需要CPU控制传送的数据块大小和传送的内存位置,通道方式这些信息由通道控制;每个DMA控制器对应一台设备与内存传送数据,一个通道可以控制多台设备和内存的数据交换

1.3 I/O软件层次结构

在这里插入图片描述

(1)用户层I/O软件

实现与用户交互的接口,用户直接调用库函数对设备进行操作

(2)设备独立性软件

实现用户程序与设备驱动器的统一接口,设备命令,设备的保护及设备的分配与释放等,同时为设备管理和数据传送提供必要的存储空间

设备独立性也称设备无关性,应用程序独立于具体使用的物理设备,引入了逻辑设备和物理设备的概念

使用逻辑设备名的优点:增加设备分配的灵活性;易于实现I/O重定向,指I/O操作的设备可以更换,不必改变应用程序

设备独立性软件的主要功能:执行所有设备的公有操作;向用户层或文件层提高统一接口

(3)设备驱动程序

与硬件直接相关,负责具体实现系统对设备发出的操作指令,驱动I/O设备工作的驱动程序

(4)中断处理程序

用于保存被中断进程的CPU环境,转入相应的中断处理程序进行处理,处理完毕再恢复被中断进程的线程后,返回到被中断的进程

1.4 应用程序I/O接口

I/O系统与高层之间的接口,根据设备类型不同,进一步分为若干接口

(1)字符设备接口

get:从缓冲区获取字符

put:将字符输出到缓冲区

in-control:提供一种通用的指令处理类型繁多的字符设备

还需要提供打开和关闭操作,实现互斥共享

(2)块设备接口

隐藏了磁盘的二维接口,变为一种线性徐磊

将抽象命令映射为低层操作

内存映射接口通过内存的字节数组来访问磁盘,而不提供读写磁盘操作

(3)网络设备接口

提供相应的网络软件和网络通信接口

通常为网络套接字接口

(4)阻塞/非阻塞I/O

系统的I/O接口还设计两种模式:阻塞和非阻塞

阻塞:进程调用I/O操作,进程就被阻塞,需要等待I/O操作完成,进程才唤醒继续执行

非阻塞:不阻塞进程,I/O调用返回一个错误返回值,轮询方式来查询I/O操作是否完成

大多数系统是阻塞I/O

2 设备独立性软件

2.1 高速缓冲与缓冲区

磁盘高速缓存

提高磁盘的I/O速度,指利用内存中的存储空间来暂存从磁盘中读出的一系列盘块中的信息,因此磁盘高速缓存逻辑上属于磁盘,物理上则是驻留在内存中的盘块

高速缓存在内存中的两种形式:在内存中开辟一个单独的空间作为高速缓存,大小固定;把未利用的内存空间作为一个缓冲池,供请求分页系统和磁盘I/O时共享

缓冲区

设备管理子系统引入缓冲区的目的:

(1)缓和CPU和I/O设备间速度不匹配的矛盾

(2)减少对CPU的中断频率,放宽对CPU中断响应时间的限制

(3)解决基本数据单元大小(即数据粒度)不匹配的问题

(4)提高CPU和I/O设备之间的并行性

实现方法:

(1)采用硬件缓冲器,成本高

(2)采用内存中的缓冲区

缓冲技术的分类:

(1)单缓冲

在内存中设置一个缓冲区

假定从磁盘把一块数据输入到缓冲区的时间为T,操作洗将缓冲区的数据传送到用户区的时间为M,CPU对数据的处理时间为C

当T>C,一个数据传送工程耗时M+T

T<C,一个数据传送过程耗时M+C

所以单缓冲的每块数据处理用时为max(C,T)+M

在这里插入图片描述

(2)双缓冲

先装填到缓冲区1,满了才装填到缓冲区2

假设工作区空,一个缓冲区满,一个空

若T<C+M,一个数据传送过程耗时M+C

若T>C+M,一个数据传送过程耗时T

所以双缓冲区处理一块数据的用时为max(C+M,T)

在这里插入图片描述

在这里插入图片描述

若只有单缓冲,则任意时刻都只能实现单方面的数据传送

(3)循环缓冲

包含多个大小相等的缓冲区,有一个链接指针指向下一个缓冲区,最后一个缓冲区指针指向第一个缓冲区,构成一个环形

用于输入输出,还需要两个指针in,out。in指向可以输入数据的第一个空缓冲区,out指向可以提取数据的第一个满缓冲区

(4)缓冲池

多个系统公用的缓冲区组成,按使用状况分为:空缓冲队列,装满输入数据的缓冲队列,装满输出数据的缓冲队列

还有:用于收容输入数据的工作缓冲区,提取输入数据的工作缓冲区,收容输出数据的工作缓冲区,提取输出数据的工作缓冲区

在这里插入图片描述

在这里插入图片描述

2.2 设备分配和回收

设备分配是指根据用户的I/O请求分配所需的设备。设备的使用方式:

(1)独占式使用设备

(2)分时式共享使用设备

(3)以SPOOLing方式使用外部设备:实现了虚拟设备功能,可以将设备同时分配给多个进程,实质上实现了对设备的IO操作的批处理

设备分配的数据结构

设备控制表DCT:一个表就表征一个设备,表项就是设备的属性;请求设备没有得到满足的进程,其PCB按某种策略排成一个设备请求队列,设备队列队首指针指向该请求队列队首PCB

在这里插入图片描述

控制器控制表COCT:有一个表项存放指向相应通道控制表CHCT的指针,一个通道可以为多个设备控制器服务

通道控制表CHCT:有一个指针指向CHCT提供服务的设备控制器信息的表

系统设备表SDT:整个系统只有一张

在这里插入图片描述

设备分配策略

(1)设备分配原则:应根据涉笔特性,用户要求和系统配置情况

(2)设备分配方式:

静态分配:主要对独占设备的分配,在用户作业开始执行前,由系统一次性分配该作业的全部设备,不会死锁但效率低

动态分配:进程执行过程中根据执行需要进行,提高效率,但是可能造成死锁

(3)设备分配算法:常见的有先请求先分配,优先级高者优先等

设备分配的安全性

(1)安全分配方式:进程发出I/O请求后便进入阻塞态,直到I/O完成才唤醒,不会死锁,但是CPU和I/O设备是串行工作

(2)不安全分配方式:进程发出I/O请求继续工作,甚至发出多个请求,请求的设备被另一进程占用才进入阻塞态,优点是一个进程可同时操作多个设备,使进程推进迅速,缺点是可能死锁

逻辑设备名到物理设备名的映射

系统中的逻辑设备表LUT包括逻辑设备名,物理设备名和设备驱动程序入口地址;当进程用逻辑设备名请求分配设备,系统为他分配一台相应的物理设备,并在LUT中建立一个表目,当以后进程再利用该逻辑设备名请求I/O操作时,系统通过查找LUT来寻找对应的物理设备和驱动程序

LUT设置方式:

(1)整个系统一张,LUT不允许具有相同的逻辑设备名,主要适用于单用户系统

(2)每个用户一张LUT,为该用户建立一个进程,建立一个LUT也放进进程的PCB中

2.3 SPOOLing技术(假脱机技术)

缓和CPU和I/O设备速度的矛盾,引入脱机输入输出技术,是一项将独占设备改造成共享设备的技术,利用专门的外围控制机,将低速I/O设备上的数据传送到高速磁盘上

(1)输入井和输出井

在磁盘上开辟两个存储区域,输入井模拟脱机输入时的键盘,用于收容I/O设备输入的数据,输出井模拟脱机输出时的磁盘,用于收容用户程序的输出数据

一个进程的输入输出数据保存为一个文件,所有进程的数据文件链接成一个输入输出队列

(2)输入缓冲区和输出缓冲区

输入缓冲区暂存由输入设备送来的数据,再传送到输入井

输出缓冲区用于暂存从输出井送来的数据,再传送到输出设备

(3)输入进程和输出进程

用于模拟脱机输入输出时的外围控制机

CPU需要输入数据时,直接从输入井读入内存;输出数据先从内存送到输出井,等输出设备空闲再将输出井中的数据经过输出缓冲区送到输出设备

共享打印机就是SPOOLing技术的实例

假脱机管理进程完成的任务:

(1)在磁盘缓冲区中为之申请一个空闲盘块,并将要打印的数据送入其中暂存

(2)为用户进程申请一张空白的用户请求打印表,并将用户的打印要求填入其中,再将该表挂到假脱机文件队列上

SPOOLing系统的特点:提高了I/O速度;将独占设备改造为共享设备(实际上没有为任何进程分配设备);实现了虚拟设备功能(每个进程认为自己独占设备)

在这里插入图片描述

3 磁盘和固态硬盘

http://t.csdn.cn/WPMu8

磁盘地址用“柱面号-盘面号-扇区号”表示

磁头能否移动:固定头磁盘,活动头磁盘

磁盘能否更换:固定盘磁盘,可换盘磁盘

在这里插入图片描述

3.1 磁盘的管理

磁盘初始化

低级格式化(物理格式化):把磁盘划分扇区,为每个扇区使用特殊的数据结构,填充磁盘

分区

系统还要将自己的数据结构记录到磁盘上

第一步:将磁盘分为由一个或多个柱面组成的分区(即c盘等形式的划分),每个分区的起始扇区和大小都记录在磁盘主引导记录的分区表中

第二步:对物理分区进行逻辑格式化,即创建文件系统,初始文件系统数据结构存储到磁盘上,包括空闲空间和已分配的空间以及一个初始为空的目录

为提高效率,系统把多个相邻的扇区组合在一起,形成一簇(Linux称为块),一簇只能放一个文件,文件占用的空间只能是簇的整数倍

引导块

计算机启动时需要运行一个初始化程序(自举程序),它初始化CPU,寄存器,设备控制器和内存等;接着启动操作系统;所以自举程序要找到磁盘上的操作系统内核,加载到内存,并转到起始地址开始运行

自举程序通常存放在ROM中,而ROM中又只保留很小的自举装入程序,将完整功能的引导程序保存在磁盘的启动块,具有启动分区的磁盘称为启动磁盘或系统磁盘

即顺序是:

ROM的自举装入程序—>磁盘的启动块—>操作系统

坏块

简单磁盘:可手动处理,在FAT表上标明,程序不会使用

复杂磁盘:控制器维护坏块列表,在出厂低级格式化就已经初始化,在使用过程中不断更新;还会保留一些块最为备用,控制器可以采用备用块来代替坏块,这种方案称为扇区备用

3.2 磁盘调度算法

一次磁盘读写操作由寻找时间,旋转延迟时间和传输时间决定

(1)寻找时间Ts

设有n条磁道,m为与磁盘驱动器速度有关的常数,约0.2ms,磁臂的启动时间s约为2ms

Ts=m*n+s=0.2*n+2

(2)旋转延迟时间Tr

磁头定位到磁道的扇区所需的时间,磁盘的旋转速度为r

Tr= 1 2 r \dfrac{1}{2r} 2r1

(3)传输时间Tt

磁盘读出或写入数据经历的时间,取决于每次读写的字节数b和磁盘的旋转速度,N是一个磁道上的字节数

Tt= b r N \dfrac{b}{rN} rNb

寻道时间与磁盘调度算法有关,而延迟时间和传输时间都与磁盘旋转速度有关

常见的磁盘调度算法

(1)先来先服务FCFS算法

最简单的算法,具有公平性,但是大量进程时性能较差

(2)最短寻找时间优先算法SSTF

选择与当前磁头所在磁道距离最近的磁道,但是会产生饥饿现象

(3)扫描算法SCAN/电梯调度算法

在磁头当前移动方向上选择与当前磁头所在磁道距离最近的请求作为下一次服务的对象,即规定了磁头运动的方向,且必须走到方向的尽头才能调换方向

在这里插入图片描述

(4)循环扫描算法C-SCAN

在扫描算法的基础上规定磁头单向移动来提供服务,回返时直接快速移动至起始端而不服务任何请求

避免了SCAN算法偏向处理接近最里或最外的磁道的访问请求

在这里插入图片描述

(5)LOOK调度和CLOOK调度

SCAN和C-SCAN必须遵循从盘面的一端到另一端

还可以改进为磁头移动只需要到达最远端的一个请求即可返回,不需要到达磁盘端点

在这里插入图片描述

在这里插入图片描述

除了减少寻找时间,减少延迟时间也是提高磁盘传输效率的重要因素,可以对盘面扇区进行交替编号,对磁盘片组中的不同盘面错位命名

因为磁头读写一个物理块后需要短暂的处理时间才能开始读写下一块

所以盘面上按扇区交替编号连续存放,则连续读写多条记录时能减少磁头的延迟时间;同柱面不同盘面的扇区若能错位编号,连续读写相邻两个盘面的逻辑记录时也能减少磁头延迟时间

在这里插入图片描述

寻找时间和延迟时间是能减少的,但是传输时间无法改变

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL基础篇第7章(单行函数)

文章目录 1、函数的理解1.1 什么是函数1.2 不同DBMS函数的差异1.3 MySQL的内置函数分类 2、数值函数2.1 基本函数2.2 角度与弧度互转函数2.3 三角函数2.4 指数和对数2.5 进制间的转换 3、字符串函数4、日期和时间函数4.1 获取日期、时间4.2 日期与时间戳的转换4.3 获取月份、星…

【Vue2.0源码学习】模板编译篇-模板解析阶段(整体运行流程)

文章目录 1. 前言2. 什么是模板编译3. 整体渲染流程4. 模板编译内部流程4.1 抽象语法树AST4.2 具体流程 5. 小总结6. 整体流程7. 回到源码8. 总结 1. 前言 在前几篇文章中&#xff0c;我们介绍了Vue中的虚拟DOM以及虚拟DOM的patch(DOM-Diff)过程&#xff0c;而虚拟DOM存在的必…

Matrix Breakout:2 Morpheus(靶机详细渗透测试过程记录)

nmap -sS -p 80 -oG - 192.168.192.0/24 | grep open 探测网段下开放80端口的主机。 扫描目录 发现该界面 存储型xss 发现file参数貌似可以控制读取文件目标。 尝试利用伪协议读取&#xff0c;文件内容。 解码&#xff0c;分析源代码&#xff1a; <?php$file"graff…

Python基础综合案例-数据可视化(柱状图)

今天给大家带来的是Python综合实战开发的数据可视化操作 通过python实现对数据的分析、可视化 数据来源:线上公布数据&#xff0c;需要可私信 前期准备工作&#xff1a;Python可视化准备工作 前期模块安装等前期基础的准备工作大家可以看我之前的文章讲解&#xff0c;有问题可…

双向复制粘贴半监督医学图像分割

文章目录 Bidirectional Copy-Paste for Semi-Supervised Medical Image Segmentation摘要本文方法实验结果 Bidirectional Copy-Paste for Semi-Supervised Medical Image Segmentation 摘要 在半监督医学图像分割中&#xff0c;存在标记数据与未标记数据分布不匹配的问题。…

Qt/C++音视频开发46-音视频同步保存到MP4

一、前言 用ffmpeg单独做视频保存不难&#xff0c;单独做音频保存也不难&#xff0c;难的是音视频同步保存到MP4中&#xff0c;重点是音视频要同步&#xff0c;其实这也不难&#xff0c;只要播放那边音视频同步后的数据&#xff0c;写入到文件即可。最难的是在播放过程中不断随…

使用 Docker 在 Windows、Mac 和 Linux 系统轻松部署 PostgreSQL 数据库

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

数据库基础知识

在介绍数据库基础知识前先推荐大伙关注下博主开的拼多多小店:NICE时尚潮流男装。客服找我输入CSDN送10元无门槛抵用券&#xff0c;有任何技术问题也可以来店里找我&#xff0c;必回&#xff01; 店铺链接 https://mobile.yangkeduo.com/mall_page.html?_x_org2&refer_sh…

Redis实战案例15-基于Redis实现分布式锁

1. 初级版本 注意自动拆箱时的空指针异常 public class SimpleRedisLock implements ILock{private StringRedisTemplate stringRedisTemplate;private String lockName;private static final String KEY_PREFIX "lock:";public SimpleRedisLock(StringRedisTemplat…

设计模式——代理模式

代理模式&#xff08;静态代理&#xff09; 普通代理模式的核心就是&#xff0c;被代理对象和代理对象&#xff08;共属一个接口&#xff09;&#xff0c;被代理对象要执行的操作由代理对象完成&#xff08;此时被代理者需要手动new出来&#xff0c;再传递给代理者&#xff09…

浅谈关于智慧校园安全用电监测系统的设计

0引言 人生人身安全是大家关注的话题&#xff0c;2019年12月中国消防统计近五年发生在全国学生宿舍的火灾2314起&#xff08;中国消防2019.12.应急管理部消防救援局官方微博&#xff09;&#xff0c;违规电器是引发火灾的主因。如果在各寝室安装智能用电监测器实时监督线路参数…

IntelliJ IDEA安装教程

一、下载安装包 首先进入IDEA官网下载2021.2.1版本的安装包&#xff0c;不要问我为什么不下最新版&#xff0c;后面我会说。 二、安装与配置 打开安装包&#xff0c;安装完成后选择Evaluate for free&#xff08;免费试用&#xff09;&#xff0c;创建一个项目&#xff0c;进入…