赞
踩
"这月蹦迪没我"
磁盘作为计算机硬件里,唯一的机械设备。在数据存储的领域,有着不可磨灭的作用。相较于,保持通电情况下具有保持数据的不丢失的内存,磁盘能够"永久性"地存储 数据。
磁盘是计算机主要的存储介质,可以存储大量的二进制数据,并且断电后也能保持数据不丢失。早期计算机使用的磁盘是软磁盘(Floppy Disk,简称软盘),如今常用的磁盘是硬磁盘(Hard disk,简称硬盘)。
磁盘作为外设,访问肯定会很慢!因此,它常常被拿来同内存的访问读取速度相比较,
对比内存与磁盘从访问方式上:
但是很多时候,在企业中,并不会因为磁盘的访问速度而将其淘汰掉! 毕竟,内存的成本造价 远超于硬盘的成本,硬盘仍然能以更大的容量,成为存储的主流。
俯视结构;
盘片结构;
侧视图;
有了上面盘片寻址的基础,也就不难理解下面的图。
我们都知道,计算机只认识二进制数据。那么磁盘是如何读写的呢?它是如何区别0,1的呢?
硬盘的盘片上具有磁性,利用磁头进行影响这些带磁的物质排列顺序。磁铁圈影响它们的带电状况,来表示0,1。(显然这里的专业性,不在本篇所讲)。
如果你有无穷大的力气,掰直由铝合金打造的硬盘;正如拉常 “老古董”磁带般轻松;
逻辑区块地址(Logical Block Address, LBA)是描述计算机存储设备上数据所在区块的通用机制,一般用在像硬盘这样的辅助记忆设备。LBA可以意指某个数据区块的地址或是某个地址所指向的数据区块。
那么操作系统如何进行 LAB的地址转换呢? 下面我就小小地举个例子;
为什么需要抽象成逻辑地址?按照磁盘寻址的地址(CHS)难道不香吗?
1.其原因一肯定在于:抽象成LAB地址 一定是便于OS进行管理的。其次这与后面操作系统与磁盘进行的数据交互的大小也相关(之后会提及)。
2.其原因二在于:软件与硬件层面上的解耦。
虽然,磁盘寻址按照扇区(512byte)进行,但是这依旧很小!!当要读取足够大的数据时,显然不够有效地减少IO的次数。OS文件系统定制了对多个扇区进行读取: 1KB\2KB\4KB为基本本单位。 哪怕! 你就仅仅要读取或者写入1byte,OS也按照以页(Page)为单位,将数据进行load,并为你写回磁盘!
这里当然又是局部性原理“救”了我们。
一个计算机程序倾向于引用邻近于其最近引用过的数据项的数据项。从效率上能够提高cpu高速缓存的命中率。从程序安全上,有可能程序在进行磁盘数据交互时的字节大小,超过了物理内存的总大小,因为其"倾向于较小的活动页面集合上的工作",接下来会对这个工作集命中,而不会产生额外的磁盘流量。
我们大多数笔记本都只携带了一个硬盘(固态),只不过这个硬盘被划分为了多个区。
那么为什么要么做呢?
举个例子:
我们大中国的领土面积有九百六十多万平方千米,但是我们并不是"一方"管理这庞大的区域面积。 而是分为34个省会,四川省、云南省、陕西省……,同时省下面又分了很多个市级,四川省成都市、四川省内江市……。
同样的,幼稚园初中高中只有班主任 ,但到了大学就有辅导员。初高中没有各级学院,但到了大学就有经济、护理、电子信息学院等等。
这么做的目的 就是为了方便管理!
然而,计算机里的磁盘分区,远远比不上那些行政区划的管理! 因为一方水土,一方文化。 不是靠模板就能治理好的!
对于磁盘而言,500GB和100GB的区别相差无几! 管理好500G大小的磁盘 就等于只需要管理好100GB大小的磁盘大小! 其余的 照着复制粘贴即可!
Block Group:ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相同的结构组成。政府管理各区的例子
Super Block:存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个文件系统结构就被破坏了。Group Descriptor Table:块组描述符,描述块组属性信息,有兴趣的同学可以在了解一下块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用。
inode Bitmap:每个bit表示一个inode是否空闲可用
Data Blocks:存放文件内容
inode_block存储;
目录是不是文件呢? 是的! 那它是不是也是有它的属性 + 内容呢?是的!
刚刚才说了文件的结构。目录也是文件,那它也有自己的inode。那么目录的Datablock是什么呢? inode里不包括文件名,系统查找文件的属性内容只认inode,
那么我们所看到的文件名是给谁用的呢? 答案是目录! 目录的数据块里存储的数据,就是inode与文件名的映射关系。我们用户 访问某个文件不用知道它的inode,只需要在一个目录下,拿文件名进行访问即可! 底层就是目录帮我 建立了 inode与文件名的映射关系。
如果要进入一个目录,我们不陌生,需要可执行权限,才能能够进入目录。那么
如何理解目录的写权限?
对于目录而言,当用户创建一个文件时,本质就是拿着创建好的文件inode与文件名 建立映射关系,并向目录的数据块写入的过程。
同样,删除一个文件,其本质就是根据文件名找到对应的inode,根据inode将inode里的标记位"清零",同时目录并将文件名与inode的映射关系清空即可。
如何理解目录的读权限?
对于目录而言,读权限,就是访问目录数据块。只有拥有读权限,才能够拿到文件名映射的inode。
①磁盘是外设具有高容量存储,但低访问效率(相较于cpu、内存)的特点
②磁盘的物理结构:写入读取的磁头、存储信息的扇区。
③磁盘定位算法(CHS),先确定在哪一个磁头,在确定在哪一个柱面(一条磁道),定位在哪一个扇区。
④磁盘的LAB(逻辑)地址是 OS与磁盘数据交互的单位。可以实现软硬件功能的解耦。
⑤linux系统中访问文件的本质,是访问inode。inode是文件系统中文件的唯一标识。
⑥目录也是文件,也是有独立的inode的。但是目录的数据块存储的是文件名与inode的唯一映射关系
本篇就到此结束了,
感谢你的阅读,
祝你好运~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。