磁盘
柱面
扇区:512字节
分区
主分区、扩展分区、逻辑分区
MBR:主引导程序(446)、分区表(16 * 4)、0xAA 55(其值是0x55 AA)
boot sector:自举装入程序区(本分区操作系统类型、数据区大小
根目录区允许最大目录项(在根目录区最多创建多少个文件))
超级块副本 | 配置信息 | i-node图 | 块位图 | i-node块 | 目录块和数据块
而inode map就是用来映射inode_array这个数组使用情况的一个位图,用法跟sector map类似。
每个 i-node对应一个文件,用于存放文件名、文件属性等内容,inode_array就是把所有 i-node都放在这里,形成一个较大的数组
软硬链接
符号链接又称软链接,它创建了之后,拥有自己的i-节点号,但是它的内容却是指向的链接的文件。这样的机制就决定了软链接可以跨越文件系统进行链接。
硬链接创建了之后,它的i-节点号是共用的链接的文件,所以硬链接产生的文件并不需要多大的空间,而且修改了其中一个的内容,另外一个文件的内容也会随之改变。由于是共用i-节点,又由于磁盘可能有多个文件系统,而每个文件系统的i-节点是重复的,所以跨文件系统的硬链接是不被允许的。
进程操作文件
内核中,对应于每个进程都有一个文件描述符表,表示这个进程打开的所有文件。文件描述表中每一项都是一个指针,指向一个用于描述打开的文件的数据块———file对象,file对象中描述了文件的打开模式,读写位置等重要信息,当进程打开一个文件时,内核就会创建一个新的file对象。需要注意的是,file对象不是专属于某个进程的,不同进程的文件描述符表中的指针可以指向相同的file对象,从而共享这个打开的文件。file对象有引用计数,记录了引用这个对象的文件描述符个数,只有当引用计数为0时,内核才销毁file对象,因此某个进程关闭文件,不影响与之共享同一个file对象的进程.
file对象中包含一个指针,指向dentry对象。dentry对象代表一个独立的文件路径,如果一个文件路径被打开多次,那么会建立多个file对象,但它们都指向同一个dentry对象。
dentry对象中又包含一个指向inode对象的指针。inode对象代表一个独立文件。因为存在硬链接与符号链接,因此不同的dentry对象可以指向相同的inode对象.inode 对象包含了最终对文件进行操作所需的所有信息,如文件系统类型、文件的操作方法、文件的权限、访问日期等。
打开文件后,进程得到的文件描述符实质上就是文件描述符表的下标,内核根据这个下标值去访问相应的文件对象,从而实现对文件的操作。
########注意,同一个进程多次打开同一个文件时,内核会创建多个file对象。
当进程使用fork系统调用创建一个子进程后,子进程将继承父进程的文件描述符表,因此在父进程中打开的文件可以在子进程中用同一个描述符访问。