组织与数据存储系统其他功能实现_第1页
组织与数据存储系统其他功能实现_第2页
组织与数据存储系统其他功能实现_第3页
组织与数据存储系统其他功能实现_第4页
组织与数据存储系统其他功能实现_第5页
已阅读5页,还剩106页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

17:25:0616.1文件6.2文件目录6.3文件组织与数据存储6.4文件系统其他功能的实现第六章文件管理17:25:062一、文件的存储二、文件的逻辑结构三、文件的物理结构6.3文件组织与数据存储17:25:0631、卷一盘磁带、一张光盘、一个硬盘分区或一张软盘片都称为一卷,卷是存储介质的物理单位。一个卷可以保存一个文件或多个文件,也可以一个文件保存在多个卷上。物理卷和物理设备不总是一致的。一、文件的存储(1)17:25:0642、块(物理记录)块是存储介质上连续信息所组成的一个区域,也叫做物理记录。块是主存储器和辅助存储设备进行信息交换的物理单位,每次总是交换一块或整数块信息。不同类型的存储介质,块的长短常常各不相同;同一类型的存储介质,块的长短也可以不同。一、文件的存储(2)17:25:0651、文件组织文件组织指文件中信息的配置和构造方式,应该从文件的逻辑结构和组织及文件的物理结构和组织两方面考虑。二、文件的逻辑结构(1)17:25:0662、文件的逻辑结构文件的逻辑结构和组织是从用户观点出发,研究用户概念中的信息组织方式,这是用户能观察到,可加以处理的数据集合。数据可独立于物理环境构造。相关数据的集合构成逻辑文件。3、文件的逻辑结构形式分两种形式:流式文件记录式文件二、文件的逻辑结构(2)17:25:0674、流式文件(字节流文件)指文件内的数据不再组成记录,只是依次的一串信息集合,可以看成是只有一个记录的记录式文件。大多数现代操作系统对用户仅仅提供流式文件,记录式文件往往由高级语言或数据库管理系统提供。二、文件的逻辑结构(3)17:25:0685、流式文件的操作文件常按长度来读取所需信息,也可用插入特殊字符作为分界。1)从指定的位置读写若干字节,读写之后读写位置指针自动后移所读字节数的距离fread(buffer,size,count,fp);fwrite(buffer,size,count,fp);在文件fp中和buffer之间交换size×count个字节2)改变读写指针值fseek(文件描述符,位移量,起始点):读写指针置于文件位移量+起始点rewind(文件描述符):读写指针置于文件开头二、文件的逻辑结构(4)17:25:0696、记录式文件是一种有结构的文件,包含若干逻辑记录,逻辑记录是文件中按信息在逻辑上的独立含意划分的信息单位。逻辑记录的概念被应用于许多场合,特别象数据库管理系统中已是必不可少的了。如单位职工工资文件、学生信息文件、储户信息文件等二、文件的逻辑结构(5)17:25:06107、记录式文件分类1)记录式顺序文件:访问该类文件时给出文件名和记录号2)记录式索引顺序文件:该类文件建立有索引表,表项包含记录键和索引指针,记录键由应用程序指定,索引指针指向记录。执行读取操作时给出文件名和记录键,返回指定记录执行写操作时给出文件名和记录键,系统在所选择的文件位置处插入记录并建立索引表项二、文件的逻辑结构(6)17:25:06118、成组和分解1)逻辑记录和块的关系(如同页和内存物理块的关系)逻辑记录是按信息在逻辑上的独立含义划分的单位,块是存储介质上连续信息所组成的区域。一个逻辑记录被存放到文件存储器的存储介质上时,可能占用一块或多块,也可以一个物理块包含多个逻辑记录。二、文件的逻辑结构(7)17:25:06122)记录成组若干个记录合并成一组,写入一个块叫做记录成组,这时每块中的逻辑记录的个数称块因子。成组操作的过程:先在系统输出缓冲区内凑满一块后才将缓冲区内信息写到存储介质上。3)记录分解当存储介质上的一个物理块读进系统输入缓冲区后,把逻辑记录从块中分离出来的操作叫记录的分解。记录成组和分解处理节省存储空间,减少I/O次数。二、文件的逻辑结构(8)17:25:0613二、文件的逻辑结构(9)逻辑记录1逻辑记录2逻辑记录3物理记录逻辑记录用户缓冲区系统缓冲区记录成组和分解处理过程17:25:06149、记录格式

格式F:定长记录格式V:变长记录格式S:跨块记录10、记录键主键,次键单键记录,多键记录二、文件的逻辑结构(10)17:25:0615文件和数据的逻辑结构是面向用户和应用程序的。1、文件的物理结构和组织是指逻辑文件在物理存储空间中存放方法和组织关系。这时文件看作为物理文件,即相关物理块的集合。文件的存储结构涉及:块的划分、记录的排列、索引的组织、信息的搜索,其优劣直接影响文件系统的性能。三、文件的物理结构(1)17:25:06162、构造文件物理结构的方法1)第一类计算法设计映射算法,通过线性计算法、杂凑法等,以记录键的计算结果作为对应的物理块地址,找到所需记录。直接寻址文件、计算寻址文件、顺序文件均属此类。2)第二类指针法设置专门指针,指明相应记录的物理地址或表达各记录之间的关联。索引文件、索引顺序文件、连接文件等均属此类。三、文件的物理结构(2)17:25:06173、顺序文件(连续文件)一个文件中逻辑上连续的信息存放到存储介质的相邻物理块上便形成顺序文件(连续文件)。顺序文件是逻辑记录顺序和物理记录顺序完全一致的文件,通常,记录按出现的次序被读出或修改。FCB中保存第一个物理块地址和文件信息块的总块数。一切存于磁带上的文件都只能是顺序文件,卡片机、打印机、纸带机上的文件也属于顺序文件。存储在磁盘上的文件也可以组织成顺序文件。三、文件的物理结构(3)17:25:0618顺序文件的优点:顺序存取记录时速度较块。顺序文件的缺点:建立文件前需要预知文件长度,修改、插入和增加文件记录有困难,对直接存储器作连续分配会造成空闲块的浪费。顺序文件变种紧凑顺序文件:逻辑记录连续地存储在存储介质的相邻物理块上的文件,插入和删除要移动大量记录。扩展顺序文件:在文件内设有空白区域以备预先估计的添加记录使用。连接顺序文件:文件中设置溢出区,添加的记录通过连接方法保存到溢出区中。三、文件的物理结构(4)17:25:0619划分顺序文件:在直接存取设备上模拟顺序文件的一种方法。把一个文件划分成几个能独立存取的顺序子文件。每个文件由数据区和索引区组成,数据区内存放各个子文件,索引区内存放各个子文件的索引,包括名字、地址、长度和状态等。三、文件的物理结构(5)17:25:06204、连接文件(串联文件)连接文件使用连接字,又叫指针来表示文件中各个记录之间的关系。第一块文件信息的物理地址由文件目录给出。每一块的连接字指出文件下一个物理块位置。三、文件的物理结构(6)文件目录项……017:25:0621连接文件(串联文件)的优缺点优点不要求物理块连续,便于增、删、改。缺点仅适宜于顺序存取。三、文件的物理结构(7)17:25:0622三、文件的物理结构(8)1811130PTRS[6]=18、PTRS[18]=11、PTRS[11]=13、PTRS[13]=NULLFCB→6123456187891011131213NULL141516171811PTRS17:25:06235、直接文件(哈希文件)记录的关键字与其地址间可通过某种方式建立对应关系,利用这种关系实现存取的文件叫直接文件。技术:散列法或杂凑法,以关键字为自变量,以物理地址为因变量构造映射函数实现难点:冲突,不同的关键字映射到同样的物理地址。冲突解决方法:顺序探查法两次散列法拉链法独立溢出区三、文件的物理结构(9)17:25:06246、索引文件索引结构是实现非连续存储的另一种方法,适用于数据记录保存在随机存取存储设备上的文件。系统为每个文件建立一张索引表,每个表目包含一个记录的键(或逻辑记录号)及其记录数据的存储地址,这类文件称索引文件。索引文件在文件存储器上分两个区:索引区和数据区。FCB可存放索引表或其地址三、文件的物理结构(10)17:25:0625三、文件的物理结构(11)…盘块号…文件控制块(a)无键索引表块块块两种索引文件结构示意图…Key1记录键盘块号Key2……KeyN块块块(b)有键索引表文件控制块17:25:0626访问索引文件需两步操作:第一步查找文件索引第二步以相应键登记项内容作为地址而获得记录数据。索引文件的优点:不要求物理块连续,便于直接存取,便于文件的增、删、改。索引文件的缺点:增加了索引表的空间开销和查找时间。三、文件的物理结构(12)17:25:0627索引文件中的索引项分为两类一类是稠密索引,即对每个数据记录,在索引表里都有一个索引项。另一类是稀疏索引,它对每一组数据记录有一索引项。索引顺序文件索引顺序文件与索引文件结构类似,不同之处在于索引表不是为每个记录建立一个表项,而是为一组记录建立一个表项。三、文件的物理结构(13)17:25:0628索引顺序文件能象顺序文件一样进行快速顺序处理,既允许按物理存放次序(记录出现的次序);也允许按逻辑顺序(由记录主键决定的次序)进行处理。当索引表很大时,索引表占的物理块数也会很多,这就需要为索引表再建索引表,形成多级索引分配结构。三、文件的物理结构(14)17:25:06297、UNIX/Linux多重索引结构UNIX/Linux采用了多重索引结构,可以同时采用一级、二级、三级索引分配结构,以满足不同大小文件的需要。每个文件的索引表为13个索引项,每项4个字节,登记一个存放文件信息的物理块号。最前面10项直接登记存放文件信息的物理块号,叫直接寻址。三、文件的物理结构(15)17:25:0630如果文件大于10块,则利用第11项指向一个物理块,该块中最多可放256个文件物理块的块号,叫做一次间接寻址。对于更大的文件还可利用第12和第13项作为二次和三次间接寻址。UNIX/Linux采用了三级索引结构后,文件最大可达16兆个物理块。10+256+256^2+256^3三、文件的物理结构(16)三、文件的物理结构(17)01234567891011120…127……0…1270…1270…127…………0…1270…1270…127…0…1270…127…0…1270…127………………………UNIX/Linux多重索引结构17:25:0632三、文件的物理结构(18)文件名索引节点号文件19文件26文件33文件48文件510文件长度其它属性addr[0]addr[1]……addr[9]addr[10]addr[11]addr[12]123…n基本目录项表索引节点表基本目录项表索引节点表磁盘文件区…………………………三次间址17:25:0633一、文件系统调用的实现二、文件共享三、文件空间管理四、内存映射文件五、虚拟文件系统6.4文件系统其他功能的实现17:25:06341、文件系统调用种类文件系统提供给用户程序的一组系统调用包括:建立打开关闭撤销读写控制通过这些系统调用用户能获得文件系统的各种服务。一、文件系统调用的实现(1)17:25:06352、打开文件表(外存目录的缓冲)为了避免重复访问外存查找文件,系统把常用和正在使用的那些文件目录复制进主存。系统为每个用户进程建立一张内存打开文件表,也称活动文件表,打开文件时,把该文件的目录复制到打开文件表中。当不再使用该文件时,使用“关闭”操作切断用户进程和该文件目录的联系。同时,若该目录已被修改过,则应更新辅存中对应的文件目录。一、文件系统调用的实现(2)17:25:06363、Linux文件系统磁盘组织结构

Linux文件系统将磁盘分为3个功能区:1)超级块:占用1#号块,存放文件系统的结构和管理信息,如记录:inode表所占的盘块数文件数据所占的盘块数主存中登记的空闲块的物理块号主存中登记的空闲inode数主存中登记的空闲inode编号等一、文件系统调用的实现(3)17:25:06372)索引节点区:2#~(k+1)#块,存放inode表,每个文件都有一个inode,所有inode大小相同。3)数据区:(k+2)#~n#为数据块,存储文件内容。一、文件系统调用的实现(4)磁盘磁盘文件卷0#1#2#……………引导块超级块磁盘inode区磁盘信息区:目录块和数据块磁盘文件磁盘组织结构17:25:0638一、文件系统调用的实现(5)磁盘文件卷inode文件名inodeinode文件名inode磁盘文件0#1#2#……数据块数据块目录块…数据块数据块目录块引导块磁盘inode区磁盘信息区:目录块和数据块inode……inode…超级块目录项、inode和数据块的关系17:25:06394、两个重要数据结构1)用户打开文件表进程PCB结构中保留一个files_struct,称为用户打开文件表或文件描述符表。表项的序号是文件描述符fd,每项登记了系统打开文件表的入口指针fp。通过此系统打开文件表项连接到打开文件的活动inode节点。一、文件系统调用的实现(6)17:25:0640一、文件系统调用的实现(7)…………读/写f_falg以相同的读写位移共享该文件的进程数f_count=2读写位移f_offset索引节点指针f_inode=10………………读/写f_falg以相同的读写位移共享该文件的进程数f_count读写位移f_offset索引节点指针f_inode=18…………2130用户进程10…21045…80255……2180用户进程2089用户打开文件表用户打开文件表系统打开文件表…………读/写i_mode以不相同的读写位移共享该文件的进程数i_count=1物理地址i_addr[40]索引节点号i_number=120……读/写i_mode以不相同的读写位移共享该文件的进程数i_count=1物理地址i_addr[40]索引节点号i_number=300…………0…1899活动inode表3010………OS……两个进程通过相同的系统打开文件表项访问一个文件,即文件1文件1文件217:25:0641一、文件系统调用的实现(8)…………读/写f_falg以相同的读写位移共享该文件的进程数f_count=1读写位移f_offset索引节点指针f_inode=10………………读/写f_falg以相同的读写位移共享该文件的进程数f_count=1读写位移f_offset索引节点指针f_inode=10…………2130用户进程10…21045…80255……1280用户进程2089用户打开文件表用户打开文件表系统打开文件表…………读/写i_mode以不相同的读写位移共享该文件的进程数i_count=2物理地址i_addr[40]索引节点号i_number=120……读/写i_mode以不相同的读写位移共享该文件的进程数i_count=1物理地址i_addr[40]索引节点号i_number=300…………0…1899活动inode表3010………OS……两个进程通过不相同的系统打开文件表项访问一个文件,即文件1文件1文件217:25:0642一、文件系统调用的实现(9)用户进程1用户进程2用户打开文件表用户打开文件表系统打开文件表活动inode表OS两个进程通过不相同的系统打开文件表项访问一个文件,即文件1文件1文件217:25:0643一、文件系统调用的实现(10)用户进程1用户进程2用户打开文件表用户打开文件表系统打开文件表活动inode表OS两个进程通过相同的系统打开文件表项访问一个文件,即文件1文件1文件217:25:06442)系统打开文件表为解决多用户进程共享文件、父子进程共享文件而设置的数据结构file_struct,内存开辟了最多可登记256项的系统打开文件表区域。打开文件时,通过此表项把用户打开文件表的表项与文件活动inode连接起来,实现数据访问和信息共享。一、文件系统调用的实现(11)17:25:0645一、文件系统调用的实现(12)主存i_numberi_counti_numberi_count…i_addr[40]…i_numberi_count…i_addr[40]f_flagf_count…f_inode

…用户打开文件表files_struct文件描述符fd系统打开文件表file_struct一个打开文件的file活动inode活动inode主存活动inode表磁盘磁盘文件卷0#1#2#……………引导块超级块磁盘inode区磁盘信息区:目录块和数据块磁盘文件file的指针fp用户空间内核空间文件系统内部结构17:25:06465、建立文件1)系统调用C语言格式intfd,mode;char*filenamep;fd=creat(filenamep,mode);功能:以mode规定的方式建立文件filenamep,若成功,则返回文件描述符fd一、文件系统调用的实现(13)17:25:0647参数:filenamep—文件名路径字符串指针mode—存取权限,创建成功后,存取权限记录在相应索引节点的i_mode中,fd—文件描述符,即用户打开文件表中相应文件表项的序号如fd=creat(“/home/home1/newfile”,0775);一、文件系统调用的实现(14)17:25:06482)建立系统调用的主要工作①为新文件newfile分配磁盘索引节点inode和活动索引节点inode,并把索引节点inode编号与文件分量名newfile组成新目录项,记到目录/home/home1中。②在新文件所对应的活动索引节点inode中置初值,如置存取权限i_mode为0775,连接计数i_nlink置为1等。③为新文件分配用户打开文件表项和系统打开文件表项,置表项初值,如f_flag置写标志,读写位移f_offset清“0”。一、文件系统调用的实现(15)17:25:0649④把用户打开文件表项和系统打开文件表项及文件对应的活动索引节点用指针连接起来,把文件描述字fd返回给调用者。一、文件系统调用的实现(16)17:25:06506、删除文件1)删除系统调用形式为:unlink(filenamep)功能:如果所有用户不再使用文件filenamep,则删除之;否则,使用该文件的用户数减1参数:filenamep—文件名路径字符串指针2)删除过程把指定文件从所在的目录文件中除去。如果没有连接用户(i_link为“1”),还要把文件占用的存储空间释放。在执行删除时,必须要求用户对该文件具有“写”操作权。一、文件系统调用的实现(17)17:25:06517、打开文件1)调用方式

intfd,mode;char*filenamep;fd=open(filenamep,mode);功能:以mode规定的方式打开文件filenamep准备操作参数:filenamep—文件名路径字符串指针mode—打开方式:读(0)、写(1)或读写(2)fd—文件描述符一、文件系统调用的实现(18)17:25:06522)打开过程若该文件未被打开,则执行以下步骤:①检索目录,把它的外存索引节点复制到内存活动索引节点表。②根据参数mode核对权限,如果非法,则这次打开失败。③当“打开”合法时,为文件分配用户打开文件表项和系统打开文件表项,并为表项设置初值。通过指针建立这些表项与活动索引节点间的联系。把文件描述字,即用户打开文件表中相应文件表项的序号返回给调用者。一、文件系统调用的实现(19)17:25:0653若该文件已经被其它进程打开,则不执行步骤①,仅把活动inode中的计数器i_count加1即可。i_count反映通过不同的系统打开文件表项来共享同一活动inode的进程数目,它是以后执行文件关闭操作时,活动inode能否被释放的依据。一、文件系统调用的实现(20)17:25:06548、关闭文件1)调用方式调用方式为:

intfd;close(fd);功能:关闭文件fd,不再操作参数:fd—文件描述符一、文件系统调用的实现(21)17:25:06552)关闭过程①根据fd找到用户打开文件表项,再找到系统打开文件表项。释放用户打开文件表项。②把对应系统打开文件表项中的f_count减“1”,如果非“0”,说明还有进程共享这一表项,不用释放直接返回;否则释放表项。③把活动索引节点中的i_count减“1”,若不为“0”,表明还有用户进程正在使用该文件,不用释放而直接返回,否则在把该活动索引节点中的内容复制回文件卷上的相应磁盘索引节点中后,释放该活动索引节点。一、文件系统调用的实现(22)17:25:0656一、文件系统调用的实现(7)…………读/写f_falg以相同的读写位移共享该文件的进程数f_count=2读写位移f_offset索引节点指针f_inode=10………………读/写f_falg以相同的读写位移共享该文件的进程数f_count读写位移f_offset索引节点指针f_inode=18…………2130用户进程10…21045…80255……2180用户进程2089用户打开文件表用户打开文件表系统打开文件表…………读/写i_mode以不相同的读写位移共享该文件的进程数i_count=1物理地址i_addr[40]索引节点号i_number=120……读/写i_mode以不相同的读写位移共享该文件的进程数i_count=1物理地址i_addr[40]索引节点号i_number=300…………0…1899活动inode表3010………OS……两个进程通过相同的系统打开文件表项访问一个文件,即文件1文件1文件217:25:0657一、文件系统调用的实现(8)…………读/写f_falg以相同的读写位移共享该文件的进程数f_count=1读写位移f_offset索引节点指针f_inode=10………………读/写f_falg以相同的读写位移共享该文件的进程数f_count=1读写位移f_offset索引节点指针f_inode=10…………2130用户进程10…21045…80255……1280用户进程2089用户打开文件表用户打开文件表系统打开文件表…………读/写i_mode以不相同的读写位移共享该文件的进程数i_count=2物理地址i_addr[40]索引节点号i_number=120……读/写i_mode以不相同的读写位移共享该文件的进程数i_count=1物理地址i_addr[40]索引节点号i_number=120…………0…1899活动inode表3010………OS……两个进程通过不相同的系统打开文件表项访问一个文件,即文件1文件1文件217:25:0658f_count和i_count分别反映进程动态地共享一个文件的两种方式,f_count反映不同进程通过同一个系统打开文件表项共享一个文件的情况,这时,不同进程使用相同的读写位移指针f_offseti_count反映不同进程通过不同系统打开文件表项共享一个文件的情况,这时,不同进程使用不同的读写位移指针f_offset一、文件系统调用的实现(23)17:25:0659一、文件系统调用的实现(24)9、文件的读/写读文件—将文件内容加载到用户数据区写文件—将用户数据区得信息写入文件文件的读写位置由系统打开文件表中的f_offset决定17:25:0660一、文件系统调用的实现(25)1)读文件系统调用形式

intnr,fd,count;charbuf[];nr=read(fd,buf,count);功能:从文件fd从读取count个字节到内存buf中参数:fd—文件描述符buf—读出信息应送达的内存地址count—欲读出的字节数nr—实际读出的字节数,可能小于欲读出的字节数count17:25:0661一、文件系统调用的实现(26)2)读过程系统根据f_flag中的信息,检查读操作合法性再根据当前位移量f_offset值,要求读出的字节数count,及活动索引节点中i_addr指出的文件物理块存放地址,把相应的物理块读到块设备缓冲区中然后再送到用户主存区buf中17:25:0662一、文件系统调用的实现(27)fdfp…f_flag(r/w)f_count(1)i_mode(x)f_flag(r/w)f_count(1)f_flag(r/w)f_count(1)f_offset(0)f_inode读操作时文件数据结构的关系文件描述符用户打开文件表活动inode表物理块系统打开文件表i_nlink(1)i_addr(40)OS内核空间用户空间外存17:25:0663一、文件系统调用的实现(28)3)写文件系统调用形式nw=write(fd,buf,count);功能:将用户主存区buf中的count个字节信息写入文件fd中,返回实际写入的字节数nw17:25:0664一、文件系统调用的实现(29)10、文件的随机存取系统调用的形式

longlseek;longoffset;intwhence,fd;fd=open(filename,mode);或者fd=creat(filename,mode);lseek(fd,offset,whence);功能:将文件fd的读写位置指针f_offset移动到offset和whence规定的位移处17:25:0665一、文件系统调用的实现(30)当whence=0时,读写位置指针f_offset=offset当whence=1时,读写位置指针f_offset=f_offset+offset17:25:0666二、文件共享(1)1、文件共享指不同用户(进程)共同使用同一个文件。目的:不同进程完成共同任务,节省辅存空间,减少文件复制,从而减少I/O操作次数,避免多副本造成数据不一致文件共享的形式:1)静态共享2)动态共享3)符号链接共享17:25:0667二、文件共享(2)2、文件的静态共享1)静态共享含义允许一个文件同时属于多个目录,但实际上文件仅有一处物理存储,这种文件在物理上一处存储、从多个目录可到达该文件的“多对一关系”称为文件链接特征:静态共享的“静态”体现在文件的链接关系与进程是否运行无关17:25:0668二、文件共享(3)2)静态共享的实现策略将不同目录的索引结点inode号指定为同一文件的索引结点链接的实质就是共享已存在文件的inode17:25:0669二、文件共享(4)3)静态共享的实现文件链接的系统调用形式:

chat*oldnamep,*newnamep;link(oldnamep,newnamep);功能:将新文件newnamep与现存文件oldnamep链接17:25:0670二、文件共享(5)过程:①检索目录找到oldnamep所指向文件的索引节点inode编号。②再次检索目录找到newnamep所指文件的父目录文件,并把已存在文件的索引节点inode编号与别名构成一个目录项,记入到该目录中去。③把已存在文件索引节点inode的连接计数i_nlink加“1”。17:25:0671二、文件共享(6)B/homefei1myfile.cfei3fei2fei4fei5B/homefei1myfile.cfei3fei2fei4fei5link(“/home/fei1/myfile.c”,”/home/fei2/myfile.c”)文件链接17:25:0672二、文件共享(7)B/homefei1myfile.cfei3fei2fei4fei5Btestfile.c/homefei1myfile.cfei3fei2fei4fei5link(“/home/fei1/myfile.c”,”/home/fei3/fei4/testfile.c”)文件链接17:25:0673二、文件共享(8)4)文件链接的解除(及文件删除)文件解除链接调用形式为:

unlink(namep)功能:将namep文件的索引节点inode的链接数i_nlink减“1”。若i_nlink值为“0”,则删除该文件。删除namep文件目录项。解除链接与文件删除功能是相同的 两者执行同一系统调用代码。删除文件是从文件主角度讲的,解除文件连接是从共享文件的其他用户角度讲的。都要删去目录项,把i_nlink减“1”,不过,只有当i_nlink减为“0”时,才真正删除文件。17:25:0674二、文件共享(9)2、文件的动态共享1)文件动态共享的含义 是系统中不同的用户进程或同一用户的不同进程并发地访问同一文件。2)文件动态共享的特征 这种共享关系只有当用户进程存在时才可能出现,一旦用户进程消亡,其共享关系也就自动消失。17:25:0675二、文件共享(10)3)文件动态共享的具体形式文件动态共享时,不同进程可能会读写文件的同一位置或不同位置,这就涉及到读写指针问题。17:25:0676二、文件共享(11)共用读写指针的情况当两个程序共享同一文件且共用读写指针时,这两个程序的用户打开文件表指向系统打开文件表中的同一表项。这时,系统打开文件表表项的访问计数f_count值等于共用一个读写指针访问一个文件的进程数,即共用一个系统打开文件表表项的进程数同一用户父、子进程协同完成任务,使用同一读/写位移,同步地对文件进行操作。17:25:0677二、文件共享(12)UNIX/Linux系统同一用户的父进程使用fork创建子进程前,若父进程已经打开某文件A,则文件A在系统打开文件表中存在一个表项,使用fork创建子进程时,父进程PCB被复制到子进程PCB,文件A在系统打开文件表中的表项也一并复制给子进程,导致两个进程共用相同的系统打开文件表项,使用相同的读写指针17:25:0678二、文件共享(13)系统打开文件表活动inode表file结构…………活动的inode驻留主存i_count=1f_offsetf_count=2f_inode使用同一位移指针的文件共享fpfp父进程的打开文件表……

父进程fdfd……子进程的打开文件表fd……

子进程非驻留主存17:25:0679二、文件共享(14)用户进程1用户进程2用户打开文件表用户打开文件表系统打开文件表活动inode表OS两个进程通过相同的系统打开文件表项访问一个文件,即文件1文件1文件217:25:0680二、文件共享(15)读写指针不同的情况当两个程序共享同一文件但读写指针不同时,这两个程序各自的用户打开文件表指向系统打开文件表中的不同表项,而这两个表项又指向内存活动inode表中的同一表项。两个以上用户共享文件,每个希望独立地读、写文件,这时不能只设置一个读写位移指针,须为每个用户进程分别设置一个读、写位移指针。位移指针应放在每个进程用户打开文件表的表目中。这样,当一个进程读、写文件,并修改位移指针时,另一个进程的位移指针不会随之改变,从而,使两个进程能独立地访问同一文件。17:25:0681二、文件共享(16)对于UNIX/Linux系统,若先执行fork创建子进程后,父子进程再打开同一文件,则在系统打开文件表中将产生指向同一个文件的两个不同的表项,使两个进程以不同的读写位移指针访问同一个文件。17:25:0682二、文件共享(17)fda进程A的子进程驻留主存活动inode表活动inode表……newfile活动的inodei_count=2

使用不同位移指针的文件共享fdafpafd……进程B的打开文件表fdb……

进程B非驻留主存进程A的打开文件表……

进程Afpb…f_offsetf_count=2f_flag(r)f_inodef_offsetf_count=1f_flag(r/w)f_inode系统打开文件表…进程A的子进程的打开文件表……fpa17:25:0683二、文件共享(18)用户进程1用户进程2用户打开文件表用户打开文件表系统打开文件表活动inode表OS两个进程通过不相同的系统打开文件表项访问一个文件,即文件1文件1文件217:25:0684二、文件共享(19)3、文件的符号链接共享(类似于快捷方式)又称软链接,符号链接是一种只有文件名,不指向inode的文件,删去符号链接,文件实体内容依然存在符号链接只包含被链接文件的路径名而不是它的inode号,文件所有者才具有指向inode的指针将文件名和自身的inode链接起来,称为硬链接17:25:0685二、文件共享(20)优点:能用于链接计算机系统中不同文件系统中的文件,可链接计算机网络中不同机器上的文件,此时,仅需提供文件所在机器地址和该机器中文件的路径名。缺点:搜索文件路径开销大,需要额外的空间查找存储路径。17:25:0686三、文件空间管理(1)辅存空间分配采用两种办法1)连续分配:文件存放在辅存空间连续存储区中,在建立文件时,用户必须给出文件大小,然后,查找到能满足的连续存储区供使用。17:25:0687三、文件空间管理(2)2)非连续分配:一种方法是以块(扇区)为单位,扇区不一定要连续,同一文件的扇区按文件记录的逻辑次序用链指针连接或位示图指示。另一种方法是以簇为单位,簇是由若干个连续扇区组成的分配单位;实质上是连续分配和非连续分配的结合。各个簇可以用链指针、索引表,位示图来管理。17:25:0688几种具体文件辅存空间管理方法1、字位映象表(位示图)系统中每个盘块对应一个二进制位,采用二进制位来表示一个盘块是否空闲。分配和回收时只需修改二进制位值即可。2、空闲区表为外存上的所有空闲区建立一张空闲表,每个空闲区占一个表项,表项内容包括空闲块位置和连续空闲的块数。一般用于连续分配,回收盘区时要考虑相邻盘块的合并问题。三、文件空间管理(3)17:25:06893、空闲块链把所有空闲块链接在一起,形成一个链表三、文件空间管理(4)17:25:06904、成组空闲块链UNIX/Linux采用的一种外存管理方法,存储空间分成512字节一块。它将系统中的所有空闲盘块分成若干组,每100个盘块是一组,对于这些盘块采用栈式管理方法,即分配盘块时,从栈顶分配,相当于空闲盘块出栈;回收盘块时,将盘块加入栈顶,相当于入栈。每组第一块登记下一组空闲块的盘物理块号和空闲总数。三、文件空间管理(5)17:25:0691空闲块成组连接法的分配举例:若空闲盘块组织如下:三、文件空间管理(6)17:25:0692三、文件空间管理(7)…s_nfree:50s_free[0]:s_free[1]:s_free[2]:…s_free[49]:…s_free[99]:…s_nfree:100s_free[0]:…s_free[99]:s_nfree:100s_free[0]:…s_free[99]:s_nfree:100s_free[0]:0s_free[1]:…s_free[99]:301#349#201#299#101#199#1#99#............第一组99块第二组100块第三组100块第四组50块100#200#300#filsys专用块栈顶栈底栈顶栈底栈顶栈底栈顶栈底17:25:0693三、文件空间管理(8)…s_nfree:50s_free[0]:s_free[1]:s_free[2]:…s_free[49]:…s_free[99]:…s_nfree:100s_free[0]:…s_free[99]:s_nfree:100s_free[0]:…s_free[99]:s_nfree:100s_free[0]:0s_free[1]:…s_free[99]:301#349#201#299#101#199#1#99#............第一组99块第二组100块第三组100块第四组50块100#200#300#filsys专用块#349#348...#300#299#298...#200#199#198...#100#99#98...#1栈顶栈底栈顶栈顶栈底栈顶栈底栈顶栈底栈顶栈底17:25:0694此时请求分配2个空闲盘块,则349#、348#将会被分配,分配后s_nfree=48,结果如下图所示:三、文件空间管理(9)17:25:0695三、文件空间管理(10)…s_nfree:48s_free[0]:s_free[1]:s_free[2]:…s_free[47]:s_free[48]:…s_free[99]:s_nfree:100s_free[0]:…s_free[99]:s_nfree:100s_free[0]:…s_free[99]:s_nfree:100s_free[0]:0s_free[1]:…s_free[99]:301#349#201#299#101#199#1#99#............第一组99块第二组100块第三组100块第四组50块100#200#300#348#347#filsys栈顶栈底栈顶栈底栈顶栈底栈顶栈底17:25:0696三、文件空间管理(11)…s_nfree:48s_free[0]:s_free[1]:s_free[2]:…s_free[47]:s_free[48]:…s_free[99]:s_nfree:100s_free[0]:…s_free[99]:s_nfree:100s_free[0]:…s_free[99]:s_nfree:100s_free[0]:0s_free[1]:…s_free[99]:301#349#201#299#101#199#1#99#............第一组99块第二组100块第三组100块第四组50块100#200#300#348#347#filsys#347...#300#299#298...#200#199#198...#100#99#98...#1栈顶栈底栈顶栈底栈顶栈底栈顶栈底栈顶栈底17:25:0697在此基础上,若请求分配47个空闲盘块,则347#、346#、……301#将会被依次分配,分配后s_nfree=1,结果如下图所示:三、文件空间管理(12)17:25:0698三、文件空间管理(13)…s_nfree:1s_free[0]:s_free[1]:s_free[2]:…s_free[47]:s_free[48]:…s_free[99]:s_nfree:100s_free[0]:…s_free[99]:s_nfree:100s_free[0]:…s_free[99]:s_nfree:100s_free[0]:0s_free[1]:…s_free[99]:301#349#201#299#101#199#1#99#............第一组99块第二组100块第三组100块第四组50块100#200#300#348#347#filsys栈底=栈顶栈顶栈底栈顶栈底栈顶栈底17:25:0699三、文件空间管理(14)…s_nfree:1s_free[0]:s_free[1]:s_free[2]:…s_free[47]:s_free[48]:…s_free[99]:s_nfree:100s_free[0]:…s_free[99]:s_nfree:100s_free[0]:…s_free[99]:s_nfree:100s_free[0]:0s_free[1]:…s_free[99]:301#349#201#299#101#199#1#99#............第一组99块第二组100块第三组100块第四组50块100#200#300#348#347#filsys#300#299#298...#200#199#198...#100#99#98...#1栈顶栈底栈底=栈顶栈顶栈底栈顶栈底栈顶栈底17:25:06100在此基础上,若请求分配1个空闲盘块,则300#将会被分配。分配时,首先将300#盘

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论