非常详细!操作系统【IO核心子系统】

简介: 非常详细!操作系统【IO核心子系统】



1 I/O核心子系统——概述

1.1 核心子系统要完成的功能

1.1.1 假脱机技术

1.1.2 I/O调度

即各种调度算法。

1.1.3 设备保护

操作系统需要实现文件保护功能,不同的用户对各个文件有不同的访问权限(如:只读、读和写等)。

在UNIX系统中,设备被看做是一种特殊的文件,每个设备也会有对应的FCB。当用户请求访问 某个设备时,系统根据FCB中记录的信息来判断该用户是否有相应的访问权限,以此实现“设备保护”的功能

1.1.4 设备分配与回收

1.1.5 缓冲区管理(缓冲与高速管理)

1.2 注意

2、3在之前的笔记中已经介绍过,后面的笔记主要介绍1、4、5

2 SPOOLing技术

2.1 总览

2.2 什么是脱机技术

2.2.1 概述

在早期的操作系统中,计算机处于手工操作阶段:主机直接从 I/O设备获得数据,由于设备速度慢,主机速度很快。人机速度矛盾明显,主机要浪费很多时间来等待设备

2.2.2 脱机技术的流程

在外围控制机的控制下, 慢速输入设备的数据先被输入到更快速的磁带上。 之后主机可以从快速的磁带上读入数据。输出过程类似。

2.2.3 示意图

2.2.4 脱机技术的优点

2.3 假脱机技术(SPOOLing)

2.3.1 示意图

2.3.2 解释

(1)输入进程、输出进程相当于脱机技术中的外围处理机

(2)输入井、输出井相当于脱机技术中的高速磁带

(3)在用户输入时,输入进程在内存中开辟一块临时区域存放用户输入的数据,在输入完成后再将数据复制到输入井中。输出过程同理。

(4)之所以叫假脱机是因为它采用的是脱机技术的原理,但是用软件的方式实现。

2.4 假脱机技术的应用

2.4.1 背景

打印机属于一种慢速的I/O设备,同时也属于临界资源,同一时间只可以有一个进程使用。但是实际生活中,我们通常是连续传入好几个文件。

2.4.2 实现原理

2.5 总结

3 设备的分配与回收

3.1 总览

3.2 设备分配时应该考虑的因素

3.2.1 设备的固有属性

3.2.2 设备分配算法

先来先服务

优先级高者优先

短任务优先

等等

3.2.3 设备分配中的安全性

(1)安全分配方式

①解释

为进程分配一个设备后就将进程阻塞,本次I/O完成后才将进程唤醒

②例子

进程使用打印机时,该进程被阻塞,只有当进程要求打印的数据全部打印完成后该进程才可以去进行其他的操作。

③优缺点

(2)不安全分配方式

①解释

进程发出I/O请求后,系统为其分配I/O设备,进程可继续执行,之后还可以发出新的I/O请求。只有某个I/O请求得不到满足时才将进程阻塞

②例子

进程申请使用打印机时,之需将数据传入内核中,就可以继续去进行另外的工作。

③优缺点

3.3 设备分配方式

3.3.1 静态分配方式

进程运行前为其分配全部所需资源,运行结束后归还资源。它破坏了“请求和保持”条件,不会发生死锁

3.2.2 动态分配方式

进程运行过程中动态申请设备资源

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

3.4.1 设备、控制器与通道之间的关系

一个通道可控制多个设备控制器,每个设备控制器可控制多个设备。

示意图:

3.4.2 设备控制表(DCT,Device Control Table)

(1)解释

系统为每个设备配置一张DCT,用于记录设备情况

(2)示意图

3.4.3 控制器控制表(COCT,Controller Control Table)

(1)解释

每个设备控制器都会对应一张COCT。操作系统根据COCT的信息对控制器

进行操作和管理

(2)示意图

3.4.4 通道控制表(CHCT,Channel Control Table)

(1)解释

每个通道都会对应一张CHCT。操作系统根据CHCT的信息对通道进行操作和

管理。

(2)示意图

3.4.5 系统设备表(SDT,System Device Table)

(1)解释

记录了系统中全部设备的情况,每个设备对应一个表目。

(2)示意图

3.5 设备分配的步骤

3.5.1 描述

3.5.2 存在的缺点

3.5.3 如何解决

3.6 改进的设备分配方法

3.6.1 描述

3.6.2 逻辑设备表(LUT)

(1)解释

类似于快表。系统在查找用户需要的逻辑设备的时候,首先会查看LUT,当该设备不在其中时再去SDT中查找,之后将该设备添加到LUT中,以便用户下次快速查找。

(2)示意图

(3)逻辑设备表的功能

(4)逻辑设备表的设置

3.7 总结

4 缓冲区管理

4.1 总览

4.2 缓冲区的定义与作用

4.2.1 什么是缓冲区

4.2.2 缓冲区的作用

解释

①CPU是高速的,I/O设备一般而言是低速的。

进行写操作时,CPU快速的将数据放入缓冲区就可以去做其他的事情了,在这个时间内I/O设备可以慢慢的读取缓冲区的内容。

相反的,进行读操作时,I/O设备可以先将数据放入缓冲区内,之后再让CPU快速的读取

②联系I/O控制方式中的直接控制

③输出进程可以一次生成一块数据,而I/O设备每次只可以输入一个字符

④CPU无须一直等待I/O设备的输入输出

4.3 单缓冲管理方法

4.3.1 什么是单缓冲策略

假设某用户进程请求某种块设备读入若干块的数据。若采用单缓冲的策略,操作系统会在主存中为其分配一个缓冲区(若题目中没有特别说明,一个缓冲区的大小就是一个块)。

4.3.2 注意

(1)当缓冲区数据非空时,不能往缓冲区冲入数据,只能从缓冲区把数据传出;当缓冲区为空时, 可以往缓冲区冲入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出。

(2)用户进程的内存空间中,会分出一片工作区来接受输入/输出数据(一般也默认工作区大小与缓冲区相同)。

4.3.3 CPU处理一块数据的平均时间

在“单缓冲”题型中,可以假设初始状态为工作区满,缓冲区空。则下一次状态又回到工作区满,缓冲区空的过程中所耗费的时间就是CPU处理一块数据的平均时间。

(1)假设I/O设备将数据输入到缓冲区中所耗费的时间为T,用户进程将数据从缓冲区读入到工作区所耗费的时间为M,CPU处理数据的时间为C。如图所示。注意同一时刻只可以有一个进程操作缓冲区。

(2)当T>C时,整个过程如下图所示。则总耗时为T+M

(3)当T<C时,整个过程如下图所示。则总耗时为C+M

(4)因此总结可得:

采用单缓冲策略,处理一块数据平均耗时 Max(C, T)+M

4.4 双缓冲管理方法

4.4.1 什么是双缓冲

假设某用户进程请求某种块设备读入若干块的数据。若采用双缓冲的策略,操作系统会在主存中为其分配两个缓冲区(若题目中没有特别说明,一个缓冲区的大小就是一个块)

4.4.2 CPU处理一块数据的平均时间

(1)假设初始状态为:工作区空,其中一个缓冲区满,另一个缓冲区空。则示意图如下所示。

(2)当T>C+M时,整个工作流程如图所示。处理一块数据的平均用时= T

(3)当T<C+M时,整个工作流程如图所示。

可以看到,在T时刻,缓冲区2已经被充满,但是工作区中的数据还没有被完全处理完。假如2T<2M+C,则当工作区中的数据被处理完之后,缓冲区1又被I/O设备冲入了数据。可以看出,此时我们很难找到一个时刻,可以恢复到初始状态——工作区空,其中一个缓冲区满,另一个缓冲区空。

但是总而言之:

(4)此时我们可以得到结论:

采用双缓冲策略,处理一个数据块的平均耗时为 Max (T, C+M)

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

4.5.1 使用单缓冲

示意图如图所示。很显然,若两个相互通信的机器只设置单缓冲区,在任一时刻只能实现数据的单向传输。

4.5.2 使用双缓冲

示意图如图所示。若两个相互通信的机器设置双缓冲区,一个缓冲区用来存储发送的数据,另一个缓冲区用来存储接收的数据。则同一时刻可以实现双向的数据传输

4.6 循环缓冲区

4.6.1 解释

将多个大小相等的缓冲区链接成一个循环队列。系统维护一个in指针和一个out指针。in指针指向的缓冲区可以向其中填入数据,out指针指向的缓冲区可以从里面取出数据。

4.6.2 示意图

4.7 缓冲池

4.7.1 解释

缓冲队列的示意图如图所示

缓冲池的示意图如图所示

4.7.2 工作流程

(1)输入进程请求输入数据

系统从空缓冲队列中取下一块缓冲区放入收容输入区(hin),进程可以向其中输入数据,待进程输入完成后,系统再将该充满数据的缓冲区挂到输出队列的队尾(输入数据的目的肯定是将数据输出)。

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

系统从输入队列中取得一块冲满输入数据的缓冲区作为“提取输入数据的工作缓冲区(sin)”。待进程将缓冲区读空后,系统再将空缓冲区挂到空缓冲区队列队尾。

(3)计算进程想要将准备好的数据冲入缓冲区。

系统从空缓冲队列中取出一块作为“收容输出数据的工作缓冲区(hout)”。待进程将数据冲满后,再将缓冲区挂到输出队列队尾,准备输出。

(4)输出进程请求输出数据

系统从输出队列中取得一块冲满输出数据的缓冲区作为“提取输出数据的工作缓 冲区(sout)”。待进程将缓冲区读空后,再将空缓冲区挂到空缓冲区队列的队尾。

4.8 总结

5 总结

本文PDF文件下载链接:提取码:ikun

操作系统,如默默守护的守夜者,无声地管理硬件与软件的交流,为计算机创造和谐秩序。

它是无形的引导者,让复杂的任务变得井然有序,为用户提供无忧体验。

操作系统的巧妙设计,让计算机变得更加智能高效,让人与科技之间的交流更加顺畅。

在每一次启动中,它如信任的伙伴,带领我们进入数字世界的奇妙旅程。

渴望挑战操作系统的学习路径和掌握进阶技术?不妨点击下方链接,一同探讨更多操作系统的奇迹吧。我们推出了引领趋势的💻OS专栏:《OS从基础到进阶》 ,旨在深度探索OS的实际应用和创新。🌐🔍

相关文章
|
2月前
|
Unix C语言
操作系统基础:IO管理概述【上】
操作系统基础:IO管理概述【上】
操作系统基础:IO管理概述【上】
|
2月前
|
存储 算法 Unix
操作系统基础:IO核心子系统【下】
操作系统基础:IO核心子系统【下】
|
20天前
|
Linux
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
22 0
|
2月前
操作系统基础:IO管理概述【下】
操作系统基础:IO管理概述【下】
|
2月前
|
算法 安全
操作系统基础:IO核心子系统【上】
操作系统基础:IO核心子系统【上】
|
1月前
|
存储 Java 数据处理
|
1月前
|
Java API
java中IO与NIO有什么不同
java中IO与NIO有什么不同
|
3月前
|
存储 Java 数据安全/隐私保护
从零开始学习 Java:简单易懂的入门指南之IO字符流(三十一)
从零开始学习 Java:简单易懂的入门指南之IO字符流(三十一)
|
3月前
|
存储 移动开发 Java
从零开始学习 Java:简单易懂的入门指南之IO字节流(三十)
从零开始学习 Java:简单易懂的入门指南之IO字节流(三十)
|
3月前
|
存储 网络协议 Java
Java学习—IO流
Java学习—IO流