408操作系统学习笔记——输入/输出(I/O)管理(下)

简介: 408操作系统学习笔记——输入/输出(I/O)管理

2.设备独立性软件

2.1.假脱机技术

1.脱机:脱离主机的控制进行输入/输出;假脱机技术是用软件的方式模拟脱机技术,需要多道程序设计的支持(并发)

2.在磁盘上开辟两个存储区:输入井和输出井

①输入井:存放I/O设备输入的数据

②输出井:存放用户进程向I/O输出的数据

3.输入进程把I/O设备要输入的数据放到输入井中;输出进程从输出井中取出数据,然后输出到I/O设备上

4.内存中开辟两个存储区:输入缓冲区和输出缓冲区

①输入缓冲区:在输入进程的控制下,暂存输入设备中输入的数据,然后再放入磁盘的输入井中(输入设备→输入缓冲区→输入井)

②输出缓冲区:在输出进程的控制下,从磁盘的输出井中取出数据,再传送到输出设备中(输出井→输出缓冲区→输出设备)

5.具体应用:共享打印机(假脱机技术可以将独占式设备改造成共享设备,即将一台物理设备虚拟成多台逻辑设备)虚拟设备

每个进程提出打印请求时,操作系统都会为其在输出井中分配一块存储空间(相当于分配一个逻辑设备),使得每个进程都觉得自己在独占一个打印机,从而实现对打印机的共享 3d1183a09f044c17b856ac63cfa4432b.png6aae3a2bd9d84d68b83970ef3d3b321e.png

2.2.设备的分配与回收

1.设备的固有属性:独占设备、共享设备和虚拟设备eafef8add7e243f2ac25b1fe12f1d1f6.png

2.根据设备分配安全性区分的方式:安全分配方式和不安全分配方式(是否导致死锁) f9db058ab02d4df19fd2f590eb05ea14.png

3.设备分配管理中的数据结构:需要表示出设备、控制器和通道的从属关系

6007cfcb654a48688312db38d030a589.png

①设备控制表:通过设备控制表中的指向控制表的指针找到该设备从属的控制器b60e0836ab3c40a5838b5efa73f6b1f8.png

②控制器控制表:通过控制器控制表中的指向通道表的指针找到该控制器从属的通道5150fcd4091e4317ad0a34a68419b316.png

③通道控制表:可以通过通道控制表找到属于该通道的所有控制器

70ab25aa95964d98947805612abc175d.png

④系统设备表:记录系统中所有设备的情况,当用户通过设备名请求某个设备时,操作系统可以根据设备名在系统设备表中找到相对应的设备

9324a86fb7314f73a88ca144459d6cee.png

4.设备分配步骤:

只有设备、控制器和通道三者都分配成功时设备分配才成功,才可以启动I/O设备进行数据传输

②查询顺序:系统控制表→设备控制表→控制器控制表→通道控制表(即先确定是哪个设备)

只有第一次通过逻辑设备名申请使用设备时候才需要找系统控制表,之后用户再次以相同的逻辑设备名,操作系统首先在逻辑设备表中查找该逻辑设备所对应的物理设备

75646c4f374c46b7bf55ab4b500bc2e0.png96144f21a3de4542890440065cfec3ca.png1e4905479cb944f8a6a39337ccef87c2.png792f75cb0f604688919518c439db4fa9.png

2.3.缓冲区管理

1.缓冲区的作用:9f386a5d4836445bbf5c5ccb48770fa7.png

2.从I/O设备读入数据到缓冲区后,需要将缓冲区的数据再放入进程的工作区内,CPU才能对其进行操作;缓冲区和进程的工作区通常为一个块

3.单缓冲:处理一块数据平均耗时:MAX(C,T)+ M(取C和T的最大值加上M)

CPU对工作区数据的处理和I/O设备对缓冲区的输入可以并行执行

①I/O设备输入缓冲区的时间T > CPU对数据处理时间C:CPU处理完后需要等待I/O设备完成对缓冲区的输入和将缓冲区数据放到工作区

2add84bd9a564b5da48b81c620d519e3.png

②I/O设备输入缓冲区的时间T < CPU对数据处理时间C:I/O设备完成对缓冲区的输入后,需要等待CPU对数据的处理完成后,才能开始将数据放入工作区中3ceb0fca9f8d43e3859e2b7f85054604.png


4.双缓冲区:处理一块数据的平均耗时为MAX(T,C+M)

CPU对工作区数据的处理+缓冲区1(2)将数据传送至工作区可以和I/O设备将数据传入缓冲区2(1)并行执行

①I/O设备输入缓冲区的时间T>CPU对数据处理时间C+数据从缓冲区传送到工作区时间M:

CPU处理完数据后,需要等待另一片缓冲区完成I/O设备的输入操作→平均用时:T

24eea474927542b58768ef6e9e641869.png

②I/O设备输入缓冲区的时间T

每次CPU处理完数据时,都已经完成一块缓冲区的输入,并开始向工作区传输→平均耗时:C+M61cf13821a2f4a45a13916ccdc1a0a66.png

5.采用单缓冲区进行计算机间的通信时,同一时刻只能实现单向通信;采用双缓冲区则可以进行双向通信:由于缓冲区的只有空时才能写入,满时才能读出

6.循环缓冲区:

c781b57e39d94b739d143c8f01b74f7e.png

7.缓冲池:

①输入进程请求输入数据:从空缓冲队列中取出队首的缓冲区(空),将其作为收容输入的缓冲区,输入进程开始对该缓冲区进行数据传输,充满后,再把其挂到输入队列的队尾

②计算进程想要取得一块输入数据:从输入队列中取出队首的缓冲区(满),将其作为提取输入的缓冲区,计算进程开始从该缓冲区中读入数据,取空后,再把其挂到空缓冲队列的队尾

③计算进程想要将准备好的数据冲入缓冲区:从空缓冲队列中取出缓冲区(空),将其作为收容输出的缓冲区,计算进程开始对该缓冲区进行数据传输,充满后,再把其挂到输出队列的队尾

④输出进程请求输出数据:从输出队列中取出队首的缓冲区(满),将其作为提取输出的缓冲区,输出进程开始对该缓冲区提取数据,取空后,再把其挂到空缓冲队列的队尾

1c670db15c8f4c9195b8b49978d6ffd9.png

3.磁盘和固态硬盘

3.1.磁盘的结构

1.通过磁头臂带动磁头移动到磁盘的相应位置读取该位置的数据

2.磁盘被分为若干磁道

3.磁道被分为若干扇区,每个扇区的存放的数据量相同;由于每个扇区的数据量相同,但最内侧的扇区面积最小,因此,最内侧磁道上的扇区数据密度最大

33ebd461aaf6497da477f602b93c82dd.png

4.对磁盘进行读/写的过程:

①通过磁头臂带动磁头移动到目标扇区对应的磁道(磁头臂只能向内或者向外移动)

②对磁盘进行旋转,找到目标扇区

5.磁盘的物理地址:(柱面号,盘面号,扇区号)

①柱面号:指明读取的磁道(移动磁头臂到相应磁道)

②盘面号:指明哪个盘面(激活相应盘面的磁头)

③扇区号:指明磁道中的扇区(在磁盘旋转的过程中通过磁头读取相应扇区的数据)

cbb003d2f3964d4e9318548c3a185de0.png


image.png

3.2.磁盘调度算法

1.一次磁盘读/写所需的时间 = 寻找时间 + 延迟时间 + 传输时间

①延迟时间中1/r为磁盘转一圈的时间,找到目标扇区平均需要转半圈,因此需要乘以1/2

②传输时间中每个磁道可存N个字节,因此读/写b字节的数据需要b/N个磁道才能存取,而读/写一个磁道所需的时间为1/r(磁盘转一圈即完成一个磁道的读/写),即共需b/rN

③操作系统只能改变寻找时间(通过磁盘调度算法的不同)

image.png

2.先来先服务算法(FCFS):谁先请求谁被先服务

c3a310afcb6e482b9ce115719036d595.png

2.最短寻找时间算法:选择眼前最优,但总体看未必最优;可能产生饥饿

593478aeb9ca46f7842c467b9b425931.png

3.扫描(SCAN)算法:只有到最边上的磁道才能改变磁头的移动方向,导致边缘磁道响应频率高image.png

4.LOOK调度算法:解决SCAN算法中磁头移动方向上已经没有请求时仍需移动到最边上的问题6ac8d3ff6d254f798f8495c2f137f0c6.png

5.循环扫描(C-SCAN)算法:解决SCAN算法中各个位置磁道响应频率不均匀的问题4174f7209d6142a1999697ed9106de86.png

6.C-LOOK调度算法:解决C-SCAN算法中只有到达最边上的才改变磁头移动方向,以及返回到最边缘的问题

4fecc9423e5b4a0b923eef4a7f91d45c.png641fa49e4a674125909d176ca5b4ec61.png

3.3.减少磁盘延迟时间的方法

磁头读入一个扇区数据后,需要一小段时间处理(这段时间内无法读入数据),导致如果逻辑上相邻的扇区物理上也相邻,则读入几个连续的逻辑扇区,需要很长的延迟时间(转好几圈)

1.采用交替编号:让逻辑上相邻的扇区物理上通过交替编号的方式物理上有一定间隔

8a1a125562ed47959770a056dce461e1.png

2.采用(柱面号,盘面号,扇区号)的编址方式:在同一个柱面号和盘面号的情况下,仅需激活不同的磁头就可以读取连续地址空间,而如果采用(盘面号,柱面号,扇区号)的方式,读取连续的地址空间,就可能需要激动不同的磁头臂来回移动磁头image.png

3.采用错位命名:不同盘面的相同扇区号对应的实际区域不同,这样可以使得磁头在读取完某个盘面后,可以有时间准备读取另一个盘面的数据

00c817c619d949178e51e68a2b26040a.png

70fb2f128f634b61b0a21d9625bddc88.png

3.4.磁盘的管理

1.磁盘初始化:

①低级格式化(物理格式化):将磁盘划分为各个扇区

②逻辑格式化(高级格式化):将磁盘划分为一个个的分区(分卷,例如:C盘、D盘),并创建文件系统2a1603700e924905ae508c557042245f.png

2.引导块:

①自举程序的一小部分在出厂时就写入ROM(不可更改);完整的自举程序放在磁盘的启动块(引导块/启动分区)中,启动块位于磁盘的固定位置(拥有启动分区的磁盘称为启动磁盘/系统磁盘)

②计算机开机时首先会读取ROM中初始化程序(自举程序)找到引导块,并将完整的自举程序读入内存,完成初始化

3.坏块的管理(硬件故障,操作系统无法修复):2e3a340adbef424391f2b1b7836056bd.pngf815a98b2fac410fb48484695396bcbf.png

3.5.固态硬盘SSD9fb46456d3ec408bac27235dfc3a5cec.png

相关文章
|
3月前
|
缓存 Linux UED
深入理解操作系统的虚拟内存管理
【5月更文挑战第30天】 在现代计算机系统中,虚拟内存是允许用户程序逻辑地址空间与物理内存解耦的关键概念。此技术不仅增强了多任务处理能力,还提供了内存保护和简化了内存管理。尽管虚拟内存的基本概念广为人知,但本文将探讨其背后的机制,以及如何通过分页和分段优化系统性能。我们将分析虚拟内存对操作系统稳定性的影响,并讨论当前操作系统中虚拟内存管理的最佳实践。
|
3月前
|
安全 算法 网络协议
探索Linux操作系统的内核管理
【5月更文挑战第31天】本文将深入探讨Linux操作系统的内核管理机制,包括其设计原则、主要组件以及它们如何协同工作以提供高效的系统性能。通过分析Linux内核的关键特性和功能,我们将揭示这一开源操作系统如何在各种计算环境中保持其稳定性和灵活性。
|
27天前
|
算法
深入理解操作系统的虚拟内存管理
【7月更文挑战第24天】在现代操作系统中,虚拟内存管理是一项至关重要的技术,它允许系统拥有比物理内存更大的地址空间,从而提升多任务处理能力。本文将详细探讨虚拟内存的工作原理、关键技术及其对操作系统性能的影响,帮助读者构建对虚拟内存管理的深入理解。
|
21天前
|
Cloud Native Devops 数据库
云原生架构:未来软件开发的引擎深入理解操作系统的虚拟内存管理
【7月更文挑战第30天】在这篇文章中,我们将深入探讨云原生架构的概念,以及它如何改变软件开发的世界。我们将从云原生的基本概念开始,然后深入到它的关键技术和实践,最后讨论它对软件开发的未来影响。无论你是软件开发者,还是IT专业人士,这篇文章都将为你提供深入理解和掌握云原生架构的重要信息。 【7月更文挑战第30天】在数字世界的构建中,虚拟内存是操作系统不可或缺的一环。本文将探索虚拟内存的核心概念、工作机制及其对现代计算环境的重要性,同时揭示其背后的技术细节和面临的挑战。
17 3
|
22天前
|
缓存 算法
操作系统的虚拟内存管理
【7月更文挑战第29天】本文深入探讨了操作系统中至关重要的虚拟内存管理机制,包括其设计原理、实现方式以及在现代计算机系统中的作用。通过分析分页系统、分段系统、页面置换算法和内存分配策略,揭示了虚拟内存如何优化资源利用,提高系统性能,并确保进程间的安全性与隔离性。此外,文章还讨论了虚拟内存管理面临的挑战及未来的发展方向。
|
1月前
|
缓存 算法 程序员
深入理解操作系统中的虚拟内存管理
【7月更文挑战第14天】本文将深入探讨操作系统中至关重要的组成部分——虚拟内存管理。通过分析其设计原理、实现机制以及性能优化策略,旨在为读者提供一个全面而深入的视角来理解虚拟内存在现代操作系统中的作用和重要性。文章不仅会涵盖虚拟内存的基本概念和功能,还会讨论其在多任务处理、内存保护及系统性能提升方面的贡献。
|
1月前
|
算法 Linux 调度
操作系统中的虚拟内存管理:原理与实现
本文深入探讨了操作系统中虚拟内存管理的核心概念,包括分页、分段、需求分页和页面置换算法。通过分析现代操作系统如Linux和Windows的虚拟内存实现机制,文章揭示了虚拟内存在提升内存利用率、进程隔离和保护内存中的关键作用。同时,讨论了虚拟内存管理面临的挑战,如内存泄漏、碎片化以及性能开销,并提出了相应的优化策略。
|
2月前
|
算法
深入理解操作系统中的虚拟内存管理
【6月更文挑战第19天】在现代操作系统中,虚拟内存管理是一个至关重要的组件。它不仅使得程序能够在有限的物理内存中运行更大的地址空间,还为系统提供了多任务处理能力。本文将深入探讨虚拟内存的概念、实现机制以及它在操作系统中的重要性,同时也会讨论虚拟内存管理中遇到的挑战和解决方案。
30 4
|
2月前
|
Python
Python中使用os库管理环境变量
在Python中,可以使用os库来管理操作系统的环境变量。通过os.environ对象,我们可以获取、修改和删除环境变量的值。
32 3
|
1月前
|
Windows 内存技术
nvm 管理和切换 node版本(windows操作系统)
nvm 管理和切换 node版本(windows操作系统)
41 0