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

在这里插入图片描述

在这里插入图片描述

🌈个人主页:godspeed_lucip
🔥 系列专栏:OS从基础到进阶

🏆🏆本文完整PDF源文件请翻阅至文章底部下载。🏆🏆


  • 1 I/O核心子系统——概述
    • 1.1 核心子系统要完成的功能
      • 1.1.1 假脱机技术
      • 1.1.2 I/O调度
      • 1.1.3 设备保护
      • 1.1.4 设备分配与回收
      • 1.1.5 缓冲区管理(缓冲与高速管理)
    • 1.2 注意
  • 2 SPOOLing技术
    • 2.1 总览
    • 2.2 什么是脱机技术
      • 2.2.1 概述
      • 2.2.2 脱机技术的流程
      • 2.2.3 示意图
      • 2.2.4 脱机技术的优点
    • 2.3 假脱机技术(SPOOLing)
      • 2.3.1 示意图
      • 2.3.2 解释
    • 2.4 假脱机技术的应用
      • 2.4.1 背景
      • 2.4.2 实现原理
    • 2.5 总结
  • 3 设备的分配与回收
    • 3.1 总览
    • 3.2 设备分配时应该考虑的因素
      • 3.2.1 设备的固有属性
      • 3.2.2 设备分配算法
      • 3.2.3 设备分配中的安全性
    • 3.3 设备分配方式
      • 3.3.1 静态分配方式
      • 3.2.2 动态分配方式
    • 3.4 设备分配管理中的数据结构
      • 3.4.1 设备、控制器与通道之间的关系
      • 3.4.2 设备控制表(DCT,Device Control Table)
      • 3.4.3 控制器控制表(COCT,Controller Control Table)
      • 3.4.4 通道控制表(CHCT,Channel Control Table)
      • 3.4.5 系统设备表(SDT,System Device Table)
    • 3.5 设备分配的步骤
      • 3.5.1 描述
      • 3.5.2 存在的缺点
      • 3.5.3 如何解决
    • 3.6 改进的设备分配方法
      • 3.6.1 描述
      • 3.6.2 逻辑设备表(LUT)
    • 3.7 总结
  • 4 缓冲区管理
    • 4.1 总览
    • 4.2 缓冲区的定义与作用
      • 4.2.1 什么是缓冲区
      • 4.2.2 缓冲区的作用
    • 4.3 单缓冲管理方法
      • 4.3.1 什么是单缓冲策略
      • 4.3.2 注意
      • 4.3.3 CPU处理一块数据的平均时间
    • 4.4 双缓冲管理方法
      • 4.4.1 什么是双缓冲
      • 4.4.2 CPU处理一块数据的平均时间
    • 4.5 使用单/双缓冲在通信时的区别
      • 4.5.1 使用单缓冲
      • 4.5.2 使用双缓冲
    • 4.6 循环缓冲区
      • 4.6.1 解释
      • 4.6.2 示意图
    • 4.7 缓冲池
      • 4.7.1 解释
      • 4.7.2 工作流程
    • 4.8 总结
  • 5 总结


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 总览

image1

2.2 什么是脱机技术

2.2.1 概述

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

2.2.2 脱机技术的流程

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

2.2.3 示意图

image2

2.2.4 脱机技术的优点

image3

2.3 假脱机技术(SPOOLing)

2.3.1 示意图

image4

2.3.2 解释

(1)输入进程、输出进程相当于脱机技术中的外围处理机
(2)输入井、输出井相当于脱机技术中的高速磁带
(3)在用户输入时,输入进程在内存中开辟一块临时区域存放用户输入的数据,在输入完成后再将数据复制到输入井中。输出过程同理。
(4)之所以叫假脱机是因为它采用的是脱机技术的原理,但是用软件的方式实现。

2.4 假脱机技术的应用

2.4.1 背景

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

2.4.2 实现原理

image5

2.5 总结

image6

3 设备的分配与回收

3.1 总览

image1

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

3.2.1 设备的固有属性

image2

3.2.2 设备分配算法

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

3.2.3 设备分配中的安全性

(1)安全分配方式
①解释
为进程分配一个设备后就将进程阻塞,本次I/O完成后才将进程唤醒
②例子
进程使用打印机时,该进程被阻塞,只有当进程要求打印的数据全部打印完成后该进程才可以去进行其他的操作。
③优缺点
image3

(2)不安全分配方式
①解释
进程发出I/O请求后,系统为其分配I/O设备,进程可继续执行,之后还可以发出新的I/O请求。只有某个I/O请求得不到满足时才将进程阻塞
②例子
进程申请使用打印机时,之需将数据传入内核中,就可以继续去进行另外的工作。
③优缺点
image4

3.3 设备分配方式

3.3.1 静态分配方式

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

3.2.2 动态分配方式

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

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

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

一个通道可控制多个设备控制器,每个设备控制器可控制多个设备。
示意图:
image5

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

(1)解释
系统为每个设备配置一张DCT,用于记录设备情况
(2)示意图
image6

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

(1)解释
每个设备控制器都会对应一张COCT。操作系统根据COCT的信息对控制器
进行操作和管理
(2)示意图
image7

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

(1)解释
每个通道都会对应一张CHCT。操作系统根据CHCT的信息对通道进行操作和
管理。
(2)示意图
image8

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

(1)解释
记录了系统中全部设备的情况,每个设备对应一个表目。
(2)示意图
image9

3.5 设备分配的步骤

3.5.1 描述

image10

3.5.2 存在的缺点

image11

3.5.3 如何解决

image12

3.6 改进的设备分配方法

3.6.1 描述

image13

3.6.2 逻辑设备表(LUT)

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

(2)示意图
image14

(3)逻辑设备表的功能

image15

(4)逻辑设备表的设置

image16

3.7 总结

image17

4 缓冲区管理

4.1 总览

image1

4.2 缓冲区的定义与作用

4.2.1 什么是缓冲区

image2

4.2.2 缓冲区的作用

image3
解释
①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。如图所示。注意同一时刻只可以有一个进程操作缓冲区。
image4
(2)当T>C时,整个过程如下图所示。则总耗时为T+M
image5
(3)当T<C时,整个过程如下图所示。则总耗时为C+M
image6
(4)因此总结可得:
采用单缓冲策略,处理一块数据平均耗时 Max(C, T)+M

4.4 双缓冲管理方法

4.4.1 什么是双缓冲

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

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

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

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

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

(4)此时我们可以得到结论:
采用双缓冲策略,处理一个数据块的平均耗时为 Max (T, C+M)

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

4.5.1 使用单缓冲

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

4.5.2 使用双缓冲

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

4.6 循环缓冲区

4.6.1 解释

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

4.6.2 示意图

image13

4.7 缓冲池

4.7.1 解释

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

缓冲池的示意图如图所示
image16

4.7.2 工作流程

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

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

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

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

4.8 总结

image17

5 总结

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

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

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

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

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

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

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/685202.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 异常处理及程序调试

Python 是一门功能强大而又易于学习的编程语言&#xff0c;它提供了丰富的工具和库来帮助开发者编写高效、稳定的程序。然而&#xff0c;在编写复杂的应用程序时&#xff0c;错误和异常是难以避免的。本文将介绍 Python 中的异常处理机制以及程序调试技巧&#xff0c;帮助读者提…

JavaScript中什么是事件委托

JavaScript 中的事件委托&#xff08;Event delegation&#xff09;是一种重要的编程技术&#xff0c;它能够优化网页中的事件处理&#xff0c;提高程序的性能和可维护性。本文将详细介绍事件委托的概念、工作原理&#xff0c;并提供示例代码来说明其实际应用。 事件委托是基于…

Linux版Black Basta勒索病毒针对VMware ESXi服务器

前言 Black Basta勒索病毒是一款2022年新型的勒索病毒&#xff0c;最早于2022年4月被首次曝光&#xff0c;主要针对Windows系统进行攻击&#xff0c;虽然这款新型的勒索病毒黑客组织仅仅才出来短短两个多月的时间&#xff0c;就已经在其暗网平台上已经公布了几十个受害者之多&…

【案例8】用户中心实现涉及内容和过程

图1 如图1是用盒子模型内容实现的&#xff0c;但是需要了解一些内容。 一.内容知识引入 1.内边距属性&#xff08;padding&#xff09; 为了调整盒子在网页中的显示位置&#xff0c;常常需要为元素设置内边距。内边距也被称为内填充&#xff0c;是指元素内容和边框之间的距离…

linux安装mysql8且初始化表名忽略大小写

mysql8下载地址 MySQL8.0安装步骤 1、把安装包上传到linux系统&#xff0c;解压、重命名并移动到/usr/local/目录&#xff1a; cd ~ tar -xvf mysql-8.0.32-linux-glibc2.12-x86_64.tar.xz mv mysql-8.0.32-linux-glibc2.12-x86_64/ mysql80/ mv mysql80/ /usr/local/2、在M…

VMwareWorkstation17.0虚拟机安装Windows2.03完整详细步骤图文教程

VMwareWorkstation17.0虚拟机安装Windows2.03完整详细步骤图文教程 第一篇 下载Windows2.03第二篇 配置Windows2.03虚拟机机器环境第三篇 启动Windows2.03系统 第一篇 下载Windows2.03 1.Windows2.0原版软盘下载地址是 暂不提供&#xff0c;后续更新 2.Windows2.03虚拟机镜像下…

鸿蒙开发-HarmonyOS UI架构

初步布局Index 当我们新建一个工程之后&#xff0c;首先会进入Index页。我们先简单的做一个文章列表的显示 class Article {title?: stringdesc?: stringlink?: string }Entry Component struct Index {State articles: Article[] []build() {Row() {Scroll() {Column() …

GiantPandaCV | 视觉类表面缺陷检测项目相关技术总结

本文来源公众号“GiantPandaCV”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;视觉类表面缺陷检测项目相关技术总结 本文由海滨撰写&#xff0c;首发于GaintPandaCV。 零、前言 做这个方向的项目也有一段时间了&#xff0c;作为…

Deep learning学习笔记

lec 1&#xff1a;Regression 1.5 Linear neural networks for regression线性神经网络的回归 I parameterizing output layer, I handling data, I specifying loss function, I training model. 浅层网络包括线性模型&#xff0c;其中包含了许多经典的统计预测方法&…

C++中的拷贝构造函数

一、拷贝构造函数的概念 拷贝构造函数用于创建一个与已有对象相同的对象&#xff0c;本质上也是构造函数的重载 拷贝构造函数只有一个类型为 const 类类型引用的形参&#xff0c;当我们要创建一个与已存在对象相同的对象时&#xff0c;由编译器自动调用拷贝构造函数。 clas…

简单的edge浏览器插件开发记录

今天在浏览某些网页的时候&#xff0c;我想要屏蔽掉某些信息或者修改网页中的文本的颜色、背景等等。于是在浏览器的控制台中直接输入JavaScript操作dom完成了我想要的功能。但是每次在网页之间跳转该功能都会消失&#xff0c;我需要反复复制粘贴js脚本&#xff0c;无法实现自动…

MATLAB知识点:exprnd函数(★★☆☆☆)生成指数分布的随机数

讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 节选自第3章&#xff1a;课后习题讲解中拓展的函数 在讲解第三…

【革新你的社交形象】用AI创意头像应用,让你的头像独一无二!

在这个数字化时代&#xff0c;社交媒体已经成为我们生活中不可或缺的一部分。你是否曾经为了找到一个既能表达自己个性&#xff0c;又足够吸引眼球的头像而苦恼&#xff1f;现在&#xff0c;有了我们全新推出的AI创意头像应用&#xff0c;你的这一困扰将成为过去&#xff01; …

React入门到精通:掌握前端开发的必备技能!

介绍&#xff1a;React是一个由Facebook开发和维护的JavaScript库&#xff0c;用于构建用户界面&#xff0c;特别是用于构建单页应用程序和移动应用程序的用户界面。以下是对React的详细介绍&#xff1a; 虚拟DOM&#xff1a;React通过使用虚拟DOM&#xff08;Document Object …

【Deep Learning 2】神经网络的优化

&#x1f31e;欢迎来到PyTorch的世界 &#x1f308;博客主页&#xff1a;卿云阁 &#x1f48c;欢迎关注&#x1f389;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f31f;本文由卿云阁原创&#xff01; &#x1f4c6;首发时间&#xff1a;&#x1f339;2024年2月16日&a…

java8-重构、测试、调试

8.1.1 改善代码的可读性 改善代码的可读性到底意味着什么?我们很难定义什么是好的可读性&#xff0c;因为这可能非常主观。通常的理解是&#xff0c;“别人理解这段代码的难易程度”。改善可读性意味着你要确保你的代码能非常容易地被包括自己在内的所有人理解和维护。为了确保…

阿里云“BGP(多线)”和“BGP(多线)_精品”区别价格对比

阿里云香港等地域服务器的网络线路类型可以选择BGP&#xff08;多线&#xff09;和 BGP&#xff08;多线&#xff09;精品&#xff0c;普通的BGP多线和精品有什么区别&#xff1f;BGP&#xff08;多线&#xff09;适用于香港本地、香港和海外之间的互联网访问。使用BGP&#xf…

悦纳自己:拥抱个人局限,开启成长之旅

悦纳自己&#xff1a;拥抱个人局限&#xff0c;开启成长之旅 在人生的旅途中&#xff0c;我们每个人都会面临无数的挑战和选择。有时我们会因为这些挑战而感到焦虑和不安&#xff0c;因为我们害怕失败&#xff0c;害怕无法达到预期的目标。然而&#xff0c;真正重要的是我们如何…

Selenium实战教程系列(三)--- Selenium中的动作

Selenium中针对元素进行的动作在代码中可以分为两类&#xff1a; Selenium::WebDriver::ActionBuilder类中的动作方法Selenium::WebDriver::Element类中的动作方法 其中ActionBuilder类中的动作方法比较丰富&#xff0c;基本涵盖了所有可以进行的操作。 而Element类的动作比较…

Linux目录结构

Linux常用目录结构 /&#xff1a;根目录存放在系统的所有文件 ~&#xff1a;一般特指当前用户的家目录。root用户一般为&#xff1a;/root&#xff0c;普通用户为&#xff1a;/home/用户名 /home&#xff1a;新用户新建时&#xff0c;会在此目录建立新的用户文件&#xff0c;…