当前位置: 首页 > news >正文

磁盘结构、访问时间、调度算法

目录

一、什么是磁盘?

二、磁盘分类

1、从磁头分

2、通过盘面分

三、一次磁盘读/写的时间

四、磁盘调度算法

1、先来先到服务算法FCFS

2、最短寻找时间优先SSTF

3、扫描算法(SCAN)

4、LOOk算法

5、循环扫描算法(C-SCAN)

6、C-LOOK算法

五、减少读取延迟的方法

1、交替编号扇区

2、磁盘地址结构的设计

3、交错编号法

六、磁盘管理

1、初始化

2、引导块

3、坏块管理


一、什么是磁盘?

磁道、扇区、磁头臂、盘面、柱面
内扇区密度大
每一个盘面一个磁头
所有磁头连在一个磁臂上,只能共进退
同一个同同心圆的磁道构成一个柱面
一个扇区就是一个物理块,一般为512B
一个物理块地址用(柱面号,盘面号,扇区号)来识别
因此,读取一个块,需要做:
(1)移动磁臂,找到柱面
(2)激活盘面磁臂
(3)旋转找到扇区

二、磁盘分类

1、从磁头分

活动磁头:一个盘面只有一个磁头,通过移动找到磁道和柱面
固定磁头:每一个磁道有一个磁头

2、通过盘面分

盘片可以更换:可换盘磁盘
盘片不可更换:固定盘磁道

三、一次磁盘读/写的时间

寻道时间:
(1)启动磁头的时间s
(2)移动磁头的时间,跨越一个磁道m,需跨越n个磁道:m*n
总功寻道时间:s+m*ns

延迟时间:
定位到磁道的固定扇区的时间
平均时间为:1/2r
(平均要转半圈才能找到对应扇区)

传输时间:
(b/N)/r
b为读/写数据量,N为一个磁道的总数据量
b/N表示:数据需要几个磁道

四、磁盘调度算法

为什么有磁盘调度算法?
因为对于磁盘来说
延迟时间和数据传输时间是固定的,和磁盘转速有关
唯一可以优化的地方是寻道时间
不同的寻道顺序由不同的速度
下面的这一系列算法本质就是根据不同磁道访问顺序实现的

1、先来先到服务算法FCFS

谁先来就先服务谁

2、最短寻找时间优先SSTF

离谁近就服务谁
但是有可能产生饥饿现象
这是因为比较远的磁道可能很久都不会被服务

3、扫描算法(SCAN)

为了克服最短寻找的饥饿问题
SCAN算法规定:
只有磁头移动到最外侧磁道,才可以往内磁道移动
移动到最内磁道,才可以往外磁道移动
(就是往一个方向走到底才能返回)
缺点:
(1)只有到达最边缘才返回,有时候并没有这个必要
(2)对于各个位置的磁道响应不均匀(加入往右,最右边的磁道短期内被访问两次,而左边的很久才被再访问)

4、LOOk算法

为了解决SCAN算法的不撞南墙不回头的缺点
LOOK算法在移动方向上已经没有了其他请求就折回
(就像边走边观察,因此叫LOOl算法)

5、循环扫描算法(C-SCAN)

为了解决SCAN算法对磁道响应不公平的算法
该算法在达到边缘时,直接折返到另外一端(从最外->最内 / 从最内->最外)
(折返过程不响应任何请求)

6、C-LOOK算法

对于C-SCAN算法来说
该算法和SCAN算法一样,必须要到达最边缘才能折返
但是事实上,如果在移动方向上没有了别的请求就可以折返了
C-LOOK算法就是如此

五、减少读取延迟的方法

1、交替编号扇区

当读取多个连续的扇区时
磁头每读完一个扇区时,还需要一个短暂的准备时间
在这个准备时间内,是不可以进行扇区读取的
因此,读完扇区1之后,如果扇区2是紧挨着的,那么就来不及读取2
这能再转一圈,第二次转到扇区2时才能读取
这样就会导致很慢

如何解决?
交替编号
如图:


扇区的编号不来连续,而是相隔一个扇区
这样,在读取一个扇区之后,经过另一个中间扇区的时间内,磁头就完成了准备时间
此时,到达下一个逻辑连续扇区就可以读取了
而不用等到下一圈,效率更快

2、磁盘地址结构的设计

问题:
为什么磁盘物理地址是(柱面号,盘面号,扇区号)
而不是(盘面号,柱面号,扇区号)?

我们分别来看情况:
(1)盘面号,柱面号,扇区号
假设有两个相邻磁道的数据需要读取
第一次读取A盘面的A柱面的A磁道
下一次读取相邻的磁道
此时,读取的是A盘面的B柱面的B磁道
也就是说,需要读取同一个盘面的两个不同的磁道
读取不同的磁道,就需要启动磁头并移动

(1)柱面号,盘面号,扇区号
同样,访问两个相邻磁道的数据
第一次访问A柱面,A盘面的A磁道
第二次访问A柱面,B盘面的A磁道
此时都属于一个柱面,
因此,不需要移动磁头
这就是这种设计方案的好处

即读取地址连续的磁盘块时,可以减少磁头移动的时间

3、交错编号法

交替命名的前提是:
所有的磁头一起转动
同时,基于物理块的地址是:(柱面号,盘面号,扇区号)
假设有8柱面,4盘面,8扇区
则编号为000 00 000 ~ 111 11 111

现在考虑这样一种情况:
要访问两个连续的磁道
对于第一个磁道,为000 00 000 ~ 000 00 111
下一磁道的位置,为000 01 000 ~ 000 01 111
请跟着想象:
当时访问玩第一个磁道后
要访问哪里?
是下一个盘面的同一个柱面的磁道
如图:

此时,当第一个磁道转两圈读取完毕后
最好的状态是立即读取下一个磁道,位置在同一柱面的下一个盘面
可是,因为磁头读取完一个扇区后需要准备一段时间
因此,如果两个盘面是同步编号的(上下编号对齐)
那么就只能再转一圈,等下一圈才能访问

因此,如果使用交错编号
那么就不用等待了
如图:

六、磁盘管理

1、初始化

(1)低级格式化

将磁盘的各个磁道划分为扇区
扇区分为头、尾、数据区
各种管理数据放在扇区的头和尾
数据区放数据

(2)磁盘分区
分为若若干柱面,例如C、D盘等

(3)逻辑格式化
创建文件系统

2、引导块

每当要开机的时候
需要进行一系列的初始化操作,例如安装操作系统
这就需要执行一些初始化程序,也叫做自举程序(因为是自动完成的)
一般自举程序会放在ROM(只读寄存器)内
在厂家生产时就已经设置好的,不可以更改

可以你不能保证自举程序一直不变
显然放在ROM里是无法解决改变的问题的
怎么办?
只放一个叫做“自举装入程序”的程序在ROM里
完整的自举程序放在磁盘的某个位置,这个位置叫做启动块,启动块是固定的
(拥有启动分区的磁盘称为启动磁盘 / 系统磁盘,例如我们的C盘)
当开机时,CPU先在运行ROM中的自举装入程序
通过该进程找到引导块,将引导块中完整的自举程序读入内存执行,完成初始化
于是,如果要是修改自举程序的话,就可以在内存中进行

3、坏块管理

一般的有两种方式
第一种方式:针对简单的磁盘
在磁盘格式化时,对整个磁盘进行扫描
并对坏块在FAT表中标明
这种方式对操作系统不透明,即可以看得见坏块的存在

第二种方式:对复杂的磁盘而言
设置一个单独的磁盘控制器会维护一个坏块链表(磁盘内部自带的硬件)
磁盘出厂时,对坏块链表初始化,并在后期不断维护
同时会保留一些备用块,用于替换坏块,这样方案叫做扇区备用
在这种方式中,坏块对操作系统透明
即操作系统看不到坏块的存在
 

相关文章:

磁盘结构、访问时间、调度算法

目录 一、什么是磁盘? 二、磁盘分类 1、从磁头分 2、通过盘面分 三、一次磁盘读/写的时间 四、磁盘调度算法 1、先来先到服务算法FCFS 2、最短寻找时间优先SSTF 3、扫描算法(SCAN) 4、LOOk算法 5、循环扫描算法(C-SCAN…...

详解归并排序

归并排序 归并排序的基本概念归并排序的详细步骤1. 分解阶段2. 合并阶段3. 归并排序的递归流程 时间复杂度分析空间复杂度分析算法步骤2-路归并排序代码分析代码讲解1. 合并两个子数组的函数 merge()2. 归并排序函数 mergeSort()3. 打印数组的函数 printArray()4. 主函数 main(…...

45.在 Vue 3 中使用 OpenLayers 鼠标点击播放视频

引言 在 Web 开发中,地图可视化和互动功能是越来越重要的应用场景。OpenLayers 是一个强大的开源 JavaScript 库,用于显示和处理地图数据,支持多种地图服务和交互功能。在这个教程中,我们将介绍如何在 Vue 3 中集成 OpenLayers&a…...

《大话Java+playWright》系列教程初级篇-初识

后续代码会整理开源-大家期待吧!!! 首先讲下为啥不用python,因为不想下载各种安装插件,太麻烦了,好多不兼容。 所以选择了java。 先来讲下什么是playwright,playwright是微软开源自动化测试工…...

05.HTTPS的实现原理-HTTPS的握手流程(TLS1.2)

05.HTTPS的实现原理-HTTPS的握手流程(TLS1.2) 简介1. TLS握手过程概述2. TLS握手过程细化3. 主密钥(对称密钥)生成过程4. 密码规范变更 简介 主要讲述了混合加密流程完成后,客户端和服务器如何共同获得相同的对称密钥…...

提示词工程

一、六何分析法快速写出准确的提示词 英文单词中文解释提问时的思考示例Why何故问题的背景,包括为什么做及目标(做成什么样)最近我们要与某品牌合作推广冲牙器,对方需要我们策划一场营销活动What何事具体是什么事写一个营销策划方…...

基于python网络爬虫的搜索引擎设计

一、毕业设计(论文)题目:基于网络爬虫的搜索引擎设计 - 基于网络爬虫的搜索引擎设计1 二、毕业设计(论文)工作自 2022-09-01 起至 2022-10-28 止 三、毕业设计(论文)内容要求: 主…...

ip-协议

文章目录 1. 网络层2. ip协议2.1 ip协议格式2.2 网段划分基本概念网段划分的两种方式为什么要网段划分?特殊的IP地址IP地址数量不足 2.3 私有IP与公网IP2.4 路由 3. IP的分片与组装为什么要分片与组装?如何分片?如何组装? 1. 网络…...

Git(11)之log显示支持中文

Git(11)之log显示支持中文 Author:Once Day Date:2024年12月21日 漫漫长路有人对你微笑过嘛… 参考文档:GIT使用log命令显示中文乱码_gitlab的log在matlab里显示中文乱码-CSDN博客 全系列文章可查看专栏: Git使用记录_Once_day的博客-CSD…...

oneflow深度学习框架使用问题总结(Windows/Linux)

目录 1.简述 2.在Windows下使用Oneflow深度学习框架(错误记录,谨慎,官方不支持,需要WSL) 2.1安装Anaconda 2.1创建虚拟环境 2.2安装Pytorch 2.3安装Pycharm 2.4 安装Oneflow 3.在Linux下使用Oneflow深度学习框…...

论文研读:AnimateDiff—通过微调SD,用图片生成动画

1.概述 AnimateDiff 设计了3个模块来微调通用的文生图Stable Diffusion预训练模型, 以较低的消耗实现图片到动画生成。 论文名:AnimateDiff: Animate Your Personalized Text-to-Image Diffusion Models without Specific Tuning 三大模块: 视频域适应…...

SQLAlchemy示例(连接数据库插入表数据)

背景需求 连接数据库,插入表中一些数据。 其用户是新建用户,所以只能插入,不能更新。 再次输入数据则使用更新数据语法,这个没调试。 #! /usr/bin/env python # -*- coding: utf-8 -*-from sqlalchemy import create_engine, …...

Springboot3国际化

国际化实现步骤 Spring Boot 3 提供了强大的国际化支持,使得应用程序可以根据用户的语言和区域偏好适配不同的语言和地区需求。 添加国际化资源文件: 国际化资源文件通常放在 src/main/resources 目录下,并按照不同的语言和地区命名&#xf…...

阿尔萨斯(JVisualVM)JVM监控工具

文章目录 前言阿尔萨斯(JVisualVM)JVM监控工具1. 阿尔萨斯的功能2. JVisualVM启动3. 使用 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff…...

框架专题:反射

1. 什么是反射? 简单来说,反射是一种程序自省的能力,即在程序运行时动态地获取其结构信息或操作其行为。这包括类、方法、属性等元信息。反射的核心在于让代码变得更加动态化,从而突破静态语言的限制。 以Java为例,反…...

【Go】context标准库

文章目录 1. 概述1.1 什么是 Context1.2 设计原理1.3 使用场景源码分析核心:Context接口4个实现6个方法TODO 和 BackgroundWithCancelcancelpropagateCancel 绑定父对象WithTimeout 和 WithDeadlineWithValue总结参考1. 概述 基于版本: go1.22.3/src/context/context.go 1.1…...

LLMs之o3:《Deliberative Alignment: Reasoning Enables Safer Language Models》翻译与解读

LLMs之o3:《Deliberative Alignment: Reasoning Enables Safer Language Models》翻译与解读 导读:2024年12月,这篇论文提出了一种名为“审慎式对齐 (Deliberative Alignment)”的新方法,旨在提高大型语言模型 (LLM) 的安全性。论…...

git设置项目远程仓库指向github的一个仓库

要将你的Git项目设置为指向GitHub上的远程仓库,你需要执行以下步骤: 创建GitHub仓库: 登录到你的GitHub账户。点击右上角的 “” 号,选择 “New repository” 创建一个新的仓库。填写仓库的名称,可以添加描述&#xff…...

实战演练JDK的模块化机制

实战演练JDK的模块化机制--楼兰 带你聊最纯粹的Java ​ 你发任你发,我用Java8。你用的JDK到什么版本了?很多开源框架都已经开始陆续升级JDK版本了。你对于JDK8往后陆陆续续更新的这些版本有什么感觉吗? ​ 很多人会说其实并没有太多的感觉。JDK的新版本不断推出一些不痛不痒…...

jdk17+springboot3项目加密部署

最近项目需要在第三方服务器部署,由于没有交付源码。所以需要将项目加密后再部署。 网上找了一圈,发现xjar这个开源项目,可以将代码加密后进行部署。看了下正是我需要的。 于是按照文档打包加密,但启动的时候居然报错。 这个结…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

EtherNet/IP转DeviceNet协议网关详解

一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...

SpringCloudGateway 自定义局部过滤器

场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

uniapp 字符包含的相关方法

在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...