首页 > 其他分享 >408---OS三轮复习---输入输出管理

408---OS三轮复习---输入输出管理

时间:2023-11-10 10:26:59浏览次数:34  
标签:通道 驱动程序 数据 --- 缓冲区 磁盘 408 OS 设备

常考知识点

I/O管理基础 ⭐⭐

设备独立性软件 ⭐⭐⭐⭐

磁盘 ⭐⭐⭐⭐⭐⭐⭐

固态硬盘 ⭐⭐⭐⭐

I/O管理基础

设备分类

1、块设备

信息交换以数据块为单位,传输速率较高,可寻址

2、字符设备

以字符为单位,传输速率低、不可寻址

I/O接口

机组上学了,这里仅作为补充

1、I/O接口又叫设备控制器

image-20231102180342978

2、数据线与数据缓冲寄存器和状态/控制寄存器两个寄存器相连!!!

为什么状态/控制寄存器兼具两个功能呢,因为一个是从CPU送来的(控制信息),一个是设备产生的(命令信息),对于CPU来说一个写,一个读

3、I/O逻辑

用于实现对设备的控制。

它通过一组控制线与CPU交互,对从CPU收到的I/O命令进行译码。

CPU启动设备时,将启动命令发送给控制器,同时通过地址线把地址发送给控制器,由控制器的I/O逻辑对地址进行译码,并相应地对所选设备进行控制

I/O软件层次结构

image-20231104074832774

  1. 用户层I/O软件

    1. 实现与用户交互的接口
    2. 用户通过统一的接口发送命令
    3. read 系统调用
  2. 设备独立性软件

    1. 统一接口,对各种设备的读操作,在应用程序中都使用 read;而对各种设备的写操作,也都使用 write
    2. 屏蔽设备之间信息交换单位的大小和传输速率的差异
    3. 逻辑地址映射到物理地址,比如精确到第几块的第几字节

    img

    1. 解析read命令
  3. 设备驱动程序

    1. 负责执⾏OS发出的I/O命令,针对不同的硬件将命令解析为指令
    2. 若更换物理设备,只需要修改设备驱动程序,不需要修改应⽤程序
    3. 将解析好的read命令转换为指令
    4. 如计算磁盘的柱⾯号,磁头号,扇区号,把物理地址精确到柱面、磁道号、扇区号
    5. 由厂家提供
    6. 一类I/O设备,一种设备驱动程序,若更换物理设备,只需要修改设备驱动程序,不需要修改应⽤程序
  4. 中断处理程序

    1. 中断正在运⾏的进程,转⽽执⾏⽤户命令
      如中断当前进程,执⾏相关指令

设备独立性软件

磁盘高速缓存

磁盘高速缓存技术不同于通常意义下的介于CPU与内存之间的小容量高速存储器中,而是利用内存暂存磁盘中的数据

磁盘高速缓存逻辑上属于磁盘,物理上属于驻留在内存中的盘块

缓冲区

缓冲区主要就是解决输入/输出速度比CPU处理的速度慢而造成数据的挤压矛盾

单缓冲

image-20231104091922163

在主存中设置一个缓冲区。当设备和处理机交换数据时,先将数据写入缓冲区,然后需要数据的设备或处理机从缓冲区取走数据,在缓冲区写入或取出的过程中,另一方需等待。

双缓冲

image-20231104091958455

I/O设备输入数据时先装填到缓冲区1,在缓冲区1填满后才开始装填缓冲区2,与此同时处理机可以从缓冲区1中取出数据送入用户进程,当缓冲区1中的数据处理完后,若缓冲区2已填满,则处理机又从缓冲区2中取出数据送入用户进程,而I/O设备又可以装填缓冲区1。注意,必须等缓冲区2充满才能让处理机从缓冲区2取出数据。
双缓冲机制提高了处理机和输入设备的并行程度。

循环缓冲

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

img

队列的思想,本质上是多缓冲

缓冲池

img

由多个系统公用的缓冲区组成,缓冲区按其使用状况可以形成三个队列:空缓冲队列、装满输入数据的缓冲队列(输入队列)和装满输出数据的缓冲队列(输出队列)

还应具有4种缓冲区:用于收容输入数据的工作缓冲区、用于提取输入数据的工作缓冲区、用于收容输出数据的工作缓冲区及用于提取输出数据的工作缓冲区

运行过程:

img

  1. 输入进程输入 => 从空缓冲队列队首摘下空缓冲区,作为收容输入的工作缓冲区,输入数据后挂到输入队列

  2. 计算进程输入数据=> 从输入队列获取一个缓冲区作为提取输入缓冲区,用完之后挂到空缓冲队列

    ...

感觉与循环缓冲的区别就是,引入了池的概念,用多个队列管理缓冲区

对比

img

设备的分配与回收

设备的分配是根据用户的I/O请求分配设备

设备分配的数据结构

image-20231104101750511

这里的控制器指的就是设备控制器,即I/O接口

  1. 设备控制表 (DCT)

    1. 一个设备控制表就代表一个设备,设备控制表的表项代表了设备的各个属性

    image-20231104095556378

  2. 控制器控制表 (COCT)

    1. 系统为每一个控制器都设置了一张用于记录本控制器情况的控制器控制表
    2. 一个设备控制器可以对应多个设备

    image-20231104100430693

  3. 通道控制表 (CHCT)

    1. 设备控制器控制设备与内存交换数据,而设备控制器又需要通道来提供服务,因此每个COCH都有一个指向CHCT的指针表项,由于一个通道可以为多个设备控制器服务,因此CHCT中必有一个指针指向一个表,这张表指明了CHCT提供服务的那几个设备控制器
  4. 系统控制表 (SDT)

    1. 整个系统只有一张SDT,它记录已连接到系统中的所有物理设备的情况,每个物理设备占一个表目。
专有名词的英文

DCT : device control table

COCT : Controller control table

CHCT : Channel control table

SDT : System control table

设备的分配策略
  1. 设备分配方式---静态分配与动态分配
    1. 静态分配主要用于对独占设备的分配,它在用户作业开始执行前,由系统一次性分配该作业所要求的全部设备、控制器。一旦分配,这些设备、控制器就一直为该作业所占用,直到该作业被撤销。静态分配方式不会出现死锁,但设备的使用效率低。
    2. 动态分配在进程执行过程中根据执行需要进行。当进程需要设备时,通过系统调用命令向系统提出设备请求,由系统按某种策略给进程分配所需要的设备、控制器,一旦用完,便立即释放。这种方式有利于提高设备利用率,但若分配算法使用不当,则有可能造成进程死锁。
  2. 设备分配算法---先请求先分配、优先级高者优先
    1. 对于独占设备,既可以采用动态分配方式,又可以采用静态分配方式,但往往采用静态分配方式
    2. 共享设备可被多个进程所共享,一般采用动态分配方式,但在每个I/O传输的单位时间内只被一个进程所占有,通常采用先请求先分配和优先级高者优先的分配算法。
设备分配的安全性

设备分配的安全性是指设备分配中应防止发生进程死锁。

  1. 安全分配方式。

    每当进程发出I/O请求后便进入阻塞态,直到其I/O操作完成时才被唤醒。这样,一旦进程已经获得某种设备后便阻塞,不能再请求任何资源,而在它阻塞时也不保持任何资源。其优点是设备分配安全,缺点是CPU和I/O设备是串行工作的

  2. 不安全分配方式。进程在发出I/O请求后仍继续运行,需要时又发出第二个、第三个I/O请求等。仅当进程所请求的设备已被另一进程占用时,才进入阻塞态。优点是一个进程可同时操作多个设备,使进程推进迅速;缺点是有可能造成死锁。

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

在系统中设置一张逻辑设备表(Logical Unit Table,LUT),用于将逻辑设备名映射为物理设备名

LUT表项包括: 逻辑设备名、物理设备名和设备驱动程序入口地址

在系统中可采取两种方式设置逻辑设备表:

  1. 在整个系统中只设置一张LUT。这样,所有进程的设备分配情况都记录在同一张LUT中,因此不允许LUT中具有相同的逻辑设备名,主要适用于单用户系统。
  2. 为每个用户设置一张LUT。每当用户登录时,系统便为该用户建立一个进程,同时也为之建立一张LUT,并将该表放入进程的PCB中。

SPOOLing假脱机技术

1、为了缓和CPU与I/O速度不协调的问题

2、它将独占设备改造成共享设备

首先介绍什么是脱机:

脱机技术

img

脱机处理时,外部设备上的数据需要一个相当长的等待时间后才被进行处理。当外部设备上有数据输入时,主机并不予处理,只是将外部设备的数据存放到缓冲区中。一旦缓冲区满了,或是等待的时间到了,主机才进行加工处理。

对输出的操作也是这样,一旦计算机要把处理结果输出,它只是把输出结果送入缓冲区中,然后向外部设备慢慢地进行输出,而主机又去进行其它的加工处理,当缓冲区中的数据全部输出完毕,主机再把下一批的数据存入缓冲区中。

脱机技术需要外围机,而SPOOLing用软件模拟外围机

SPOOLing系统对脱机技术的模拟

img

输入进程模拟脱机输入时的外围机
输入井模拟脱机输入时的磁带,用于收容I/O设备输入的数据,输出进模拟脱机输出时的磁带,用于收容用户进程输出的数据

用户要求的数据从输入设备经过输入缓冲区送到输入井,当CPU需要输入设备时,直接从输入井读入内存。。
用户要求输出的数据先从内存送入输出井,待输出设备空闲,再将输入进中的数据经过缓冲区送到输出设备

SPOOLing系统的优特点

1、加快了作业执⾏的速度,提⾼了IO速度,将对低速IO设备执⾏的IO操作演变为对磁盘缓冲区中数据的存取
2、使独占设备变为共享设备,且没有为任何进程分配设备
3、提⾼了独占设备的利⽤率,缓和了CPU和低速IO设备之间的速度不匹配的⽭盾
4、实现了虚拟设备功能,对每个进程⽽⾔,都认为⾃⼰独占了⼀个设备
5、以空间换时间,需要磁盘空间(输⼊输出井)和内存空间(输⼊输出缓冲区)

共享打印机的实现就是SPOOLing技术
实现过程

img

考前记一记、喝前摇一摇

设备驱动程序接口

如果每个设备驱动程序与操作系统的接口都不同,那么每次出现一个新设备时,都必须为此修改操作系统。因此,要求每个设备驱动程序与操作系统之间都有着相同或相近的接口。这样会使得添加一个新设备驱动程序变得很容易,同时也便于开发人员编制设备驱动程序。

对于每种设备类型,例如磁盘,操作系统都要定义一组驱动程序必须支持的函数。对磁盘而言,这些函数自然包含读、写、格式化等。驱动程序中通常包含一张表格,这张表格具有针对这些函数指向驱动程序自身的指针。装载驱动程序时,操作系统记录这个函数指针表的地址,所以当操作系统需要调用一个函数时,它可以通过这张表格发出间接调用。这个函数指针表定义了驱动程序与操作系统其余部分之间的接口。给定类型的所有设备都必须服从这一要求。

与设备无关的软件还要负责将符号化的设备名映射到适当的驱动程序上。例如,在UNIX中,设备名/dev/disk0唯一确定了一个特殊文件的i结点,这个i结点包含了主设备号(用于定位相应的驱动程序)和次设备号(用来确定要读写的具体设备)。

磁盘

img

img

磁盘地址为: 柱面号(磁道号)·盘面号·扇区号

磁盘管理

物理格式化(低级格式化)

1、划分扇区、为每个扇区使用特殊数据结构,包括检验码

2、低级格式化的目的是将磁盘表面划分为基本元素 磁道:它们是写在盘片两侧的同心区域;扇区:轨道被分成几个称为扇区的部分;柱面:位于不同盘片的同一磁道上的所有数据。

分区

第一步: 将磁盘划分为由一个或多个柱面的分区,即我们舒徐的C盘、D盘等形式的分区,每个分区的起始扇区和大小都记录在磁盘主引导记录的分区表中

第二步: 逻辑格式化 (创建文件系统)

1、将初始的文件系统数据结构存储到磁盘上,这些数据结构包括空闲和已分配的空间以及一个初始为空的目录;建立文件系统根目录、对保存空闲磁盘块信息的数据结构进行初始化

2、逻辑格式化目的:尽管硬盘驱动器非常小,但它们仍然包含数百万位,因此需要进行组织,以便定位信息。逻辑格式化在硬盘上创建一个文件系统,允许操作系统使用硬盘空间来存储和访问文件。

引导块

就是操作系统引导过程中,开头的自举程序

image-20231104114055313

坏块

image-20231104114207023

磁盘调度算法

一次磁盘读写操作的时间由寻找(寻道)时间、旋转延迟时间和传输时间决定。

寻道时间耗时最多

image-20231104114244448

  1. 先来先服务FCFS

    image-20231104114452555

    算法性能上接近随机调度

  2. 最短寻找时间优先

    1. SSTF算法选择调度处理的磁道是与当前磁头所在磁道距离最近的磁道,以便使每次的寻找时间最短。当然,总是选择最小寻找时间并不能保证平均寻找时间最小,但能提供比FCFS算法更好的性能。这种算法会产生“饥饿”现象。
    2. image-20231104114647447
  3. SCAN算法(电梯调度算法)

    1. 局部性不好,对最近扫描过的区域不公平,不利于远离一端的请求
    2. image-20231104114714266
  4. C-SCAN算法(循环扫描算法)

    1. image-20231104114736078
  5. LOOK调度算法与C-LOOK调度算法

    1. 采用SCAN算法和C-SCAN算法时,磁头总是严格地遵循从盘面的一端到另一端,显然,在实际使用时还可以改进,即磁头移动只需要到达最远端的一个请求即可返回,不需要到达磁盘端点
    2. 注意,若无特别说明,也可以默认SCAN算法和C-SCAN算法为LOOK和C-LOOK调度
    3. image-20231104114940331
    4. image-20231104114908366

比较

image-20231104114429216

缩短旋转延迟时间的策略---交替编号、错位命名

扇区间交替编号:

image-20231104115702192

盘面间错位命名:

img

磁盘是连续自转设备,磁头读/写一个物理块后,需要经过短暂的处理时间才能开始读/写下一块。假设逻辑记录数据连续存放在磁盘空间中,若在盘面上按扇区交替编号连续存放,则连续读/写多条记录时能减少磁头的延迟时间;同柱面不同盘面的扇区若能错位编号,连续读/写相邻两个盘面的逻辑记录时也能减少磁头延迟时间

固态硬盘SSD

特性

1、基于闪存技术,与U盘没什么区别,只是容量更大

img

2、一个SSD由一个或多个闪存芯片和闪存翻译层组成

闪存翻译层的功能是 逻辑地址 => 物理地址的变换

3、SSD的页相当于磁盘的扇区,块相当于磁盘的磁道

4、随机写很慢,写操作试图修改包含已有数据的页P,那么这个块中所有含有用数据的页都必须被复制到一个新(擦除过的)块中,然后才能进行对页P的写操作。

5、缺点是容易损耗,随机写比较慢

磨损均衡

为了弥补SSD的寿命缺陷,引入了磨损均衡。SSD磨损均衡技术大致分为两种:

  1. 动态磨损均衡

    写入数据时,自动选择较新的闪存块。老的闪存块先歇一歇。

  2. 静态磨损均衡

    这种技术更为先进,就算没有数据写入,SSD也会监测并自动进行数据分配,让老的闪存块承担无须写数据的存储任务,同时让较新的闪存块腾出空间,平常的读写操作在较新的闪存块中进行。如此一来,各闪存块的寿命损耗就都差不多。

错题合集

错题5.1

01

image-20231104084621928

B

一般I/O设备就算共享设备

所以磁盘是共享设备,但是它并不能随机访问???

image-20231104085433503

B

1、字节多路通道

字节多路通道是一种简单的共享通道,主要用于连接控制多台低速外设,以字节交叉方式传送数据。例如,某个外设的数据传输率只有1000B/s,即传送1个字节的时间间隔是1ms,而通道从设备接收或发送一个字节只需要几百ns,因此,通道在传送两个字节之间有很多空闲时间,字节多路通道正是利用这个空闲时间为其他设备提供服务。每个设备分时占用一个很短的时间片,不同的设备在各自分得的时间片内与通道建立连接,实现数据的传输。

2、选择通道

选择通道又称高速通道,在物理上它可以连接多个设备,但是这些设备不能同时工作,在某一个时间段内通道只能选择一个设备进行工作。选择通道很像一个单道程序的处理器,在一段时间内只允许执行一个设备的通道程序,只有当这个设备的通道程序全部执行完毕后,才能执行其他设备的通道程序。

选择通道主要用于连接高速外围设备,如磁盘、磁带等,信息以成组方式高速传输。由于数据传输率很高,如达到1.5MB/s,通道在传送两个字节之间只有很少的空闲时间,所以,在数据传送期间只为一台设备服务是合理的。但是,这类设备的寻址等辅助操作的时间往往很长,在这样长的时间里通道一直处于等待状态,因此,整个通道的利用率还不是很高。

3、数组多路通道

连接控制多个高速外设并以成组交叉方式传送数据的通道称为数组多路通道。数组多路通道是对选择通道的一种改进,当某个设备进行数据传送时,通道只为该设备提供服务;当设备在执行寻址等控制性动作时,通道暂时断开与该设备的连接,挂起该设备的通道程序,而转去为其他设备提供服务,即执行其他设备的通道程序。所以,数组多路通道很像一个多道程序的处理器。

18.

image-20231104085954562

C

一类设备只需要一个设备驱动程序

错题5.2

03

image-20231104105323255

A

缓冲池是系统的共用资源,可供多个进程共享

09

image-20231104105803064

D

image-20231104105813898

错题3.3

02.

image-20231104120841592

磁盘与光盘是直接存储器,直接存取存储器既不像RAM那样随机地访问任何一个存储单元,又不像顺序存取存储器那样完全按顺序存取,而是介于两者之间。存取信息时通常先寻找整个存储器中的某个小区域(如磁盘上的磁道),再在小区域内顺序查找。

这里就是默认了磁盘可以随机访问

磁带是顺序存储器,顺序存取存储器的内容只能按某种顺序存取,存取时间的长短与信息在存储体上的物理位置有关,其特点是存取速度慢。

06

image-20231104123044878

操作系统的引导程序位于磁盘活动分区的引导扇区,因此必然产生在分区之后。

分区是将磁盘分为由一个或多个柱面组成的分区(即C盘、D盘等形式),每个分区的起始扇区和大小都记录在磁盘主引导记录的分区表中。

而对于高级格式化(创建文件系统),操作系统将初始的文件系统数据结构存储到磁盘上

标签:通道,驱动程序,数据,---,缓冲区,磁盘,408,OS,设备
From: https://www.cnblogs.com/lordtianqiyi/p/17823475.html

相关文章

  • 结构型模式-享元模式
    1什么是享元模式享元模式(FlyweightPattern)是一种以共享对象来减少内存使用和提高性能的设计模式。在享元模式中,通过共享尽可能多的相似对象来减少系统中对象的数量。这样可以节省内存和减少对象的创建和销毁所带来的开销。享元模式的核心思想是将对象分为两个部分:内部状态(Intr......
  • python 递归上传文件到阿里云oss
    python递归上传文件到阿里云ossimportosimportoss2importjson#阿里云OSS访问信息access_key_id='xxxxxxxxx'access_key_secret='xxxxxxxxxxxxx'endpoint='xxxxxxxxxxxxx'bucket_name='bucketName'#本地目录路径local_directory......
  • 【Mquant】9:python批量铭刻erc-20铭文
    1.ETHS铭文ETHS铭文是以太坊铭文协议Ethscriptions的代币名称。Ethscriptions是一个基于以太坊的铭文协议,允许用户在以太坊主网上刻入不同类型的文件,并将其记录到区块中。ETHS作为Ethscriptions的第一个"概念币",引起了人们的关注和热议。以太坊铭文协议Ethscriptions的特点包......
  • Cmder - 想让你的windows下 cmd 和 SecureCRT 操作 Linux 一样帅吗
    想让你的windows下cmd和SecureCRT操作Linux一样帅的命令行显示吗。下载cmder绿色版,然后用我的配置文件,替换原来的文件启动就可以了配置文件下载:cmder配置下载另外加cmder添加到右击菜单中,到安装目录中,执行下面命令Cmder.exe/REGISTERALL将tail.exe复制到C:......
  • 界面控件DevExtreme图表和仪表(v23.1) - 新功能(Angular,React,Vue,jQuery)
    本文将为大家总结下DevExtreme在v23.1版本中发布的一些与图表和仪表盘相关的功能。DevExtreme拥有高性能的HTML5/JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NETCore,jQuery,Knockout等)构建交互式的Web应用程序。获取DevExtremev23.1正式版下载Dev......
  • mybatis-plus 根据当前时间,判断检索
    <iftest="timeStatus!=nullandtimeStatus.trim()!=''"><iftest="timeStatus==1"><![CDATA[ANDDATE_FORMAT(now(),'%Y-%m-%d%H:%i:%S')<DATE_FORMAT(start_date,'%Y-%m-%d......
  • 【scipy 基础】--线性代数
    SciPy的linalg模块是SciPy库中的一个子模块,它提供了许多用于线性代数运算的函数和工具,如矩阵求逆、特征值、行列式、线性方程组求解等。相比于NumPy的linalg模块,SciPy的linalg模块包含更多的高级功能,并且在处理一些特定的数值计算问题时,可能会表现出更好的性能。1.主要功能sci......
  • 天池AI练习生计划 - 第一期Pyhton入门与实践 正式上线!通关赢取双重礼品!
    天池AI练习生养成计划是为天池入门学习用户准备的训练营,用户通关后可获得学习奖励,从学习者蜕变为AI新星!轻松来闯关,即可领取双重礼品~实训培训证书:通关两个关卡即可领取阿里云定制鼠标:通关全部关卡即可领取活动地址:https://tianchi.aliyun.com/specials/promotion/trainee活......
  • 典型的 HTTP 会话-响应示例(请求资源不存在的网页响应)
    1HTTP/1.1404NotFound2Content-Type:text/html;charset=utf-83Content-Length:382174Connection:keep-alive5Cache-Control:no-cache,no-store,must-revalidate,max-age=06Content-Language:en-US7Date:Thu,06Dec201817:35:13GMT8Ex......
  • 汇编-MOV指令
      MOV指令将数据从源操作数复制到目的操作数。在它的基本格式中,第一个操作数是目的操作数,第二个操作数是源操作数:MOVdestination,source其中,目的操作数的内容会改变,而源操作数不会改变在几乎所有的汇编语言指令中,左边的操作数是目的操作数,而右边的操作数是源操作数。只......