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

news2024/10/1 9:01:01

目录

如何理解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.coloradmin.cn/o/2181972.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Emergency Stop (ES)

文章目录 1. 介绍2. Feature List3. 紧急停止信号触发方式3.1 Port触发紧急停止信号3.2 SMU事件触发紧急停止信号3.3 软件触发紧急停止信号 4. 应用场景4.1 Port4.2 MSC 1. 介绍 Emergency Stop (ES)是Ifx System Control Units (SCU)六大模块之一。详细信息可以参考Infineon-…

【牛客刷题记录】【JAVA】二分查找

(1) 二分查找 链接 二分查找需要序列是有序的,否则二分查找会失效。原理就是如果找的值比mid小,那么[mid,R]的内容就不需要再查找了,反之如果大于mid位置的值,则在[L,mid]内的值也不需要再查找。同时将L/R的值进行修改。注意循环…

计算机毕业设计 基于深度学习的短视频内容理解与推荐系统的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

景联文科技入选《2024中国AI大模型产业图谱2.0版》数据集代表厂商

近日,大数据产业领域头部媒体数据猿携手上海大数据联盟联合发布了备受瞩目的《2024中国AI大模型产业图谱2.0版》。以大数据与AI为代表的智能技术为主要视角,聚焦全产业链,为业内提供更为专业直观的行业指导。 景联文科技凭借高质量数据集&…

第十一届蓝桥杯嵌入式省赛程序设计题解析(基于HAL库)(大学组)

一.题目分析 (1).题目 (2).题目分析 1.计时分析 只要遇到Vmin,就将计时时间重置为0,直到遇到Vmax结束计时 2.按键功能分析 a.B1显示和功能页面相互切换 b.B2每次按下Vmax加0.1,加到3.3V&a…

怀孕之天赋共享:其实人身体没变,完全是天赋共享

关于怀孕天赋共享,有人说,是不是怀孕导致身体变化? 并没有。下面这个就是案例。你总不能说,小孩生下来身体立即改变吧?

【大模型系列篇】动手部署实践国产文生图模型-腾讯混元DiT

首个中英双语DiT架构,混元-DiT,高性能细粒度中文理解-多分辨率扩散Transformer模型。 腾讯提出的混元DiT,是一个基于Diffusion transformer的文本到图像生成模型,此模型具有中英文细粒度理解能力。为了构建混元DiT,精心…

plt绘画三维曲面

目录 前言实战 前言 如果想绘画三维曲面,需导入Axes3D 模块,具体语法可参考: from mpl_toolkits.mplot3d import Axes3D问题的关键是需要三维坐标对象与figure相关联,这里可以使用如下两种方法,亲测可用!…

安卓使用memtester进行内存压力测试

memteser简介 memtester 是一个用于测试内存可靠性的工具。 它可以对计算机的内存进行压力测试,以检测内存中的错误,例如位翻转、随机存取错误等。memtester 可以在不同的操作系统上运行,并且可以针对不同大小的内存进行测试。 下载源码 m…

企业微信hook协议接口,群发,标签,客户管理。

服务提供了丰富的API和SDK,可以在企微的功能之上进行应用开发和功能扩展 自建应用可以调用企微hook或协议提供的接口来实现数据交互,可以直接调用hook或协议接口提供的功能来进行消息的发送与接收、用户管理、应用管理等操作,通过接口可以实…

用Python实现运筹学——Day 8: 对偶理论的经济解释

一、学习内容 1. 对偶价格的经济含义 对偶价格(Dual Price),也称为影子价格(Shadow Price),反映了在线性规划问题中的某个约束条件下,单位资源的边际价值。影子价格是对每一单位资源的增加所带…

1.7 编码与调制

欢迎大家订阅【计算机网络】学习专栏,开启你的计算机网络学习之旅! 文章目录 前言前言1 基本术语2 常用的编码方法2.1 不归零编码2.2 归零编码2.3 反向归零编码2.4 曼彻斯特编码2.5 差分曼彻斯特编码 3 常用的调制方法3.1 调幅(AM&#xff09…

plt等高线图的绘制

目录 np.meshgrid()plt.contour()实战 np.meshgrid() np.meshgrid 是 NumPy 中的一个函数,用于生成多维坐标网格。它通常用于在多维空间中创建坐标点的组合,以便进行向量化的计算或者绘制三维图形。 基本语法: X, Y np.meshgrid(x, y) 参…

车视界系统小程序的设计

管理员账户功能包括:系统首页,个人中心,汽车品牌管理,汽车颜色管理,用户管理,汽车信息管理,汽车订单管理系统管理 微信端账号功能包括:系统首页,汽车信息,我…

【C++】多态练习题(面试常考)

学习之前,建议观看:【C】多态:深度剖析(多态、虚函数、抽象类、底层原理)_c 多态和虚函数,虚函数的实现原理-CSDN博客https://blog.csdn.net/2301_80555259/article/details/142178677?spm1001.2014.3001.5501 一.概念…

echarts X轴出现小数点问题解决方案

问题描述 当X轴数据较小时,X轴的坐标会用小数点将数据撑开,使其均匀显示,如下图所示: 因业务需要不希望出现小数点,该怎么解决呢? 查找一番,解决方案如下: xAxis: {minInterval:…

2-108 基于matlab的模板匹配法实现车牌识别

基于matlab的模板匹配法实现车牌识别,包含完整的字符库和案例车牌。选择待识别车牌,对车牌图像进行边缘检测、腐蚀、平滑、定位彩色、滤波、最小化区域等一系列操作,分割出字符区域,并与全字符模板库比较,得到最终的车…

【LeetCode每日一题】——95.不同的二叉搜索树 II

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 回溯 二【题目难度】 中等 三【题目编号】 95.不同的二叉搜索树 II 四【题目描述】 给你一…

NASA数据集:ATLAS/ICESat-2 L3B 每日和每月网格化海冰自由面高度,第 4 版

目录 简介 摘要 代码 引用 网址推荐 0代码在线构建地图应用 机器学习 ATLAS/ICESat-2 L3B Daily and Monthly Gridded Sea Ice Freeboard, Version 4 简介 ATLAS/ICESat-2 L3B Daily and Monthly Gridded Sea Ice Freeboard, Version 4数据是由NASA的ATLAS&#xff08…

idea.vmoptions 最佳配置

1. 推荐的 idea64.exe.vmoptions 配置: -Xms1024m -Xmx4096m -XX:ReservedCodeCacheSize512m -XX:UseG1GC -XX:SoftRefLRUPolicyMSPerMB50 -XX:CICompilerCount4 -XX:HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Dsun.io.useCanonCachesfalse -Dj…