1. 磁盘的物理结构
盘面:磁盘是由一叠盘面组成
磁头(Heads):每个磁头对应一个盘面,负责该盘面上的数据的读写
磁道(Track):每个盘面会围绕圆心划分出多个同心圆圈,每个圆圈叫做一个磁道
柱面(Cylinders):所有盘片上的同一位置的磁道组成的立体叫做一个柱面
扇区(Sector):以磁道为单位管理磁盘仍然太大,所以计算机前辈们又把每个磁道划分出了多个扇区
磁盘容量的大小一般和磁道的密集程度有关,扇区数一般是不变的
2. 磁盘I/O的过程
首先是磁头径向移动来寻找数据所在的磁道->寻道时间
找到目标磁道后通过盘面旋转,将目标扇区移动到磁头的正下方->旋转延迟
向目标扇区读取或者写入数据->存取时间
到此为止,一次磁盘IO完成。
所以 单次磁盘IO时间 =
寻道时间 +
旋转延迟 +
存取时间
3. Linux文件系统
a) superblock
记录文件系统的整体信息,包括inode/block的总量,使用量,以及剩余量和文件系统格式的相关信息
b) inode
记录文件的权限和属性,一个文件会占用一个inode,同时记录文件的数据所在的block号
c) block
实际记录文件的内容,如果文件内容很大,会占用多个block
由于每个inode和block都有编号,而每个文件只会占用一个inode,inode中记录了文件的block号.这样我们只需要找到文件对应的inode,自然就可以找到这个文件的block号,那么就可以拿到该文件的数据了.
4. 创建一个目录
当我们在Linux下创建一个目录的时候,系统会分配一个inode和至少一个block给该目录(如果该目录下文件过多,可能会分配多个block块用来记录文件信息).其中inode记录了该目录的相关权限与属性,并记录了分配的block块号.block中则保存了这个目录下的文件名与该文件名对应的inode号,这样访问一个目录中的文件的过程如下描述
读取当前目录的inode数据->判断是否有权限对该目录进行相关操作->如果有权限->读取该目录的block的数据->获得当前目录下的文件名和文件对应的inode号->读取对应文件的inode号的信息->判断是否有权限对该文件进行相关操作->如果有权限->读取该inode中保存的block块的数据->读取过程完成
5. 创建一个文件
当我们在Linux下创建一个文件的时候,系统会分配一个inode和相对于该文件大小的block块的数量(size/block上取整).如果超过inode的直接指向,系统还会分配额外的间接block哦.创建文件和目录的时候,我们首先会进行权限判断,然后根据bitmap寻找空闲的inode和block.
6. 文件共享
在Linux的进程中,当我们打开一个文件时,返回的是一个文件描述符。这个文件描述符是一个数组的下标,对应数组元素为一个指针。有趣的是,这个指针并没有直接指向文件的inode,而是指向了一个文件表格,再通过该表格,指向加载到内存中的目标文件的inode。如下图,一个进程打开了两个文件
如果进行dup/dup2的话,例如fd = 4为dup(1)产生, 那么结构如下图所示:
7. 软链接与硬链接
为解决文件的共享使用,Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)。链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。若一个 inode 号对应多个文件名,则称这些文件为硬链接。换言之,硬链接就是同一个文件使用了多个别名,而软链接相当于Windows下的快捷方式,其实只是保存了原文件的文件名而已。
有了以上的知识后,理解软链接与硬链接就是小菜一碟了.给出一张图即可说明.
主要内容摘自<鸟哥私房菜> 部分内容来自网络.
版权声明:本文为博主原创文章,未经博主允许不得转载。