操作系统学习笔记_5 IO;缓冲区

本文涉及的产品
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 1个月
简介: 学习自计算机科学单本&b站王道课程。

I/O 设备

I/O 设备分类

按使用特性分类

人机交互类外设:如鼠标打印机键盘等。数据传输慢。

存储设备:移动硬盘、光盘等,数据传输速率快。

网络通信设备:调制解调器等用于网络通信,速度中等。

按速率分类

低速设备:鼠标键盘。

中速:激光打印机。

高速:移动硬盘等。

按信息交换的单位分类

块为单位:磁盘。

字符为单位:鼠标键盘等。

I/O 控制器

IO设备包括:

  • 机械部件:用于执行具体 IO 操作的,如鼠标按钮、显示器屏、磁盘盘面。
  • 电子部件:插入主板扩充槽的印刷电路板。

CPU 要通过 IO 控制器作为中介才能控制机械部件。

image-20221213200720497

image-20221213200846891

一个 IO 控制器可能控制多个设备;而且可能有多个寄存器。有的操作系统让这些寄存器存到内存里,叫做内存映像 IO;有的采用专门的地址,即寄存器独立编址。独立编址不在内存里,因此还要设置专门的指令来实现对其的操作,还要指明具体对哪个控制器操作。

IO 控制方式

关注:一次读写操作的流程;CPU 干预的频率;数据传送单位;数据流向;优缺点。

程序直接控制

读:

image-20221213201440173

重点在轮询。CPU要不断轮询。

数据传送单位:每次一个字。

数据流向:内存和 IO 设备经由 CPU 读写。每个字读写都需要 CPU 帮助。

简单,但是 CPU 和 IO 只能串行工作,CPU 一直轮询检查效率也很低。

中断驱动方式

CPU 发出读写命令后,等待 IO 的进程暂时阻塞,先运行其他程序。IO 完成后控制器会向 CPU 发一个中断信号,CPU 收到后继续执行。

image-20221213203221153

CPU 执行完每个指令的周期末尾检查中断。中断处理过程需要保存、恢复进程的运行环境,也需要一定时间开销。

CPU 只有 IO 开始时干预一下,等待 IO 过程中就运行其他进程了。

数据传送单位:每次一个字。

数据流向:内存和 IO 设备经由 CPU 读写。每个字读写都需要 CPU 帮助。

相比程序直接控制,CPU 利用率高一点了。但是一个字一个字的传,速度还是慢。

DMA 方式

数据传输单位是块;设备和内存之间数据传输不用每次都经过 CPU ,只有开始传输或结束时才需要干预。

image-20221213214114491

缺点:CPU 每发一条 IO 指令,只能读写几次连续的数据块。离散的数据块就要多次中断。

通道控制方式

通道相当于简化版的 CPU。CPU向通道发出指令,指明通道程序在内存中的位置,并指明要操作的是哪个 IO 设备,然后 CPU 就去运行其他程序了。

image-20221213215048076

通道能执行的指令很单一,而且放在内存中。

CPU 干预次数极少,效率也高,就是需要专门的通道程序支持。

I/O 软件层次

image-20221213215341827

设备独立性软件:向上提供接口(入库函数)。校验用户是否有权限使用当前设备。差错处理。分配和回收设备。管理数据缓冲区。建立逻辑设备名到物理设备名的映射,并根据实际的物理设备选择合适的驱动程序。

image-20221213220547401

可以只设立一个系统 LUT,但是所有用户的逻辑设备名不能重复;也可以给每个用户设计一个。

为什么不同设备驱动程序也不同?因为不同设备内部结构也不一样。比如不同打印机内部寄存器数量可能不一样。驱动程序一般作为单独的进程。

设备驱动程序:主要负责具体控制硬件设备。

中断处理程序:IO 顺利完成后,进行中断处理。并从设备读入一个字长的数据。

I/O 核心子系统

假脱机技术

脱机技术是什么?我们记得最早期的计算机是人手动打孔纸带放入计算机中的,因为人打孔太慢,CPU 运行再快也得等着。

批处理几段引入了脱机输入,先通过外围控制机把数据输入到更快速的磁带上再让主机读入。脱机指的是脱离主机控制的 IO 操作。

不仅 IO 快了,而且 CPU 忙的时候用户也可以先处理数据到磁带上。

假脱机技术 SPOOLing 用软件模拟脱机技术。

image-20221213222958979

输入输出进程模拟外围控制机。

借助 SPOOLing 技术,可以让打印机实现共享。收到用户的打印请求时,在输出井里申请空闲缓冲区(在磁盘上),并放入要打印的数据;且给用户进程申请一张空白的打印请求表,里面存储打印的相关信息,并把该表挂到假脱机文件队列上。打印机空闲时从队列中取出打印请求表,根据表取出打印的数据到输出缓冲区,再到打印机打印。

设备的分配和回收

分配设备要考虑:设备属性(独占?共享?虚拟?虚拟就是假脱机技术等独占改成共享)。设备分配算法(FCFS 优先级高的优先 短任务优先)。安全性

分配分为静态分配和动态分配。

设备分配管理中的数据结构

image-20221213224041439

设备控制表 DCT

image-20221213224208534

控制器控制表 COCT

image-20221213224340187

通道控制表 CHCT

系统设备表 SDT

image-20221213224501959

设备分配步骤

  1. 根据进程的物理设备名,去 SDT 找设备。
  2. 根据 SDT 找 DCT,空闲就直接把设备分给这个进程,忙碌就把这个进程的 PCB 挂到设备等待队列中。
  3. 根据 DCT 找到 COCT,空闲就分配,不空闲就等待。
  4. 根据 COCT 找到 CHCT,空闲就分配,不空闲就等待。

以上方法缺点在于用户要知道物理设备名,不透明;而且只指定这一个设备,如果该设备坏了或者堵塞哪怕其他设备能用也无法切换。

可以建立逻辑设备,用逻辑设备找物理设备。

SDT 中设备类型就是逻辑设备名。

通过逻辑设备表 LUT 建立逻辑设备名和物理设备名之间的映射关系。

缓冲区

缓冲区是一个存储区域,可以用专门的硬件寄存器,也可以用内存做。速度快,成本高,容量小,比如快表。本节中介绍的主要是内存缓冲区。

可以缓冲 CPU 和 IO 之间速度不匹配的矛盾,进而 CPU 中断次数也会减少;解决数据颗粒度不匹配的问题;提高 CPU 与 IO 的并行性。

单缓冲区

某用户进程请求设备读入若干个块的数据。。如果采用单缓冲策略,主存中会被分配一个缓冲区(一般是一个块大小)。缓冲区中只有空的时候才能冲入数据,只有非空的时候才能传出数据。

image-20221213231116133

image-20221213231551012

双缓冲区

一满一空,可以空的边读,满的边往工作区写。

image-20221213232144595

image-20221213232106544

用时=Max(C+M, T)

如果两台机器各配置2个缓冲区,就能同时收发了。

循环缓冲区

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

image-20221213232951510

缓冲池

放满了各种各样缓冲区的池子。

image-20221213233107985

输入:取出一个空缓冲区挂到收容输入队列中,输入放到收容输入队列中,装好了挂到输入队列中。

提取输入:从输入队列取下来,放到提取输入队列中提取到用户进程,再挂回空缓冲区。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
目录
相关文章
|
7月前
|
Unix C语言
操作系统基础:IO管理概述【上】
操作系统基础:IO管理概述【上】
操作系统基础:IO管理概述【上】
|
7月前
|
存储 算法 Unix
操作系统基础:IO核心子系统【下】
操作系统基础:IO核心子系统【下】
|
7月前
|
网络协议 Linux C++
Linux C/C++ 开发(学习笔记十二 ):TCP服务器(并发网络编程io多路复用epoll)
Linux C/C++ 开发(学习笔记十二 ):TCP服务器(并发网络编程io多路复用epoll)
117 0
|
7月前
|
Linux
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
141 0
|
5月前
|
Linux 编译器 C语言
【Linux】基础IO----理解缓冲区
【Linux】基础IO----理解缓冲区
71 0
【Linux】基础IO----理解缓冲区
|
7月前
|
监控 Linux 调度
操作系统学习笔记(一)
在Linux中,使用`ps -aux | grep PID`来查看特定进程的状态,或者用`top`指令监控进程和内存。通过`cat 文件名 | grep 关键词`或`grep -i 关键词 文件名`搜索日志文件。`grep`是一个强大的文本搜索工具,支持多种参数,如`-i`忽略大小写,`-c`计数,`-f`从文件读取关键词。要临时更改主机名用`hostname 新主机名`,永久更改则用`hostnamectl set-hostname 新主机名`
46 0
|
7月前
|
消息中间件
操作系统学习笔记(二)
进程切换比线程切换更消耗资源,因为进程切换需保存更多上下文,包括地址空间、寄存器、栈和文件描述符等,还要刷新TLB。线程切换仅需切换硬件上下文和内核栈,上下文更小,所以开销低。进程间通信有多种方式,如匿名管道(父子进程间)、命名管道(无亲缘关系进程)、信号、消息队列、共享内存和信号量等。这些通信方法各有特点,适用于不同场景。例如,匿名管道是半双工的,有名管道允许任何进程通过路径通信,信号用于进程间的简单通知,消息队列支持随机查询和按类型读取,共享内存允许多进程共享数据,而信号量则用于同步和控制对共享资源的访问。
45 0
|
7月前
|
算法 安全
操作系统基础:IO核心子系统【上】
操作系统基础:IO核心子系统【上】
|
7月前
|
Ubuntu Unix Linux
Linux 学习笔记一: 常见操作系统相关概念
Linux 学习笔记一: 常见操作系统相关概念
Linux 学习笔记一: 常见操作系统相关概念
|
7月前
|
存储 算法 安全
非常详细!操作系统【IO核心子系统】
非常详细!操作系统【IO核心子系统】