操作系统基础: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 缓冲区管理
    • ⚜️2.1 总览
    • ⚜️2.2 缓冲区的定义与作用
      • ⚖️2.2.1 什么是缓冲区
      • ⚖️2.2.2 缓冲区的作用
    • ⚜️2.3 单缓冲管理方法
      • ⚖️2.3.1 什么是单缓冲策略
      • ⚖️2.3.2 注意
      • ⚖️2.3.3 CPU处理一块数据的平均时间
    • ⚜️2.4 双缓冲管理方法
      • ⚖️2.4.1 什么是双缓冲
      • ⚖️2.4.2 CPU处理一块数据的平均时间
    • ⚜️2.5 使用单/双缓冲在通信时的区别
      • 2.5.1 使用单缓冲
      • 💣2.5.2 使用双缓冲
    • ⚜️2.6 循环缓冲区
      • 💣2.6.1 解释
      • 💣2.6.2 示意图
    • ⚜️2.7 缓冲池
      • 💣2.7.1 解释
      • 💣2.7.2 工作流程
    • ⚜️2.8 总结
  • ⚕️3 总结


⚕️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 缓冲区管理

⚜️2.1 总览

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

⚜️2.2 缓冲区的定义与作用

⚖️2.2.1 什么是缓冲区

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

⚖️2.2.2 缓冲区的作用

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
解释
①CPU是高速的,I/O设备一般而言是低速的。
进行写操作时,CPU快速的将数据放入缓冲区就可以去做其他的事情了,在这个时间内I/O设备可以慢慢的读取缓冲区的内容。
相反的,进行读操作时,I/O设备可以先将数据放入缓冲区内,之后再让CPU快速的读取
②联系I/O控制方式中的直接控制
③输出进程可以一次生成一块数据,而I/O设备每次只可以输入一个字符
④CPU无须一直等待I/O设备的输入输出

⚜️2.3 单缓冲管理方法

⚖️2.3.1 什么是单缓冲策略

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

⚖️2.3.2 注意

(1)当缓冲区数据非空时,不能往缓冲区冲入数据,只能从缓冲区把数据传出;当缓冲区为空时, 可以往缓冲区冲入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出。
(2)用户进程的内存空间中,会分出一片工作区来接受输入/输出数据(一般也默认工作区大小与缓冲区相同)。

⚖️2.3.3 CPU处理一块数据的平均时间

在“单缓冲”题型中,可以假设初始状态为工作区满,缓冲区空。则下一次状态又回到工作区满,缓冲区空的过程中所耗费的时间就是CPU处理一块数据的平均时间。
(1)假设I/O设备将数据输入到缓冲区中所耗费的时间为T,用户进程将数据从缓冲区读入到工作区所耗费的时间为M,CPU处理数据的时间为C。如图所示。注意同一时刻只可以有一个进程操作缓冲区。
image4
(2)当T>C时,整个过程如下图所示。则总耗时为T+M
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
(3)当T<C时,整个过程如下图所示。则总耗时为C+M
image6
(4)因此总结可得:
采用单缓冲策略,处理一块数据平均耗时 Max(C, T)+M

⚜️2.4 双缓冲管理方法

⚖️2.4.1 什么是双缓冲

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

⚖️2.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)

⚜️2.5 使用单/双缓冲在通信时的区别

2.5.1 使用单缓冲

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

💣2.5.2 使用双缓冲

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

⚜️2.6 循环缓冲区

💣2.6.1 解释

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

💣2.6.2 示意图

image13

⚜️2.7 缓冲池

💣2.7.1 解释

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

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

💣2.7.2 工作流程

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

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

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

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

⚜️2.8 总结

image17

⚕️3 总结

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

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

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

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

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

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

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

视觉SLAM十四讲学习笔记(二)三维空间刚体

哔哩哔哩课程连接&#xff1a;视觉SLAM十四讲ch3_哔哩哔哩_bilibili​ 目录 一、旋转矩阵 1 点、向量、坐标系 2 坐标系间的欧氏变换 3 变换矩阵与齐次坐标 二、实践&#xff1a;Eigen&#xff08;1&#xff09; 运行报错记录与解决 三、旋转向量和欧拉角 1 旋转向量 …

速盾:怎么拿高防服务器做CDN

想要拿高防服务器做CDN&#xff0c;首先需要了解什么是CDN。CDN&#xff0c;即内容分发网络&#xff08;Content Delivery Network&#xff09;&#xff0c;是一种通过互联网连接多个服务器&#xff0c;将静态和动态内容分发到最接近用户的服务器节点&#xff0c;从而提高用户访…

备份还原实际操作

备份还原实际操作 前言 根据达梦文档整理。 一、工具介绍 工具联机/脱机工具应用场景disql联机1️⃣数据库备份2️⃣归档备份3️⃣表空间备份与还原4️⃣表备份与还原dmrman脱机1️⃣数据库备份、还原和恢复2️⃣脱机还原表空间3️⃣归档的备份、还原和修复manager联机对应…

Rust引用、借用和所有权详解

在Rust中&#xff0c;引用、借用和所有权是语言的核心概念&#xff0c;它们共同构成了内存管理的基石。本篇博客将介绍Rust中的这些概念&#xff0c;并通过具体的例子深入探讨它们的用法和优势。 所有权 Rust中的所有权是一种独特的内存管理机制&#xff0c;它规定了在特定作…

协议-TCP协议-基础概念04-可能发生丢包的位置-linux配置项梳理(TCP连接的建立和断开、收发包过程)

可能发生丢包的位置-linux配置项梳理&#xff08;TCP连接的建立和断开、收发包过程&#xff09;-SYN Flood攻击和防御原理 参考来源&#xff1a; 极客时间-Linux性能优化实战 极客时间-Linux内核技术实战课 到底是哪里发生了丢包呢&#xff1f; Linux 的网络收发流程 从图中…

【java】笔记10:类与对象——本章练习

题目1&#xff1a; 代码如下&#xff1a; import java.util.Scanner; public class Input{public static void main(String[]args){Circle cnew Circle();PassObject yuannew PassObject();System.out.println("r""\t""times");yuan.printAreas…

缓存穿透问题与解决方案

引言 在分布式系统中&#xff0c;缓存技术被广泛应用以提高系统性能和响应速度。然而&#xff0c;缓存穿透是一个常见而严重的问题&#xff0c;特别是在面对大规模请求时。本文将深入探讨缓存穿透的原因、影响以及一些有效的解决方案&#xff0c;以确保系统在面对这一问…

【Effective Objective - C 2.0】——读书笔记(三)

文章目录 十五、用前缀避免命名空间冲突十六、提供全能初始化方法十七、实现description方法十八、尽量使用不可变对象十九、使用清晰而协调的命名方式二十、为私有方法名加前缀二十一、理解Objective-C错误模型二十二、理解NSCopying协议 十五、用前缀避免命名空间冲突 OC语言…

1+X运维试题样卷D卷(初级)

云计算D卷 单选题(200分) 1.以下哪一项最好地描述了何时完成监控项目过程组?(10分) (答案正确:10分) A、整个项目中持续进行 (正确答案) B、每个可交付成果完成时 C、计划里程碑或项目间隙 D、每个项目阶段结束时 2.以下哪一个是收尾过程的正确顺序?(10分) (答案错误:0分…

2023年股市总结,2024年A股方向展望!

2023年股市总结&#xff0c;2024年A股方向展望&#xff01; 随着2023年的结束&#xff0c;让我们回顾一下这一年的股市表现。在全球经济复苏的大背景下&#xff0c;2023年的股市呈现出波动上涨的趋势。 全球股市概述 在2023年&#xff0c;全球股市经历了许多变化。各国经济逐…

KingSCADA实现按钮点击效果

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 在做SCADA项目的时候&#xff0c;按钮是不可缺少的功能&#xff0c;但软件自带的按钮太丑&#xff0c;已经无法满足现如今客户对界面美观度的要求。 这时候就需要UI小姐姐设计美观大气的SCADA界面&#xff0c;但UI设计…

蓝牙BLE学习

1. 简介 1.1 蓝牙发展历程 蓝牙&#xff0c;直接来自于一位国王的名字--King Harald ‘Bluetooth Gromsson。这位国王因两件事留名于史&#xff0c;其一是在公园958年统一了丹麦和挪威&#xff0c;其二是在其死后&#xff0c;其牙齿呈现出暗蓝色的颜色&#xff0c;因而得名蓝牙…

第74讲Breadcrumb 面包屑实现

Breadcrumb 面包屑实现 为了实现二级路由&#xff0c;我们搞成搞个子路由&#xff0c;对于二级菜单 const routes [{path: /,name: 首页,component: () > import(../views/layout),redirect:/home,children:[{path: /home,name: 首页,component: () > import(../views…

《UE5_C++多人TPS完整教程》学习笔记10 ——《P11 设置加入游戏会话(Setup for Joining Sessions)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P11 设置加入游戏会话&#xff08;Setup for Joining Sessions&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&…

Git Push -f 命令详解

直接看原文: Git Push -f 命令详解 - 玩转Linux - SegmentFault 思否 -------------------------------------------------------------------------------------------------------------------------------- git push -f 这个命令的作用是将自己本地仓库的代码直接推送至仓…

JVM-类加载器 双亲委派机制

申明&#xff1a;文章内容是本人学习极客时间课程所写&#xff0c;文字和图片基本来源于课程资料&#xff0c;在某些地方会插入一点自己的理解&#xff0c;未用于商业用途&#xff0c;侵删。 什么是JVM JVM是Java Virtual Machine&#xff08;Java虚拟机&#xff09;的缩写&a…

信号的状态类型

verilog专用常见的信号状态有4种&#xff0c;分别是0、1、z、x&#xff0c;其中&#xff0c;0和1是数字电路本身的状态&#xff0c;它的本源是零电平和VDD电平。例如&#xff0c;将一根导线接地&#xff0c;它的电平就是0&#xff0c;可以用数字0表示&#xff0c;将一根导线接V…

c语言数据类型定义错误导致的数据溢出或者死循环

数据溢出问题 #include <stdio.h>/* 数据溢出 */int main() {char i; // 数据表示范围[-128,127] 0xf0 ~ 0x7ffor(i0;i<130;i) // {printf("%d ",i);}return 0; }/* 编译运行上面的程序&#xff0c;你会发现程序陷入了死循环&#xff0c;一直在不断…

m1芯片xcode15编译cocos2dx一些报错处理

报错1: No matching function for call to ‘iconv’ No matching function for call to ‘iconv_close’ 解决&#xff1a; 强转&#xff1a; iconv_close((iconv_t)_iconv); iconv((iconv_t)_iconv, (char**)&pin, &inLen, &pout, &outLen); 报错2: Proper…

【Java万花筒】加速Java应用程序:探索性能优化的利器

Java性能优化&#xff1a;提升应用程序效率与可靠性的关键 前言 在当今软件开发领域中&#xff0c;性能是一个至关重要的方面。对于Java应用程序而言&#xff0c;优化其性能可以带来更高的效率和更好的用户体验。本文将介绍一些常用的Java性能优化库和工具&#xff0c;帮助开…