【学习笔记】文件系统结构 一

盘在使用前,需要分区和格式化,在windows下格式化磁盘,可以选择FAT,FAT32,NTFS等类型,在UNIX下格式化磁盘,可以选择EXT2,EXT3SWAP等类型,格式化操作将在磁盘分区中创建文件系统,它们确定文件的存储方式和索引方法,确定磁盘空间分配和回收算法。

UNIX文件系统的存储由目录—i节点数据块三级组成,其中目录存储了文件的层次结构,数据块存储了文件的具体内容信息,i节点是连接文件层次结构与其数据块内容的桥梁。

UNIX下的文件包括了文件类型,文件访问权限,文件属主ID,文件属组ID,文件链接数,文件长度和文件时间等,这些信息存储在文件对应的i节点中。

4.1文件系统的结构

大多数计算机都有若干磁盘,这些磁盘中包含着一个或多个分区,每个分区都有一个文件系统.UNIX文件系统将磁盘空间划分成一系列大小相同的块(block),全部块可划分为引导快,超级块,i节点区(inode区),和数据区四个部分。

【学习笔记】文件系统结构 一_第1张图片

1引导块:

引导块位于文件系统的第0号物理块,即文件系统的第一扇区,不属于文件系统管辖,保存着文件系统的引导代码。

2超级块:

超级块位于文件系统的第1号物理块,紧跟引导块之后,描述文件系统本身的结构信息,如文件系统的大小,空闲块数目,空闲块索引表,空闲i节点数目,空闲i节点索引表,封锁标志等。超级块的数据结构一般定义在文件”filsys.h”中。

Struct filsys

{

Ushort s_isize; //磁盘索引节点区所占用的数据块数

daddr_t s_fsize; //整个文件系统的数据块数

short s_nfree; //在空闲块登记表中当前登记的空闲块数目

daddr_t s_free; //空闲块登记表

short s_ninode; //空闲索引节点数

ino_t s_inode; //空闲节点登记表

chars_flock; //加锁标志位

chars_ilock; //节点加锁标志位

chars_fmod; //超级块修改标志

chars_ronly; //文件系统只读标志

time_t s_time; //超级块上次修改时间

short s_dinfo[4]; //设备信息

daddr_t s_tfree; //空闲块总数

ino_t s_tinode; //空间节点总数

chars_fname[6]; //文件系统名称

chars_fpack[6]; //文件系统包名称

longs_fill[13]; //填空位

longs_magic; //指示文件系统的幻数

longs_type; //新文件系统类型

}

3i节点区(inode区)

i节点区位于超级块之后,长度由超级块中的s_isize字段决定,它描述文件的属性,如长度,属主,属组,数据块表和最近访问时间等,i节点的数据结构一般定义在文件”ino.h”

struct dinode

{

Ushort di_mode; //文件类型与权限

Short di_nlink; //文件链接数

Ushort di_uid; //文件属主ID

Ushort di_gid; //文件属组ID

Off_t di_size; //文件长度

Char di_addr[NADDR_BITES]; //文件磁盘块地址列表

Char di_gen; //file generation number

Time_t di_atime; //文件最近访问时间

Time_t di_mtime; //文件最近修改时间

Time_t di_ctime; //文件状态最近改变时间

}

文件系统通过i节点对文件进行控制和管理,其中,每个文件对应一个i节点,每个i节点具有唯一的节点号,记录了文件的属性和内容在磁盘上的存储位置,但文件名并不记录在i节点中,而是存储在目录文件中。

4数据区

文件的数据区位于i节点区之后,由众多相同容量的块组成,用于存储文件的内容,如果文件长度超过了一个块的最大容量,则该文件将被存储在多个块中,因此大文件很容易分布在成千上百个独立的磁盘块中。

文件数据区中各数据块的空闲情况由超级块记录,文件系统利用超级块中的记录完成对数据块的分配和回收。

你可能感兴趣的:(数据结构,算法,windows,unix)