当前位置: 首页 > news >正文

【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系统上一切皆文件 计算机中包含大量外设,操作系统想要管理好这些外设,就必须对这些外设进行先描述再组织&#xff0c…...

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…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一&#xff0c;能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时&#xff0c;需要添加Git仓库地址和凭证&#xff0c;设置构建触发器&#xff08;如GitHub…...