




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章文件和设备管理示例19.1
UNIX文件系统的特点
与文件类别9.1.1UNIX操作系统的特点
P227UNIX采用树型目录结构。UNIX中一个文件的绝对路径名由斜杠“/”开头,随后是路径中所经过的所有目录名,中间用斜杠分隔而成,比如:/usr/bin/spell。由于UNIX允许用户设置“当前目录”,因此,从当前目录开始的文件路径名,是它的相对路径名。2图9.1是它的一个典型示例,其中,根目录下有8个子目录:/dev—此目录下都是设备文件,比如键盘终端(con)、打印机(lp)等;/bin—此目录下是UNIX外壳(shell)中主要程序的二进制代码文件;/usr—此目录下通常为已安装的各个子文件系统,如bin、tmp、lib、local、include以及用户的各种文件;/lib—此目录下存放的是一些库文件,比如C、PASCAL的函数库;/include—此目录下存放的是一些头文件;/etc—此目录下存放各种管理文件;/tmp—此目录下存放临时性文件;/UNIX—存放UNIX的核心程序。39.1.2UNIX文件的分类按照文件的内容,UNIX把文件分成3类:普通文件:这是通常意义下的磁盘文件,即存放用户和系统的有关数据和程序的那些文件。它们都被视为无结构、无记录概念的字符流,文件的长度可以动态增减。目录文件:由文件的目录项组成的文件称为目录文件。这种文件在形式上与普通文件相同,只是系统将其解释成目录。一般地,一个文件的目录项应该包含文件名称、文件长度、文件类型、文件在辅存的位置以及存取权限等信息。在UNIX中,为了加快对文件目录的搜索速度,便于文件共享,把这些内容划分成两个部分:一个称为该文件的索引节点(即文件控制块),简称为i节点,它的里面存放着这个文件的长度、文件类型、文件在辅存的位置、存取权限以及共享信息等内容;另一个仍称为文件目录项,但它的里面只包含文件名和这个文件的索引节点编号。4下图给出了UNIX文件目录项的格式,即用14个字节存放文件名,2个字节存放该文件的i节点号(id)。不难看出,在UNIX中,是由文件名查文件目录,由文件目录得到该文件的i节点编号,由这个编号得到文件的i节点,从而得到该文件的有关信息。文件名i节点编号id5设备文件:在UNIX中,把块存储设备(如磁盘)和字符设备(如键盘、打印机)都视为文件。不过它们只有文件目录和索引节点,并不占用实际的物理存储块,因此,有时也称它们为特殊文件。为了检查和处理方便,UNIX总是把所有的特殊文件放在名为“dev”的目录文件中。69.2.1UNIX文件系统的存储结构UNIX中,无论是普通文件还是目录文件,都存储在磁盘上。另外,每个文件的i节点也存储在磁盘上。下面讲述这些信息在磁盘上如何分布,UINX怎样来对它们实行管理。为了使整个文件系统易于扩充和更改,UNIX把文件系统分成基本文件系统和可装卸的子文件系统(文件卷)两个部分。基本文件系统和子文件系统都有自己独立的目录结构,但是基本文件系统是整个UNIX文件系统的基础,是文件系统的“根”,它总是被固定在作为根存储设备的磁盘上。子文件系统是指存储在可装卸存储介质(如软盘)上的文件系统,因此,子文件系统具有可装卸的特性。当把它安装到基本文件系统上时,自身的独立性消失,与基本文件系统融为一体。比如,用户可以把自己的文件系统组织在软盘上成为子文件系统。9.2文件系统的数据结构及其关系78UNIX把文件的存储空间——磁盘想象成是一个由连续物理块构成的文件卷(把每个磁盘或磁带看作是一个文件卷),每个物理块含512个字节。在一个磁盘上,存放着普通文件的信息,存放着目录文件的信息,存放着文件的i节点,还要存放对磁盘存储区的管理信息(比如哪些块是空闲的,哪些块是已分配的等等)。整个磁盘存储区的组织结构如下图示。9块0用用来来存存放放引引导导程程序序,,它它与与文文件件管管理理关关系系不不大大。。文文件件存存储储器器全全部部资资源源的的管管理理信信息息((即即filsys表))存存放放在在块块1,,它它是是磁磁盘盘的的管管理理区区。。从从第第2块块——K+1块块,,存存放放磁磁盘盘上上文文件件的的i节节点点内内容容,,这这个个区区域域称称为为索索引引节节点点表表((区区))。。索索引引节节点点表表的的后后面面是是一一般般数数据据存存储储区区,,在在那那里里存存放放普普通通文文件件和和目目录录文文件件的的信信息息。。显显然然,,在在磁磁盘盘上上,,一一般般数数据据存存储储区区所所占占用用的的磁磁盘盘空空间间为为最最大大。。下下面面对对管管理理区区中中的的资资源源管管理理信信息息表表filsys、索引节节点区中中的i节节点以及及文件的的目录分分别加以以介绍。。109.2.2几几种常用用的数据据结构资源管理理结构filsys:用来进行行文件空空闲块和和i节点点项的分分配与回回收,包包含文文件系统统空闲块块分配用用堆栈及及i节点点分配用用数据结结构。原原理见P229i节点(索引节点点):存放文文件说明明信息和和相应标标识符的的BFD.包括括:磁盘盘i节点点(dinode,以以静态态形式存存放文件件说明信信息)、、内存活活动i节点((inode,为减减少设备备启动次次数、提提高文件件的操作作速度而而把磁盘盘i节复复制到内内存的特特定区域域)。每个文件件都应有有一个唯唯一的磁磁盘索引引节点,,文件被被打开后后,还应应有内存存索引节节点。11目录项:由文文件名和和磁盘i节点标标识符id组成成。系统打开开文件表表、用户户打开文文件表:记录录和控制制打开文文件的用用户进程程以及记记录和控控制那些些共享同同一文件件的用户户进程。。其中::用户打开开文件表表:存放打开开文件的的描述符符fd;系统打开开文件表表:记录录打开同同一文件件的不同同进程程和不同同进程所所使用的的不同打打开路径径,及其其对应的的读写指指针。文件名i节点编号id12资源管理理的任务务:空闲磁盘盘块的分分配i节点的的分配系统打开开文件表表的分配配空闲磁盘盘块的回回收i节点的的回收系统打开开文件表表的回收收9.3资源管理理和地址址映射13空闲磁盘盘块的管管理UNIX对文件件存储空空间的管管理在磁磁盘上,,UNIX总是是把文件件安排在在一般数数据存储储区。因因此,UNIX对文件件存储空空间的管管理,即即是对磁磁盘上一一般数据据存储区区的管理理。前面面第7章章介绍使使用“空空闲块链链”管理理磁盘上上的空闲闲块时,,曾提及及“成组链接接”法,并并说UNIX操操作系统统就是采采用这种种方法来来管理磁磁盘上的的空闲块块的。这这种方法法是将若若干个((如100)空空闲盘块块划归为为一个组组,将每每组在中中的所有有盘块号号存放在在其前一一组的第第一个空空闲盘块块中,而而仅把第第一组中中的所有有空闲块块号放入入超级块块(filsys结构构)中。。下面简单单介绍它它的实现现过程。。14在磁盘管管理区filsys结结构中,,有两个个内容涉涉及到磁磁盘空闲闲块的管管理,一一个是由由数组s_free[100]构成的一一个空闲闲磁盘块块索引表表。当一一个文件件要申请请磁盘块块时,就就到这个个索引表表中去获获得需要要的空闲闲块;当当一个磁磁盘块被被释放时时,就把把它还回回到这个个索引表表中。所所以,这这个索引引表中记记录的是是当前系系统可以以直接分分配的空空闲磁盘盘块。另另一个是是s_nfree,它记录录了s_free[]中现现有的可可分配的的空闲磁磁盘块数数。从形式上上看,利利用数组组s_free[100]直直接管理理100个空闲闲的磁盘盘块,与与利用数数组s_inode[100]直接接管理100个个空闲的的i节点点相类似似,但实实际上相相差很远远。因为为除这100个个直接管管理的空空闲块外外,UNIX对对其余的的空闲块块并没有有放置不不管,而而是将它它们分组组进行链链接。具具体做法法如下图图所示。。1516UNIX把磁盘盘上一般般数据存存储区中中的所有有空闲块块依次分分组。为为了下面面讲述方方便,对对每一组组的块都都进行分分别编号号。具体体的办法法是:第第1组为为99块块,编号号为1~99((为什么么第1组组只有99块,,后面会会给出解解释)。。从第2组起,,每组都都是100块,,剩下的的块归并并成为最最后一组组。它们们都按0~99的顺序序进行编编号。在在图中,,从右至至左反映映了这种种分组的的结构。。在图中中,假定定最后一一组中只只有52个空闲闲块,各各块的编编号为0~51。分好组以以后,总总是在后后一组的的第0块块中开辟辟101个位置置,依次次存放前前一组的的总块数数以及前前一组中中每一块块的地址址。也就就是说,,相当于于总是在在后一组组中,开开辟s_nfree和和s_free[100]所所需要的的位置,,用于存存放前一一组的分分组信息息。17在此,有有两组的的情况要要做特殊殊处理。。一个是是第1组组。在第第1组中中,实际际只有99个空空闲块。。为了管管理的需需要,把把它的总总块数仍仍记为100,,见图中中第2组组里的s_nfree=100。另另外,第第一组磁磁盘块编编号是从从1开始始的,因因此在相相当于第第0号磁磁盘块的的位置存存放一个个0,而而不是某某一个磁磁盘块的的地址,,见图中中第2组组中的s_free[0]=0。18另一个要要特殊处处理的是是最后一一组。因因为在最最后一组组的后面面已经没没有下一一组了,,所以UNIX就把它它的所有有信息存存放在管管理块的的filsys中,即即存放在在filsys的s_nfree和和s_free[100]中中。由于于现在最最后一组组只有52个空空闲块,,因此在在filsys中的s_nfree取值为为52,,并且只只用到数数组s_free[100]的前52个元元素,即即用s_free[0]到s_free[51]存放最最后一组组的52个空闲闲块的地地址。至此,成成组链接接的格局局已经完完成:在在filsys的s_free[]中,,记录了了当前直直接可以以分配的的52个个空闲块块。在这这52个个空闲块块的第0块中,,记录了了下一组组100个空闲闲的磁盘盘块地址址,下一一组100个空空闲的第第0块中中,记录录了再下下一组100个个空闲的的磁盘块块地址,,如此等等等。19在采用““成组链链接”法法后,如如何分配配空闲块块,如何何回收空空闲块??下面来来讨论这这两个问问题。无无论是磁磁盘空闲闲块的分分配还是是回收,,都是在在filsys中的空空闲磁盘盘块索引引表s_free[]中进进行,并并把它视视为一个个栈。分分配时,,做出栈栈操作;;回收时时,做进进栈操作作。s_nfree中记录录的值,,是s_free[]中当当前实际际有的空空闲块数数,正好好也是空空闲磁盘盘块索引引表s_free[]中下下一个可可以使用用的索引引表目的的下标。。20因此,总总是先在在s_nfree上做做减1操操作,然然后把s_free[s_nfree]中中记录的的磁盘块块分配出出去。这这里要注注意的是是,如果果在s_nfree上上做减1操作后后,其值值等于0了,那那么就是是要把s_free[0]所所指向的的那一个个磁盘空空闲块分分配出去去。由于于它是这这一组的的第0个个磁盘块块(按照照分配顺顺序,它它总是在在一组中中最后被被分配出出去),,里面包包含有它它前一组组空闲块块的信息息在内。。因此在在把这一一块分配配出去之之前,应应该先把把它记录录的101个信信息拷贝贝到filsys结构构的s_nfree和和s_free[]里面去去,然后后才能将将它分配配出去。。21分配时还还要注意意的一个个问题是是如果分分配一直直进行,,现在要要把第2组的第第0块分分配出去去。根据据前面所所说,先先把这块块中记录录的101个信信息拷贝贝到filsys结构构的s_nfree和和s_free[]里面去去,然后后才将它它分配出出去。这这意味着着系统现现在只有有最后99块能能够分配配了。如如果分配配仍然继继续,直直到把这这99块块全部分分配出去去。此时时,filsys中的的s_nfree=1,s_free[0]=0。若再再申请空空闲块,,s_nfree减1后成为为0,即即要把s_free[0]所所指的块块分配出出去。此此时发现现s_free[0]=0,,而不是是一个磁磁盘块的的地址,,表明所所有的磁磁盘空闲闲块都分分配出去去了,提提出请求求的进程程只能阻阻塞等待待。所以以,这就就是前面面分组时时把第1组只分分99个个空闲块块,但仍仍然算这这组有100个个块,并并将第0块指针针处安放放一个0的原因因。22进行空闲块块的回收时时,就是将将该块的地地址登记在在空闲磁盘盘块索引表表的s_free[s_nfree]表目中,然后让s_nfree加1。不过要要注意,在在把释放块块的地址存存入索引表表s_free[]的表之之前,必须须检查s_nfree的取值值。如果发发现s_nfree等于100,那么么表明这时时空闲磁盘盘块索引表表在此之前前已经收集集满了100个空闲闲的磁盘块块,它们应应该形成一一个新的链链组。现在在要释放的的一块,是是下一组空空闲块的第第0块。于于是,就把把filsys中的的s_nfree和和s_free[0]~s_free[99]共101个值存入入新释放块块中,然后后将此块的的地址填入入s_free[0]中,将将s_nfree置置为1。239.3.1磁盘i节点的管管理基本思想:在给新建建文件分配配磁盘存储储区之前,,为其分配配磁盘i节节点,以将将文件的有有关信息记记入其中,,并将用户户提供的文文件名和磁磁盘i节点点号一并组组成一个新新目录项,,记入其父父目录文件件中;删删除文件时时,回收所所分配的磁磁盘i节点点项。分配算法:借助于i节点线性性表利用ialloc算法((UNIXSystemV)进行行的,具体体分配过程程见P232回收算法:利用ifee算法法249.3.2内存i节点的管管理基本思想:系统打开开文件进行行搜索或读读写等操作作时,为其其分配内存存i节点,,以存放从从磁盘i节节点拷贝过过来的信息息,方便用用户或系统统对文件的的访问;删删除文件件时,回收收所分配的的磁盘i节节点项。分配配:利利用用过过程程iget实实现现回收收:利利用用过过程程iput实实现现259.3.3系系统统打打开开文文件件表表的的管管理理系统统打打开开文文件件表表:记记录录打打开开同同一一文文件件的的不不同同进进程程和和不不同同进进程程所所使使用用的的不不同同打打开开路路径径,,及及其其对对应应的的读读写写指指针针。。分配配:利利用用getf过过程程实实现现回收收:利利用用closef过过程程实实现现269.3.4地地址址映映射射前面面提提及及,,UNIX文文件件的的物物理理结结构构采采用用的的是是索索引引结结构构,,这这种种索索引引结结构构是是通通过过每每个个文文件件i节节点点中中的的数数组组di_addr[]来来形形成成文文件件存存储储索索引引表表的的。。该该数数组组总总共共有有13个个元元素素,,每每个个元元素素为为一一个个索索引引项项。。前前10个个索索引引项项直直接接指指向向文文件件数数据据存存放放的的磁磁盘盘块块号号,,后后3个个索索引引项项分分别别构构成成一一次次间间接接索索引引、、二二次次间间接接索索引引和和三三次次间间接接索索引引的的多多级级索索引引结结构构。。这这样样,,UNIX可可以以根根据据文文件件的的大大小小,,通通过过使使用用这这张张存存储储索索引引表表,,形形成成小小型型、、中中型型、、大大型型和和巨巨型型等等不不同同规规模模的的文文件件。。27小型型文文件件的的索索引引结结构构:通通常常,,每每个个磁磁盘盘块块为为512个个字字节节。。当当一一个个文文件件的的长长度度在在1~10个个磁磁盘盘块块之之间间时时,,就就称称为为小小型型文文件件。。这这时时,,用用文文件件i节节点点中中数数组组di_addr[]的的前前10个个表表目目,,直直接接指指向向文文件件数数据据存存放放的的磁磁盘盘块块号号。。因因此此,,在在UNIX中中,,小小型型文文件件是是通通过过i节节点点中中的的数数组组di_addr[]构构成成一一级级索索引引表表而而获获得得文文件件在在磁磁盘盘上上的的存存储储位位置置的的。。如下下图图所所示示。。2829中型型文文件件的的索索引引结结构构:当一一个个文文件件的的长长度度在在10~138磁磁盘盘块块内内时时,,就就成成为为一一个个UNIX的的中中型型文文件件。。这这时时除除了了用用到到di_addr[0]~di_addr[9]外外,,还还要要用用到到di_addr[10],,如如下下图图所所示示。。在图图中中,,di_addr[0]~di_addr[9]仍仍然然直直接接指指向向文文件件数数据据存存放放的的10个个磁磁盘盘块块号号,,然然后后又又利利用用di_addr[10]指指向向一一个个磁磁盘盘块块。。这这块块并并不不存存放放文文件件的的数数据据,,而而是是利利用用它它形形成成又又一一级级的的索索引引。。在在UNIX中中,,用用4个个字字节节放放一一个个磁磁盘盘块块号号,,因因此此在在这这个个盘盘块块中中,,可可以以放放128个个磁磁盘盘块块号号。。这这样样一一来来,,通通过过di_addr[10]提提供供的的索索引引,,一一个个文文件件就就可可以以达达到到138个个磁磁盘盘存存储储块块这这么么大大。。3031大型和巨型文文件的索引结结构:当一个文文件的长度在在138~16522磁磁盘块内时,,就成为一个个UNIX的的大型文件。。这时除了用用到di_addr[0]~di_addr[9]外,,要用到di_addr[10],,还要用到di_addr[11]。在图中,di_addr[0]~di_addr[9]直直接指向文件件数据存放的的10个磁盘盘块号。然后后如同前面那那样,利用di_addr[10]指向一个磁磁盘块,由它它提供128个磁盘块的的索引,从而而使文件总共共达到138个磁盘存储储块这么大。。但这还不够够,又利用di_addr[11]指向一个磁磁盘块,由它它指向128个磁盘块,,每个都是一一个索引。这这样,通过这这128个索索引、每个指指向128个个磁盘块,就就又可以得到到16384个磁盘块。。于是,UNIX的大型型文件最多可可以拥有16522个磁磁盘块(即10+128+16384)。3233当一个文件所所需的磁盘块块大于16522个磁盘盘块时,就成成为UNIX的巨型文件件了。这时除除了用到di_addr[0]~di_addr[9]外外,还要用到到di_addr[10]、di_addr[11]和di_addr[12]。此时,文文件的最大长长度可以达到到约11亿个个字节,但是是由于此时要要经过多次间间接索引,会会使系统的查查找速度大大大降低。349.4目录与检索方方法目录的构造和和删除创建一新文件件时,UNIX系统利用用makenode过程程在其父目录录文件中为之之构造一个目目录项。目录的检索由namei过程利用散散列搜索法完完成,其根据据用户给出的的文件路径名名,从高层到到低层顺序地地查找各级文文件目录,寻寻找指定文件件的内存i节节点指针。359.5文件系统的系系统调用UNIX提供供了一些系统统调用命令,,以便用户在在程序一级完完成对文件的的操作。有关关的系统调用用是:creat、open、read、write、close、、chdir、chown、chmod、link和unlink等等。下面对它它们各自的功功能做粗略的的描述。creat((建立文件))open(打打开文件)close((关闭文件))read(读读)write((写)36link(链链接)系统调用link可以为为一个已经存存在的文件开开辟一条新的的路径,也就就是说,可以以为一个文件件再取一个新新的名字。它它的使用格式式是:link(pathname1,pathname2);;其中参数pathname1是原文文件的路径名名,参数pathname2为其新新取的路径名名。link处理理程序先按照照参数pathname2的指点,,将新的文件件名登记到指指定的路径目目录中。然后后根据pathname1,找到原原文件所对应应的i节点编编号,将该号号填入新文件件的文件目录录中。由于每每个文件的i节点编号是是惟一的,因因此经过link之后,,两个不同路路径名的文件件就与同一个个文件相对应应了。37unlink(去链接)38比如考虑上图图的情形。zong和wang要共共同完成一项项工作。zong为了访访问对方的文文件x,只能能通过“/usr/wang/x””才能达到目目的。但如果果通过命令::link(/usr/wang/x,/usr/zong/k);那么,若当前前目录为zong,则zong直接接通过k就能能够访问wang的文件件x了,这是是因为link命令在zong的文文件k和wang的文件件x之间建立立了链接的缘缘故。如图(b)所示。。399.6UNIX的设备管理UNIX设备备管理概述UNIX是根根据设备与内内存之间信息息交换的单位位来对设备进进行分类的,,因此在整个个系统中,归归到设备管理理的有两类设设备:块设备和字符设备。前者与内存存之间以成组组信息为单位位进行信息交交换,比如硬硬盘、软盘、、磁带都属于于块设备。由由于这些设备备是用来存储储信息的,因因此有时把它它们称为存储储设备;后者者与内存之间间以字节为单单位进行信息息交换,比如如键盘输入、、显示器和打打印机等都属属于字符设备备之列。由于于这些设备主主要供计算机机接收外部信信息,或把加加工完毕的信信息传递给外外部世界,因因此也被称为为输入/输出出设备。40为了识识别每每一个个具体体的设设备,,UNIX是这这样做做的::每一一类设设备附附有一一个编编号,,称为为“主主设备备号””,同同类设设备中中的不不同设设备也也给予予一个个编号号,称称为““次设设备号号”。。在请请求设设备进进行输输入输输出时时,必必须指指定主主设备备号和和次设设备号号。这这样,,由主主设备备号判判定由由哪个个驱动动程序序工作作;驱驱动程程序根根据次次设备备号确确定控控制哪哪台设设备去去完成成所需需要的的I/O。。从前面面对UNIX文文件管管理的的讲述述可知知,UNIX把把块设设备和和字符符设备备都视视为特特殊文文件来来对待待,它它们的的文件件目录录都在在子目目录dev下。。由于于它们们是文文件,,因此此有自自己的的i节节点。。为了了与其其他文文件加加以区区分,,在它它们的的索引引节点点中,,把““文件件类型型”栏栏置为为“块块”或或“字字符””。由由此表表明它它们不不是普普通文文件,,也不不是目目录文文件,,而是是设备备文件件,并并且由由此也也能区区分是是块设设备文文件还还是字字符设设备文文件。。41在UNIX中,,是通通过系系统调调用creat来建建立新新文件件的。。但设设备文文件不不能用用普通通的方方法来来创建建,并并且也也不是是谁都都有权权来创创建。。如果果要创创建一一个新新的设设备文文件,,则应应该由由系统统管理理员通通过系系统调调用mknod来完完成。。它的的使用用格式式是((P250):mknod(pathname,,mode,dev);其中,,参数数pathname是文文件的的路径径名,,mode指出出文件件的类类型((B表表示块块设备备,C表示示字符符设备备),,dev是是主设设备号号和次次设备备号的的组合合。比比如有有如下下命令令:mknod(/dev/abc,,C,,212);;表示要要在根根目录录的子子目录录dev下下,创创建一一个名名为abc的文文件((由于于它建建立在在子目目录dev下,,因此此它是是一个个设备备文件件),,由于于mode=““C””,因因此是是一个个字符符设备备文件件,该该设备备的主主设备备号是是2,,次设设备号号是12。。429.6.1块设备备的管管理UNIX在在块设设备和和内存存之间间安放放了缓缓冲区区,通通过它它使块块设备备与内内存间间的数数据流流动在在速度度上能能够匹匹配,,从而而达到到减少少内、、外存存传输输次数数的目目的。。如图图所示示。对对于写写操作作,先先是把把内存存用户户区中中的数数据拷拷贝到到缓冲冲区,,再从从缓冲冲区输输出到到设备备;对对于读读操作作,先先从设设备接接收数数据到到缓冲冲区,,再将将缓冲冲区中中的数数据拷拷贝到到指定定的内内存用用户区区。43块设备的每每一个缓冲冲区长度为为512个个字节或1024个个字节,这这要由文件件系统来确确定。由一一个个缓冲冲区,组成成了供块设设备输入/输出使用用的缓冲池池。为了便便于管理,,UNIX把缓冲池池中的每个个缓冲区分分成两个部部分:一个个是真正用用于存放数数据的部分分,一个是是用于管理理的部分。。前者仍称称为“缓冲区”,后者称称为“缓冲区控制制块”,并在缓缓冲区和缓缓冲区控制制块之间保保持一一对对应的关系系。图9.10给出出了缓冲区区控制块的的内容和它它与缓冲区区的对应关关系。44451.空闲缓冲区区队列(av队列列)为了构成系系统中空闲闲缓冲区队队列,UNIX设置置了一个名名为bfreelist的控控制块,它它的结构与与缓冲区控控制块相同同,里面的的av_forw和和av_back就就是块设备备空闲缓冲冲区队列的的首指针和和尾指针,,如图9.11所示示。4647对于空闲缓缓冲区队列列,有两点点要说明::第一,这这个由缓冲冲区控制块块构成的队队列是一个个双向链表表,它们通通过各自的的前向指针针av_forw和和后向指针针av_back链链接在一起起,形成队队列。第二二,UNIX对这个个队列采用用先进先出出(FIFO)的管管理算法。。即当释放放一个缓冲冲区时,与与之对应的的缓冲区控控制块就被被链入到空空闲缓冲区区队列之尾尾;当申请请一个缓冲冲区时,就就把空闲缓缓冲区队列列之首的那那个缓冲区区控制块摘摘下分配出出去,这也也就意味着着是把这个个缓冲区控控制块所对对应的缓冲冲区分配出出去。482.设备缓缓冲区队列列(设备b链链,散列队队列)这是由缓冲冲区控制块块组成的第第二种队列列,是UNIX对缓缓冲区管理理的一大特特色。下面面来说明这这是一个什什么队列,,为什么要要组成它。。49缓冲池中的的缓冲区资资源是有限限的,为了了能够对它它们充分地地加以利用用,以及对对它们里面面存放的数数据信息最最大限度地地加以利用用,UNIX提出了了这样的设设想:一个个已经在空空闲缓冲区区队列中的的缓冲区控控制块,在在它未被挪挪为它用之之前,它对对应的缓冲冲区中保存存的仍然是是磁盘上某某块中的数数据信息。。如果这时时根据需要要又要对该该磁盘块进进行操作,,那么大可可不必去通通过启动I/O获得得盘块上的的数据,这这些数据还还在原来的的缓冲区中中完好无损损地保存着着,只要拿拿来就可以以使用。这这样做的结结果是减少少了I/O次数,大大大提高了了系统的工工作效率。。50出自于这些些考虑,UNIX一一方面仍然然是让被释释放缓冲区区所对应的的缓冲区控控制块链入入到空闲缓缓冲区队列列之尾,以以便能够它它用。另一一方面又设设置了一个个新的队列列:设备缓缓冲区队列列,即把为为某个设备备服务的缓缓冲区所对对应的缓冲冲区控制块块全都汇集集在一起,,形成了这这个设备的的设备缓冲冲区队列。。一个设备备的设备缓缓冲区队列列由缓冲区区控制块中中的d_forw和和d_back指针针进行链接接,前者为为前向指针针,后者为为后向指针针。该队列列的首、尾尾指针是设设备表中的的d_forw和d_back。整个个队列如下下图所示。。5152几点说明::(1)这个个由缓冲区区控制块构构成的队列列是一个双双向链表,,它们通过过各自的前前向指针b_forw和后向向指针b_back链接在一一起,形成成队列。(2)当一一个缓冲区区被分配给给某个块设设备做输入入/输出用用时,它所所对应的缓缓冲区控制制块就从队队首插入到到队列里。。(3)当一一个缓冲区区控制块插插入到一个个设备的设设备缓冲区区队列中之之后,即便便该缓冲区区被释放,,它也仍然然在这个队队列中排着着。这就是是说,在任任何时刻,,UNIX中的任何何一个缓冲冲区控制块块,总会在在空闲缓冲冲区队列、、设备缓冲冲区队列以以及设备输输入/输出出队列这三三个队列中中的两个里里排队,或或是在空闲闲缓冲区队队列、设备备缓冲区队队列里面排排着,或是是在设备缓缓冲区队列列、设备输输入/输出出队列里面面排着。(4)只有有当一个缓缓冲区的服服务对象改改变(比如如原来被分分配给磁盘盘1使用,,现在被分分配给磁盘盘2使用了了)时,该该缓冲区所所对应的缓缓冲区控制制块才会从从一个设备备缓冲区队队列上摘下下,进入到到另一个设设备缓冲区区队列中;;否则即便便缓冲区被被释放,它它仍然保持持在原来的的设备缓冲冲区队列中中。533.输入入/输出出请求队队列(块设备av链))当用户对对块设备备提出输输入/输输出请求求时,首首先要申申请一个个空闲的的缓冲区区控制块块(注意意:申请请到空闲闲的缓冲冲区控制制块,就就意味着着申请到到了存放放数据的的缓冲区区,因为为它们是是一一对对应的)),并把把这次输输入/输输出请求求具体要要完成的的任务填填入到缓缓冲区控控制块中中(数据据源的地地址、目目的地址址、传输输的个数数等等))。因此此,UNIX把把向主设设备号相相同的设设备提出出的I/O请求求所对应应的缓冲冲区控制制块链接接在一起起,形成成对这个个设备的的输入/输出请请求队列列。该队队列的首首指针就就是这个个设备的的设备表表里的d_actf,,尾指针针是d_actl。如如下图所所示。5455对于块设设备的输输入/输输出请求求队列有有三点说说明:第第一,它它是一个个单链表表,不像像空闲缓缓冲区队队列,那那里给出出的是一一个双向向链表。。第二,,由于一一个缓冲冲区控制制块不可可能同时时在空闲闲缓冲区区队列和和输入/输出请请求队列列,因此此,在输输入/输输出请求求队列中中,就借借用缓冲冲区控制制块中的的av_forw指针针来构成成单链表表(这个个指针在在空闲缓缓冲区队队列里是是前向指指针)。。第三,,UNIX对这这个队列列采用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《Unit 2 I'm Li Le》(教学设计)-2024-2025学年川教版(三起)(2024)英语三年级上册
- 2024-2025学年高中物理 第四章 机械能和能源 第1节 功教学设计 粤教版必修2
- 逻辑学基础知识课程
- 《第二单元 智能感知 4 智能调光》教学设计-2023-2024学年川教版信息技术(2019)六年级上册
- 三年级信息技术上册 海底世界图片展教学设计 冀教版
- 校园安全目录设计
- 《 分数的初步认识(二)》(教学设计)-2023-2024学年苏教版数学三年级下册
- 11 - 20 各数的认识(教学设计)-2024-2025学年一年级上册数学人教版
- 褥疮的预防护理
- 28《海的女儿》第1课时教学设计2023-2024学年统编版语文四年级下册
- 《经济法学》(第三版)电子教案
- 4B Chapter 4 A visit to Shanghai 课件(新思维小学英语)
- 大学数学《概率论与数理统计》说课稿
- Starter Unit2 单词英汉互译 2024-2025学年人教版英语七年级上册
- 投资资金合同协议书
- 股权转让确认函
- YDT 4492-2023工业互联网 时间敏感网络技术要求
- 徐州2024年江苏徐州睢宁县招聘教师306人笔试历年典型考题及考点附答案解析
- 设计和开发控制程序-国军标
- 江西省南昌二十八中教育集团2023-2024学年八年级下学期期中考试数学试卷
- 中考数学专题复习《代数推理题》知识点梳理及典例讲解课件
评论
0/150
提交评论