• 【操作系统】第五章:设备管理


    设备管理

    5.1.1 IO设备的概念和分类

    什么是I/O设备

    将数据输入到计算机,或者可以接收计算机输出数据的外部设备

    image-20220823165143306

    image-20220823165236711

    I/O设备的分类–按使用特性分类

    image-20220823165619531

    I/O设备的分类–按传输速率分类

    image-20220823165658686

    I/O设备的分类–按信息交换的单位分类

    image-20220823165813147

    5.1.2 IO控制器

    IO设备的机械部件

    image-20220823170132611

    IO设备的电子部件

    CPU无法直接控制I/O设备的机械部件,因此I/O设备还要有一个电子部件作为CPU和I/O设备机械部件之间的"中介",用于实现CPU对设备的控制。

    这个电子部件就是I/O控制器,又称设备控制器。担当一个管家的角色。

    IO控制器的功能:

    1. 接收和识别CPU发出的命令(老板发话)
    2. 向CPU报告设备的状态(回答老板)
    3. 数据交换(交换资料)
    4. 地址识别

    image-20220913175242982

    IO控制器的组成

    image-20220913180306491

    image-20220913180504802

    image-20220913180629649

    5.1.3 IO控制方式

    程序直接控制方式

    操作流程:

    1. CPU向控制器发出读指令。设备启动。
    2. 轮询检查控制器的状态(一直循环检查,直到设备准备完成)
    3. 设备准备好后将数据传送给控制器,并且报告自身状态
    4. 控制器将输入的数据放到数据寄存器中,并将状态改为已就绪状态
    5. CPU发现状态寄存器变了之后开始从数据寄存器中读取数据放到CPU的寄存器中,再把CPU的寄存器中的数据放入内存中
    6. 如CPU还要继续读入数据,在发出下一条指令

    image-20220824160329585

    为什么将数据读入到CPU寄存器中还要放到内存中?

    以一个C语言程序为例,需要读入一个变量a,a创建在内存中,读入数据后还要将数据赋值给a。

    还可能是因为读入的数据接下来还要用。

    image-20220824160648981

    CPU干预的频率

    很频繁,在IO操作之前,完成之后需要CPU接入,并且在等待IO设备完成的过程中CPU需要不断地轮询检查

    数据传送地单位

    每次读/写一个字

    数据的流向

    读操作:IO设备->CPU(寄存器)->内存

    写操作:内存->CPU(寄存器)->IO设备

    每次读写都需要CPU的参与

    优点

    实现简单,在读/写指令之后,加上实现循环检查的一系列指令即可。

    缺点

    CPU和IO设备只能串行工作,CPU需要一直轮询检查,并且CPU长期处于忙等状态,资源利用率低。

    中断驱动方式

    如何解决忙等问题:让CPU不在一直轮询检查下去,IO设备完成之后在提醒CPU去读入,实现了并行。提高了资源利用率。

    image-20220824161337305

    image-20220824161408804

    缺点:每次都只能读入一个字的数据,效率依然很低。

    DMA方式

    解决每次只能读入一个字的问题,改成读入一个块,而且中间不需要经过CPU。

    image-20220824161500110

    image-20220824162059585

    image-20220824162157569

    缺点:每次只能读入一个数据块或连续的数据块,CPU还是需要发出多条指令。

    通道控制方式

    CPU只能每次发出一条指令读入一个数据块,可以将CPU要读入数据的通道程序告诉通道,让它来执行,等它执行完后在告诉我。

    一个通道可以控制多个IO控制器

    一个IO控制器可以控制多个IO设备

    image-20220824162423800

    image-20220824162606067

    总结

    image-20220824162638996

    5.1.4 IO软件层次结构

    从用户提出请求到得到应答之间所经历的部分。

    image-20220824172001202

    用户层软件

    image-20220913184415400

    设备独立性软件

    1. 向上层提供统一的调用接口(如read/write系统调用)
    2. 设备的保护
    3. 差错处理
    4. 设备的分配和回收
    5. 数据缓冲区管理
    6. 建立逻辑设计名到物理设备名的映射关系,根据设备类型选择调用相应的驱动程序。

    image-20220913185144106

    image-20220913185222546

    设备驱动程序

    image-20220913185254008

    image-20220913185319296

    image-20220913185355337

    image-20220913185424902

    image-20220913185655196

    中断处理程序

    image-20220913185802803

    image-20220913185837402

    image-20220913185912322

    5.2.2 缓冲区管理

    image-20220824175405406

    缓冲区的作用

    CPU读写速度块,IO设备读写速度慢。假如CPU写十个字节数据,每输出一个IO处理一个,但IO设备处理的非常慢,IO设备处理完后就会发出一个中断,让CPU去写下一个数据,这样产生了大量的中断,导致效率很低,资源利用率不高。

    所以引入了缓冲区,CPU把要输出的数据都放到缓冲区中,IO设备自己去处理内存中的缓冲区数据。这样就缓和了CPU和IO设备之间速度不匹配的矛盾。(比如菜鸟驿站,不在一个一个送到家中,而是让人自己去取)。也减少了对CPU的中断频率,放宽对CPU中断相应时间的限制。

    如果输出进程每次输出一块数据,但IO设备每次只输出一个字符,那就只能一个字符一个字符的输出,这样效率就太低了。

    提高了CPU和IO设备之间的并行性能。

    单缓冲

    image-20220824181723585

    双缓冲

    image-20220824182635509

    image-20220824182953763

    结论:处理一个数据块的平均耗时位Max(T,C+M)

    单/双缓冲在通信时的区别

    image-20220825100607099

    image-20220825100623097

    循环缓冲区

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

    in指针指向下一个可以冲入数据的空缓冲区

    out指针指向下一个可以取出数据的满缓冲区

    image-20220825100756477

    缓冲池

    缓冲池由系统中共用的缓冲区组成,这些缓冲区按使用状况可以分为:空缓冲队列、装满输入数据的缓冲队列(输入队列),装满输出数据的缓冲数列(输出队列)

    输入进程请求输入数据

    1. 将空缓冲队列的一个缓冲区拿出来放到收容输入的缓冲区中
    2. 数据充满之后放到输入队列的队尾上

    计算进程想要取得一块输入数据

    1. 将输入队列的队头加入到提取输入的缓冲区中
    2. 完成后将缓冲区加入到空缓冲区的队尾上

    image-20220825101758384

    5.2.3 设备的分配和回收

    设备分配要考虑的因素

    1. 设备的固有属性

    设备的固有属性可以分为三种:

    独占设备:一个时段只能分配给一个进程(入打印机)

    共享设备:可同时分配给多个进程使用(如磁盘),各进程往往时宏观上同时共享使用设备,而微观上交替使用

    虚拟设备:采用SPOOLing技术将独占设备改造成虚拟的共享设备,可同时分配给多个进程使用(共享打印机)

    1. 设备分配算法

    先来先服务,优先级高者优先,短任务优先

    1. 设备分配的安全性

    image-20220825133728746

    静态分配和动态分配

    image-20220825135439577

    设备管理中的数据结构

    image-20220825135617147

    5.2.4 假脱机技术

    什么是脱机技术

    脱机:脱离主机的控制进行的输入输出操作

    引入了脱机技术,缓解了CPU与慢速IO设备的速度矛盾,即使CPU在忙碌,也可以提前将数据输入到磁带,即使慢速的输出设备正在忙碌,也可以提前将数据输出到磁带。

    image-20220825104122572

    假脱机技术–输入井和输出井

    假脱机技术是用软件的方式模拟脱机技术

    输入井模拟脱机输入时的磁带,用于收容IO设备输入的数据

    输出井模拟脱机输出时的磁带,用于收容用户进程输出的数据

    image-20220825104900338

    假脱机技术–输入进程和输出进程

    这边能输入,那边能输出,两个进程可以同时进行。

    image-20220825105107721

    image-20220825105148954

    假脱机技术–输入/输出缓冲区

    image-20220825105236878

    共享打印机原理分析

    image-20220825110132588

    1. 在磁盘的输出井中为进程申请一个空闲缓冲区,并将要打印的数据送入其中
    2. 为用户进程申请一张空白的打印请求表,并将用户的打印请求填入表中,在将该表挂到假脱机文件队列上。
    3. 当打印机空闲时,输出进程会从文件队列的队头取出一张打印请求表,并根据表中的要求将要打印的数据从输出井传送到缓冲区,在输出到打印机进行打印。

    image-20220825110204800

    image-20220825110729849

    5.3.1 磁盘的结构

    磁盘、磁道、扇区

    磁盘的表面由一些磁性物质组成,可以用这些磁性物质来记录二进制数据。

    磁盘被分为一个个磁道,每个磁道存储的数据量相同。

    一个磁盘又会被分为各个扇区,每个扇区存储的数据量相同。

    image-20220913094412968

    如何在磁盘中读写数据

    image-20220913110205202

    磁盘的物理地址

    image-20220913111629837

    5.3.2 磁盘调度算法

    image-20220913213924718

    一次磁盘读/写操作需要的时间

    寻道时间:在读写数据前,将磁头移动到指定磁道所花的时间。

    延迟时间:通过旋转磁盘,使磁头定位到目标扇区所需要的时间。

    传输时间:从磁盘读出或向磁盘写入数据所经历的时间。

    image-20220913214728585

    image-20220913214859464

    先来先服务算法

    规则:根据进程请求访问磁盘的先后顺序进行服务。

    优点:公平

    缺点:如果有大量进程竞争使用磁盘,请求访问的磁道很坟山,则FCFS在性能上很差,寻道时间长。

    image-20220913214940257

    image-20220913215146372

    扫描算法

    image-20220913215328335

    LOOK调度算法

    image-20220913215402564

    循环扫描算法

    image-20220913215527789

    C-LOOK算法

    image-20220913215708479

    5.3.3 减少磁盘延迟时间的方法

    image-20220913220047102

    交替编号

    image-20220913220205119

    磁盘地址结构的设计

    image-20220913220710661

    image-20220913220736993

    image-20220913220751002

    错位命名

    image-20220913221132459

    image-20220913221206613

    5.3.4 磁盘的管理

    磁盘的初始化

    image-20220913221456387

    引导块

    image-20220913221559606

    image-20220913221651845

    坏块的管理

    image-20220913221816888

  • 相关阅读:
    实验室安全巡检管理系统—全面安全检查
    Day22:多态详解
    MySQL-事务隔离机制的实现
    【Windows Server 2019】NAT服务的安装、配置与管理
    【金融项目】尚融宝项目(十三)
    leaflet
    Chrome浏览器中比较实用的一些插件(油猴、文字复制、广告拦截、视频倍速、文献下载)
    PCB铺铜的那些事
    MySQL多表查询
    StringTable/StringPool
  • 原文地址:https://blog.csdn.net/weixin_53029342/article/details/126842981