文章目录
- inode
- 磁盘了解
- 站在OS角度磁盘就是线性结构
- 如何确认inode和后面的那个block相关联呢?
- 如何在大的inode Table中安排一个新文件的inode?
- 目录下创建文件的过程都发生了什么
- 软硬链接
- 软链接:特别像快捷方式
- 使用场景
- 硬链接
- 二者区别:
- 硬链接有什么用?
inode
磁盘了解
计算机中的机械设备,例如SSD,FLASH,USB。磁盘写入的基本单位是扇区,512字节。盘面,磁道,扇区。磁盘和OS的交互的基本单位是4KB。
机械硬盘(偏移容量大效率低)
固态硬盘(效率高)
将盘片想象为线性的结构,同心圆柱面扯开成一条。寻址时,将3D磁盘划分地址转化为线性地址即可完成规划。即管理好这个大的线性磁盘空间即可
站在OS角度磁盘就是线性结构
磁盘很大,管理的成本是很高的。
- 分区:将大磁盘划分为小空间。
- 格式化:每个分区需要写入文件系统:来管理每个分区。
如何确认inode和后面的那个block相关联呢?
Linux系统中文件名在OS层面没有意义,是给用户使用的。
系统层面标定一个文件的并不是文件名,是通过文件的inode编号。一个文件一个inode.
iNode中存在的是文件属性结构体,结构体中存在block[32]数组,写入着和block的对应关系:1:n。
如何在大的inode Table中安排一个新文件的inode?
iNode Bitmap位图结构:
将iNode bitmap加载到内存然后按位操作找0的位置。同理给文件内容申请数据块应该分配几个?就遍历Block Bitmap位图结构申请几个位置,确定在datablocks中的那几个block。
-
目录是文件吗?
是,文件的属性在磁盘中也存在着自己的iNode。
-
目录有数据吗?
有
-
目录数据块中放什么?
所创建的所有文件,都在一个特定的目录下,进程也存在与他的当前目录。所以放的是文件名映射inode编号。
目录下创建文件的过程都发生了什么
iNode Bitmap遍历,标志位从0置1,安排位置inode =12345,填充文件属性。
查看文件名:cat->先查看当前目录->data block->12345(映射关系)hello.c->12345->inode table->inode->blocks[]->打印文件内容。
在特定目录下写入创建文件名和iNode的映射关系。
删除文件只需要将inodebitmap中的标志位从1->0,删文件并不删文件的数据和属性,只是标志位置0即可,下一次会有新的内容填充。所以rm删文件很快只是一下标志位的处理,文件误删还是有拯救方式的,inode bitmap以及block[32]中的标志位并且原来的文件还没被覆盖。
软硬链接
软链接:特别像快捷方式
使用场景
设定长目录下的exe:
建立软连接之前执行:
建立软连接之后:
硬链接
二者区别:
软连接是有自己独立的inode的,是一个独立的文件。有自己的iNode属性和数据块(保存的是指向文件的路径)
硬链接本质就不是一个独立的文件,而是一个文件名和iNode编号的映射关系,自己没有独立的iNode,没有独立的属性和数据。
创建硬链接本质就是在特定目录下填写一对文件名和iNode的映射关系。把其中一个删掉文件还在,相当于重命名文件了。
文件对应的硬链接数,有几个文件名指向他。那这个数字在inode结构体中的int ref字段中保存,添加一个ref++,相当于引用计数。
硬链接有什么用?
为什么创建新的目录的时候默认是2呢?
.
是指向当前目录的,dir也是指向这个的,所以是2。同理,我在里面多创建一个目录,ref=3,因为还有那里面的一个上级目录 ..
。