文件和设备管理示例

上传人:陈** 文档编号:202596567 上传时间:2023-04-22 格式:PPTX 页数:65 大小:629.40KB
收藏 版权申诉 举报 下载
文件和设备管理示例_第1页
第1页 / 共65页
文件和设备管理示例_第2页
第2页 / 共65页
文件和设备管理示例_第3页
第3页 / 共65页
资源描述:

《文件和设备管理示例》由会员分享,可在线阅读,更多相关《文件和设备管理示例(65页珍藏版)》请在装配图网上搜索。

1、第 9 章文件和设备管理示例19.1 UNIX文件系统的特点与文件类别9.1.1 UNIXUNIX操作系统的特点操作系统的特点P227q UNIX采用树型目录结构。UNIX中一个文件的绝对路径名由斜杠“/”开头,随后是路径中所经过的所有目录名,中间用斜杠分隔而成,比如:/usr/bin/spell。由于UNIX允许用户设置“当前目录”,因此,从当前目录开始的文件路径名,是它的相对路径名。2图9.1是它的一个典型示例,其中,根目录下有8个子目录:n/dev此目录下都是设备文件,比如键盘终端(con)、打印机(lp)等;n/bin 此目录下是UNIX外壳(shell)中主要程序的二进制代码文件;n

2、/usr 此目录下通常为已安装的各个子文件系统,如bin、tmp、lib、local、include以及用户的各种文件;n/lib 此目录下存放的是一些库文件,比如C、PASCAL的函数库;n/include 此目录下存放的是一些头文件;n/etc 此目录下存放各种管理文件;n/tmp此目录下存放临时性文件;n/UNIX存放UNIX的核心程序。39.1.2 UNIX文件的分类n按照文件的内容,UNIX把文件分成3类:n普通文件:这是通常意义下的磁盘文件,即存放用户和系统的有关数据和程序的那些文件。它们都被视为无结构、无记录概念的字符流,文件的长度可以动态增减。n目录文件:由文件的目录项组成的文

3、件称为目录文件。这种文件在形式上与普通文件相同,只是系统将其解释成目录。一般地,一个文件的目录项应该包含文件名称、文件长度、文件类型、文件在辅存的位置以及存取权限等信息。在UNIX中,为了加快对文件目录的搜索速度,便于文件共享,把这些内容划分成两个部分:一个称为该文件的索引节点(即文件控制块),简称为i i节节点点,它的里面存放着这个文件的长度、文件类型、文件在辅存的位置、存取权限以及共享信息等内容;另一个仍称为文件目录项,但它的里面只包含文件名和这个文件的索引节点编号。4下下图图给给出出了了UNIX文文件件目目录录项项的的格格式式,即即用用14个个字字节节存存放放文文件件名名,2个个字字节节

4、存存放放该该文文件件的的i节节点点号号(id)。不不难难看看出出,在在UNIX中中,是是由由文文件件名名查查文文件件目目录录,由由文文件件目目录录得得到到该该文文件件的的i节节点点编编号号,由由这这个个编编号号得得到到文文件件的的i节节点点,从从而而得得到到该该文文件件的的有有关信息。关信息。文件名i 节点编号id5n设备文件:在UNIX中,把块存储设备(如磁盘)和字符设备(如键盘、打印机)都视为文件。不过它们只有文件目录和索引节点,并不占用实际的物理存储块,因此,有时也称它们为特殊文件。为了检查和处理方便,UNIX总是把所有的特殊文件放在名为“dev”的目录文件中。69.2.1 UNIX文件

5、系统的存储结构nUNIX中,无论是普通文件还是目录文件,都存储在磁盘上。另外,每个文件的i节点也存储在磁盘上。下面讲述这些信息在磁盘上如何分布,UINX怎样来对它们实行管理。n为了使整个文件系统易于扩充和更改,UNIX把文件系统分成基本文件系统和可装卸的子文件系统(文件卷)两个部分。基本文件系统和子文件系统都有自己独立的目录结构,但是基本文件系统是整个UNIX文件系统的基础,是文件系统的“根”,它总是被固定在作为根存储设备的磁盘上。子文件系统是指存储在可装卸存储介质(如软盘)上的文件系统,因此,子文件系统具有可装卸的特性。当把它安装到基本文件系统上时,自身的独立性消失,与基本文件系统融为一体。

6、比如,用户可以把自己的文件系统组织在软盘上成为子文件系统。9.2 文件系统的数据结构及其关系78nUNIX把文件的存储空间磁盘想象成是一个由连续物理块构成的文件卷(把每个磁盘或磁带看作是一个文件卷),每个物理块含512个字节。在一个磁盘上,存放着普通文件的信息,存放着目录文件的信息,存放着文件的i节点,还要存放对磁盘存储区的管理信息(比如哪些块是空闲的,哪些块是已分配的等等)。整个磁盘存储区的组织结构如下图示。9n块0用来存放引导程序,它与文件管理关系不大。文件存储器全部资源的管理信息(即filsys表)存放在块1,它是磁盘的管理区。从第2块K+1块,存放磁盘上文件的i节点内容,这个区域称为索

7、引节点表(区)。索引节点表的后面是一般数据存储区,在那里存放普通文件和目录文件的信息。显然,在磁盘上,一般数据存储区所占用的磁盘空间为最大。下面对管理区中的资源管理信息表filsys、索引节点区中的i节点以及文件的目录分别加以介绍。109.2.2 几种常用的数据结构n资资源源管管理理结结构构filsys:用用来来进进行行文文件件空空闲闲块块和和i节节点点项项的的分分配配与与回回收收,包包含含文文件件系系统统空空闲闲块块分分配配用用堆堆栈栈及及i节点分配用数据结构。原理见节点分配用数据结构。原理见P229ni节节点点(索索引引节节点点):存存放放文文件件说说明明信信息息和和相相应应标标识识符符的

8、的BFD.包包括括:磁磁盘盘i节节点点(dinode,以以静静态态形形式式存存放放文文件件说说明明信信息息)、内内存存活活动动 i节节点点(inode,为为减减少少设设备备启启动动次次数数、提提高高文文件件的的操操作作速速度度而而把把磁磁盘盘i节节复复制制到到内内存存的的特特定定区区域域)。每每个个文文件件都都应应有有一一个个唯唯一一的的磁磁盘盘索索引引节节点点,文文件件被被打打开开后后,还还应应有有内内存存索索引引节点。节点。11n目录项目录项:由文件名和磁盘i节点标识符id组成。n系系统统打打开开文文件件表表、用用户户打打开开文文件件表表:记记录录和和控控制制打打开开文文件件的的用用户户进

9、进程程以以及及记记录录和和控控制制那那些些共共享享同同一一文件的用户进程。其中:文件的用户进程。其中:n用户打开文件表:用户打开文件表:存放打开文件的描述符存放打开文件的描述符fd;n系系统统打打开开文文件件表表:记记录录打打开开同同一一文文件件的的不不同同进进 程程和和不不同进程所使用的不同打开路径,及其对应的读写指针。同进程所使用的不同打开路径,及其对应的读写指针。文件名i 节点编号id12n资源管理的任务:n空闲磁盘块的分配ni节点的分配n系统打开文件表的分配n空闲磁盘块的回收ni节点的回收n系统打开文件表的回收9.3 资源管理和地址映射13空闲磁盘块的管理nUNIX对文件存储空间的管理

10、在磁盘上,UNIX总是把文件安排在一般数据存储区。因此,UNIX对文件存储空间的管理,即是对磁盘上一般数据存储区的管理。前面第7章介绍使用“空闲块链”管理磁盘上的空闲块时,曾提及“成组链接”法,并说UNIX操作系统就是采用这种方法来管理磁盘上的空闲块的。这种方法是将若干个(如100)空闲盘块划归为一个组,将每组在中的所有盘块号存放在其前一组的第一个空闲盘块中,而仅把第一组中的所有空闲块号放入超级块(filsys结构)中。下面简单介绍它的实现过程。14n在磁盘管理区filsys结构中,有两个内容涉及到磁盘空闲块的管理,一个是由数组s_free100构成的一个空闲磁盘块索引表。当一个文件要申请磁盘

11、块时,就到这个索引表中去获得需要的空闲块;当一个磁盘块被释放时,就把它还回到这个索引表中。所以,这个索引表中记录的是当前系统可以直接分配的空闲磁盘块。另一个是s_nfree,它记录了s_free 中现有的可分配的空闲磁盘块数。n从形式上看,利用数组s_free100直接管理100个空闲的磁盘块,与利用数组s_inode100直接管理100个空闲的i节点相类似,但实际上相差很远。因为除这100个直接管理的空闲块外,UNIX对其余的空闲块并没有放置不管,而是将它们分组进行链接。具体做法如下图所示。1516nUNIX把磁盘上一般数据存储区中的所有空闲块依次分组。为了下面讲述方便,对每一组的块都进行分

12、别编号。具体的办法是:第1组为99块,编号为199(为什么第1组只有99块,后面会给出解释)。从第2组起,每组都是100块,剩下的块归并成为最后一组。它们都按099的顺序进行编号。在图中,从右至左反映了这种分组的结构。在图中,假定最后一组中只有52个空闲块,各块的编号为051。n分好组以后,总是在后一组的第0块中开辟101个位置,依次存放前一组的总块数以及前一组中每一块的地址。也就是说,相当于总是在后一组中,开辟s_nfree和s_free100所需要的位置,用于存放前一组的分组信息。17n在此,有两组的情况要做特殊处理。一个是第1组。在第1组中,实际只有99个空闲块。为了管理的需要,把它的总

13、块数 仍 记 为 100,见 图 中 第 2组 里 的s_nfree=100。另外,第一组磁盘块编号是从1开始的,因此在相当于第0号磁盘块的位置存放一个0,而不是某一个磁盘块的地址,见图中第2组中的s_free0=0。18n另一个要特殊处理的是最后一组。因为在最后一组的后面已经没有下一组了,所以UNIX就把它的所有信息存放在管理块的filsys中,即存放在filsys的s_nfree和s_free100中。由于现在最后一组只有52个空闲块,因此在filsys中的s_nfree取值为52,并且只用到数组s_free100的前52个元素,即用s_free0到s_free51存放最后一组的52个空闲

14、块的地址。n至此,成组链接的格局已经完成:在filsys的s_free 中,记录了当前直接可以分配的52个空闲块。在这52个空闲块的第0块中,记录了下一组100个空闲的磁盘块地址,下一组100个空闲的第0块中,记录了再下一组100个空闲的磁盘块地址,如此等等。19n在采用“成组链接”法后,如何分配空闲块,如何回收空闲块?下面来讨论这两个问题。无论是磁盘空闲块的分配还是回收,都是在filsys中的空闲磁盘块索引表s_free 中进行,并把它视为一个栈。分配时,做出栈操作;回收时,做进栈操作。ns_nfree中记录的值,是s_free 中当前实际有的空闲块数,正好也是空闲磁盘块索引表s_free

15、中下一个可以使用的索引表目的下标。20n因此,总是先在s_nfree上做减1操作,然后把s_frees_nfree中记录的磁盘块分配出去。这里要注意的是,如果在s_nfree上做减1操作后,其值等于0了,那么就是要把s_free0所指向的那一个磁盘空闲块分配出去。由于它是这一组的第0个磁盘块(按照分配顺序,它总是在一组中最后被分配出去),里面包含有它前一组空闲块的信息在内。因此在把这一块分配出去之前,应该先把它记录的101个信息拷贝到filsys结构的s_nfree和s_free 里面去,然后才能将它分配出去。21n分配时还要注意的一个问题是如果分配一直进行,现在要把第2组的第0块分配出去。根

16、据前面所说,先把这块中记录的101个信息拷贝到filsys结构的s_nfree和s_free 里面去,然后才将它分配出去。这意味着系统现在只有最后99块能够分配了。如果分配仍然继续,直到把这99块全部分配出去。此时,filsys中的s_nfree=1,s_free0=0。若再申请空闲块,s_nfree减1后成为0,即要把s_free0所指的块分配出去。此时发现s_free0=0,而不是一个磁盘块的地址,表明所有的磁盘空闲块都分配出去了,提出请求的进程只能阻塞等待。所以,这就是前面分组时把第1组只分99个空闲块,但仍然算这组有100个块,并将第0块指针处安放一个0的原因。22n进行空闲块的回收时

17、,就是将该块的地址登记在空闲磁盘块索引表的s_frees_nfree表目中,然后让s_nfree加1。不过要注意,在把释放块的地址存入索引表s_free 的表之前,必须检查s_nfree的取值。如果发现s_nfree等于100,那么表明这时空闲磁盘块索引表在此之前已经收集满了100个空闲的磁盘块,它们应该形成一个新的链组。现在要释放的一块,是下一组空闲块的第0块。于是,就把filsys中的s_nfree和s_free0s_free99共101个值存入新释放块中,然后将此块的地址填入s_free0中,将s_nfree置为1。239.3.1 磁盘i节点的管理n基本思想:在给新建文件分配磁盘存储区之

18、前,为其分配磁盘i节点,以将文件的有关信息记入其中,并将用户提供的文件名和磁盘i节点号一并组成一个新目录项,记入其父目录文件中;删除文件时,回收所分配的磁盘i节点项。n分配算法:借助于i节点线性表利用ialloc算法(UNIX System V)进行的,具体分配过程见 P232n回收算法:利用ifee算法249.3.2 内存i节点的管理n基本思想:系统打开文件进行搜索或读写等操作时,为其分配内存i节点,以存放从磁盘i节点拷贝过来的信息,方便用户或系统对文件的访问;删除文件时,回收所分配的磁盘i节点项。n分配:利用过程iget实现n回收:利用过程iput实现259.3.3 系统打开文件表的管理n

19、系统打开文件表:记录打开同一文件的不同进程和不同进程所使用的不同打开路径,及其对应的读写指针。n分配:利用getf过程实现n回收:利用closef过程实现269.3.4 地址映射n前面提及,UNIX文件的物理结构采用的是索引结构,这种索引结构是通过每个文件i节点中的数组di_addr 来形成文件存储索引表的。该数组总共有13个元素,每个元素为一个索引项。前10个索引项直接指向文件数据存放的磁盘块号,后3个索引项分别构成一次间接索引、二次间接索引和三次间接索引的多级索引结构。这样,UNIX可以根据文件的大小,通过使用这张存储索引表,形成小型、中型、大型和巨型等不同规模的文件。27n小型文件的索引

20、结构:通常,每个磁盘块为512个字节。当一个文件的长度在110个磁盘块之间时,就称为小型文件。这时,用文件i节点中数组di_addr 的前10个表目,直接指向文件数据存放的磁盘块号。因此,在UNIX中,小型文件是通过i节点中的数组di_addr 构成一级索引表而获得文件在磁盘上的存储位置的。如下图所示。2829n中中型型文文件件的的索索引引结结构构:当一个文件的长度在10138磁盘块内时,就成为一个UNIX的中型文件。这时除了用到di_addr0di_addr9外,还要用到di_addr10,如下图所示。在图中,di_addr0di_addr9仍然直接指向文件数据存放的10个磁盘块号,然后又利

21、用di_addr10指向一个磁盘块。这块并不存放文件的数据,而是利用它形成又一级的索引。在UNIX中,用4个字节放一个磁盘块号,因此在这个盘块中,可以放128个磁盘块号。这样一来,通过di_addr10提供的索引,一个文件就可以达到138个磁盘存储块这么大。3031n大大型型和和巨巨型型文文件件的的索索引引结结构构:当一个文件的长度在13816522磁盘块内时,就成为一个UNIX的大型文件。这时除了用到di_addr0 di_addr9外,要用到di_addr10,还要用到di_addr11。在图中,di_addr0di_addr9直接指向文件数据存放的10个磁盘块号。然后如同前面那样,利用d

22、i_addr10指向一个磁盘块,由它提供128个磁盘块的索引,从而使文件总共达到138个磁盘存储块这么大。但这还不够,又利用di_addr11指向一个磁盘块,由它指向128个磁盘块,每个都是一个索引。这样,通过这128个索引、每个指向128个磁盘块,就又可以得到16384个磁盘块。于是,UNIX的大型文件最多可以拥有16522个磁盘块(即10+128+16384)。3233n当一个文件所需的磁盘块大于16522个磁盘块时,就成为UNIX的巨型文件了。这时除了用到di_addr0di_addr9外,还要 用 到 di_addr10、di_addr11和di_addr12。此时,文件的最大长度可以

23、达到约11亿个字节,但是由于此时要经过多次间接索引,会使系统的查找速度大大降低。349.4 目录与检索方法n目录的构造和删除 创建一新文件时,UNIX系统利用makenode过程在其父目录文件中为之构造一个目录项。n目录的检索 由namei过程利用散列搜索法完成,其根据用户给出的文件路径名,从高层到低层顺序地查找各级文件目录,寻找指定文件的内存i节点指针。359.5 文件系统的系统调用 UNIX提供了一些系统调用命令,以便用户在程序一级完成对文件的操作。有关的系统调用是:creat、open、read、write、close、chdir、chown、chmod、link和unlink等。下面对

24、它们各自的功能做粗略的描述。ncreat(建立文件)nopen(打开文件)nclose(关闭文件)nread(读)nwrite(写)36nlink(链接)(链接)系统调用link可以为一个已经存在的文件开辟一条新的路径,也就是说,可以为一个文件再取一个新的名字。它的使用格式是:link(pathname1,pathname2);其中参数pathname1是原文件的路径名,参数pathname2为其新取的路径名。link处理程序先按照参数pathname2的指点,将新的文件名登记到指定的路径目录中。然后根据pathname1,找到原文件所对应的i节点编号,将该号填入新文件的文件目录中。由于每个文

25、件的i节点编号是惟一的,因此经过link之后,两个不同路径名的文件就与同一个文件相对应了。37 unlink(去链接(去链接)38 比比如如考考虑虑上上图图的的情情形形。zong和和wang要要共共同同完完成成一一项项工工作作。zong为为了了访访问问对对方方的的文文件件x,只只能能通通过过“/usr/wang/x”才才能能达达到到目目的的。但但如如果果通过命令:通过命令:link(/usr/wang/x,/usr/zong/k););那那么么,若若当当前前目目录录为为zong,则则zong直直接接通通过过k就就能能够够访访问问wang的的文文件件x了了,这这是是因因为为link命命令令在在z

26、ong的的文文件件k和和wang的的文文件件x之之间间建建立立了了链链接的缘故。如图接的缘故。如图(b)所示。所示。399.6 UNIX的设备管理UNIX设备管理概述nUNIX是根据设备与内存之间信息交换的单位来对设备进行分类的,因此在整个系统中,归到设备管理的有两类设备:块设备和字符设备。前者与内存之间以成组信息为单位进行信息交换,比如硬盘、软盘、磁带都属于块设备。由于这些设备是用来存储信息的,因此有时把它们称为存储设备;后者与内存之间以字节为单位进行信息交换,比如键盘输入、显示器和打印机等都属于字符设备之列。由于这些设备主要供计算机接收外部信息,或把加工完毕的信息传递给外部世界,因此也被称

27、为输入/输出设备。40n为了识别每一个具体的设备,UNIX是这样做的:每一类设备附有一个编号,称为“主设备号”,同类设备中的不同设备也给予一个编号,称为“次设备号”。在请求设备进行输入输出时,必须指定主设备号和次设备号。这样,由主设备号判定由哪个驱动程序工作;驱动程序根据次设备号确定控制哪台设备去完成所需要的I/O。n从前面对UNIX文件管理的讲述可知,UNIX把块设备和字符设备都视为特殊文件来对待,它们的文件目录都在子目录dev下。由于它们是文件,因此有自己的i节点。为了与其他文件加以区分,在它们的索引节点中,把“文件类型”栏置为“块”或“字符”。由此表明它们不是普通文件,也不是目录文件,而

28、是设备文件,并且由此也能区分是块设备文件还是字符设备文件。41n在UNIX中,是通过系统调用creat来建立新文件的。但设备文件不能用普通的方法来创建,并且也不是谁都有权来创建。如果要创建一个新的设备文件,则应该由系统管理员通过系统调用mknod来完成。它的使用格式是(P250):mknod(pathname,mode,dev);其其中中,参参数数pathname是是文文件件的的路路径径名名,mode指指出出文文件件的的类类型型(B表表示示块块设设备备,C表表示示字字符符设设备备),dev是是主设备号和次设备号的组合。比如有如下命令:主设备号和次设备号的组合。比如有如下命令:mknod(/de

29、v/abc,C,2 12););表表示示要要在在根根目目录录的的子子目目录录dev下下,创创建建一一个个名名为为abc的的文文件件(由由于于它它建建立立在在子子目目录录dev下下,因因此此它它是是一一个个设设备备文文件件),由由于于mode=“C”,因因此此是是一一个个字字符符设设备备文文件,该设备的主设备号是件,该设备的主设备号是2,次设备号是,次设备号是12。429.6.1 块设备的管理UNIX在块设备和内存之间安放了缓冲区,通过它使块设备与内存间的数据流动在速度上能够匹配,从而达到减少内、外存传输次数的目的。如图所示。对于写操作,先是把内存用户区中的数据拷贝到缓冲区,再从缓冲区输出到设备

30、;对于读操作,先从设备接收数据到缓冲区,再将缓冲区中的数据拷贝到指定的内存用户区。43n块设备的每一个缓冲区长度为512个字节或1024个字节,这要由文件系统来确定。由一个个缓冲区,组成了供块设备输入/输出使用的缓冲池。为了便于管理,UNIX把缓冲池中的每个缓冲区分成两个部分:一个是真正用于存放数据的部分,一个是用于管理的部分。前者仍称为“缓冲区”,后者称为“缓冲区控制块”,并在缓冲区和缓冲区控制块之间保持一一对应的关系。图9.10给出了缓冲区控制块的内容和它与缓冲区的对应关系。4445n1空闲缓冲区队列(av队列)为了构成系统中空闲缓冲区队列,UNIX设置了一个名为bfreelist的控制块

31、,它的结构与缓冲区控制块相同,里面的av_forw和av_back就是块设备空闲缓冲区队列的首指针和尾指针,如图9.11所示。4647 对于空闲缓冲区队列,有两点要说明:第一,这个由缓冲区控制块构成的队列是一个双向链表,它们通过各自的前向指针av_forw和后向指针av_back链接在一起,形成队列。第二,UNIX对这个队列采用先进先出(FIFO)的管理算法。即当释放一个缓冲区时,与之对应的缓冲区控制块就被链入到空闲缓冲区队列之尾;当申请一个缓冲区时,就把空闲缓冲区队列之首的那个缓冲区控制块摘下分配出去,这也就意味着是把这个缓冲区控制块所对应的缓冲区分配出去。482.设备缓冲区队列(设备b链,

32、散列队列)这是由缓冲区控制块组成的第二种队列,是UNIX对缓冲区管理的一大特色。下面来说明这是一个什么队列,为什么要组成它。49n缓冲池中的缓冲区资源是有限的,为了能够对它们充分地加以利用,以及对它们里面存放的数据信息最大限度地加以利用,UNIX提出了这样的设想:一个已经在空闲缓冲区队列中的缓冲区控制块,在它未被挪为它用之前,它对应的缓冲区中保存的仍然是磁盘上某块中的数据信息。如果这时根据需要又要对该磁盘块进行操作,那么大可不必去通过启动I/O获得盘块上的数据,这些数据还在原来的缓冲区中完好无损地保存着,只要拿来就可以使用。这样做的结果是减少了I/O次数,大大提高了系统的工作效率。50n出自于

33、这些考虑,UNIX一方面仍然是让被释放缓冲区所对应的缓冲区控制块链入到空闲缓冲区队列之尾,以便能够它用。另一方面又设置了一个新的队列:设备缓冲区队列,即把为某个设备服务的缓冲区所对应的缓冲区控制块全都汇集在一起,形成了这个设备的设备缓冲区队列。一个设备的设备缓冲区队列由缓冲区控制块中的d_forw和d_back指针进行链接,前者为前向指针,后者为后向指针。该队列的首、尾指针是设备表中的d_forw和d_back。整个队列如下图所示。5152n几点说明:(1)这个由缓冲区控制块构成的队列是一个双向链表,它们通过各自的前向指针b_forw和后向指针b_back链接在一起,形成队列。(2)当一个缓冲

34、区被分配给某个块设备做输入/输出用时,它所对应的缓冲区控制块就从队首插入到队列里。(3)当一个缓冲区控制块插入到一个设备的设备缓冲区队列中之后,即便该缓冲区被释放,它也仍然在这个队列中排着。这就是说,在任何时刻,UNIX中的任何一个缓冲区控制块,总会在空闲缓冲区队列、设备缓冲区队列以及设备输入/输出队列这三个队列中的两个里排队,或是在空闲缓冲区队列、设备缓冲区队列里面排着,或是在设备缓冲区队列、设备输入/输出队列里面排着。(4)只有当一个缓冲区的服务对象改变(比如原来被分配给磁盘1使用,现在被分配给磁盘2使用了)时,该缓冲区所对应的缓冲区控制块才会从一个设备缓冲区队列上摘下,进入到另一个设备缓

35、冲区队列中;否则即便缓冲区被释放,它仍然保持在原来的设备缓冲区队列中。53n3输入/输出请求队列(块设备av链))当用户对块设备提出输入/输出请求时,首先要申请一个空闲的缓冲区控制块(注意:申请到空闲的缓冲区控制块,就意味着申请到了存放数据的缓冲区,因为它们是一一对应的),并把这次输入/输出请求具体要完成的任务填入到缓冲区控制块中(数据源的地址、目的地址、传输的个数等等)。因此,UNIX把向主设备号相同的设备提出的I/O请求所对应的缓冲区控制块链接在一起,形成对这个设备的输入/输出请求队列。该队列的首指针就是这个设备的设备表里的d_actf,尾指针是d_actl。如下图所示。5455n对于块设

36、备的输入/输出请求队列有三点说明:第一,它是一个单链表,不像空闲缓冲区队列,那里给出的是一个双向链表。第二,由于一个缓冲区控制块不可能同时在空闲缓冲区队列和输入/输出请求队列,因此,在输入/输出请求队列中,就借用缓冲区控制块中的av_forw指针来构成单链表(这个指针在空闲缓冲区队列里是前向指针)。第三,UNIX对这个队列采用先进先出(FIFO)的管理算法。即后到的输入/输出请求所对应的缓冲区控制块被排在队尾,设备总是为排在队首的那个缓冲区控制块中所记录的请求服务。服务完一个后,就把它从队首摘下,然后再为下一个请求服务。569.6.2 字符设备的管理n字符设备的特点是:工作速度慢;每次传输的数

37、量虽然不定,但总的来说较少;各种设备之间的物理差异很大。UNIX为它们的输入/输出采用了较为容易管理的字符缓冲技术。n字符设备输入/输出所使用的缓冲池,由一个个缓冲区组成,每个缓冲区既含数据存放部分又含管理控制部分,这与块设备缓冲区两者分开的管理办法不同。图9.17给出了字符缓冲区的结构示意。5758n下面对字符缓冲区中的各项内容做一些必要的说明:nc_next(缓冲区指针)这是一个指向下一个字符缓冲区的指针,由它可以形成字符缓冲区的各种队列。nc_first(本缓冲区首字符位置)它总是指明当前本缓冲区中存放的第1个可用字符所在的位置。nc_last(本缓冲区尾字符位置)它总是指明当前本缓冲区

38、中存放的最后一个可用字符所在的位置。n在这三个信息的后面,紧跟着一个64字节大小的缓冲数据区。对于字符缓冲区,只有空闲缓冲区队列和设备的输入/输出队列。它们分别如下图(a)、(b)所。5960n1空闲缓冲区队列 为了形成空闲缓冲区队列,UNIX设置了一个队列首指针cfreelist,它总是指向该队列的第1个空闲缓冲区,在队列中的所有缓冲区,通过自己的c_next指向下一个缓冲区,成为一个单链表。最后一个缓冲区的c_next=NULL,表示队列末尾。UNIX把空闲缓冲区队列视为一个栈来管理,进队列和出队列都是在队首进行。也就是说,申请一个字符缓冲区时,就把该队列中的第1个缓冲区摘下分配出去;释放

39、一个缓冲区时,就把它插入到队首。61n2输入/输出请求队列每一个字符设备都有自己的设备表,该表中有两个指针:c_cf和c_cl,前者总是指向该设备输入/输出请求队列之首的那个缓冲区,后者总是指向该设备输入/输出请求队列之尾的那个缓冲区。62 对于一个字符缓冲区,c_first是从缓冲区取字符的指针,c_last是往缓冲区中存字符的指针。比如下图(a)表示某个字符设备的输入/输出请求队列初态。可以看出,此时队列中只有一个缓冲区,该缓冲区中现在还有5个字符,c_first指向当前的第1个字符“a”,c_last指向当前的最后一个字符“e”。如果现在要从缓冲区中取一个字符,于是根据c_first的指

40、点,把字符“a”取出,调整指针c_first指向字符“b”,如图(b)所示。如果这时需要输入一个字符“f”,因为现在c_last已经指向缓冲区的最后了,故应该申请一个新的缓冲区,按照指针c_first的指点把字符“f”存入,并链入输入/输出队列之尾。这样就从图(b)变成了图(c)。63649、静夜四无邻,荒居旧业贫。4月-234月-23Saturday,April 22,202310、雨中黄叶树,灯下白头人。19:08:2419:08:2419:084/22/2023 7:08:24 PM11、以我独沈久,愧君相见频。4月-2319:08:2419:08Apr-2322-Apr-2312、故人

41、江海别,几度隔山川。19:08:2419:08:2419:08Saturday,April 22,202313、乍见翻疑梦,相悲各问年。4月-234月-2319:08:2419:08:24April 22,202314、他乡生白发,旧国见青山。22 四月 20237:08:24 下午19:08:244月-2315、比不了得就不比,得不到的就不要。四月 237:08 下午4月-2319:08April 22,202316、行动出成果,工作出财富。2023/4/22 19:08:2419:08:2422 April 202317、做前,能够环视四周;做时,你只能或者最好沿着以脚为起点的射线向前。7

42、:08:24 下午7:08 下午19:08:244月-239、没有失败,只有暂时停止成功!。4月-234月-23Saturday,April 22,202310、很多事情努力了未必有结果,但是不努力却什么改变也没有。19:08:2419:08:2419:084/22/2023 7:08:24 PM11、成功就是日复一日那一点点小小努力的积累。4月-2319:08:2519:08Apr-2322-Apr-2312、世间成事,不求其绝对圆满,留一份不足,可得无限完美。19:08:2519:08:2519:08Saturday,April 22,202313、不知香积寺,数里入云峰。4月-234月-

43、2319:08:2519:08:25April 22,202314、意志坚强的人能把世界放在手中像泥块一样任意揉捏。22 四月 20237:08:25 下午19:08:254月-2315、楚塞三湘接,荆门九派通。四月 237:08 下午4月-2319:08April 22,202316、少年十五二十时,步行夺得胡马骑。2023/4/22 19:08:2519:08:2522 April 202317、空山新雨后,天气晚来秋。7:08:25 下午7:08 下午19:08:254月-239、杨柳散和风,青山澹吾虑。4月-234月-23Saturday,April 22,202310、阅读一切好书如

44、同和过去最杰出的人谈话。19:08:2519:08:2519:084/22/2023 7:08:25 PM11、越是没有本领的就越加自命不凡。4月-2319:08:2519:08Apr-2322-Apr-2312、越是无能的人,越喜欢挑剔别人的错儿。19:08:2519:08:2519:08Saturday,April 22,202313、知人者智,自知者明。胜人者有力,自胜者强。4月-234月-2319:08:2519:08:25April 22,202314、意志坚强的人能把世界放在手中像泥块一样任意揉捏。22 四月 20237:08:25 下午19:08:254月-2315、最具挑战性的

45、挑战莫过于提升自我。四月 237:08 下午4月-2319:08April 22,202316、业余生活要有意义,不要越轨。2023/4/22 19:08:2519:08:2522 April 202317、一个人即使已登上顶峰,也仍要自强不息。7:08:25 下午7:08 下午19:08:254月-23MOMODA POWERPOINTLorem ipsum dolor sit amet,consectetur adipiscing elit.Fusce id urna blandit,eleifend nulla ac,fringilla purus.Nulla iaculis tempor felis ut cursus.感感 谢谢 您您 的的 下下 载载 观观 看看专家告诉

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!