磁盘结构、访问时间、调度算法
目录
一、什么是磁盘?
二、磁盘分类
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 目录下,并按照不同的语言和地区命名…...
阿尔萨斯(JVisualVM)JVM监控工具
文章目录 前言阿尔萨斯(JVisualVM)JVM监控工具1. 阿尔萨斯的功能2. JVisualVM启动3. 使用 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。 而且听说点赞的人每天的运气都不会太差ÿ…...
框架专题:反射
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” 创建一个新的仓库。填写仓库的名称,可以添加描述ÿ…...
实战演练JDK的模块化机制
实战演练JDK的模块化机制--楼兰 带你聊最纯粹的Java 你发任你发,我用Java8。你用的JDK到什么版本了?很多开源框架都已经开始陆续升级JDK版本了。你对于JDK8往后陆陆续续更新的这些版本有什么感觉吗? 很多人会说其实并没有太多的感觉。JDK的新版本不断推出一些不痛不痒…...
jdk17+springboot3项目加密部署
最近项目需要在第三方服务器部署,由于没有交付源码。所以需要将项目加密后再部署。 网上找了一圈,发现xjar这个开源项目,可以将代码加密后进行部署。看了下正是我需要的。 于是按照文档打包加密,但启动的时候居然报错。 这个结…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
