十天玩转操作系统之IO设备,梳理操作系统收官之战!!!


       操作系统(OS)这门学科在计算机领域有着很重要的作用,作为计算机硬件和软件的临界者,对计算机发展有着很重要的意义,随着时代的不断发展,越来越多的操作系统进入大众视野,无论是大家耳熟能详的Windows、MAC,抑或是程序员口中经常念叨的Linux。除了电脑操作系统,手机中的鸿蒙、苹果、安卓也是大家关注的热点,因此要想在计算机领域有所造诣,操作系统是必须要了解掌握的一门学科,因此在这里借助平台,跟大家分享一下我学习操作系统的经验和笔记,用十天的时间来和大家梳理和整理这门学科,让我们一起探索其中的奥秘,享受知识带给我们的快乐吧!!!

I/O设备的基本概念和分类

按功能划分:
(1)人机交互类外部设备
鼠标、键盘、打印机……数据传输速度慢
(2)存储设备
移动硬盘、光盘……数据传输速度快
(3)网络通信设备
调制解调器……数据传输速度适中

按传输速率划分:
(1)低速设备
鼠标、键盘……传输速率为每秒几个到几百字节
(2)中速设备
激光打印机……传输速率为每秒数千甚至上万字节
(3)高速设备
磁盘……传输速率为每秒数千甚至千兆字节

I/O控制器
CPU和机械设备之间的“中介”
请添加图片描述请添加图片描述

  • I/O控制器可能会对应多个设备
  • 内存印象I/O:让寄存器占用内存地址的一部分
  • 寄存器独立编址:采用I/O专用地址

请添加图片描述

I/O控制方式

(1)程序直接控制方式
请添加图片描述
整个过程要进行轮询方式,CPU不断介入检查
传输单位为:字
数据流向:

  • 读操作:I/O设备 -> CPU -> 内存
  • 写操作:内存 -> CPU -> I/O设备

CPU和I/O设备只能串行工作,CPU需要一直轮询检查,长期处于“忙等”状态,CPU利用率低

(2)中断驱动方式
请添加图片描述
引入中断机制,可以将等待I/O进程阻塞,CPU检测到中断信号,进行中断处理。
CPU和I/O设备并行运行

(3)DMA方式(直接存储器存取)
数据传输单元是“块”
数据的流向是从设备直接放入内存,或者从内存直接到设备。
CPU干预只在开始和结束
请添加图片描述请添加图片描述(4)通道控制方式
通道:一种硬件,弱鸡版的“CPU”,可以识别并执行一系列通道指令
请添加图片描述

I/O软件层次结构

  • 用户层软件:
    实现与用户交互的接口,用户可以直接使用该层提供的、与I/O操作相关的库函数对设备进行操作
  • 设备独立性软件:
    将用户请求翻译成格式化I/O请求,并通过“系统调用”请求操作系统内核服务
  • 设备的保护
  • 差错处理
  • 设备的分配与回收
  • 数据缓冲区管理
    建立逻辑设备名到物理设备名的映射关系;根据设备类型选择调用相应的驱动程序(建立逻辑设备表LUT)
  • 设备驱动程序:
    不同的设备有不同的硬件特性,所以要控制不同的设备要进行不同的驱动程序
  • 中断处理程序:
    I/O任务完成时,I/O控制器会发送一个中断信号,系统跟你局中断信号类型找到相应的中断处理程序

I/O核心子系统

请添加图片描述

假脱机技术

批处理阶段引入了脱机输入/输出技术
请添加图片描述

  • 输入缓冲区:用于暂时存放输入设备输入的数据,之后转存到输入井中
  • 输出缓冲区:用户暂时存放从输出井送来的数据,之后载传送至输出设备上

输入\输出缓冲区属于内存
输入井\输出井属于磁盘

共享打印机原理:
多个用户进程申请打印请求,系统答应后不会直接分配打印资源,而是进行两个准备:
【1】在磁盘输出井中为进程申请一个空闲缓冲区,用来存放要打印的数据
【2】为用户申请填写打印请求表,将请求表挂到假脱机队列上等待

设备的分配与回收

设备的固有属性

  • 独占设备:一个时段只能分配给一个进程(如打印机)
  • 共享设备:可同时分配多个进程使用(如:磁盘),各进程往往是宏观上同时共享使用设备而微观上交替使用
  • 虚拟设备:采用SPOOLing技术将独占设备改造成虚拟的共享设备,可以同时分配给多个进程使用

设备分配算法

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

设备分配中的安全性

  • 安全分配方式:为进程分配一个设备后就将进程阻塞,本次I/O完成后才将进程唤醒(一个时间段只能使用一个设备,对于进程来说,CPU和IO设备只能串行工作)
  • 不安全分配方式:进程放出I/O请求,系统为其分配I/O设备,进程可以继续执行。只要某个I/O请求的布袋满足时才将进程阻塞(计算任务和IO任务可以并行处理,有可能发生死锁)
  • 静态分配
    进程运行之前分配所有需要的资源,运行结束后归还
  • 动态分配
    进程运行中动态申请设备资源

设备分配管理中的数据结构
“设备”、“控制器”、“通道”

  • 设备控制表(DCT):系统为每个设备配置一张(DCT):系统为每个设备配置一张DCT,用于记录设备情况
    (设备类型、设备标识符、设备状态、指向控制器表的指针、重复执行次数和时间、设备队列的队首指针)

  • 控制器控制表(COCT):每个设备控制器都会对应一张COCT,操作系统根据COCT的信息对控制器进行操作和管理
    (控制器标识符、控制器状态、指向通道表的指针、控制器队列的队首指针、控制器队列的队尾指针)

  • 通道控制表(CHCT):每个通道都会对应一张CHCT,根据CHCT的信息对通道进行操作和管理
    (通道标识符、通道状态、与通道连接的控制器表首址、通道队列的队首指针、通道队列的队尾指针)

  • 系统设备表(SDT):记录了系统中全部设备的情况,每个设备对应一个表目

  • 表目(设备类型、设备标识符、DCT、驱动程序入口)

设备分配改进的步骤:
1、根据进程请求的逻辑设备名查找SDT(逻辑设备名其实就是“设备类型”)
2、查找SDT,找到用户进程指定类型的、并且空闲的设备,将其分配给该进程。操作系统在逻辑设备表(LUT)中新增一个表项
3、根据DCT找到COCT,若控制器忙碌则将进程PCB挂到控制器等待队列中,不忙碌则将控制器分配给进程
4、根据COCT找到CHCT,若通道忙碌则将进程PCB挂到通道等待队列中,不忙碌则将通道分配给进程

只有设备、控制器、通道三者都分配成功时,这次设备分配才算成功,之后便可以启动IO设备进行数据传送
整个系统只有一张LUT:各用户所用的额逻辑设备名不重复,适用于单用户操作系统
每个用户一张LUT:不同用户的逻辑设备名可重复,适用于多用户操作系统

缓冲区管理

缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可以利用内存作为缓冲区。

  • 单缓冲:操作系统会在主存中为其分配一个缓冲区(一个缓冲区的大小就是一个块)
  • 双缓冲:操作系统会在主存中为其分配两个缓冲区
    实现同一时刻双向的数据传输
    管道通信中的“管道”其实就是缓冲区。要实现数据的双向传输,必须设置两个管道
  • 循环缓冲区:将许多个大小相等的缓冲区链接成一个循环队列
  • 缓冲池:由系统中共用的缓冲区组成。
    这些缓冲区可以分为:空缓冲队列、装满输入数据的缓冲队列、装满输出数据的缓冲队列

用于收容输入数据的工作缓冲区(hin)、用于提取输入数据的工作缓冲区(sin)、用于收容输出数据的工作缓冲区(hout)、用于提取输出数据的工作缓冲区(sout)
请添加图片描述1、输入进程请求输入数据
2、计算进程想要取得一块输入数据
3、计算进程想要将准备好的数据冲入缓冲区
4、输出进程请求输出数据
请添加图片描述***
      第十天的学习到这里就结束了,不知道小伙伴们收获如何呢?欢迎评论区交流学习,也恳请各位批评指正!!

      操作系统其实就是计算机中的一个大管家,这个大管家有着很多很厉害的角色(就像谍战片里面的大府中的老管家一样),因此学习操作系统这门课,就像是在欣赏一部谍战片,要想理解角色内涵,你就必须站在其角度去思考,思考其可能会遇到的危险以及应对策略(bug与bug的修复),这样你才能在凶险的代码江湖生存下来,成为一代英雄,留下你的印记,期待与各位在江湖的相遇,也希望大家能给作品一个三连!!


本文参考教材:王道考研——操作系统(配套PDF文件,点赞留言后私信我发你)
教材配套讲解视频:b站链接


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柠笙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值