您好,欢迎访问三七文档
MINIX的文件系统也不是内核的一部分,而是一个运行在用户空间的大型C程序。读写文件时,用户进程向文件系统发送一条消息,文件系统进行相应处理后,返回结果。实际上,MINIX文件系统可以看成是和调用进程在同一台机器上运行的网络文件服务程序。§1文件系统布局•MINIX文件系统(或文件卷)可以存储在任何块设备中(如软盘或一个硬盘分区),它们具有相同的布局:0#1#引导块超级块i-结点区1个磁盘块i结点位图区段位图数据区…………•引导块。引导块即引导程序。在启动计算机时,硬件会从引导设备将引导块读入内存,转而执行引导块中的代码。引导块开始操作系统本身的加载过程。•超级块。也叫卷资源表。其中给出文件系统的布局信息(即各种资源的数目),如:块大小、I结点数等。•I结点位图。用来描述I结点的情况,即哪些I结点是已分配出去的,哪些是空闲的。•区段位图。MINIX的文件存储器是以区段为单位进行分配的,而区段位图是用来描述文件存储空间的使用情况的,即哪些空间是空闲的。•I结点区。MINIX文件系统中,每个文件有一个对应的磁盘索引结点,用来存放该文件的属性信息。所有的磁盘索引结点均存放在I结点区内。•数据区。用来存放文件的具体信息。§2空闲文件存储空间的管理•MINIX文件存储空间的分配是以区段为单位的,每个区段为2k块(k的大小记录在文件卷的超级块中)。•MINIX空闲文件存储空间采用位示图(即区段位图)的方式进行管理,位图中的每一位(除第0位以外)对应于文件存储空间数据区中的一个区段,值1表示对应区段已分配出去,值0表示对应区段空闲。(区段按它们在整个文件卷中的物理位置来编号,数据区的首个区段的区段号存放在超级块中,并对应于区段位图的第1位,区段位图的第0位保留不用)§3MINIX文件的物理结构•MINIX采用离散分配方式为文件分配存储空间,其文件的物理结构类似于UNIX,为混合索引的物理结构。•在MINIX3中,磁盘索引结点中有10个地址项,其中前7个地址项(0~6)为直接地址,用于记录文件前7个区段的区段号;第7个地址项为一次间址(记录间址块的区段号);而第8个地址为二次间址项。第9个地址项保留未用.•MINIX3的块大小为1KB,区段号为32位,一个间址块中含有256个区段号,若区段大小与块相同,则可以存取长达64M的文件。MINIX文件采用32位的整数描述文件偏移量,故其文件的最大长度为4GB,我们可以使用三次间址块或修改区段大小来存取大于64M的文件。§4MINIX的目录结构和索引结点•为了提高在目录中检索文件的速度,MINIX将文件属性信息中除了文件名以外的部分存放在磁盘索引结点中。•MINIX目录是由若干目录项构成的文件,每个目录项64个字节,头4个字节构成32位的I结点号,剩下的60个字节为文件名。可见一个磁盘分区能够支持的文件数是40亿。•所有的磁盘I结点均位于文件卷的I结点区中,它们按物理位置从1开始编号,并采用位图进行管理。位取值0表示对应的I结点空闲,1表示对应的I结点已分配出去。位图的第0位未用,即不对应于任何I结点;而第1位对应1号I结点,它总是分配给文件系统的根目录使用。磁盘索引结点21112typedefstruct{/*V2.xdiskinode*/21113mode_td2_mode;/*文件类型,访问权限*/21114u16_td2_nlinks;/*链接计数*/21115uid_td2_uid;/*文件主标识符*/21116u16_td2_gid;/*组标识符*/21117off_td2_size;/*文件长度(字节)*/21118time_td2_atime;/*最近访问时间*/21119time_td2_mtime;/*最近修改时间*/21120time_td2_ctime;/*I节点最近修改时间*/21121zone_td2_zone[V2_NR_TZONES];/*物理地址*/21122}d2_inode;/*(21004)V2_NR_TZONES=10*/d2_mode的模式信息中给出了文件的类型(正规文件、目录、块设备特别文件、字符设备特别文件或管道),和文件的保护权限(3组rwx分别对应于文件主,同组用户,其他用户对文件的访问权限)。(具体见02697-02710)内存索引结点•文件在使用以前必须被打开,此时,它的索引结点将从磁盘拷入内存的索引结点表中,这样可提高对文件操作的效率。内存索引结点表的定义为:21910EXTERNstructinode{21911mode_ti_mode;21912nlink_ti_nlinks;21913uid_ti_uid;21914gid_ti_gid;21915off_ti_size;21916time_ti_atime;21917time_ti_mtime;21918time_ti_ctime;21919zone_ti_zone[V2_NR_TZONES];2192021922dev_ti_dev;/*设备号*/21923ino_ti_num;/*磁盘索引结点号*/21924inti_count;/*内存I结点引用计数*/21925inti_ndzones;/*直接地址个数*/21926inti_nindirs;/*每个间址块中的区段号个数*/21927structsuper_block*i_sp;/*对应设备的内存超级块指针*/21928chari_dirt;/*CLEANorDIRTY*/21929chari_pipe;/*settoI_PIPEifpipe*/21930chari_mount;/*被挂装*/21931chari_seek;/*是否刚调整过读写指针*/21932chari_update;/*ATIME,CTIME,andMTIME位*/21933}inode[NR_INODES];/*21007#defineNR_INODES64*/系统可同时打开的文件个数(包括目录)最多为64个。§5超级块•每个文件卷的第1块为超级块(第0块为引导块),它用来登记整个文件卷的情况,因此,也被称作卷资源表。•MINIX文件卷必须安装(mount)到整个系统的文件系统后才能被使用,当某个文件卷被安装(mount)到MINIX文件系统上时,它的超级块被读入内存超级块表中。内存超级块表22120EXTERNstructsuper_block{22121ino_ts_ninodes;/*I结点数*/22122zone1_ts_nzones;/*V1版本总区段数(包括位图等的区段)*/22123shorts_imap_blocks;/*I结点位图块数*/22124shorts_zmap_blocks;/*区段位图块数*/22125zone1_ts_firstdatazone;/*首个数据区段号*/22126shorts_log_zone_size;/*若区段=2k块,则该字段为k*/22127shorts_pad;/*填充位*/22128off_ts_max_size;/*最大文件长度(字节)*/22129zone_ts_zones;/*V2版本总区段数*/22130shorts_magic;/*magicnumbertorecognizesuper-blocks*/下列内容为MINIX3特有的信息:22138shorts_pad2;/*填充位*/22139unsignedshorts_block_size;/*每块的字节数*/22140chars_disk_version;/*文件系统的版本信息*//*下述信息仅出现在内存超级块中*/22143structinode*s_isup;/*指向根目录I结点的指针*/22144structinode*s_imount;/*指向安装到的I结点*/22145unsigneds_inodes_per_block;/*每块的I结点数*/22146dev_ts_dev;/*设备号,即超级块是哪个设备的*/22147ints_rd_only;/*只读标志*/22148ints_native;/*高位在后的文件系统标志*/22149ints_version;/*文件系统版本号*/22150ints_ndzones;/*I结点中的直接区段的个数*/22151ints_nindirs;/*间接块中间接区段的个数*/22152bit_ts_isearch;/*从该位开始往后寻找空闲I结点*/22153bit_ts_zsearch;/*从该位开始往后寻找空闲区段*/22154}super_block[NR_SUPERS];/*21008#defineNR_SUPERS8*/§6进程控制块fproc与内存管理器类似,文件系统中也定义了与文件系统相关的进程控制块部分fproc。21504EXTERNstructfproc{21505mode_tfp_umask;/*masksetbyumasksystemcall*/21506structinode*fp_workdir;/*pointertoworkingdirectory'sinode*/21507structinode*fp_rootdir;/*pointertocurrentrootdir(seechroot)*/21508structfilp*fp_filp[OPEN_MAX];/*thefiledescriptortable*/21509uid_tfp_realuid;/*realuserid*/21510uid_tfp_effuid;/*effectiveuserid*/21511gid_tfp_realgid;/*realgroupid*/21512gid_tfp_effgid;/*effectivegroupid*/21513dev_tfp_tty;/*major/minorofcontrollingtty*/21514intfp_fd;/*placetosavefdifrd/wrcan'tfinish*/21515char*fp_buffer;/*placetosavebufferifrd/wrcan'tfinish*/21516intfp_nbytes;/*placetosavebytesifrd/wrcan'tfinish*/21517intfp_cum_io_partial;/*partialbytecountifrd/wrcan'tfinish*/21518charfp_suspended;/*settoindicateprocesshanging*/21519charfp_revived;/*settoindicateprocessbeingrevived*/21520charfp_task;/*whichtaskisprocsuspendedon*/21521charfp_sesldr;/*trueifprocisasessionleader*/21522pid_tfp_pid;/*processid*/21523longfp_cloexec;/*bitmapforPOSIXTable6-2FD_CLOEXEC*/21524}fproc[NR_PROCS];•系统中总共也只定义了NR_PROCS个fproc,即任务只有proc,而没有对应的mproc和fproc,而服务器进程与用户进程则必须拥有proc、mproc、fproc三者。如果一进程的proc的下标为i,则它的mproc和fproc的下标为proc[i].p_nr。•在fproc中有三个域需要特别注意,前两个是指向根I结点的指针和指向工作目录I结点的指针。第三个是用户文件描述符表:structfilp*fp_filp[OPEN_MAX];/*00167OPEN_MAX=20*/§7用户文件描述符号表和系统打开文件表•一进程的所有打开文件均必须登记在它的文件描述符表中,表项的序号即打开文件的文件描述符,表项的内容是一个指针,指向对应的系统文件描述符表项。•每个打开的文件还必须登记在
本文标题:操作系统中文件管理
链接地址:https://www.777doc.com/doc-3085741 .html