【Linux-基础IO】如何理解Linux下一切皆文件磁盘的介绍
目录
如何理解Linux系统上一切皆文件
1.物理角度认识磁盘
2.对磁盘的存储进行逻辑抽象
磁盘寻址
3.磁盘中的寄存器
如何理解Linux系统上一切皆文件
计算机中包含大量外设,操作系统想要管理好这些外设,就必须对这些外设进行先描述再组织,描述就是将每个外设抽象出一个结构体,每个结构体内部包含写方法、读方法等,如果某个外设没有所对应方法就把变量置为NULL

不同的外设接口抽象出的结构体可能会存在差异,操作系统通过再一层封装,将不同外设抽象成相同的存储结构,便于上层的调用
如果某个进程需要访问外设,就会先创建一个struct file,该struct file中存储对于的opration_func,当某个进程需要操作该外设时,则只需要访问存储该外设的operation_func的struct file并找到它的对应方法,即可对外设做操作
对于上层的保存着operation_func的struct file的集合,我们将其称之为虚拟文件系统。该文件系统存储格式是文件,上层用户看来,Linux中外设也是文件

1.物理角度认识磁盘
磁盘在冯诺伊曼体系中是外设,磁盘是计算机的一个组成;很早以前的计算机的存储设备是磁盘,现在为了轻便,大部分计算机采用固态硬盘(SSD)替代了磁盘,我们这里只讨论磁盘;磁盘是通过磁盘的磁性(N/S级)存储0或1,属于永久性存储介质;
磁盘的物理结构指的是存储数据的磁盘介质本身的物理组成部分。这些组成部分共同工作,以存储和检索数据。以下是磁盘物理结构的主要部分:
磁头是磁盘上最显著的组件之一,负责在磁盘表面读取和写入数据。磁头通过一个称为“磁头臂”的机械装置移动,该装置连接到磁盘的驱动器部分。磁头在移动时会非常接近磁盘表面,有时甚至只有几微米,因此磁头的设计必须非常精确。
磁盘表面是磁头在上面读写数据的平面。磁盘表面通常由多个圆盘组成,每个圆盘都围绕一个中心轴旋转。这些圆盘被称为磁盘片(简称盘片),它们通常是铝或玻璃,并且涂有磁性材料。
磁盘片是磁盘表面上的物理盘片,它们通常由多层涂有磁性材料的铝或玻璃制成。磁盘片围绕中心轴旋转,以一定的速度(称为转速)旋转
磁盘驱动器是磁盘的机械部分,它包含磁头臂、电机和控制器。磁头臂是连接到磁头的金属臂,它可以在磁盘表面移动。电机用于驱动磁盘片旋转,而控制器负责协调磁头和电机的动作,以确保数据读写操作的正确执行。
磁道是磁盘表面上的圆环,每个磁盘片上有多个磁道。磁头沿着这些磁道移动,以读取或写入数据。磁道的数量和布局取决于磁盘的大小和设计。
扇区是磁道上的一个存储单元,它是一个圆周上的一个固定大小的区域。每个扇区都有一个唯一的编号,用于标识其在磁盘上的位置。扇区的大小通常为512字节,但最新的硬盘可能使用更大的扇区大小,如4KB。
控制器是磁盘驱动器中的电子部分,负责管理磁头、电机和磁盘片之间的交互。控制器接收来自主机的命令,并将其转换为磁头和电机的动作指令。控制器还负责错误检测和纠正,以及数据传输的同步
磁盘接口是连接磁盘驱动器与计算机主板的部分,它定义了数据传输的协议和速度。常见的接口包括SATA、SAS、SCSI、NVMe等。

在磁盘中,定位某个扇区的方法是:①找到指定的磁头(Head);②找到指定的磁道(Cylinde);③找到指定的扇区(Sector)。这种方法简称为CHS(Cylinder、Header、Sector)
【示例】读取指定位置的数据

所以文件其实就是在磁盘中占有几个扇区的问题
2.对磁盘的存储进行逻辑抽象
磁盘寻址
在我们小学的时候,听英语听力我们使用磁带。将磁带插入播放机中,播放机既可以进行播放听力。磁带里有一条很长很长的塑料袋,上面涂有一层磁性材料,通常是氧化铁或磁性颗粒的混合物。这些材料在磁场的作用下可以被磁化,形成代表数据的磁化模式。磁带里也有磁头,用于读取和写入磁带的物理组件。

当我们把磁带拉出来,可以发现它存储数据是线性存储的;我们也把磁盘看作线性结构,即将磁道上的扇区按照某种规则,给予线性顺序编号;如下图所示,从左向右依次是盘面1、盘面2、盘面3......;每个盘面内,从左向右分别是该盘面不同的磁道;每个磁道又由多个扇区组成(这里我们假设每个磁道的扇区个数相同)
【示例】假设有一个磁盘,它的每个盘面有50个磁道,每个磁道有400个扇区(即每个盘面有20,000个扇区)。如果某个文件存放在18888号扇区,那么它属于哪个盘面的哪个磁道的哪个扇区呢?
盘面号 = 18888 / 20000 = 0号盘面(,磁道号 = 18888 / 400 = 47号扇区号 = 18888 % 400 = 88号扇区;
综上所述,18888号扇区属于第0个盘面的第47个磁道的第88个扇区。
像上述示例中寻找扇区的方式,称为LBA寻址方式(又称为逻辑寻址方式)。
3.磁盘中的寄存器
不仅CPU中包含寄存器,其他外部设备中也存在寄存器。
当某个进程需要向磁盘中写入数据时,以下步骤通常会发生:
设置读写控制寄存器:
-
进程(通过操作系统和相应的设备驱动程序)首先会将磁盘的读写控制寄存器设置为写状态。这通常涉及到向命令寄存器写入一个特定的命令代码,比如 “写命令”。
将数据放入数据寄存器:
-
接着,进程会将要写入的数据放入数据寄存器中。数据寄存器是磁盘控制器的一部分,用于暂存数据,这些数据随后会被写入磁盘的指定位置。
写入地址信息:
-
然后,进程需要将要写入数据的目标地址信息放入地址寄存器。这通常包括磁道号、磁头号和扇区号。这些信息告诉磁盘控制器数据应该被写入磁盘的哪个位置。
启动磁盘操作:
-
一旦所有的寄存器都被正确设置,磁盘控制器会开始执行写入操作。这个过程可能涉及到磁盘的寻道和旋转,以便磁头能够定位到正确的磁道和扇区。
监控状态寄存器:
-
在写入操作进行时,状态寄存器会显示磁盘的状态。例如,它可能会被设置为 “正在写入” 状态,表示磁盘正在执行写操作。
-
操作系统或设备驱动程序会定期检查状态寄存器,以监控操作进度和任何可能发生的错误。
操作完成:
-
当磁盘完成写入操作后,它会更新状态寄存器。如果操作成功完成,状态寄存器会设置为 “写入成功”;如果操作失败,状态寄存器会设置为 “写入失败”,并且可能会在错误寄存器中提供错误代码,以便于诊断问题。
响应操作结果:
-
操作系统根据状态寄存器的信息来决定下一步操作。如果写入成功,它可能会继续执行其他任务或响应用户请求。如果写入失败,它可能会重试写入操作、记录错误、通知用户或采取其他错误恢复措施。

相关文章:
【Linux-基础IO】如何理解Linux下一切皆文件磁盘的介绍
目录 如何理解Linux系统上一切皆文件 1.物理角度认识磁盘 2.对磁盘的存储进行逻辑抽象 磁盘寻址 3.磁盘中的寄存器 如何理解Linux系统上一切皆文件 计算机中包含大量外设,操作系统想要管理好这些外设,就必须对这些外设进行先描述再组织,…...
Golang | Leetcode Golang题解之第436题寻找右区间
题目: 题解: func findRightInterval(intervals [][]int) []int {n : len(intervals)type pair struct{ x, i int }starts : make([]pair, n)ends : make([]pair, n)for i, p : range intervals {starts[i] pair{p[0], i}ends[i] pair{p[1], i}}sort.…...
微服务SpringSession解析部署使用全流程
目录 1、SpringSession简介 2、实现session共享的三种方式 1、修改Tomcat配置文件 2、Nginx负载均衡策略 3、redis统一存储 0、准备工作 1、本地服务添加依赖 2、修改本地服务配置文件 3、添加application.properties文件 4、添加nacos - redis配置 5、修改本地项目…...
自动驾驶 3DGS 学习笔记
目录 street_gaussians gsplat依赖项 运行报错: python>3.9 SGD: Street View Synthesis with Gaussian Splatting and Diffusion Prior 差分高斯光栅化 diff-gaussian-rasterization street_gaussians https://github.com/zju3dv/street_gaussians gsp…...
【C++笔试强训】如何成为算法糕手Day5
学习编程就得循环渐进,扎实基础,勿在浮沙筑高台 循环渐进Forward-CSDN博客 目录 循环渐进Forward-CSDN博客 第一题:游游的you 思路: 第二题:腐烂的苹果 思路: 第三题:孩子们的游戏 思路&…...
【Qt】无IDE的Gui程序快速开始
Qt安装 在 Windows 上安装 Qt 的步骤如下: 下载 Qt 安装程序 访问 Qt 的官方网站:Qt Downloads。点击“Download”按钮,下载 Qt Online Installer(在线安装程序)。 运行安装程序 双击下载的 QtInstaller.exe 文件…...
Python编码系列—Python备忘录模式:掌握对象状态保存与恢复技术
🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…...
linux常用命令汇编(持续更新)
一、用户提示符 # root账号提示符 $ 普通用户提示符 二、关闭计算机 shutdown(安全有序地关闭计算机) 语法:shutdown [options] [time] [message] shutdown -h now #立即关机(--halt/终止) shutdown -r now #重…...
AI面试指南:AI工具总结评测,助力求职季
AI面试指南:AI工具总结评测,助力求职季 摘要: 在竞争激烈的AI领域秋招季,准备充分并借助高效工具是提升面试通过率的关键。本文主要介绍一些针对秋招的AI面试工具和学习资源,分为简历优化、面试助手、手撕代码练习三个…...
大二考核题解
大二考核题解 题号题目考察知识点A有意思的监考二分答案B海绵宝宝的数独DFSC走楼梯递推D碱基配对kmpE好简单的题啊,写它!最短路 写在前面: 整体难度不大,代码能力需要一些,正常来说至少要会3题以上 A 有意思的监考 …...
深入解析:Kubernetes 如何使用 etcd 作为配置中心和注册中心
在 Kubernetes 中,etcd 是核心的分布式存储组件,负责存储和管理集群的所有配置信息、状态数据以及服务注册信息。etcd 的高可用性和强一致性使得它成为 Kubernetes 的 “source of truth”,确保集群能够动态、高效地管理资源,并保…...
MQ高级:RabbitMQ小细节
在之前的学习中,我们只介绍了消息的发送,但是没有考虑到异常的情况,今天我们就介绍一些异常情况,和细节的部分。 目录 生产者可靠性 生产者重连 生产者确认 MQ可靠性 持久化 Lazy Queue 消费者可靠性 消费者确认机制 失…...
期权卖方怎么选择权利金高的品种,期货VIX高低对行情有什么影响
VIX指数——全称为芝加哥期权交易所市场波动率指数,俗称恐慌指数。 是衡量波动性的重要指标。VIX指数上升,预期未来市场波动性会增加。VIX指数下降,预期未来市场波动性会降低。 期货VIX指数最新价格排序 期权卖方尽量选择期货VIX指数在25以…...
内存对齐的原理和使用
1. 什么是内存对齐? 内存对齐是指将数据存储在内存中时,按照数据类型的大小,将数据放在特定的内存边界上。例如,4 字节的 int 通常放在能够被 4 整除的地址上,8 字节的 double 则放在能被 8 整除的地址上。 2. 为什么…...
搭建企业级私有仓库harbor
华子目录 harbor简介实验环境准备下载软件包安装docker-cehosts解析 实验步骤配置https加密传输解压进入解压目录,修改文件配置启动harbor 测试客户端配置harbor本地加速器注意 通过docker compose管理harbor harbor简介 harbor是由wmware公司开源的企业级docker r…...
互联网前后端分离的开发场景,一般会员和数据权限的判断是放在前端还是后端?
推荐学习文档 golang应用级os框架,欢迎stargolang应用级os框架使用案例,欢迎star案例:基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识,这里有免费的golang学习笔…...
李宏毅机器学习2022-HW8-Anomaly Detection
文章目录 TaskBaselineReportQuestion2 Code Link Task 异常检测Anomaly Detection 将data经过Encoder,在经过Decoder,根据输入和输出的差距来判断异常图像。training data是100000张人脸照片,testing data有大约10000张跟training data相同…...
用户体验分享 | YashanDB V23.2.3安装部署
近期崖山新版体验过程中,总能看到用户提问:openssl版本问题、monit命令找不到问题、yashan用户权限问题、数据库重装问题 今日整理了多位用户的安装经验,希望能够帮助到大家~ 1.Lucifer三思而后行 :YashanDB 个人版数据库安装部…...
【漏洞复现】泛微OA E-Office /E-mobile/App/init.php 任意文件上传漏洞
免责声明: 本文旨在提供有关特定漏洞的信息,以帮助用户了解潜在风险。发布此信息旨在促进网络安全意识和技术进步,并非出于恶意。读者应理解,利用本文提到的漏洞或进行相关测试可能违反法律或服务协议。未经授权访问系统、网络或应用程序可能导致法律责任或严重后果…...
SpringCloudEureka实战:搭建EurekaServer
1、依赖引入 <dependencies><!-- 注册中心 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency> </dependencies> <de…...
Windows Cleaner:完全免费的C盘清理神器,3步解决磁盘空间不足问题
Windows Cleaner:完全免费的C盘清理神器,3步解决磁盘空间不足问题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你的Windows电脑是否经常…...
如何让导航栏下落动画变慢?——CSS 动画时长精准控制教程.txt
PROFILE 是 MySQL 旧版查询阶段耗时分析功能,因不稳定、不维护、不支持预编译语句及精确等待分类,自 5.7 弃用、8.0 移除;现推荐 Performance Schema 或慢日志 pt-query-digest 替代。PROFILE 是什么,为什么它现在基本没用了MySQ…...
gte-base-zh部署成本优化:Spot实例+自动伸缩应对流量峰谷的弹性方案
gte-base-zh部署成本优化:Spot实例自动伸缩应对流量峰谷的弹性方案 1. 引言:当高可用遇上高成本 想象一下这个场景:你负责一个在线文档检索系统,核心是使用gte-base-zh模型为海量文本生成向量。白天用户活跃,每秒有上…...
UEFI Setup界面开发避坑指南:grayoutif、suppressif条件控制与varstore变量存储的实战解析
UEFI Setup界面开发避坑指南:条件控制与变量存储的实战解析 在UEFI固件开发中,Setup界面作为用户与系统交互的重要桥梁,其开发质量直接影响用户体验和系统稳定性。本文将深入探讨如何避免UEFI Setup界面开发中的常见陷阱,特别是条…...
2026奇点大会唯一未删减技术圆桌实录(含OpenAI、Ethereum基金会、中科院自动化所三方闭门共识):AGI主权归属的区块链终局方案
第一章:2026奇点智能技术大会:AGI与区块链 2026奇点智能技术大会(https://ml-summit.org) AGI系统与去中心化身份的协同演进 在2026奇点智能技术大会上,核心议题之一是通用人工智能(AGI)如何依托区块链构建可信自主代…...
Cats Blender插件终极指南:如何快速将3D模型优化并导入VRChat
Cats Blender插件终极指南:如何快速将3D模型优化并导入VRChat 【免费下载链接】cats-blender-plugin :smiley_cat: A tool designed to shorten steps needed to import and optimize models into VRChat. Compatible models are: MMD, XNALara, Mixamo, DAZ/Poser,…...
AGI如何实现跨领域知识迁移:3个被90%企业忽略的关键约束条件及破局公式
第一章:AGI跨领域知识迁移的本质与范式跃迁 2026奇点智能技术大会(https://ml-summit.org) AGI跨领域知识迁移并非简单参数复用或微调,而是认知结构在语义拓扑空间中的动态重映射——其本质是将源任务中习得的因果抽象(如“杠杆原理”“资源…...
golang如何实现错误预算Error Budget计算_golang错误预算Error Budget计算实现实战
错误预算是SLO允许的失败请求占比上限,需绑定固定时间窗口、用累计值而非rate计算、避免float64实时减法,推荐Prometheus聚合异步校准。什么是错误预算,Go 里为什么不能直接用 float64 算错误预算是 SLO(Service Level Objective&…...
保姆级教程:用Sentinel-1 SAR和Landsat 9光学影像,手把手教你识别海洋“暗流”——内波
从数据到发现:Sentinel-1与Landsat 9协同解译海洋内波实战指南 当南海的碧波下暗流涌动,卫星的"天眼"正记录着这些肉眼不可见的海洋脉动。内波——这种水下百米深处的能量传递者,通过改变海面微结构,在遥感影像上留下独…...
ECharts热力地图配色翻车?这份‘颜值即正义’的视觉映射(visualMap)调参指南请收好
ECharts热力地图视觉优化指南:从专业配色到极致体验 当你需要在汇报会议或公共大屏上展示数据时,一张配色糟糕的热力地图可能会让观众瞬间失去兴趣。我曾见过一个案例:某省级政务平台的数据大屏上,热力地图使用了高饱和度的红绿对…...
