设备驱动与文件系统:03 生磁盘的使用

article/2025/6/26 17:31:49

磁盘驱动学习开篇

从这一讲开始,我们进入设备驱动的学习,具体聚焦于设备管理的最后一个部分——磁盘管理。磁盘管理实践也是操作系统课程的最后一块内容。磁盘的驱动器本质上仍是一种设备驱动,其原理不变,核心依旧是文件视图、磁盘的中断处理这三部分内容。不过,磁盘管理相较于之前讲的显示器和键盘管理要复杂得多,其抽象层次更为丰富。

弄明白磁盘驱动处理,整个操作系统课程的学习便全部结束。掌握磁盘驱动原理后,面对如网卡、打印机等同样复杂的设备驱动,我们也能从容应对。接下来,我们将分步骤、分层次地学习磁盘在操作系统中是如何被驱动和处理的。

磁盘工作原理初探

本次学习从生磁盘及其使用入手,这和之前的学习思路一致。在这里插入图片描述
我们先了解磁盘的基本工作原理:通过向磁盘控制器发送out指令,控制器控制磁盘进行读写操作;磁盘工作完成后,向CPU发出中断信号,以便进行后续处理。整个过程的核心就是out指令、中断处理,以及如何逐步抽象形成文件视图,而今天的重点是让磁盘工作起来。
在这里插入图片描述
在这里插入图片描述

磁盘由盘片、磁道、磁头组成。读写磁盘的基本单位是扇区,每个扇区通常为512字节。在实际读写过程中,首先移动磁头到指定磁道,接着磁盘旋转,当目标扇区转到磁头下方时,利用磁生电(读操作)或电生磁(写操作)原理,实现磁盘与内存缓冲区的数据交互。概括来说,磁盘读写主要包括移动磁头、旋转磁盘、数据传输这三个步骤,即寻道、旋转加上数据传输 。

磁盘使用的第一层抽象:从扇区到盘块在这里插入图片描述

要使用磁盘,需向磁盘控制器传递柱面、磁头、扇区、缓存位置等参数。柱面由多个盘片上相同位置的磁道组成,磁头决定在哪个盘面上读写,扇区确定具体的读写位置。通过传递这些参数,结合DMA(直接内存访问)技术,就能实现磁盘与内存的数据交换,而实际操作中,最终是通过out指令将相关参数写入磁盘控制器的端口来完成读写操作。
在这里插入图片描述

不过,直接使用这种方式较为复杂,用户需要了解诸多细节。为了简化操作并提高效率,我们进行第一层抽象,引入盘块号的概念。用户程序只需发送盘块号,操作系统的磁盘驱动负责将盘块号转换为柱面、磁头和扇区号(即chs)。

这种抽象具有重要意义。一方面,用户无需再关注复杂的三维地址(柱面、磁头、扇区),只需处理简单的一维盘块号,使用起来更加便捷;另一方面,操作系统通过合理规划盘块号与实际物理地址的映射关系,提高了磁盘读写效率。例如,我们通常会连续访问盘块,为了加快连续盘块的读写速度,操作系统会将相邻盘块号对应的盘块尽量放置在同一磁道上,减少寻道时间。
在这里插入图片描述在这里插入图片描述

在实现盘块号到chs的转换时,我们可以根据磁盘的物理参数(如每个柱面的磁头数、每个磁头的扇区数),通过数学运算得出。具体来说,如果已知盘块号block,可以通过block对扇区数sector取余得到扇区号s,再结合其他运算得到柱面号c和磁头号h

此外,操作系统还将读写单位从扇区改为盘块,一个盘块由连续的几个扇区组成。这样做虽然会造成一定的空间浪费,但由于磁盘读写中寻道时间占比较大,增大读写单位可以减少寻道次数,从而显著提高读写速度,这是一种以空间换时间的策略。至此,上层应用程序可以通过盘块号访问磁盘,隐藏了底层细节,提升了使用效率 。

磁盘使用的第二层抽象:多进程下的磁盘调度在这里插入图片描述

在多进程环境下,多个进程都需要使用磁盘。如果只有一个进程使用磁盘,它可以直接用盘块号计算chs,通过out指令驱动磁盘控制器;但多个进程同时使用时,就需要引入请求队列。多个进程将各自的盘块访问请求放入队列,磁盘驱动在磁盘中断时从队列中取出请求,进行chs的换算和out指令操作 。

这就涉及到磁盘调度问题,即如何合理安排请求队列中的磁盘访问顺序,以提高磁盘工作效率。磁盘读写中,寻道时间是最主要的耗时因素,因此调度算法的目标就是尽量缩短寻道时间。
在这里插入图片描述

常见的调度算法从“先来先服务(FCFS)”开始,即按照磁盘请求的先后顺序进行调度。但这种算法可能导致磁头频繁地长途移动,效率较低。例如,磁头起始位置为53,请求序列为98、183、37等,磁头会在不同柱面间来回移动,总移动距离较大。
在这里插入图片描述

为了改进,出现了“短寻道优先(SSTF)”算法,它从当前磁头位置出发,优先处理离当前位置最近的请求。这种算法能减少磁头移动距离,但会出现问题:由于磁盘请求通常集中在中间柱面,磁头会在中间区域频繁移动,导致远处的请求长时间得不到处理,产生饥饿现象。
在这里插入图片描述

为解决上述问题,又提出了“扫描调度(SCAN)”算法,也叫电梯算法。其基本思想是磁头像电梯一样,先向一个方向移动,处理该方向上的所有请求,到达一端后再反向移动,处理另一方向的请求。这样既保证了公平性,又避免了磁头频繁回退,减少了总移动距离。在这里插入图片描述
如果进一步优化,让磁头在到达一端后快速复位,再向另一方向移动,就形成了更公平的调度方式 。
在这里插入图片描述
在这里插入图片描述

在实际代码实现中,多个进程访问磁盘时,先根据用户发来的盘块号换算成扇区号,将请求加入请求队列。加入队列时,使用临界区保护确保共享结构的操作安全,并按照电梯算法的规则,根据柱面号对请求进行排序,形成有序队列。磁盘驱动在磁盘中断时,从队列中取出请求,进行chs的计算,通过out指令发送给磁盘控制器,完成读写操作。操作完成后,再次中断处理,唤醒等待的进程,使其继续工作。

总结与展望

到这里,我们完整地讲述了生磁盘的使用过程,从磁盘的直接操作逐步抽象,实现了多进程高效、方便地使用磁盘,过程中还涉及到进程间的合作、临界区保护、同步等操作系统的重要概念。不过,这里还留下一个伏笔:如何根据文件得到盘块号?后续将把这部分内容与文件系统相结合,呈现出操作系统真正读写文件、管理磁盘的完整故事。


http://www.hkcw.cn/article/DZaMWJMFRE.shtml

相关文章

【MATLAB代码】制导——平行接近法,三维,目标是运动的,订阅专栏后可直接查看MATLAB源代码

文章目录 运行结果简介代码功能概述运行结果核心模块解析代码特性与优势 MATLAB例程代码调整说明相关公式视线角速率约束相对运动学方程导引律加速度指令运动学更新方程拦截条件判定 运行结果 运行演示视频: 三维平行接近法导引运行演示 简介 代码功能概述 本代码…

spdlog介绍与使用

文章目录 spdlog的介绍与安装使用样例二次封装 spdlog的介绍与安装 spdlog 是一个高性能、超快速、零配置的 C 日志库,它旨在提供简洁的 API 和丰富的功能,同时保持高性能的日志记录。它支持多种输出目标、格式化选项、线程安全以及异步日志记录。 特点…

w373驾校预约学习系统的设计与实现

🙊作者简介:多年一线开发工作经验,原创团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文…

【PCB设计】STM32开发板——产品设计流程及元件选型

一、PCB设计流程 二、产品设计流程 三、需求及方案 四、元器件的选型 1.MCU选型 2.STM32单片机命名规则 根据命名规则及我们的需求,最终选择使用STM32F103VET6的芯片。 3.MCU最小系统 MCU最小系统的电路设计可以参考相关的数据手册。 4.信号接口选型 ADC以及DAC一…

守护进程导致程序kill掉后被重新拉起

ps aux | grep "supervisord" 从上面的命令可以查找到守护进程的配置文件位置: /etc/supervisor/supervisord.conf 从配置信息看,守护进程的配置文件,又加载了/etc/supervisor/conf.d/*.conf的所有相关配置信息; cat /…

【iOS安全】使用LLDB调试iOS App | LLDB基本架构 | LLDB安装和配置

LLDB基本架构 参考: https://crifan.github.io/ios_re_dynamic_debug/website/debug_code/lldb_debugserver.html https://book.crifan.org/books/ios_re_debug_debugserver_lldb/website/ LLDB安装和配置 1. 让iPhone中出现/Developer/usr/bin/debugserver 最初…

RPG19.设置敌人

1.启动项目,创建爱你CharacterBase的子类 2.创建敌人数据资产 3.创建敌人的ASC 4.创建敌人的CombatComponent 5.打开EnemyCharacter, // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "Core…

ROS 2源换源后GPG错误解决方法

报错形式: 解决: 1. 删除旧的 ROS 密钥 sudo rm /etc/apt/trusted.gpg.d/ros.gpg 2. 重新下载并导入新的 ROS GPG 密钥 sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /etc/apt/trusted.gpg.d/ros.gpg 3. 确…

day 43

应用cnn对kaggle上的图像数据集进行练习 数据集地址:Cat and Dog import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pyplot as plt im…

哈佛蒋雨融自曝初中被霸凌 母校撤宣传引争议

哈佛蒋雨融自曝初中被霸凌母校撤宣传引争议。在哈佛大学毕业典礼上,中国学生蒋雨融作为代表发表演讲,本应是件荣耀的事情,却因各种质疑声陷入舆论漩涡。她自曝初中时期遭受霸凌的经历,更是将事件推向高潮,让她的母校青岛65中成为焦点,学校迅速撤下了此前的相关宣传。蒋雨…

江淮能靠华为“镀金”翻身吗 自身硬实力与华为软实力的乘法效应

江淮能靠华为“镀金”翻身吗 自身硬实力与华为软实力的乘法效应!江淮汽车在卡车领域享有盛名,尤其是轻卡系列。但江淮集团的产品体系非常广泛,涵盖了重、中、轻、微型卡车、多功能商用车、MPV、SUV、轿车、客车以及专用底盘、变速箱、发动机和车桥等核心零部件。江淮汽车在5…

因性侵被拘的湖南机场董事长被除名 新领导已上任

因性侵被拘的湖南机场董事长被除名 新领导已上任!今年4月,湖南省机场管理集团党委书记、董事长,湖南省机场管理局局长邱继兴因涉嫌性侵一女子被警方刑拘,此事引发了广泛关注。6月2日,该集团官网已撤下邱继兴的职务信息,官方微信公众号中大量关于他的内容也已消失。4月18日…

媒体:关税升级 特朗普似乎有些着急 欧盟警告将加快报复措施

6月2日,美股三大指数集体收涨,道指上涨0.08%,纳指上涨0.67%,标普500指数上涨0.41%。热门科技股多数上涨,AMD和Meta涨幅超过3%,超微电脑上涨近3%,博通涨幅超过2%,英伟达上涨超过1%,特斯拉和谷歌跌幅超过1%。热门中概股也多数上涨,纳斯达克中国金龙指数上涨0.53%。百度…

律师解读孙继海青训机构嗨球纠纷 赔偿金额成争议焦点

6月2日,南方周末发布了一篇专题报道,其中一位爱好足球的律师王国良对孙继海青训机构嗨球和家长之间的纠纷进行了分析。王国良不仅是一名律师,还赞助了一支业余足球队,并全程关注了此次事件。他表示,家长们并不是不愿意赔偿,而是认为18万元的赔偿金额过高,这可能是因为双…

迪丽热巴生日工作室发文 撕拉片写真惊艳全场

迪丽热巴生日工作室发文!迪丽热巴工作室在6月3日生日前夕发布了一组质感十足的“撕拉片”写真,瞬间点燃粉丝热情。这组被网友盛赞为“最权威撕拉片”的作品以胶片独特的显影魅力作为生日序曲,主题直指“迪丽热巴0603生日快乐”。官博配文深情:“胶片显影的第8秒,是时间送来…

48岁女子怀孕以为发福已顺产生子:孙子比新出生的儿子大3岁

48岁女子怀孕以为发福已顺产生子 女儿喜迎弟弟!6月2日,广东河源一名48岁的再婚女子在怀孕后仅15分钟就顺利产下一名男婴。她的28岁女儿对此表示非常高兴,并发文称“从此多一个人为妈妈保驾护航了”。这名女子的丈夫提到,他们的孙子比新出生的儿子大3岁。据报道,这位女子发…

php执行后报502,无错误提示的排查和解决

文章目录 一、阐述问题二、开始排查1.执行代码展示2.PHP层面排查问题3.系统层面排查问题1. 分析系统日志2. core dump 分析2.1 core dump 是什么2.2 core dump 配置 并 生成 core 文件2.3 gdb 解析 core 文件 4. 问题解决 三、赠送内容四、总结 一、阐述问题 这个问题花了我起…

灵动相册,助力教学:在线教学场景的图片管理利器——仙盟引渡仙君-智能编程——仙盟创梦IDE

专为在线教学打造的相册工具,以蓝色专业风设计,纯前端实现,不依赖后端。具备图片管理、浏览缩放及上传功能。界面布局合理,交互体验佳,响应式适应多屏。模块化设计易维护扩展,助教师轻松管图,学…

网络攻防技术三:网络脆弱性分析

文章目录 一、影响安全的因素二、计算机网络三、网络体系结构脆弱性1、因特网容易被攻击的特性 四、典型网络协议安全性分析(重要)1、IPv42、RIP(UDP)3、ICMP(UDP)4、ARP5、OSPF(IP数据报)6、BGP(TCP)7、UDP8、TCP9、DNS(UDP)10、…

20250602在荣品的PRO-RK3566开发板的Android13下打开关机对话框

20250602在荣品的PRO-RK3566开发板的Android13下打开关机对话框 2025/6/2 15:07 缘起:需要在荣品的PRO-RK3566开发板的Android13下,打开/增加关机对话框这个功能。 因为手机都有。那我们就找资料吧。 参考资料: https://blog.csdn.net/terry_…