做店招的网站企业vi系统设计公司
news/
2025/9/23 6:23:52/
文章来源:
做店招的网站,企业vi系统设计公司,做网站好听的域名,wordpress文章付费阅读设置预备知识
到目前为止#xff0c;我们所学习到的关于文件的操作#xff0c;全部都是基于文件被打开#xff0c;被访问#xff0c;访问期间比较重要的有重定向#xff0c;缓冲区#xff0c;一切皆文件#xff0c;当我们访问完毕的时候需要将文件关闭#xff0c;关闭时那…预备知识
到目前为止我们所学习到的关于文件的操作全部都是基于文件被打开被访问访问期间比较重要的有重定向缓冲区一切皆文件当我们访问完毕的时候需要将文件关闭关闭时那也就是将对应的文件对象进行关闭缓冲区该刷新刷新该释放时释放该清空清空可是所有的动作都是基于内存级的对于一个文件打开这种情况的一系列操作。
1.你的系统里可能有成千上万的文件所有的文件都被打开了吗
并不是所有的文件都会被打开被打开的文件可能只有1/100甚至1/500,甚至1/1000,就比如你系统里面有10000个文件可能被打开的只有200个还有9800多个根本就没有被打开。
2.一个文件被打开了有刚刚所谈的那些操作那么一个文件被打开之前文件在哪里呢
其实这些文件都在磁盘上进行保存。
那么问题就来了其实我们在内存中那些被打开的文件本来相对整个系统的文件数目来说本来就占少数这些文件都需要通过struct file这样的结构体进行管理起来那么我们没有被打开的那些那么多的文件要不要被管理起来呢 答案当然是要管理了要不然fopen这个接口要打开一个文件为什么可以通过带路径之后找到这个文件再打开呢 我们没有被打开的文件不仅要在磁盘上进行保存还需要带有规律的进行保存方便用户进行随时读取其实就是方便用户随时打开随时换出内存。
其实用我们生活中的例子也很容易理解就比如你的衣服并不是所有的衣服都是穿在身上的而是身上穿一件大部分衣服都是放在你的衣柜里面的那么你的大部分衣服虽然没有穿但是你要不要把这些衣服放好呢也就是管理好呢就在你哪天需要指定的某一件衣服的时候你管理起来了那么你想找到这件衣服会很快速的知道它在哪里那么如果你把衣服随便扔一个地方当你需要的时候换那一身衣服的时候你会发现你很难找到效率特别低甚至可能找不到了。所以说你身上那套衣服是你正在使用的衣服而没有穿在身上的那些衣服依然需要管理好。而对于这样对衣服进行管理的核心工作是什么是为了快速定位你需要的衣服。也就是快速定位文件。那么管理好了之后就是怎么快速定位文件的问题了那么在我们快速定位文件就需要谈及到路径了。
生活中的例子其实比比皆是你们平常都有各种网购买东西你们学校附件的菜鸟驿站都有来自各个学生的成千上万的快递但是不是所有的快递都会及时的被同学们拿走比如说你取你的快递把你的快递取走打开了你要使用这个快递了叫做你打开这个文件了但是大部分的快递还是暂时存在菜鸟驿站里面那么剩下的这么多没有被访问的快递菜鸟驿站的工作人员也需要将这些快递进行管理起来如果快递就随便堆积如山也不进行管理那么如果有个人来取快递那估计得找个大半天那还不一定能找着。所以我们平常都有看到菜鸟驿站工作人员有给快递进行分类然后贴上对应的取件码其实这个取件码就很像我们谈到的文件路径我们通过取件码可以迅速找到自己的快递同样我们也可以通过文件存放在磁盘上的路径对文件进行快速定位。我们菜鸟驿站工作人员所做的工作叫做文件系统文件系统是我们操作系统的一个分支操作系统有内存管理进程管理也有文件管理等等。
所以我们可以把文件的管理工作总结为
1.打开的文件进行管理
2.没有被打开的文件也要在磁盘中进行管理
这就是文件系统做的工作。
其实文件系统解决的是文件存储的问题而我们的文件内容属性所以进而转化成了对文件内容存储和对文件属性存储的问题。文件存储在磁盘中需要方便我们的操作系统/用户对文件进行增删查改。
而我们下面主要谈的是没有被打开的文件也要在磁盘中进行管理下面我们需要先对磁盘硬件进行深入了解也就是理解硬件的物理存储结构然后对其进行逻辑抽象来理解逻辑存储结构最后来理解文件系统与操作系统之间的关系。 理解磁盘---硬件——物理存储结构
为什么要用磁盘来对文件进行存储呢因为它便宜容量大所以大部分的公司企业就会大量使用。
如下是磁盘的图片 如下是侧视图 如下是俯视图 一个盘面可以有很多的同心磁道一圈磁道可以有很多扇形的扇区扇区是磁盘的最小存储单元---512字节。其中如果你自己只想改变这一个扇区里面的一个比特位你都必须把整个扇区加载到内存中所以我们把磁盘这样的设备叫做块设备。如果我想向一个扇区写入我们该如何寻址呢
1.先选择哪一面 --- 本质选择磁头
2.选择该面上的哪一个磁道
3.选择在该该磁道的哪一个扇区
我们一般把这种定位方法叫做CHS定位法既然我们可以向一个扇区写入就可以向任意一个/多个扇区写入甚至连续多个扇区式的写入当然也可以随机写入。那么文件的存储问题就是文件的内容和属性的存储而文件内容和属性的存储本质就是二进制数据的存储所以文件的存储问题最终都会落在磁盘当中以扇区的形式为基本单元把文件的属性和内容的数据全部都给我们保存好。这些文件的存储全部都是在磁盘盘片某一面上的某个磁道上的某个扇区上以512字节进行存储如果你是一个比较大的文件那你可能要存在多个扇区上如果你是属性可能只需要一个512字节如果是内容可能需要多个512字节也可能只需要一个扇区。所以多个扇区里有的可能存的是属性有些可能存的是内容。
其实每个磁头都有编号所以定位磁头不需要机械运动而寻找磁道是通过磁头在盘面上左右转动而盘面高速旋转是为了找到对应的扇区。这就是为什么磁头需要这么运动然后盘面需要高速旋转。这就是CHS定位法的寻址原理。 理解逻辑抽象——逻辑存储结构 上图不知道小伙伴们有没有见过它叫做磁带磁带这玩意和那个光盘是同一个时代的产物磁带是软性介质里面是可以存储数据的复读机里面也有马达可以把磁带转起来磁带去旋转的时候会有相应的硬件进行数据读取。 这种复读机可以把它打开然后把磁带放进去我们之前如果有见过磁带的小伙伴应该知道他是有两个圈圈的磁带从左边转到右边转完的时候还可以取下来反一面倒着转叫倒带。
磁带把那些黑色条状的东西拉出来就是上述第一张图那个样子这个是软性介质所以我们也可以把它拉的很长拉的很直卷起来就是同心圆的样子拉直了就是一根长长的直线磁盘的盘面卷起来就是圆状的。
所以呢我们也可以把磁盘盘片想象成一个线性的空间 我们还可以把这一面继续进行划分可以划分成很多的磁道然后磁道也可以继续划分划分成一片一片的扇区。 那么我们就可以把它逻辑抽象成以扇区为单位的数组数组都是有下标的那么我们假设从1~100000是第一面100001~200000叫做第二面第一面里面又可以化分成1~10000是第一个磁道10001~20000是第二个磁道每一面每一个磁道都是这么划分。所以我们对磁盘的管理就变成了对数组的管理。
假设寻找第123456个扇区的位置那么我们首先寻找他在第几个面123456/1000001,也就是第2个面然后123456%10000023456那么就是在第一个面的第23456个位置上。
那么我们就把我们的线性地址转化成了CHS地址。
操作系统可以按照扇区为单位进行存取操作系统也可以基于文件系统按照块为单位进行数据存取。其实操作系统以一个扇区为单位来进行访问有点小为了提高一定的效率所以进行了规定以8个扇区为基本单位也就是一个文件块来进行访问 8*512 4096字节也就是4KB。从此往后我们只需要知道起始的地址我们就可以访问8个扇区我们把这种地址叫做LBA地址Logical Block Address 通过将这些LBA地址进行转化变成CHS地址就可以交给磁盘磁盘就可以把数据写到对应的位置上了。
所以我们形成的最终的结论对存储设备的管理在操作系统层面转换成了对4KB blocks[]数组的增删查改。
理解文件系统与操作系统之间的关系
假设你的笔记本电脑有500GB大的磁盘空间这个空间想要直接管理起来是非常困难的就好比中国这么大的地方我们叫中央政府来管理整个中国那是不是很不现实所以中国又分了很多个省省里又分了很多个市市里又分了一些小县城所以我们会有区政府市政府省政府所以这是在干什么呢这不就是把一个很大的区域拆分成很多的小区域吗大区域不好管小区域好管对吧。所以呢我们也可以按照这种做法把磁盘的500GB进行拆分拆分成100GB,100GB,100GB,100GB,100GB。所以呢我们要想把这500GB管好只需要把这100GB管好就可以了因为这些100GB都可以采用一样的管理方法进行管理这个动作我们叫做分区。其实这个例子也随处可见比如说我们自己的笔记本电脑一般只有一块磁盘而出现像C盘D盘E盘F盘这种都是通过分区实现的但是实际上只有一块磁盘。
然后我们还可以把这100GB划分成50个2GB的组Group也就是50组那么管理好500GB也就变成了管理好一个组也就是2GB的内容就可以了。这种思想就是大事化小的思想分治法。 如上图所示我们把这些组叫做块组这些块组里面存的数据有两种一种是我的文件信息另一种是跟多的文件管理的数据。而我的文件信息包括内容和属性这些都是数据内容和属性分开存储。而在我们班级里面除了有普通的学生也有一些班干部对班级进行管理的一些成员我们步入学校不久那么班级的管理者会很快就选出来因为方便后续对班级进行管理所以对一个分组来讲呢在正式使用文件系统之前我们一定要把每一个组当中的管理数据写入到块组当中也就是说比如说使用了多大的空间还剩多少空间等等这些数据是应该提前显示出来的。所以换句话说就是块组里面的各个分区都要先写入管理数据我们把这个操作称之为格式化。 下面我们在Xhell里面新建文件和目录 我们认识一条新的指令
ls -li 我们发现它比ll多一条数据这条数据都是数字每一个文件对应的这个数字都不一样我们把这条数据叫做文件的inode编号一般情况下一个文件一个inode,也就是说inode 每个文件都有。在整个分区具有唯一性在Linux内核当中识别文件和文件名无关和inode有关。 而我们这张图对应的inode Table叫做i节点表:存放文件属性 如 文件大小所有者最近修改时间等。保存文件属性是通过inode来保存的Linux内核中有一个inode的结构体
struct inode
{ 大小权限拥有者所属组ACM时间inode编号等。 }
这个结构体占128字节。
假设inodeTable里面有1000个4KB的文件块那就是32000个inode所以inode由于大小是固定的所以inode在这张表里也很好定位所以我想要知道inode在整张表的定位我们只需要知道inode在整张表里的偏移量所以给文件分配一个inode是很容易的所以我们就可以把这张inode Table看成一个数组struct inode inode_table[N].
上图中的DataBlock是数据区存放文件内容。 这些文件块都有对应的编号。其实inode结构体里面会维护一个int blocks[N]的数组这个数组记录的是该inode对应的文件存放在数据区的文件内容所对应的文件块的编号维持在一个数组里面比如说该文件的文件内容存放在124编号的文件快中那么就把这三个编号存在这个blocks数组中。
下面我们来谈inodeBitmap 表示 inode位图inode Bitmap每个bit表示一个inode是否空闲可用。比特位的位置表示inode编号比特位的内容0/1表示对应的inode编号是否被使用。 块位图Block BitmapBlock Bitmap中记录着Data Block中哪个数据块已经被占用哪个数据块没有被占用。比特位的位置表示Block编号比特位的内容0/1表示对应的Block编号是否被使用。
Block Groupext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相同的结构组成。政府管理各区的例子 超级块Super Block存放文件系统本身的结构信息。记录的信息主要有bolck 和 inode的总量未使用的block和inode的数量一个block和inode的大小最近一次挂载的时间最近一次写入数据的时间最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏可以说整个文件系统结构就被破坏了
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/911582.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!