操作系统 第四章 文件管理

4.1 文件系统基础

所谓文件,指的是以计算机硬盘为载体的存储在计算机上的信息的集合。系统运行时,计算机以进程为基本单位进行资源的分配调度,而在用户的输入输出时则以文件为基本单位。

可以采取自底向上的方式来定义文件:
数据项
指的是文件系统中最低级的数据组织形式,可以分为两类:基本数据项和组合数据项。基本数据项用于描述一个对象的某种属性的一个值,组合数据项则是由多个基本数据项组成的。简单来说数据项就是一张表里面的一行,基本数据项是只有一列的一行,而组合数据项是有很多列的一行。
②记录:
记录指的是一组相关的数据项的集合,用于描述一个对象在某方面的属性。简单来说记录就是一张表,记录了很多个数据项的一张表。
③文件:
指的是由创建者所定义的一组相关信息的集合。从逻辑上可以分为有结构文件无结构文件,有结构文件中文件由一组相似的记录组成,而无结构文件则被视为字符流。简单来说文件就是一个集合体,对于有结构文件,可以看做是记录的集合体,而无结构文件,可以看成是许多个一字符记录组成的文件。
实际上文件并没有严格的定义,操作系统中通常将程序和数据组织成文件。

文件具有一定的属性,不同的系统具有不同的属性,一般都包括以下的项目:
在这里插入图片描述
这部分的文件信息一般保存在目录中,目录保存在外存上,在需要时才调入到内存。

对文件可以采取如下的基本操作:
①创建文件:
创建文件包括两个步骤,一是找出文件需要的空间,二是在目录中为新文件创造一个条目
②写文件:
执行一个系统调用,指明文件名称和要写入文件的内容
③读文件:
也需要执行一个系统调用,指明文件名称和要读入文件块的内存位置。需要查找目录来获取相关的目录项。
④文件寻址
⑤删除文件:
先从目录项中删除对应的目录项,之后回收文件所占用的存储空间

打开一个文件时,系统调用open将指明文件的属性从外存复制到内存打开文件表中的一个表目中,将该表目的编号返回给用户,这样当用户需要对文件操作时,就可以直接查找打开文件表来找到文件,当不再使用这个文件时,操作系统从表中删除这一条目。在完成open调用后,对该文件的操作不需要文件名,而直接用open调用返回的指针。。一个进程打开一个文件,系统打开文件表就会为打开的文件增加相应的条目。另一个进程执行open时只在其进程打开表中增加一个条目,条目指向系统表的相应条目。
每个打开的文件都需要有如下的关联信息:
文件指针
记录上次读写的位置
②文件打开计数
用于记录打开该文件的进程数目,当计数为0时操作系统会关闭该文件并且删除该条目。
③文件磁盘位置
方便修改文件的数据
访问权限

文件的逻辑结构指的是从用户观点出发看到的文件的组织形式,而文件的物理结构是从实现观点出发看到的文件在外存上的存储形式

根据逻辑结构,文件可以划分为无结构文件和有结构文件
无结构文件也称为流式文件,是有序相关信息项的集合,以字节为单位,这类文件管理简单,可以当做字节流来看待,多用于源程序文件、目标代码文件等。

有结构文件也称记录式文件,可以看做许多记录的集合。根据记录的组织形式可以分为如下的几种:
顺序文件
文件中的记录一个接一个排列,这些记录通常是定长的,可以采用顺序存储或者链表形式存储,在访问时顺序搜索文件。
顺序文件一般有两种结构,一种是串结构,即记录顺序与关键字无关,一般根据时间决定,先存入的即为第一条记录。第二种是顺序结构,即按照关键字顺序来排列。
顺序文件适合内部的各个记录长度相等的情况,这种情况在存取时才会更加方便访问,只需要按照记录长度和内部偏移来计算即可,而对于记录长度不等的文件,采取顺序存储实在是自找麻烦。
顺序文件适合于批量操作,当批量操作时效率是所有逻辑文件中最高的,只有顺序文件才能存放在磁带上,此外,顺序文件对于查找、增删单条记录等操作都很麻烦。
②索引文件
索引文件是在顺序文件的基础上延伸出来的,当文件内部记录的长度相等时,如果想访问第i条记录,可以直接用i乘每条记录的长度就可以得到相对于第一条记录的地址,但是当记录长度不等时,这种查找的方式就会很浪费时间,所以引出了索引表,通过建立索引表,将里面的每一个表项与文件中的地址通过指针建立联系,从而实现快速的查找。索引表本身是一个定长记录的顺序文件。
在这里插入图片描述
③索引顺序文件
这类文件是前两类文件的结合,该方式将顺序文件中所有记录分为若干组,为每个组建立一个索引表,索引表中的每个表项指向每组中的第一个记录。根据这种组织方式,先通过索引表找到所在的组,再在所在的组中进行顺序访问。这种组织方式要求组内可以无序,但是组与组之间的关键字必须有序
在这里插入图片描述
④直接文件或者散列文件
给定记录的键值或者通过散列函数转换的键值直接决定记录的物理地址。该方式速度快,但是会引起冲突,这是散列函数不可避免的问题。

文件管理系统中,很重要的一个概念就是文件目录,文件目录包括文件的相关属性、位置和所有权等。首先,从用户角度看,目录实现的是一个文件名与文件之间的映射,即按名存取,从系统角度看,目录存取要尽可能使得检索速度快,在共享系统中还需要提供控制访问文件的信息。

为了实现目录管理,操作系统中引入了文件控制块的概念。
文件控制块时用来存放控制文件所需要的各种信息的数据结构,其作用类似于进程控制块在进程控制时的作用,FCB的有序集合就是文件目录。每创建一个新文件,系统就分配一个FCB并存放在文件目录中成为目录项。简单来说,一个FCB就是对一个文件的各项信息的一个总和,相当于一个二维表里面的一行,很多个文件的FCB放在一起,构成了一张二维表,即文件目录,这个目录里面包含了许多文件的各种信息。
FCB一般包括如下内容:
在这里插入图片描述
通过文件目录,查找文件的地址就变成了查找目录的一个过程,但是在查找目录的这个过程中,许多FCB的内容都是没有用到的,比如修改时间这类,在检索时完全没用,所以这部分内容完全没有必要调入内存,所以延伸出来了索引节点的概念。索引节点就是将文件名和文件描述信息分开时,用来存放文件描述信息的数据结构,简化后,文件目录只含有两部分:文件名和索引节点编号,而具体的文件相关信息就存放在索引节点里面。
在这里插入图片描述
采用这种方式,在每次将文件目录调入内存时,同样的大小可以多调入许多表项,检索起来也更加方便,而且采用索引节点会更加方便文件之间的共享
存放在磁盘上的索引节点称为磁盘索引节点,每个文件都对应有一个磁盘索引节点,主要包括:
在这里插入图片描述
文件被打开时,磁盘索引节点被复制到内存的索引节点中,称为内存索引节点,新增内容:
在这里插入图片描述
这样引入了索引节点之后,查找文件的过程就变成了先查找文件目录,根据文件目录对应的表项找出相应的索引节点,由索引节点内部指示的地址,去物理内存上对应位置即可。

对于目录,可以采取的操作有:
在这里插入图片描述
操作时,可以考虑如下的几种目录结构:
①单级目录结构:
这种结构是说整个系统只建立一个目录表,所有的文件全列在这一张表里面。
在这里插入图片描述
这种结构要求新建文件时,检查表中所有的文件,没有重名才可以新建,即整个系统里面不允许有重名文件。该目录实现了基本的按名存取,但是速度慢、对文件名限制要求很多、不利于文件共享,所以对于多用户的操作系统是不合适的。
②两级目录结构
在单级目录结构的基础上,将文件目录分为主文件目录和用户文件目录,主文件目录记录用户名即相应文件夹的位置,用户文件目录再存放用户各个文件的FCB,所以某用户只需要搜索自己的文件夹即可。
在这里插入图片描述
这类方式允许操作系统内不同用户文件夹下的文件重名,而且保证了文件的安全性,但是在灵活性上还是有所欠缺。
③多级目录结构(树形目录结构)
将两级目录结构的思想推广,很容易得到多级目录结构。当用户想要访问某个文件时,用文件的路径名标识文件,文件路径名是个字符串,由从根目录出发到所找文件通路上所有目录名与数据文件名用分隔符“\”链接而成。从根目录出发的地址称为绝对地址,从当前位置出发的地址称为相对地址。进程对各文件的访问都是相对于当前目录进行的。
在这里插入图片描述
采用树形目录结构,方便对文件进行分类,层次结构清晰,也便于保护和管理,但是在树形目录中查找一个文件时,需要按照路径访问中间过程的目录,所以增加了访问磁盘的次数
④无环图目录结构
在树形目录结构的基础上,增加了一些指向同一节点的有向边,以此来表示文件的共享。
在这里插入图片描述
共享文件时,为每个共享结点设置一个共享计数器,每当图中增加对该结点的共享链时,计数器加1。每当某用户提出删除该结点时,计数器减1。仅当共享计数器为0时才真正删除该结点,否则仅删除请求用户的共享链。对于共享文件,自始至终都只存在一个真正的文件,任何改变对所有共享的用户都是可知的。

文件共享使得多个用户可以共享同一个文件,系统只需要保留一个文件的副本。现代的文件共享方式主要分为两类:
①基于索引节点的共享方式(硬链接
通过指向同一个索引节点来实现共享,即在不同用户的文件目录中,将表项中的索引节点指向同一个文件的索引节点,这样就实现了文件的共享。
在这里插入图片描述
这种方式下,一定要在索引节点中设置计数器来确定文件是否关闭。此情况下,一个用户删除自己文件目录中的共享表项,如果其它用户仍然在访问共享文件,那么文件并不会关闭,只有放count变为0时才真正关闭这个文件。
在这里插入图片描述
②利用符号链实现文件共享(软链接)
为了让一个用户能够共享另一个用户的文件,系统创建一个LINK类型的文件,该LINK文件与共享文件名字相同,这个文件包含的是共享文件的路径。通过这种链接方式,当用户想访问这个共享文件时,就会经过LINK文件从而转换到真正的路径上去。采用这种方式,只有文件的所有者才具有指向共享文件索引节点的指针,而共享用户都不具有。其余用户共享时会由于路径的变化导致时间的增加。

文件的保护主要是通过:口令保护、加密保护和访问控制来实现。

可以加以控制的访问类型主要有:
在这里插入图片描述
访问控制最常用的办法是根据用户身份进行控制。通过给每个文件和目录增加访问控制表,规定每个用户名及其允许的操作。这种方法可以使用复杂的访问方法,但是无法预计并且可能导致复杂的空间管理。

精简的访问列表采用拥有者、组和其他来表示。文件拥有者在创建文件时,说明创建者用户名及所在的组名,系统在创建文件时也将文件主的名字、所属组名列在该文件的FCB中,用户访问该文件时按照拥有者所拥有的权限访问文件,若用户和拥有者在同一个用户组,则按照同组权限访问,否则只能按其他用户权限访问。

口令和密码则是另外两种访问控制方法。口令指用户在建立一个文件时提供一个口令,系统为其建立FCB时附上相应口令,同时告诉允许共享该文件的其他用户。用户请求访问时必须提供相应的口令。这种方法时间和空间的开销不多,缺点是口令直接存在系统内部,不够安全。密码指用户对文件进行加密,文件被访问时需要使用密钥。这种方法保密性强,节省了存空间,不过编码和译码要花费一定的时间。

4.2 文件系统实现

上一节主要是文件的逻辑结构,即用户角度来看文件是如何组织的,这一节则是文件的物理结构,即在计算机内部的存储情况。

首先,现代文件系统一般都具有一定的层次结构,操作系统不同,文件系统的层次结构也有略微差别,但是大致都符合如下的结构:
在这里插入图片描述
其中,用户调用接口为用户提供与文件及目录有关的调用,文件目录系统则负责管理文件目录,存取控制验证模块负责确认访问的合法性,逻辑文件系统与文件信息缓冲会根据文件的逻辑结构将用户要读写的逻辑记录转换成文件逻辑结构内的相应块号,物理文件系统负责把逻辑记录所在的相对块号转换成实际的物理地址,辅助分配模块负责分配辅存空闲空间和回收辅存空间,设备管理程序模块负责各种设备的管理控制。

上一节总结过,想要打开一个文件,就必须要先利用路径名,找到其对应的目录项,所以目录对于文件系统是十分重要的一部分。
目录的实现主要有两种方式:线性列表和哈希表。线性列表是最简单的方法,使用存储文件名和数据块指针的线性表,本质就是一个线性表。哈希表是根据文件名得到一个值,返回治哥指向现行列表中元素的指针,哈希表使用起来也很方便,但是需要一些额外方法来防止冲突

对于文件的实现,即文件的物理结构,即文件的数据在物理存储设备上是如何安排的,需要考虑两个问题,一个是文件的分配方式,讲的是对磁盘非空闲块的管理,另一个是文件存储空间管理,讲的是对磁盘空闲块的管理

文件分配方式一般有三种方式:
①连续分配:
该方法要求每个文件在磁盘上占据一组连续的块,采用这种方式相当于在磁盘上划出了一块连续的区域,从而使得访问时寻道数寻道时间最小
在这里插入图片描述
这种方式需要在目录中记录每个文件分配的位置以及连续块的长度。连续分配支持顺序访问和直接访问,实现简单而且速度够快,缺点是对于文件长度有所缺陷,不适合动态增加的文件,一旦分配区域前后没有空闲的盘块,文件的大小就只能是固定不变的,此外这种方式和内存的动态分配是一个道理,会出现外部碎片的问题。
②连接分配:
链接分配采用离散分配的方式,文件的每个块不需要放在连续空间上,从而对文件大小的动态改变有所适应,无须提前知道文件大小,完全适应动态的增长。该方式又可以分为两类,即隐式链接显式链接
隐式链接是指每个文件对应一个磁盘块的链表,是将磁盘块串联在一起,除了最后一个磁盘块,每个盘块都有指向下一个盘块的指针,这时目录中的一项只需要保存文件第一块的指针和文件最后一块的指针。该方法缺点在于无法直接访问中间的某个盘块,只能根据链表顺序访问,这属于链式结构的通病。另外这种分配方式对于稳定性也有一定的要求,一旦其中一个盘块中的指针损坏或者丢失,会导致整个文件损坏。
在这里插入图片描述
显式链接是指把用于链接文件各物理块的指针,从每个物理块的块末尾中提取出来并且显式地存放在内存的连接表中,这个链接表一个磁盘中仅有一张,称为文件分配表(File Allocation Table),这个表不仅记录了已分配的情况,而且还包含着未使用盘块的情况,如下图所示,FAT中的下一块如果是-2就说明这个盘块还没有分配出去,而下一块为-1表示自己时最后一块,其余情况都指向下一块。采用这种方法,文件的目录中就只需要保存文件名和对应的起始块号,对剩余块的访问在FAT中查找。这种方式不仅实现了文件分配,而且也可以用来管理存储空间。FAT表在系统启动时就会被读入内存,所以该表的查找完全是在内存中进行的,速度很快而且减少了访问磁盘的速度。
在这里插入图片描述
③索引分配:
链接分配中显式链接分配不能直接访问,所以又引出了索引分配,这种方式将一个文件的所有盘块号都放在一个索引块上,通过索引块指引向剩余的文件所在的各个盘块。
在这里插入图片描述
采用这种方式,目录中只需要存放对应文件的文件名和索引块位置即可,每个文件都需要一个单独的索引块,索引分配支持直接访问,且没有外部碎片问题,但是由于增加了索引块,所以势必会占据一定的存储空间,索引块的大小也是一个很难确定的问题,过大浪费空间,过小无法支持大文件。一般对于这个问题,解决方案可以采用链接方案(将多个索引块链接起来)或者多层索引(一层索引块指向二层索引块),也可以采用混合索引(前面两种方法的结合)。此外,索引块会∫,操作系统根据文件目录第一个找到的实际是索引块,再经过索引块找到真正想要访问的盘块。

三种分配方式各有其优缺点,实际选择时要根据文件类型做出对应的判断。
在这里插入图片描述
对于文件存储空间管理就相对简单一些。一般来说一个文件存储在一个文件卷中,文件卷可以使一个物理盘也可以是物理盘的一部分,一个文件卷中存放数据的部分和存放控制信息(FCB)的部分是分开的,逻辑卷必须要先初始化,划分好文件区和目录区。
文件存储设备通常划分成许多大小相同的物理块,并且以为单位进行交换信息,文件存储空间管理实际上就是对空闲块的管理和组织,一般有下面的几种方式:
①空闲表法:
属于连续分配方式,用一张表记录空闲的盘块,用一张空闲盘块表来存储,该表每个表项对应一个空闲区,其中包括序号、空闲区的第一个盘块号和空闲盘块数目,所有空闲盘块按照起始位置排列。
在这里插入图片描述
对于空闲盘块的分配类似于内存的动态分配,其算法同样适用于空闲盘块分配。
②空闲链表法:
将所有空闲盘区连成一个链表,根据连接的基本元素不同,根据连接的基本元素,可以分为空闲盘块链和空闲盘区链,前者是将所有空闲盘块连在一起,后者是将所有的空闲盘区连接在一起。空闲盘块链分配过程简单,但是在为一个文件分配盘块时可能需要多次操作。空闲盘区链需要存储能够表示本盘区大小的信息。
③位示图法:
主要是利用二进制来表示空闲情况,系统维护一个二维数组,里面的每个位置可以取0或者1,分别对应空闲和使用,其分配和回收方法如下,最喜欢考的就是这种坐标的查找。
在这里插入图片描述
在这里插入图片描述
④成组链接法:
这种方法适合于大型文件系统,主要思想是将顺序的n个空闲扇区地址保存在第一个空闲扇区内,其后一个扇区则保存另一个顺序空闲扇区的地址,重复此过程直到所有空闲扇区都被分配出去,表示文件存储器空闲空间的“位向量”表或第一个成组链块,以及卷中的目录区、文件区划分信息都需要存放在辅存储器中,一般放在卷头位置,称为超级块。
在这里插入图片描述

4.3 磁盘的组织与管理

磁盘作为存放数据的物理工具,其结构组成在前面提到过,这里直接上截图。
在这里插入图片描述
在这里插入图片描述
这两个磁盘结构图很好的展示了磁盘结构各个单位的含义,按照这种物理结构组织,扇区就是存储的基本单位,也叫做盘块,磁盘地址用柱面号-盘面号-扇区号来表示。

一次磁盘读写操作的时间主要是由三部分决定:
①寻道时间:
磁头移动到指定磁道上所需要的时间,这部分一般题目给出,在不给出的情况下也可以根据题目条件来计算,寻道时间等于启动磁臂的时间加上跨越n条磁道所需要的时间。
②延迟时间:
指的是磁头定位到一个扇区所需要的时间,是在一个圆上的移动。这个时间一般用转速来算,取转一圈用时的一半
③传输时间:
指的是磁盘读出或者写入所需要的时间,这个时间取决于读写的字节数和磁盘的转速。传输时间等于一次读写的字节数除以磁盘转速再除以每个磁道上的字节数。这个计算可以这样理解,用字节数除以每个磁道上的字节数是计算需要的磁道数,转速的倒数表示转动一圈需要的时间,二者做乘法就是需要的传输时间,至于为什么一圈只能存取一个扇区,在后面会再次提到。

对于磁盘也需要一定的调度算法,不过这里的调度算法就简单许多了。
①先来先服务(FCFS)
根据进程请求访问磁盘的先后顺序来进行调度,该方法公平,但是当有大量进程争用磁盘时,性能就会变差。但是对于随机存储器,访问各个位置用时都一样,这时选择先来先服务会更好。
在这里插入图片描述
②最短寻道时间优先(SSTF)
每次去离当前位置最近的磁道进行访存。该算法会出现饥饿现象,虽然比FCFS性能更好,但是并不能保证平均寻找时间最小。
在这里插入图片描述
③扫描算法(SCAN)
也称电梯算法,SCAN算法在磁头当前移动方向上选择与当前磁头所在磁道距离最近的请求作为下一次服务的对象,实际上就是在最短寻找时间优先算法的基础上规定了磁头运动的方向,简单来说就是在磁盘的内外圈之间来回扫描。但是该算法对于最近扫描过的区域不公平。使用时不仅要知道当前位置,还需要知道当前的磁头移动方向。
在这里插入图片描述
④循环扫描算法(C-SCAN)
SCAN的改进方式是C-SCAN算法,即在回程时不响应任何请求,直接移动到另一段再重新开始扫描。
在这里插入图片描述
⑤LOOK调度
这是针对SCAN和CSCAN的一种改进,不需要移动到最远,而是移动到最远端的一个请求即可返回。
在这里插入图片描述
在这里插入图片描述
这许多种调度算法,最喜欢考的就是各种算法的平均寻道长度,需要理解各个调度算法的移动方式,从而计算出寻道长度。各类算法中,FCFS太简单性能较差,SSTF比较通用且自然,SCAN和CSCAN适用于磁盘负载较大时。
在这里插入图片描述
减少延迟时间也是提高磁盘传输效率的一种方式,主要的方法是对盘面扇区进行交替编号,****。
这里就涉及到了之前未解决的问题,采取交替编号,主要是考虑每读一个扇区,都需要一定的缓冲时间,而这个缓冲时间内,磁盘是不停止旋转的,所以就会导致如果编号相邻,存取完1之后,缓冲的时间过了磁头已经移动到2的开头后面的位置,所以想要访问2就只能转一整圈,采用错位访问之后,让这部分缓冲时间错开,从而大大较少多旋转的位置。如下图,如果访问完0,之后经过一定的缓冲,在4的里面缓冲完,那么只需要移动一点就可以到1,继续访问从而不会受太大影响。错位命名也是类似的道理,
在这里插入图片描述

典型题

在这里插入图片描述
题目考察的是平均查找次数。最好情况下,采用索引顺序文件分100组,每组100个记录,那么查找组时平均是50次,组内查找时平均也是50次,共计100次。C项正确。
在这里插入图片描述
这道题考的是软链接和硬连接。硬连接会让count增加,而软链接只是偷梁换柱,并不会产生任何影响。从题目来看,建立F3后,count变为2,删除F1后count变为1但是并不会直接关闭,而是指删除了原来F1用户的目录的一个表项,所以count仍然是1,F2由于是偷梁换柱,所以不知道F1已经被删除,所以count仍然是1,正确答案为B。
在这里插入图片描述
属于现学现卖题目,可以吧用户访问权抽象为一个矩阵,行代表用户,列代表访问权限,所以是一个4行5列的矩阵,故需要20位,D正确。
在这里插入图片描述
题目考的是数据块组织方式,即文件分配方式,要看文件的形式,对于CDROM的文件,一般大小不会变化,而且需要满足快速随机播放,即最短的查询时间,所以最合适的方式为A项。
在这里插入图片描述
由大小关系可知,一个盘块存放5条逻辑记录,所以对第22个逻辑记录进行修改,找到其位置就需要5次访问,之后需要将修改内容写回,所以还需要一次访问,总共6次启动磁盘。
在这里插入图片描述
这种计算题是考试很喜欢考的题目,一个索引指针占4B,所以一个磁盘块最多存放256个索引指针,根据偏移量来看,偏移量1234KB肯定在第二个直接索引指针所指向的磁盘块内,所以只需要一次访问外存即可,排除CD两项,再看307400B,前面的10个直接索引指针会占据10KB的偏移,即10240B,一个一级索引指针可以产生的偏移为256*1KB,即262144B,所以偏移为307400B的盘块一定在二级索引指针指向的范围内,所以需要先访问两次索引节点来获取物理位置,之后才能真正去访问物理盘块,总共需要3次访问,故答案选B。
在这里插入图片描述
这道题考的也是文件管理和位图法,每个盘块是1024B,所以一个盘块按照位示图的标准,就可以标记8192个盘块的空闲情况,所以409612号盘块,其空闲情况就存储在第50个盘块上,所以在32+50=82号盘块上,排除AB两项,第82号盘块的开始位置表示的是编号409600块的空闲情况,所以409612应该处在块内的第二个字节上,第二个字节编号为1,故正确答案为C。
在这里插入图片描述
408就喜欢搞这种长篇幅的大题,看着就很吓人。
第一问考得是目录的内容,每个目录都记录自己内部文件的情况,已经给出了所有文件的簇号,所以可以直接拆出两个目录文件的情况:
在这里插入图片描述
第二问考的是FAT的知识。FAT中一个表项是2B,即16位,所以最多可以表示2的16次方个簇,当每个簇的情况都放在FAT中时,FAT最大为2的18次方B,每个簇是4KB,所以文件系统的最大长度为2的28次方B。这一问关键在于用2B的表项得出最多2的16次方个簇。
第三问则是FAT的细节,FAT中是在一个一个簇之间指来指去的,所以指向106的是106的上一个,即100,所以存放106的是编号100的表项,同理编号108存放在106表项中。
第四问考察存取,从根目录出发,过程先访问dir,dir目录已经拿入内存,所以不需要访问外存,之后查找其目录,需要访问dir1,所以要去外存将dir1的目录拿入内存,所以需要访问48号簇,之后查dir1的目录,找到file1,5000个字节应该处在第二个簇上,通过内存上的FAT找出第二个簇去访问,所以需要访问106号簇。
在这里插入图片描述
题目的叙述非常长,所以一点一点分析。给出的是一个树形结构文件系统,根目录常驻内存,普通文件是索引文件,后序跟着许多数值关系。
第一问问普通文件的页数,需要用到给出的FCB结构,里面有10个是直接索引,一个一级索引一个二级索引一个三级索引,每个页是512B,一项磁盘地址是2B,所以一页最多存放256个表项,所以一个文件最多存放的页数为10+1×256+1×256×256+1×256×256×256=16843018个
第二问要求读取J中的某一页,此时需要参考系统结构图,从根目录出发,根目录常驻内存所以不需要启动磁盘,按照路径,加载AD的目录文件之后打开J的FCB,这个过程需要3次启动磁盘,之后按照FCB的结构,如果选择三级索引,需要再访问2次外存的索引块才能最后访问到真正的物理块,所以最多需要6次启动磁盘。
第三问则换成读取W最少启动磁盘次数,同样的套路,从根目录到加载W的FCB一共需要启动5次磁盘,这部分是必不可少的,但是选择直接地址就可以减少次数,此时只需要1次启动就可以访问到物理盘块,总共最少6次启动磁盘。
第四问则是对第三问的延伸,要想减少启动磁盘的次数,从FCB下手已经不可能了,所以只能从路径下手,将W的FCB地址挂在根目录中的第一项,从而在访问根目录时候就可以不用一层一层查找。
在这里插入图片描述
第一问算文件的最大长度,直接展开各种索引即可,大小为(10+1K+1M+1G)×4KB=40KB+4MB+4GB+4TB
第二问需要结合题目的叙述,2GB大小的文件,拆成数据块是512K=524288个块,额外空间就是需要为这些块分配索引地址,首先10个直接索引直接分配,一个一级索引存放了1024个块,也分配出去,此时再分配二级索引,需要(524288-10-1024)/1024=512个间接块,加上一个二级间接索引块。所以需要(1+512)×4KB的空间,加上inode占用的13个地址项,所以总共需要的空间为2GB+2MB+4KB+52B
在这里插入图片描述
第一问属于对连续分配的调整,根据题意,先将前29块盘块前移,这个过程包括读出和写入,所以对磁盘操作58次,再对第30块盘块只做写操作,从而总共访问磁盘块59次。
第二问采用链接分配方式,根据链接的规则,顺序访问需要29次访问到达第29块,之后将29块的下一块地址赋值给插入块,把插入块写回磁盘又需要一次访问,之后再将29块的下一块地址改为插入块,又增加一次,所以总共需要31次访问磁盘。4B的链接指针可以指向2的32次方个地址,每个地址用于存放数据的大小为1020B,所以文件的最大长度是1020B×4G=4080GB。
在这里插入图片描述
将每道的所有扇区组成一个簇,意味着可以将一个磁道的所有存储空间组织成数据块组,这样有利于提高存储速度。读写磁盘时磁头首先找到磁道,称为寻道,然后才可以将信息从磁道里读出或写入,读写完一个磁道后,磁头会继续寻找下个磁道,完成剩余的工作,所以在随机寻道的情况下,读写一个磁道的时间要包括寻道时间和读写磁道时间,即T+r秒。由于总的数据量是b字节,它要占用的磁道数为b/N个,所以总平均读写时间为 (r+ T)b/N 秒。
在这里插入图片描述
这道题考的是现学现卖,根据磁壁黏着的意思,可以假设这样一个请求队列:120 120 99 120 120 120,如果按照BCD,都会在120这里卡很长时间,而99会晾在一边,只有采用A,才能在第三个相应是访问99而不去管120,故A项正确。
在这里插入图片描述
这部分的考题很喜欢出这种存储的计算题。
第一问问磁盘容量,就是一个简单的乘法,300×10×200×512B=300000KB。
第二问需要做一个转换,一个簇包含两个扇区, 85号柱面对应的簇号为85000-85999,所以按照SSTF,肯定先访问更近的100260-101660-110560,最后才是60005。
第二问第三问没有本质区别,直接按照对应规则转换即可。柱面号用100530/(10×200/2)=100,磁头号用530/(200/2)=5,扇区号则是(530×2)%200=60.
在这里插入图片描述
第一问簇大小为4KB,所以一个簇最多放1024个地址,所以最打的文件长度为(8+1K+1M+1G)×4KB=32KB+4MB+4GB+4TB。
第二问文件索引节点共有1M×4KB/64B=64M,5600B的文件需要两个簇,按照这个大小,512M个簇可以放置256M个图像,所以比较之下,文件数目受限于文件索引节点,故最多可以放置64M个文件。
第三问F1的大小为6KB,所以需要两个簇,只需要用两个直接地址项就可以,而F2为40KB,只用直接地址项不够,还需要用一级索引表,而查一级索引表就需要多访问一次,从而时间也不同。

猜你喜欢

转载自blog.csdn.net/weixin_43849505/article/details/108922937
今日推荐