做网站店铺装修的软件/网站怎么做优化排名

做网站店铺装修的软件,网站怎么做优化排名,seo外贸网站,全域seo🔥 本文专栏:Linux 🌸作者主页:努力努力再努力wz ★★★ 本文前置知识: 文件系统初识 那么在我们此前关于文件的学习中,我们学习的都是进程与打开的文件之间的关系,以及打开的文件如何进行管理…

🔥 本文专栏:Linux
🌸作者主页:努力努力再努力wz

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

★★★ 本文前置知识:

文件系统初识

那么在我们此前关于文件的学习中,我们学习的都是进程与打开的文件之间的关系,以及打开的文件如何进行管理,那么我们文件有打开的文件,那么同样也就相应有未被打开的文件,所以本篇文章将围绕为未被打开的文件,来揭开它神秘的面纱,看看我们操作系统是如何管理未被打开的文件的,那么废话不多说,就让我们进入正文的学习!

1.引入

那么我们知道我们的文件的元数据是存储在外部设备当中,所以要认识未被打开的文件,那么第一步我们得先认识存储该文件的介质或者说设备,而目前我们存储的文件的外部设备就是SSD固态硬盘以及HDD机械硬盘,那么这两种存储设备各有各的优势,那么目前我们大众接触到最多的也就是固态硬盘SSD,那么它内部构造是由晶体管所构成,而我们的文件本质就是一个二进制序列,那么SSD就通过内部的晶体管的电子的状态来表示二进制的0和1,那么通过电信号来访问各个晶体管的电子的状态从而获得二进制的数据,所以它的访问速度是极其快速,但是由于其应用场景实在家用以及办公用的便携式笔记本电脑当中,意味着我们的SSD固态硬盘所占的体积不能过大,所以通过集成电路的技术使其具有较小的体积并且同时保证了其不错的容量,那么必定意味着SSD的制作成本相比于机械磁盘就要高昂一点

在这里插入图片描述

那么对于机械磁盘HDD来说,那么它的应用场景则是一些不需要移动的笨重的台式机或者互联网公司的服务器后端数据的存储设备,而对于HDD来说,它的优点就是容量大,并且造价成本便宜,所以这就是为什么大型的互联网公司的服务器后端选择磁盘作为数据的存储设备,但是由于其是机械运动来定位数据,那么必然其访问的效率不如SSD固态硬盘,并且其不能够应用在便携式电脑当中,但是由于HDD在互联网公司的广泛引用,鉴于其重要性,所以我们今天便要着重来研究我们的磁盘的硬件结构

2.磁盘的物理结构以及原理

那么我们的磁盘是由盘片以及磁头以及高转速的马达等部件所构成,那么在这些构成磁盘的部件当中,其中最为重要的那便是磁头与盘片,磁头则是用来定位我们在磁盘当中存储的数据,而我们的在磁盘中存储的所有数据则是保存在盘片上,所以一个磁盘的容量就由盘片的数量以及盘片的存储密度等所决定。
在这里插入图片描述

磁盘的盘片有两面,盘片的两面分别有一层磁性的物质,那么我们知道我们的文件的各种元数据的最终形态其实就是一个二进制序列,而二进制序列无非就是由0和1所构成,所以我们如何在盘片上表示出二进制的0和1呢?

那么盘片表面上的磁性物质,我们可以看成有数十亿甚至百亿的磁性颗粒所组成,那么其中对于这每一个磁性的颗粒来说,那么它是具有磁性的,那么一旦具有磁性,那么它便具有特定的磁级指向南或者北,所以我们就可以根据每一个颗粒该磁极的指向的两个状态来分别表示二进制的0和1,那么具体的实现的途径,则是我们磁头通过放电会在其周围产生一个磁场,那么利用该磁场来磁化磁性颗粒使其产生特定的磁极,从而写入二进制序列,那么这就是磁盘写入数据的一个原理

而读取数据则是根据我们的磁头感受到读取位置的磁场变化从而磁生电,转换成电信号,那么利用该电信号得到特定的二进制序列,那么这就是利用我们高中物理的电磁学的原理

那么我们知道我们的数据是存储在我们的磁盘的盘片上,那么我们对于磁盘读取则是依靠磁头以及盘片的机械运动来定位数据的,那么我们磁盘的读取速度的效率则取决于该磁盘定位速度的机械运动的快慢,那么读取越快意味着磁盘定位一个数据所做的机械运动越少,那么我们希望磁盘所做的机械运动尽量的少,那么我们就需要将我们一个文件的数据集合尽可能存放在磁盘的盘片的相邻的物理位置处,这样就能够减少机械的运动了

那么我们知道了如何在磁盘中存储数据,那么我们要在磁盘中读取我们需要的目标数据那么肯定就得有该目标数据在我们的磁盘中的具体位置,所以为了表示一个数据在磁盘中的具体位置,那么我们此时便引入了一个磁道的概念
在这里插入图片描述

那么我们对于一个盘片来,那么它的形状是一个圆形,那么我们以该盘片的中心为圆心,然后往外划分一圈一圈不同的半径的圆,那么该圆的圆弧就是磁道,其中每一个相邻的磁道之间的空间,我们还可以在进行进一步的划分,我们将圆心与每一个不同半径上的圆的圆弧处上的点形成一条条连线,那么该连线将我们的相邻两个磁道之间会划分成一个一个的扇形区域,那么该扇形区域区域我们称之为扇区,那么它就是我们磁盘存储数据的一个最基本单元,那么一般我们磁盘不只有一个盘片,那么每一个盘片都有两个盘面,那么每一面都能够存储数据,那么我们每一个盘面都对应有一个磁头用来定位,其中每一个盘面的划分磁道的数量是相同的,并且对于同一个盘片来说,每个相邻磁道之间的扇区的数量也是一致的,而我们知道越靠近外侧,那么相邻磁道之间的空隙也就越大,越靠近圆心位置处,相邻磁道之间的空隙越小,所以为了达到每一个相邻磁道之间的扇区数量相等,那么我们每一个磁道之间的划分的疏密以及磁道之间的存储密度就不同
在这里插入图片描述

所以我们要定位一个扇区的话,那么我们首先磁头就得来回摆动,定位确定是在哪个磁道上,然后我们的盘片通过高速马达的转轴的带动在转动定位到目标扇区

而我们知道我们的盘片是高速转动并且磁头也在摆动,那么也许有的小伙伴就有疑问,那么万一我的磁头刮花了盘片怎么办,盘片上存储着各种数据,那么刮花了岂不是造成了数据的缺失,那么注意虽然看起来磁头是和盘片是挨着的,但是他们其实并没有接触,他们中间有一个间隙,那么一旦盘片高速转动,那么中间的空气会托举着磁头,使其悬浮,应用了空气动力学的原理,所以我们的磁盘的工艺设计其实是非常巧妙的!并且磁盘内部不能有灰尘,一旦有了灰尘,那么灰尘是个颗粒状的固体,那么随着盘片的高速转动,那么其会刮花盘片,所以博主在这里警惕各位读者,如果自己好奇来拆开磁盘来研究,那么对不起,你的磁盘就报废了

在这里插入图片描述

而我们知道盘片之间是沿着一个转轴来垂直摆放的,那么不同盘面上的相同半径的磁道在立体的空间当中的集合就称之为一个柱面,所以我们定位,我们只需要确定三个坐标即可,即使它在对应哪个磁头,哪个磁道以及哪个扇区,那么这三个坐标我们也要一个专业术语就是CHS位置

3.磁盘的逻辑结构

那么我们知道磁盘的物理构造之后,那么我们在操作系统层面上怎么来理解描述磁盘这样的物理结构呢

那么我们知道有一个叫做磁带的东西,想必各位读者在小学的时候播放英语教材会用到,那么我们一圈一圈弯曲的磁带,那么我们可以将其整体拉直,那么其磁带上的所有数据就是按照这个拉直过后的磁带呈线性排列

而同理这里对于我们的磁盘来说,我们不同盘面上的磁道就可以理解为一圈一圈的磁带,那么我们也可以将其给拉直,那么我们磁盘上所有的数据就可以按照一个一维的线性数组来表示,那么为了区分磁盘上的不同的扇区,那么我们会给扇区分配一个唯一的编号,那么我们这个一维数组中的每一个元素就是一个扇区,那么该扇区的数组下标就是该扇区的编号,也就是LAB地址,而我们要将扇区的逻辑结构的编号转换成实际物理层面上的坐标,那么也就是确定该扇区的磁头以及磁道和磁道的第几个扇区的话
在这里插入图片描述

那么现在有了扇区的编号,那么如何来转换呢?

那么假设每一个盘面上有m个扇区,每个盘面有k个磁道,每个磁道有q个扇区,假设此时我们的扇区的数组下标为i,那么首先确定其在哪个盘面上,那么我们就可以利用公式:

L=i/m

H=i%m

那么如果余数H不为0的话,那么意味着当前处于第L+1盘面处,接着在计算所处的磁道:

O=H/(k*q)

P=H%(k*q)

余数P不为0的话,那么意味着当前处于该盘面的第O+1磁道处,而P就是该磁道的第P个扇区位置

那么我们就可以根据该公式来实现逻辑地址到物理地址的转换,那么我们获取到地址之后,CPU会交给磁盘的寄存器,那么磁盘有4个寄存器,分别是命令寄存器以及地址寄存器和数据寄存器和数据寄存器以及状态寄存器,它们4个的作用就是分别用来记录当前是往磁盘进行读还是写和一个读写的地址以及写入的数据和以及当前写入是否成功

4.如何管理未被打开的文件

那么我们知道了我们操作系统已经有一个逻辑结构也就是一维的线性数组来表示我们整个磁盘中的数据也就是所有扇区,但是我们的扇区的存储的数据量的大小通常是512个字节,那么我们扇区是磁盘的基本存储单元,而我们上文就说过磁盘访问的效率取决于机械运动的次数,况且我们现在的一个文件动不动就是几个甚至上百个GB,那么我们以扇区为单位一次一次的读取的话,那么效率太慢了

所以我们的操作系统以及其采取的文件系统就对此有所优化,那么我们知道此前我们整个文件的逻辑结构是一个一维的线性数组,那么此时对于磁盘访问一个数据的基本单位不再是一个扇区,而是几个扇区的集合作为该文件系统的存储数据的基本单位也称之为逻辑块,比如8个扇区也就是4kb的数据量,那么这样就能提升访问效率,那么原本磁盘的逻辑结构此时在该文件系统的新的视角下便有了不同,那么该一维的线性数组的长度没有发生变化,但是其元素不在是之前的扇区,而是一个一个逻辑块,那么该逻辑块就是由几个扇区所组成,那么以前该一维的线性数组的元素个数假设是1000个,那么现在在该文件系统下比如ET4,那么逻辑块是由8个扇区所组成,那么个数意味着就是250个,那么每一个逻辑块就有了新的编号也就是数组的下标

而我们的磁盘的容量极大,可以达到800GB甚至1TB,那么管理这么庞大的数据,那么我们操作系统采取的管理策略就是分区

那么按照不同的文件系统,那么可能将这800个G或者1TB的数据给划分成不同的区,那么假设以ET4文件系统为例,那么其会划分成4个区,那么每一个区此时的容量就是200个G,但是即使划分成不同的区,那么管理的数据量可能还是极大,所以对于每一个区我们又进行·更细致的划分,将其划分成了不同的组,那么我们管理好这整个文件系统,就是管理好这每一个组以及每一个区即可

那么其中对于这每一个分区来说,那么操作系统管理的方式就是我们再熟悉不过的先描述,再组织了,那么它会为其定义一个struct partition结构体,那么每一个结构体记录了每一个区的起始位置以及结束位置和该区的分组的数量等等属性,其中第一个分区的开头会有一个boot block分组,那么该分组就是记录了操作系统开机的有关信息,并且其他区也有该分组的备份

而对于每一个区的组来说,那么它也有对应的一个结构体来描述,其中就包含超级块以及块表和innode表以及数据块等

// 示例结构体定义,用于描述文件系统中的一个区组
struct FileSystemGroup {// 超级块(或超级段)struct SuperBlock {int magicNumber;       // 文件系统魔数,用于识别文件系统类型int blockSize;         // 逻辑块大小(字节)int totalBlocks;       // 区组内总逻辑块数int freeBlocks;        // 区组内空闲逻辑块数int totalInodes;       // 区组内总inode数int freeInodes;        // 区组内空闲inode数// 其他元数据...} superBlock;// 块表(位图)// 假设每个位代表一个逻辑块,1表示已使用,0表示空闲// 这里简化为一个数组表示,实际中可能使用更紧凑的位图存储unsigned char blockBitmap[/* 根据区组大小动态分配 */];// inode表// 每个inode对应一个文件或目录struct Inode {int type;              // 文件类型(普通文件、目录等)int permissions;       // 文件权限int owner;             // 文件所有者int size;              // 文件大小(字节)int lastModified;      // 最后修改时间戳// 指向数据块的指针数组int dataBlockIndices[/* 根据文件大小动态分配,可能包含多级索引 */];} inodes[/* 根据区组大小动态分配 */];// 数据块表(或数据块区域)// 实际存储文件内容的逻辑块,这里简化为一个指针数组表示// 每个指针指向一个数据块,数据块可能分布在磁盘的不同位置void* dataBlocks[/* 根据区组大小动态分配 */];
};

那么其中这4个属性,我们知道它们本质上也是数据,那么必然就在相应的逻辑块中存放,而我们同一个分组的逻辑块一般是在物理内存的同一个区域,并且其中的属性也是按照特定的顺序来排列,比如超级快块一般在该分组的逻辑块的第一个位置,然后再是块表和inode表依次向后排列,那么这取决于特定的文件系统实现,并且不同的文件系统对于每一个分组所占据的逻辑块的数量也是不同的

​ 那么我来详细介绍一下该组的各个不同的属性:

  • 超级块::超级块记录了文件系统的类型、大小、块大小、inode数量、空闲块和inode的数量等关键信息。它还包括文件系统的挂载时间、最后写入时间等时间戳信息

  • 块表:采取的是位图的实现方式,那么其中每一个二进制位的状态用来表示每一个逻辑块是否被使用

  • inode表:那么每一个文件都会对应有一个innode结构体用来存储该文件的属性其中就包括权限等字段,其中innode表还会记录一个数组,那么该数组一般长度为15,那么该数组则是记录该文件对应的文件内容的数据的逻辑块,那么每一个数组元素的内容就是逻辑块的索引,那么数组前12个位置则是直接索引,那么他们指向的逻辑块就是直接存储的是文件的内容,而之后的元素则是二级以及三级索引,那么所谓二级索引则是该指向的逻辑块存储的内容不是有效的文件内容的数据,而是指向其他保存文件内容数据的逻辑块,那么这样就能扩展文件的体积,所以innode表则是记录每一个innode所对应的逻辑块的位置,用位图来实现

  • data block:那么除了超级块以及快表和inode和inode表所占据的逻辑块,那么其余就是存储文件内容的数据块,所以我们发现Linux下文件的属性以及内容是分开存储的


在这里插入图片描述

那么这就是我们操作系统管理未打开文件的方式,采取的是分治以及先描述,再组织的策略

结语

那么这就是本篇文章关于文件系统的全部内容了,那么下一期文章将是软硬件链接,那么下一期博客就是我们Linux文件系统的一个收尾啦,那么文件系统学写完之后,我们便打开了语言与操作系统之间的隔阂,那么我会持续更新,希望你多多管制,如果我的文章有帮组到你的话,还请多多三连加关注哦,你的支持,就是我创作的最大动力!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/73152.shtml

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

相关文章

git commit messege 模板设置 (规范化管理git)

配置方法 git config --global core.editor vim (设置 Git 的默认编辑器为 Vim)在用户根目录下(~),创建一个.git_commit_msg文件,然后把下面的内容拷贝到文件中并保存。 [version][模块][类型]{解决xxx问题…

ChatGPT4.5详细介绍和API调用详细教程

OpenAI在2月27日发布GPT-4.5的研究预览版——这是迄今为止OpenAI最强大、最出色的聊天模型。GPT-4.5在扩大预训练和微调规模方面迈出了重要的一步。通过扩大无监督学习的规模,GPT-4.5提升了识别内容中的模式、建立内容关联和生成对于内容的见解的能力,但…

AI 中对内存的庞大需求

刚接触AI时,只知道AI对显存的要求很高,但慢慢发现,AI对内存的要求也越来越高了。 最近尝试玩下 wan 2.1 ,进行图生视频,使用comfyui官方工作流,720p(720*1280)53帧,结果…

如何选择适合您智能家居解决方案的通信协议?

如何选择适合您智能家居解决方案的通信协议? 在开发智能家居产品时,选择合适的通信协议对于设备的高效运行及其在智能家居系统中的互操作性至关重要。市面上协议众多,了解它们的特性并在做决定前考虑各种因素是非常必要的。以下是一些帮助您…

L3-1 夺宝大赛

输入样例 1: 5 7 1 1 1 1 1 0 1 1 1 1 1 1 0 0 1 1 0 2 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 7 1 5 7 1 1 1 5 5 3 1 3 5 1 4输出样例 1: 7 6样例 1 说明: 七支队伍到达大本营的时间顺次为:7、不可能、5、3、3、5、6&#xff0c…

海思高安主控芯片兼容编译fastboot流程

华为海思主控芯片有高安和非高安之分,主要是安全性上区别,启动程序不同,一般无法共用。但实际生产中可能出现混料或者同一款产品不同批次一个是高安的一个是非高安的,这时就需要软件上做兼容,实际是高安固件是可以做到…

C# WPF 基础知识学习(二)

四、数据绑定 (一)数据绑定基础 绑定源和目标:数据绑定建立了 UI 元素(绑定目标)属性与数据源(绑定源)之间的联系。例如,将一个TextBox的Text属性绑定到一个对象的某个属性上。绑定…

Trae AI IDEA安装与使用

文章目录 背景第一步、下载安装第二步、登录与使用优势异常处理 背景 最近比较热的 Trae 开发工具,在本地下载使用,记录下来。 第一步、下载安装 下载地址:【Trae中文版下载地址】,下载的安装文件名为:【Trae CN-Se…

【LangChain接入阿里云百炼deepseek】

这是目录 前言阿里云百炼注册账号使用代码执行结果 前言 大模型爆火,现在很多教程在教怎么使用大模型来训练Agent智能体,但是大部分教程都是使用的OpenAI。 最近阿里云推出DeepSeek-R1满血版,新用户可享100万免费Token额度。 今天就教大家怎…

火绒企业版V2.0全面支持Linux与国产化系统!免费试用助力国产化终端安全升级

国产化浪潮下的安全新挑战 随着信创产业的加速推进,国产操作系统(统信UOS、麒麟OS等)和ARM架构服务器逐步成为政企核心业务的基础设施。然而,针对国产化系统的勒索攻击、网页篡改、供应链漏洞等威胁频发,传统安全方案…

【HarmonyOS Next】鸿蒙加固方案调研和分析

【HarmonyOS Next】鸿蒙加固方案调研和分析 一、前言 根据鸿蒙应用的上架流程,本地构建app文件后,上架到AGC平台,平台会进行解析。根据鸿蒙系统的特殊设置,仿照IOS的生态闭环方案。只能从AGC应用市场下载app进行安装。这样的流程…

win11编译llama_cpp_python cuda128 RTX30/40/50版本

Geforce 50xx系显卡最低支持cuda128,llama_cpp_python官方源只有cpu版本,没有cuda版本,所以自己基于0.3.5版本源码编译一个RTX 30xx/40xx/50xx版本。 1. 前置条件 1. 访问https://developer.download.nvidia.cn/compute/cuda/12.8.0/local_…

【物联网-WIFI】

物联网-WIFI ■ ESP32-C3-模块简介■ ESP32-C3-■ ESP32-C3-■ WIFI-模组■ WIFI-■ WIFI- ■ ESP32-C3-模块简介 ■ ESP32-C3- ■ ESP32-C3- ■ WIFI-模组 ■ WIFI- ■ WIFI-

LeetCode1871 跳跃游戏VII

LeetCode 跳跃游戏 IV:二进制字符串的跳跃问题 题目描述 给定一个下标从 0 开始的二进制字符串 s 和两个整数 minJump 和 maxJump。初始时,你位于下标 0 处(保证该位置为 0)。你需要判断是否能到达字符串的最后一个位置&#xf…

Burpsuite使用笔记

Burpsuite使用笔记 抓包设置代理open Browserintercept on输入要抓包的网站回车ForwardHTTP history查看抓包数据其他浏览器配置burpsuite代理浏览器代理器插件配置打开代理同样步骤访问原理三级目录抓包 设置代理 open Browser 打开内置浏览器 intercept on 输入要抓包的网…

Windows 远程桌面多端口访问,局域网虚拟IP映射多个Windows 主机解决方案

情景 项目现场4G路由局域网中两台主机通过VPN连接到公司内网,实现远程管理,要求映射两个Windows 桌面进行管理。 目录 情景 网络 思路 已知 问题解决 1.客户端通过VPN进入内网路由器配置NAT 2.使用远程主机远程桌面功能:IP端口号访问 …

VS Code C++ 开发环境配置

VS Code 是当前非常流行的开发工具. 本文讲述如何配置 VS Code 作为 C开发环境. 本文将按照如下步骤来介绍如何配置 VS Code 作为 C开发环境. 安装编译器安装插件配置工作区 第一个步骤的具体操作会因为系统不同或者方案不同而有不同的选择. 环境要求 首先需要立即 VS Code…

Flutter 学习之旅 之 flutter 不使用插件,实现简单带加载动画的 LoadingToast 功能

Flutter 学习之旅 之 flutter 不使用插件,实现简单带加载动画的 LoadingToast 功能 目录 Flutter 学习之旅 之 flutter 不使用插件,实现简单带加载动画的 LoadingToast 功能 一、简单介绍 二、LoadingToast 三、简单案例实现 四、关键代码 一、简单…

Spring (八)AOP-切面编程的使用

目录 实现步骤&#xff1a; 1 导入AOP依赖 2 编写切面Aspect 3 编写通知方法 4 指定切入点表达式 5 测试AOP动态织入 图示&#xff1a; 一 实现步骤&#xff1a; 1 导入AOP依赖 <!-- Spring Boot AOP依赖 --><dependency><groupId>org.springframewor…

开源数字人模型Heygem

一、Heygem是什么 Heygem 是硅基智能推出的开源数字人模型&#xff0c;专为 Windows 系统设计。基于先进的AI技术&#xff0c;仅需1秒视频或1张照片&#xff0c;能在30秒内完成数字人形象和声音克隆&#xff0c;在60秒内合成4K超高清视频。Heygem支持多语言输出、多表情动作&a…