【Linux-基础IO】如何理解Linux下一切皆文件磁盘的介绍

ops/2024/12/23 4:36:18/

目录

如何理解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中包含寄存器,其他外部设备中也存在寄存器。

当某个进程需要向磁盘中写入数据时,以下步骤通常会发生:

设置读写控制寄存器

  • 进程(通过操作系统和相应的设备驱动程序)首先会将磁盘的读写控制寄存器设置为写状态。这通常涉及到向命令寄存器写入一个特定的命令代码,比如 “写命令”。

将数据放入数据寄存器

  • 接着,进程会将要写入的数据放入数据寄存器中。数据寄存器是磁盘控制器的一部分,用于暂存数据,这些数据随后会被写入磁盘的指定位置。

写入地址信息

  • 然后,进程需要将要写入数据的目标地址信息放入地址寄存器。这通常包括磁道号、磁头号和扇区号。这些信息告诉磁盘控制器数据应该被写入磁盘的哪个位置。

启动磁盘操作

  • 一旦所有的寄存器都被正确设置,磁盘控制器会开始执行写入操作。这个过程可能涉及到磁盘的寻道和旋转,以便磁头能够定位到正确的磁道和扇区。

监控状态寄存器

  • 在写入操作进行时,状态寄存器会显示磁盘的状态。例如,它可能会被设置为 “正在写入” 状态,表示磁盘正在执行写操作。

  • 操作系统或设备驱动程序会定期检查状态寄存器,以监控操作进度和任何可能发生的错误。

操作完成

  • 当磁盘完成写入操作后,它会更新状态寄存器。如果操作成功完成,状态寄存器会设置为 “写入成功”;如果操作失败,状态寄存器会设置为 “写入失败”,并且可能会在错误寄存器中提供错误代码,以便于诊断问题。

响应操作结果

  • 操作系统根据状态寄存器的信息来决定下一步操作。如果写入成功,它可能会继续执行其他任务或响应用户请求。如果写入失败,它可能会重试写入操作、记录错误、通知用户或采取其他错误恢复措施。


http://www.ppmy.cn/ops/119641.html

相关文章

css的背景background属性

CSS的background属性是一个简写属性,它允许你同时设置元素的多个背景相关的子属性。使用这个属性可以简化代码,使其更加清晰和易于维护。background属性可以设置不同的子属性。 background子属性 定义背景颜色 使用background-color属性 格式&#x…

k8s搭建一主三从的mysql8集群---无坑

一,环境准备 1.1 k8s集群服务器 ip角色系统主机名cpumem192.168.40.129mastercentos7.9k8smaster48192.168.40.130node1centos7.9k8snode148192.168.40.131node2centos7.9k8snode248192.168.40.132node3centos7.9k8snode348 k8s集群操作请参考《K8s安装部署&…

【开源免费】基于SpringBoot+Vue.JS校园资料分享平台(JAVA毕业设计)

本文项目编号 T 059 ,文末自助获取源码 \color{red}{T059,文末自助获取源码} T059,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

强化-导数

只有当导数在一个区间内不变号时,才能得到函数单调的结论,若只知道导数在一点的符号,是不能得到函数单调的结果的。 高阶导函数

Ks渲染做汽车动画吗?汽车本地渲染与云渲染成本分析

Keyshot是一款强大的实时光线追踪和全域光渲染软件,它确实可以用于制作汽车动画,包括汽车模型的渲染和动画展示。Keyshot的动画功能允许用户创建相机移动、物体变化等动态效果,非常适合用于汽车动画的制作。 至于汽车动画的渲染成本&#xff…

“AI+Security”系列第3期(四):360安全大模型业务实践

近日,由安全极客、Wisemodel 社区、InForSec 网络安全研究国际学术论坛和海升集团联合主办的“AI Security”系列第 3 期技术沙龙:“AI 安全智能体,重塑安全团队工作范式”活动顺利举行。此次活动吸引了线上线下超过千名观众参与。 活动中&…

黑马头条day6-kafka及异步通知文章上下架

今天任务比较水 主要是kafka入门和 文章上下架 以及异步通知article同步到app的前端数据 需要重新看一下(使用步骤并不是很复杂 kafka主要解决高并发) 1 kafka的入门 和 使用异步 需要重新看一下了流程和 详细信息 2 bug 打开app页面的时候出现503 服…

自动化运维的利器:Ansible、Puppet和Chef详解

在现代IT运维中,自动化工具的使用已经成为提高效率和减少人为错误的关键手段。本文将详细介绍三款主流的自动化运维工具:Ansible、Puppet和Chef,帮助您了解它们的特点、使用方法及适用场景。 一、Ansible Ansible是一款由Red Hat开发的开源…