文章目录
1)一个文件,它是文件内容和文件属性的集合
文件=文件属性+文件内容
文件属性
文件内容
2)文件分为打开的文件和未打开的文件
3)打开的文件是谁打开的?
由进程打开!而研究一个被打开的进程本质就是研究进程和文件的关系。
而被打开的文件之后,必须先被加载到内存,而文件=文件属性+文件内容,那么是谁先被加载到内存?属性先被加载到内存,属性中有文件的编号,可以用来定位哪一个文件,然后再找到指定文件内容。
一个进程可能打开多个文件,而而操作系统中,注定不止存在一个进程,因此也注定存在了多个进程打开大量文件的现象,进而这些被打开的文件,操作系统要进行管理,那么怎么管理这些被打开的文件–先描述,再组织。在Linux内核中,一个被打开的文件,都必须有自己的文件打开对象,其中包含文件的很多属性也就是文件属性的集合,然后操作系统对文件对象的管理就转换成了对数据结构的增删查改!一般为链表。
4)那么没打开的文件,存储在哪里?
没有打开的文件,在磁盘上存储,而放着的这些文件,对于我们来说最关心的是什么?便是这些文件是如何存储的!在磁盘上没有被打开的文件是非常多的,那么这些文件是被如何放置在磁盘上的,也就是如何存储的?分区域进行存储,在磁盘上划分空间来对文件存储,磁盘上存储文件就是要存储文件的内容和文件的属性,在Linux中对文件内容的存储采用数据块的存储方式,文件属性用inode存储,而Linux中文件在磁盘上的存储,这两者是分开存储的!如何分开存储就先剖析磁盘的结构磁盘也就是以前像光盘一样的东西
磁盘它的盘面是近乎光滑的,磁盘它由一块一块的盘片构成,每一盘片两面都是光滑的,而文件就是存储在这样一块块盘片之上,一块盘片存储大量的文件,而磁盘容量越来越大是因为它的盘片越来越多,它有很多片构成
每一面都有一个磁头,磁头摆动是在磁盘上面读写数据,它会左右摆动就是在定位文件,然后进行读写,电脑在开机时,盘面会高速转动,而磁头会在不停的左右摆动,这是在读取数据的过程,盘面转动是在读取不同的数据。在磁头左右摆动的时候磁头和盘面是不会接触的尽管这样看着可能是接触的,但是根本没有接触,因为若是接触的话,会将磁盘上面的数据给损坏,然后可能会造成数据的丢失,磁头是悬浮在盘面上的!其实磁头在左右摆动的时候,就是在定位数据寻址。磁头和盘片之间若是存在灰尘那么就会影响磁头的寻址,影响数据的定位,所以要保证在真空技术下存储。保证真空的技术很难因此在磁盘一旦进入灰尘之后就会慢慢的使数据寻址丢失,然后慢慢变卡!磁盘存数据是在盘面上存储的,磁盘是一个永久性存储介质。磁盘的存储构成有盘面,扇区,柱头,磁头
一个盘面它由无数个同心圆组成,而每一个同心圆称为一个个磁道,从圆心向外划半径向外延伸半径之间形成的弧道为一个个扇区,这样一个个扇区在磁道上存在无数个,一个磁道上存在大量的扇区,数据就是存在在这样一个个的扇区之上,在操作系统中扇区默认最小单位为512字节一个扇区大小为512字节。所以存储大文件的时候就可能是多个扇区连续使用,这样便于磁头定位数据,然后使访问数据效率提升!扇区是磁盘上访问的最小单位(512字节),因此我们可以把磁盘看作由无数个扇区构成的存储介质,而要把数据写入到磁盘中就是要先在磁盘中找到扇区来存储数据,存储数据总得先找到能存放的地方然后再将数据给存放进去而一个盘面有无数个扇区,磁盘也有很多盘面所以要先知道在哪一个盘面而磁头是定位盘面的所有要知道在哪一个磁头,磁头有自己对应编号便于定位盘面,知道在那一面之后要确定磁道,再确定再哪一个扇区这些查找的存储定位都要带有自己的编号,这样以便于确认访问在哪?磁头在左右摆动的过程中是在定位磁道和柱面的过程,而盘面在高速旋转就是在定位扇区的过程
所有磁盘的效率取决去磁头的运动和盘面的高速旋转,是由寻址决定的效率而这样一个寻址动作寻址越少的话,效率就是越高的,若是寻址动作越多相应的效率就越低下。所有在软件设计上要尽可能的把相关的数据放在一起,就是在程序设计上也是,尽量把相同类型的数据定义在一起,然后在磁盘上访问寻址时,才能更尽可能的拿出更多的数据,并且不用做大量的寻址工作。
因此未被打开的文件在磁盘上扇区存储着的,以固定大小在扇区上一个个扇区存储!