操作系统——大容量存储结构

笔记内容及图片整理自XJTUSE “操作系统” 课程ppt,仅供学习交流使用,谢谢。

大容量存储结构概述

磁盘

磁盘为现代计算机系统提供大量外存。每个盘片为平的圆状(类似CD),普通盘片直径为4.5~9.0厘米。盘片的两面都涂着磁质材料,通过在盘片上进行磁性记录可以保存信息。

读写磁头在盘片表面上方飞行,磁头附着在磁臂上,磁臂将所有磁头作为整体而一起移动。盘片表面逻辑地分成一些圆形磁道,再细分为扇区,同一磁臂位置的磁道集合形成了柱面。事实上,每个磁盘驱动器有数千个同心柱面,每个磁道包括数百个扇区,因此磁盘驱动器的存储容量按GB来计算。

固态磁盘

固态磁盘SSD是非易失性存储,具有与传统硬盘相同的特性,但固态磁盘比硬盘更加可靠(没有移动部件),速度也更快(没有寻道时间/旋转延迟)。当然与传统硬盘相比,SSD的每兆字节更昂贵、容量更大、寿命更短,因此用途有限,常用于存储文件系统元数据以提高性能或者性能方面期望更小、更快、更节能的笔记本电脑。

磁带

磁带可以相对永久地保存大量数据,但是与内存和磁盘相比,磁带的访问时间也更长。另外随机访问速度上磁带比磁盘慢千余倍,因此磁带常用于备份不常使用的信息或者作为系统间信息传输的媒介。磁带大致有两种存储器:栈式存储器(保存一些磁带的库)和队式存储器(保存数以千计磁带的库)。通常,磁带上存有磁盘驻留文件,以便降低存储成本,计算机可以为了当前的使用把磁盘驻留文件传输回到磁盘上。

磁盘结构

磁盘设备是以一种逻辑块的一维大数组的形式编址的,逻辑块是传输的最小单位,逻辑块的一维数组映射到磁盘上一些相连的扇区。0扇区是最外边柱面的第一个磁道的第一个扇区。数据首先映射到一个磁道,其余数据映射到同一柱面的其他磁道,然后按照从外向内的顺序映射到其余的柱面。

磁盘组由若干磁盘组成,绕枢轴高速旋转,磁盘转速7200转/分。盘块物理地址由柱面号、磁头号、扇区号三部分组成。令块号B、柱面数L、盘面数M、扇区数N。

柱面号——各盘面所有读写磁头同时移动,并定位在同样的垂直位置磁道上,这些磁道形成一个柱面,由外向内依次编号:0,1,2,……,L;柱面号i=int(B, M ×N)。

磁头号——磁盘有效盘面从上到下依次编号:0,1,2,……,H;磁头号j=int(mod(B, M ×N), N)。

扇区号——将盘面分割成大小相等的扇区:0,1,2,……,n;扇区号k=mod(mod (B, M ×N), N)。

磁盘I/O速度的高低,将直接影响文件系统的性能,提高磁盘I/O速度的主要途径有:

1)选择性能好的磁盘

2)设置磁盘高速缓冲区

3)采用好的磁盘调度算法

磁盘访问时间Ta

寻道时间Ts是把磁头从当前位置移动到指定磁道上所经历的时间,它与磁盘转速、移动的磁道数有关。

令磁盘启动时间s、磁头移动1条磁道所花费时间m,共有n条磁道,则Ts = m × n + s。对于—般磁盘,m=0.2;对于高速磁盘,m≤0.1;磁盘启动时间s约为2ms。—般情况下, 寻道时间将随着寻道距离的增大而增大。

旋转延迟时间Tr是把指定扇区移动到磁头下面所经历的时间,它与磁盘转速有关。

令磁盘转速为r,则Tr = 1 / 2 * r。

若磁盘旋转速度为5400 r/min,则每转时间为11.1ms,平均旋转延迟时间Tr为5.55ms。

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

令所读写的字节数为b,磁盘旋转速度为r,一条磁道上的字节数为N,则Tt = b /(r * N)。

寻道时间和旋转延迟时间通常占据磁盘访问时间的大头,基本都与所读写数据的多少无关。目前随着磁盘传输速率不断提高,数据传输时间所占的比例更低。可见适当地集中数据传输将有利于提高传输效率,则Ta = Ts + 1 /(2 * r)+ b /(r * N)。

磁盘高速缓存

磁盘高速缓存利用内存中的存储空间暂存从磁盘中读出的一系列盘块中的数据,即高速缓存是一组在逻辑上属于磁盘,而在物理上驻留在内存中的盘块。它有两种实现形式:

1)在内存中开辟一个单独的大小固定的存储空间,不受应用程序的影响

2)把所有未利用的内存空间变为一个缓冲池,供请求分页系统和磁盘I/O共享。

磁盘高速缓存使用的置换算法常为LRU,即将高速缓存中所有盘块数据拉成一条LRU链,将会严重影响到数据一致性的和很久都不会再使用的盘块放入LRU链的头部,使它们能够优先写回磁盘;对于那些可能在不久又会访问的数据,应放在LRU链的尾部,以便以后再使用时可以直接在高速缓存中找到。

磁盘调度

操作系统的职责之一是高效使用硬件。对于磁盘设备,满足这个要求意味着具有很短的访问时间和较宽的磁盘带宽,且寻道时间约等于寻道距离。通过管理磁盘I/O请求的处理次序,可以改善访问时间和磁盘带宽。每当需要进程执行磁盘I/O操作时,进程就向操作系统发出一个系统调用,这个请求需要以下信息:

1)该I/O操作是输入还是输出

2)传输的磁盘地址是什么

3)传输的内存地址是什么

4)传输的扇区数目是什么

若所需要的磁盘设备和控制器空闲,则立即处理请求;若忙碌则任何新的服务请求都会添加磁盘设备的待处理请求队列。对于具有多个进程的一个多道程序系统,磁盘队列可能有多个待处理的请求。因此当一个请求完成时,操作系统可以自行选择待处理的请求服务。

FCFS调度-先来先服务

FCFS调度是磁盘调度的最简单形式,这种算法优先执行先到达的请求,公平但通常速度慢。

SSTF调度-最短寻道时间优先

SSTF调度是SJF调度的一种形式,它选择从当前磁头位置所需寻道时间最短的请求,性能提升但有可能引起某些较远请求的饥饿。

SCAN调度-扫描

SCAN调度也称为电梯算法,磁头从磁盘一端开始向另一端移动,沿途响应访问请求,直到抵达磁盘的另一端,此时磁头反向移动并继续响应服务请求。

C-SCAN调度-循环扫描

C-SCAN调度是SCAN调度的变种,目的是提供更加均匀的等待时间,它把所有柱面看成一个循环的序列,最后一个柱面接续第一个柱面。磁头从磁盘的一端向另一端移动,沿途响应请求。当它到了另一端后立即回到磁盘开始处,返回途中不响应任何请求。

LOOK调度-改进扫描

LOOK调度是SCAN调度的一种形式,磁臂在每个方向上仅仅移动到最远的请求位置,然后立即反向移动,而不需要移动到磁盘的一端。其他规则与SCAN调度相似。

C-LOOK调度-改进循环扫描

C-LOOK调度是C-SCAN调度的一种形式,磁臂在每个方向上仅仅移动到最远的请求位置,然后立即反向移动,而不需要移动到磁盘的一端。其他规则与C-SCAN调度相似。

NSCAN调度-分步扫描

NSCAN调度将磁盘请求队列分成若干个长度为N的子队列,磁盘调度按照FCFS依次处理这些子队列,而处理一个子队列内部时又按照SCAN算法。当处理某一子队列时,若又出现新的I/O请求,则将请求进程放入其他子队列。

当N取值很大时,算法性能接近于SCAN算法;当N=1时,算法成为FCFS算法。总体上NSCAN调度具有能使I/O请求的等待时间不至于过长,避免饿死现象的优点。

FSCAN调度-简化分布扫描

FSCAN调度只将磁盘请求队列分成两个子队列,其中一个子队列由当前所有请求磁盘I/O的进程组成,按SCAN算法调度;扫描期间新出现的请求进程放入另一个等待处理的子队列。

磁盘管理

磁盘格式化

物理格式化,也称为低级格式化把磁盘划分成扇区,以便磁盘设备能够读写。为了使用磁盘保存文件,操作系统还需要在磁盘上保存它自身的数据结构,这分为两步:

1)将磁盘分为由一组或多组柱面组成的分区

2)逻辑格式化,也称为创建文件系统,即将初始的文件系统数据结构存储到磁盘上,这些数据结构包括空闲和已分配的空间和一个初始为空的目录。

启动块初始化系统需要先引导程序存储在ROM中,再引导程序装载程序。

引导块

计算机需要一个初始程序来运行打开电源操作或重启操作,这个初始程序被称为自举程序。它初始化系统的所有部分,从CPU寄存器到设备控制器和内存,接着启动操作系统。因此自举程序找到磁盘上的操作系统内核,加载到内存并转到起始地址以便开始执行操作系统。自举程序通常存储在ROM中,因为ROM不需要初始化而且位于固定位置,便于处理器在通电或复位后开始执行且不会受到计算机病毒的影响。它初始化系统的所有方面,然后通过从MBR(主引导记录,引导代码存在磁盘的第一个扇区)读取引导代码来启动操作系统。

坏块

磁盘具有移动部件且容错差,导致容易出现故障,甚至一个或多个扇区坏掉,需要处理。

对于简单磁盘,如IDE磁盘,需要手动处理这些坏块。发现坏块后系统会在FAT条目中写入特殊值,告诉分配例程不要使用该块。

对于高端磁盘,如SCSI磁盘,具有用于处理坏块的扇区备用等方法。控制器维护磁盘上的坏块列表,该列表在工厂的物理格式化(留出操作系统不可见的备用扇区)过程中初始化,并在磁盘的生命周期内更新。控制器还能告诉控制器用备用扇区之一在逻辑上替换坏扇区。

交换空间管理

交换是在磁盘和内存之间移动进程,交换空间指虚拟内存使用磁盘空间作为对主存的扩展。交换空间可以在常规的文件系统中实现,或者更通常的情况是放在一个单独的磁盘分区里。交换空间管理是操作系统的一个底层任务,追求的是访问速度,而不是存储效率。

交换空间的使用

不同操作系统使用交换空间的方式不同,这取决于操作系统采用的内存管理算法。采用整体进程交换的操作系统,用交换空间存放整个进程的映像;采用请求分页的操作系统,用交换空间存放被换出的页。一个系统所需的交换空间大小取决于:

1)物理内存容量

2)需后备的虚拟内存容量

3)虚拟内存的使用方式

例如Solaris系统交换空间的容量为虚存超出物理内存的部分,传统Linux系统交换空间的容量为物理内存的2倍,现代Linux系统则去除了此限制并普遍采用更小的交换空间。

交换空间位置

原始分区方法:若交换空间位于普通文件系统上,则交换空间作为一个文件存在于文件系统中,由文件系统进行管理,包括创建、命名、分配空间等操作;

文件系统方法:若交换空间是一个单独的磁盘分区,则交换空间存在于一个单独的未格式化的分区中,这里没有文件系统或目录结构,由交换空间管理程序独立完成分配和回收。

有些操作系统较为灵活,可以采用原始分区方法和文件系统方法进行交换。例如Linux系统策略和实现是分开的,系统管理员可以决定使用哪种类型,它需要权衡文件系统分配和管理的便利饥饿原始分区交换的性能。

磁盘可靠性

磁盘使用技术中,有几种实现都包括了使用多个磁盘协同工作方式,因此可靠性尤为重要。磁盘条使用一组磁盘作为一个存储单元,RAID系统依靠存储冗余数据改善了存储系统的性能和可靠性,镜像或影像为每个磁盘保存了备份,块交叉奇偶方式大大地减少了冗余。磁盘可靠性问题的最终解决是引入冗余,即使磁盘故障,数据也不会彻底丢失。

RAID系统内容包含在计算机组成原理中。

三级存储设备

三级存储的定义特征是低成本,它通常由可移动介质构成,典型的例子是软盘和光盘。

软盘——在又薄又软的盘面上面涂上磁介质,装在一个用于保护的塑料套中。大多数软盘的容量是1MB,类似的技术也用于容量大于1GB的可移动磁盘。事实上,可移动磁盘的速度几乎与硬盘一样快,但由于可移动磁盘暴露在外,其损坏的风险更大。

光盘——在一个涂有磁介质的刚性盘面上记录数据,激光的热量用来放大一个大面积脆弱的磁区域来记录数据,而激光的光线用来读取数据。光电磁头距离盘面的距离比磁头远,并且磁介质上覆盖有塑料或玻璃的保护层以抗磁头撞击。通常,光盘不使用磁介质,它使用激光改造过的特殊材料。

性能

三级存储设备的性能主要由速度、可靠性、成本三方面决定。

速度——三级存储速度的两个方面是带宽和延迟。带宽用每秒的字节数来衡量,持续带宽指大量传输过程中的平均数据率;有效带宽指平均整个I/O时间,包括寻道定位以及盘碟选择。访问延迟是定位数据需要的时间。磁盘访问时间指移动磁臂来选择柱面,并且等待旋转延迟;访问磁带需要把所选的块倒到磁带头的位置(一般来说,对盘碟的随机访问比对磁盘的随机访问要慢一千倍)。三级存储成本低,这是许多便宜的盘碟使用少量昂贵驱动器的结果。

可靠性——固定磁盘驱动器比可移动磁盘或磁带驱动器更加可靠,光介质比磁介质的磁盘或磁带更加可靠。对于固定的硬盘,磁头撞击通常会破坏数据,然而磁带或光盘驱动器的错误通常对数据盘碟是无害的。

成本——主存比磁盘存储的成本要高很多。如果每个驱动器只用一条磁带,那么硬盘存储的每兆字节成本与磁带不相上下。因此最便宜的磁带驱动器和最便宜的磁盘驱动器的存储容量几乎一样,只有当盘碟数量远大于驱动器数量的时候,三级存储才能节约成本。

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

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

相关文章

CSS一些小点 —— 12.7

1. box-sizing: border-box box-sizing 属性,默认值为 content-box box-sizing: border-box 使padding和border的值不会再影响元素的宽高;padding和border的值算在指定宽高的内部(但是外边距依然算做外部) 2. overflow: hidden …

【GESP】C++一级练习 luogu-P1425, 小鱼的游泳时间

GESP一级综合练习,主要涉及时间计算,难度★☆☆☆☆。 题目题解详见:https://www.coderli.com/gesp-1-luogu-p1425/ 【GESP】C一级练习 luogu-P1425, 小鱼的游泳时间 | OneCoderGESP一级综合练习,主要涉及时间计算,难…

【网络协议栈】数据链路层(内附手画分析图 简单易懂)以太网、MAC地址、局域网、交换机、MTU、ARP协议

每日激励:【无限进步】“梦想可以大,但第一步总是小” 绪论​: 本章将开始到达TCP/IP协议中的最后一层数据链路层,本章将会写到我们日常中常见的局域网以及认识数据链路层中非常重要的协议ARP协议,后续还将进行更新网络…

二叉树的深搜(不定期更新。。。。。)

二叉树的深搜 验证二叉搜索树 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左 子树 只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉…

51c嵌入式~单片机合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/12581900 一、STM32代码远程升级之IAP编程 IAP是什么 有时项目上需要远程升级单片机程序,此时需要接触到IAP编程。 IAP即为In Application Programming,解释为在应用中编程,用户自己的程…

使用setsockopt函数SO_BINDTODEVICE异常,Protocol not available

前言 最近在使用OLT的DHCP Server的时候发现一些异常现象,就是ONU发的一个vlan的discover包其他不同vlan的DHCP地址池也会收到,导致其他服务器也发了offer包,ONU同时会有多个ip地址。一开始是没有使用SO_BINDTODEVICE,后面查到使…

02 conda常用指令

目录 命令快速查找命令详细解释列出当前conda中存在的解释器环境使用指定的解释器环境创建虚拟环境激活自己创建的虚拟环境虚拟环境删除切换回主环境找到你计算机中安装的miniconda3的跟目录找到虚拟环境的目录选择需要删除的虚拟环境文件夹确认环境是否删除 补充删除虚拟环境指…

BEVFormer详细复现方案

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

应用案例 | 船舶海洋: 水下无人航行器数字样机功能模型构建

水下无人航行器数字样机功能模型构建 一、项目背景 为响应水下装备系统研制数字化转型及装备系统数字样机建设的需要,以某型号水下无人航行器(Underwater Unmanned Vehicle,UUV)为例,构建UUV数字样机1.0功能模型。针对…

【NIPS2024】Unique3D:从单张图像高效生成高质量的3D网格

背景(现有方法的不足): 基于Score Distillation Sampling (SDS)的方法:从大型二维扩散模型中提取3D知识,生成多样化的3D结果,但存在每个案例长时间优化问题/不一致问题。 目前通过微…

手机LCD分区刷新技术介绍

分区刷新也称为分区变频,LCD分区刷新功能的目的是将屏幕分为上下半区,分区显示不同帧率,上方区块High Frame Rate,下方区块Low Frame Rate。使用者可以动态自定义上方高刷显示区的结尾位置。 当前的智能手机屏幕上,显示…

NLP算法具备技能

摘要:好久不看理论,最近把自己学过以及用到过的东西都列了出来,主要是这个大纲体系,详细的内容部分是使用LLM来辅助编写的。 一、大模型 1.1 常用大模型 1.1.1 Qwen ‌Qwen大模型‌是由阿里巴巴开发的系列大语言模型&#xff…

学习日志022 -- python事件机制

作业: 1】思维导图 2】完成闹钟 main.py import sysfrom PySide6.QtCore import QTimerEvent, QTime,Qt from PySide6.QtGui import QMovie,QMouseEvent from PySide6.QtWidgets import QApplication, QWidget from Form import Ui_Formclass MyWidget(Ui_Form,Q…

JAVAWeb中的Servlet学习

一 Servlet简介 1.1动态资源和静态资源 静态资源 无需在程序运行时通过代码运行生成的资源,在程序运行之前就写好的资源.例如:html css js img ,音频文件和视频文件 动态资源 需要在程序运行时通过代码运行生成的资源,在程序运行之前无法确定的数据,运行时动态生成,例如Servle…

重生在我在21世纪学C++—赋值操作符、类型转换、单目操作符

一、赋值操作符 在变量创建的时候给一个初始值叫初始化。在变量创建好后,再给⼀个值,这叫赋值。 int a 100 ; //这叫初始化 a 200 ; //这叫赋值, 就是赋值操作符 赋值操作符 是⼀个随时可以给变量(不能是常…

03、Node.js安装及环境配置

1.下载node.js 下载地址:Node.js 2.安装 2.1 自定义安装路径(可以选择默认) 下图根据本身的需要进行,我选择了默认Node.js runtime,然后Next: Node.js runtime :表示运行环境 npm package mana…

【Java】反射简介

框架的核心和架构师的核心 反射和代理是重中之重 反射 反射的作用 在运行的时候由代码获取类的信息 三种获取类信息的方式: 对象.getClass()Class.forName("类的路径")类.class Class :一个用来存储类信息的类 获取类信息是获取的整体的…

Qt入门8——Qt文件

1. Qt文件概述 文件操作是应用程序必不可少的部分。Qt作为⼀个通用开发库,提供了跨平台的文件操作能力。Qt 提供了很多关于文件的类,通过这些类能够对文件系统进行操作,如文件读写、文件信息获取、文件复制或重命名等。 2. 输入输出设备类 在…

常量变量和一些运算符

3.4 变量 常量:!final关键字 final修饰基本类型不可以第二次赋值final修饰的引用类型不可以第二次改变指向final修饰的类不可以被继承final修饰的方法不可以被重写final防止指令重排序,遏制流水线性能优化,保障多线程并发场景下…

内存管理面试常问

为什么要有虚拟内存? 虚拟内存 如果你是电⼦相关专业的,肯定在⼤学⾥捣⿎过单⽚机。 单⽚机是没有操作系统的,所以每次写完代码,都需要借助⼯具把程序烧录进去,这样程序才能跑起来。 另外, 单⽚机的 CPU …