第六章 输入输出系统【操作系统】1

简介: 第六章 输入输出系统【操作系统】1

6.7.4 缓冲池(Buffer Pool)

1. 缓冲池的组成
空缓冲链队列emp:由空缓冲区组成

输入缓冲链队列inq:由装满输入数据的缓冲区组成

输出缓冲链队列out:由装满输出数据的缓冲区组成

4种工作缓冲区

收容输入、提取输入、收容输出、提取输出。

从某队列上取下来操作完后再挂到另一队列上
2. Getbuf过程和Putbuf过程

缓冲池中的队列是临界资源要考虑互斥与同步

Procedure Getbuf(q,buf);    从q队列头摘下缓冲区buf
   begin
       Wait(RS(q));               信号量RS(q)是队列q的长度
       Wait(MS(q));           MS(q)是对q操作的互斥信号量
       buf:=Takbuf(q);
       Signal(MS(q));
   end
Procedure Putbuf(q,buf);         buf加到q队列的队尾
   begin
       Wait(MS(q));
       Addbuf(q,buf);
       Signal(MS(q))
       Signal(RS(q));
   end

3. 缓冲区的工作方式
收容输入的工作方式:当输入进程需要输入数据时

调用Getbuf(emp,hin)过程, 从emp队列首摘下空缓

冲区作为收容输入工作缓冲区hin

(2) 把数据输入到工作缓冲区hin

(3) 调用Putbuf(inq,hin),将hin挂到inq队列尾


提取输入工作方式:当计算进程需要提取输入数据时

(1) 调用Getbuf(inq, sin)过程,从inq队列头摘下缓冲区

作为提取输入工作缓冲区sin

(2) 计算进程从工作缓冲区sin中提取数据

(3) 调用Putbuf(emp,sin), 将sin挂在emp队列尾



6.8 磁盘存储器的性能和调度

改善磁盘系统的性能:

1)选择好的磁盘调度算法,以减少磁盘的寻道时间。

2)提高磁盘 I/O 速度,以提高对文件的访问速度。

3)采取冗余技术,提高磁盘系统的可靠性,建立高度可靠的文件系统。

6.8.1 磁盘性能简述

1. 数据的组织和格式
磁盘设备可包括一个或多个物理盘片,每个磁盘片分一个或两个存储面(Surface),每个盘面上有若干个磁道(Track),磁道之间留有必要的间隙(Gap)。为使处理简单起见,在每条磁道上可存储相同数目的二进制位。 这样,磁盘密度即每英寸中所存储的位数,显然是内层磁道的密度较外层磁道的密度高。每条磁道又被逻辑上划分成若干个扇区(sectors),软盘大约为 8~32 个扇区,硬盘则可多达数百个,图中显示了一个磁道分成 8 个扇区。一个扇区称为一个盘块(或数据块),常常叫做磁盘扇区。各扇区之间保留一定的间隙。


磁盘上存储的物理记录块数目是由扇区数、磁道数以及磁盘面数所决定的。

为了在磁盘上存储数据,必须先将磁盘低级格式化。下图示出了一种温盘(温切斯特盘)中一条磁道格式化的情况。



其中每条磁道含有 30 个固定大小的扇区,每个扇区容量为 600 个字节,其中 512 个字节存放数据,其余的用于存放控制信息。

每个扇区包括两个字段:

1)标识符字段(ID Field),其中一个字节的 SYNCH 具有特定的位图像,作为该字段的定界符,利用磁道号(Track)、 磁头号(Head #)及扇区号(Sector #)三者来标识一个扇区;CRC 字段用于段校验。

2)数据字段(Data Field),其中可存放 512 个字节的数据。

值得强调的是,在磁盘一个盘面的不同磁道(Track)、每个磁道的不同扇区(Sector),以及每个扇区的不同字段(Filed)之间,为了简化和方便磁头的辨识,都设置了一个到若干个字节不同长度的间距(Gap,也称间隙)。

磁盘格式化完成后,一般要对磁盘分区。

但是,在真正可以使用磁盘前,还需要对磁盘进行一次高级格式化,即设置一个引导块、空闲存储管理、根目录和一个空文件系统,同时在分区表中标记该分区所使用的文件系统。

2. 磁盘的类型

对磁盘,可以从不同的角度进行分类。最常见的有:将磁盘分成硬盘和软盘、单片盘和多片盘、固定头磁盘和活动头(移动头)磁盘等。

1)固定头磁盘。在每条磁道上都有一读/写磁头,所有的磁头都被装在一刚性磁臂中。这种结构的磁盘主要用于大容量磁盘上。

2)移动头磁盘。每一个盘面仅配有一个磁头,也被装入磁臂中。为能访问该盘面上的所有磁道,该磁头必须能移动以进行寻道。广泛应用于中小型磁盘设备中,在微型机上配置的温盘和软盘都采用移动磁头结构。

3. 磁盘访问时间

1)寻道时间 Ts,这是指把磁臂(磁头)移动到指定磁道上所经历的时间。

2)旋转延迟时间 Tr,这是指定扇区移动到磁头下面所经历的时间。

3)传输时间 Tt,这是指把数据从磁盘读出或向磁盘写入数据所经历的时间。

6.8.2 早期的磁盘调度算法

由于在访问磁盘的时间中,主要是寻道时间,因此,磁盘调度的目标是使磁盘的平均寻道时间最少。

1. 先来先服务 FCFS

根据进程请求访问磁盘的先后次序进行调度。

优点:简单, 公平;

缺点:效率低, 相临两次请求可能会造成最内到最外的柱面寻道, 使磁头反复移动, 增加了平均寻道时间

设磁盘访问序列: 80, 55, 58, 39, 18, 90,160,150, 38,184




2. 最短寻道时间优先

该算法选择这样的进程:其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短。但这种算法不能保证平均寻道时间最短。


优点:磁盘的平均寻道时间最小

缺点:进程"饥饿"现象, 有时会造成与当前磁道距离远的访问请求长期等待得不到服务(不公平)




6.8.3 基于扫描的磁盘调度算法

1. 扫描(SCAN)算法

SSTF算法可能导致优先级低(即不断出现的新进程所要访问的磁道与当前磁头的位置时钟较劲,使原本较远的进程一直得不到满足)的进程发生“饥饿”现象。

扫描算法不仅考虑到欲访问的磁道与当前磁道间的距离,更优先考虑的是磁头当前的移动方向。例如,当磁头正在自里向外移动时,SCAN 算法所考虑的下一个访问对象,应是其欲访问的磁道既在当前磁道之外,又是距离最近的。这样自里向外地访问,直至再无更外的磁道需要访问时,才将磁臂换向为自外向里移动。这时,同样也是每次选择这样的进程来调度,即要访问的磁道在当前位置内且距离最近者。

由于在这种算法中磁头移动的规律颇似电梯的运行,因而又常称之为电梯调度算法。


2. 循环扫描(CSCAN)算法

循环扫描算法是对扫描算法的改进。如果对磁道的访问请求是均匀分布的,当磁头到达磁盘的一端,并反向运动时落在磁头之后的访问请求相对较少。这是由于这些磁道刚被处理,而磁盘另一端的请求密度相当高,且这些访问请求等待的时间较长,为了解决这种情况,循环扫描算法规定磁头单向移动。例如,只自里向外移动,当磁头移到最外的被访问磁道时,磁头立即返回到最里的欲访磁道,即将最小磁道号紧接着最大磁道号构成循环,进行扫描。


3. NStepSCAN 和 FSCAN 调度算法

1)NStepSCAN算法。

在 SSTF、 SCAN 及 CSCAN 几种调度算法中,都可能会出现磁臂停留在某处不动的情况。例如,有一个或几个进程对某一磁道有较高的访问频率,即这个(些)进程反复请求对某一磁道的 I/O 操作,从而垄断了整个磁盘设备。我们把这一现象称为“磁臂粘着”。

NStepSCAN 算法是将磁盘请求队列分成若干个长度为 N 的子队列,磁盘调度将按 FCFS 算法依次处理这些子队列。而每处理一个队列时又是按 SCAN 算法,对一个队列处理完后,再处理其他队列。当正在处理某子队列时,如果又出现新的磁盘 I/O 请求,便将新请求进程放入其他队列,这样就可避免出现粘着现象。当 N 值取得很大时,会使 N 步扫描法的性能接近于 SCAN 算法的性能;当 N=1 时,N 步 SCAN 算法便蜕化为 FCFS 算法。

2)FSCAN 算法。

FSCAN 算法实质上是 N 步 SCAN 算法的简化,即 FSCAN 只将磁盘请求队列分成两个子队列。一个是由当前所有请求磁盘 I/O 的进程形成的队列,由磁盘调度按 SCAN 算法进行处理。在扫描期间,将新出现的所有请求磁盘 I/O 的进程,放入另一个等待处理的请求队列。这样,所有的新请求都将被推迟到下一次扫描时处理。




相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
相关文章
|
14天前
|
安全 前端开发 Android开发
探索移动应用与系统:从开发到操作系统的深度解析
在数字化时代的浪潮中,移动应用和操作系统成为了我们日常生活的重要组成部分。本文将深入探讨移动应用的开发流程、关键技术和最佳实践,同时分析移动操作系统的核心功能、架构和安全性。通过实际案例和代码示例,我们将揭示如何构建高效、安全且用户友好的移动应用,并理解不同操作系统之间的差异及其对应用开发的影响。无论你是开发者还是对移动技术感兴趣的读者,这篇文章都将为你提供宝贵的见解和知识。
|
15天前
|
人工智能 搜索推荐 Android开发
移动应用与系统:探索开发趋势与操作系统演进####
本文深入剖析了移动应用开发的最新趋势与移动操作系统的演进历程,揭示了技术创新如何不断推动移动互联网生态的变革。通过对比分析不同操作系统的特性及其对应用开发的影响,本文旨在为开发者提供洞察未来技术方向的视角,同时探讨在多样化操作系统环境中实现高效开发的策略。 ####
18 0
|
24天前
|
测试技术 Android开发 开发者
移动应用与系统:涵盖移动应用开发、移动操作系统等相关话题####
本文深入探讨了移动应用开发的全过程,包括需求分析、设计、编码、测试以及发布等关键步骤。同时,还对当前主流的移动操作系统进行了简要介绍,并分析了它们之间的差异和各自的优势。通过实际案例,展示了移动应用开发的挑战与解决方案,旨在为读者提供一份全面的移动应用开发指南。 ####
|
26天前
|
人工智能 Android开发 数据安全/隐私保护
移动应用与系统:探索现代移动应用开发及操作系统的演变与未来趋势###
本文旨在深入探讨现代移动应用开发及移动操作系统的演变历程,并分析其未来的发展趋势。通过梳理移动应用从早期的简单工具到如今的多功能平台的转变过程,以及主流移动操作系统如iOS和Android的发展路径,本文揭示了技术创新如何不断推动移动生态系统的进步。此外,文章还讨论了当前面临的挑战及潜在的解决方案,为开发者和研究人员提供有价值的参考。 ###
|
1月前
|
vr&ar Android开发 数据安全/隐私保护
移动应用与系统:探索移动应用开发与移动操作系统的协同进化####
本文深入探讨了移动应用开发与移动操作系统之间的紧密关系,揭示了两者如何相互促进、共同发展。随着智能手机的普及和移动互联网的飞速发展,移动应用已成为人们日常生活中不可或缺的一部分。本文分析了当前主流移动操作系统的特点,以及移动应用开发的最新趋势和技术挑战,旨在为开发者提供一个全面的视角,以理解这一领域的复杂性和机遇。 ####
|
14天前
|
5G 数据安全/隐私保护 Android开发
移动应用与系统:探索开发趋势与操作系统革新####
本文深入剖析当前移动应用开发的最新趋势,涵盖跨平台开发框架的兴起、人工智能技术的融合、5G技术对移动应用的影响,以及即时应用的发展现状。随后,文章将探讨主流移动操作系统的最新特性及其对开发者社区的影响,包括Android的持续进化、iOS的创新举措及华为鸿蒙OS的崛起。最后,还将讨论移动应用开发中面临的挑战与未来的发展机遇,为读者提供全面而深入的行业洞察。 ####
|
21天前
|
人工智能 5G 开发工具
移动应用与系统的未来趋势:开发、操作系统创新及挑战###
本文探讨了移动应用开发和移动操作系统的最新发展趋势,包括人工智能的集成、跨平台开发工具的兴起以及5G技术对移动生态的影响。同时,还分析了开发者面临的主要挑战,如安全性问题、性能优化和用户体验提升等。通过具体案例和技术解析,本文旨在为开发者提供前瞻性指导,帮助他们在快速变化的移动科技领域保持竞争力。 ###
|
1月前
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
57 0
Vanilla OS:下一代安全 Linux 发行版
|
29天前
|
NoSQL Linux PHP
如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤
本文介绍了如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤。接着,对比了两种常用的 PHP Redis 客户端扩展:PhpRedis 和 Predis,详细说明了它们的安装方法及优缺点。最后,提供了使用 PhpRedis 和 Predis 在 PHP 中连接 Redis 服务器及进行字符串、列表、集合和哈希等数据类型的基本操作示例。
55 4
|
1月前
|
人工智能 安全 Linux