搜档网
当前位置:搜档网 › 操作系统文件管理

操作系统文件管理

操作系统文件管理
操作系统文件管理

操作系统文件管理

博文很长,我把一章的内容都总结在这里了。

在现代计算机系统中,要用到大量的程序和数据,因内存容量有限,且不能长期保存,故而平时总是把它们以文件的形式存放在外存中,需要时再随时将它们调入内存。如果由用户直接管理外存上的文件,不仅要求用户熟悉外存特性,了解各种文件的属性,以及它们在外存上的位置,而且在多用户环境下,还必须能保持数据的安全性和一致性。显然,这是用户所不能胜任、也不愿意承担的工作。于是,取而代之的便是在操作系统中又增加了文件管理功能,即构成一个文件系统,负责管理在外存上的文件,并把对文件的存取、共享和保护等手段提供给用户。这不仅方便了用户,保证了文件的安全性,还可有效地提高系统资源的利用率。

1. 有关文件的概念

文件:

具有符号名(文件名)的一组相关元素的有序序列,是一段程序或数据的集合。

文件系统:

是操作系统中统一管理信息资源的一种软件,管理文件的存储、检索、更新,提供安全可靠的共享和保护手段,并且方便用户使用。

文件系统包含文件管理程序(文件与目录的集合)和所管理的全部文件,是用户与外存的接口,系统软件为用户提供统一方法(以数据记录的逻辑单位),访问存储在物理介质上的信息。

有关直接(随机)存取设备的磁盘知识:硬盘的读写原理和磁盘碎片的产生

2. 文件的分类

按性质和用途分类:系统文件、库文件、用户文件。

系统文件:由系统软件构成的文件,只允许用户通过系统调用或系统提供的专用命今来执行它们,不允许对其进行读写和修改。主要有操作系统核心和各种系统应用程序或实用工具程序和数据组成库文件:文件允许用户对其进行读取和执行,但不允许对其进行修改。主要由各种标准子程序库组成

用户文件:是用户通过操作系统保存的用户文件,由文件的所有者或所有者授权的用户才能使

用。主要由用户的源程序源代码、可执行目标程序的文件和用户数据库数据等组成。

按操作保护分类:只读文件、可读可写文件、可执行文件。

只读文件:只允许文件主及被核准的用户去读文件,而不允许写文件。标记为:-r-----

可读可写文件:允许文件主及被核准的用户去读和写文件。标记为:-rw----

可执行文件:允许文件主及被核准的用户去调用执行该文件而不允许读和写文件,标记为:---x---

按用户观点分类(UNIX系统文件分类)

普通文件(常规文件) :是指系统中最一般组织格式的文件,一般是字符流组成的无结构文件

目录文件:是由文件的目录信息构成的特殊文件,操作系统将目录也做成文件,便于统一管理特殊文件(设备驱动程序)

按文件的逻辑结构分为:流式文件(,无结构操作系统文件)、记录式文件(有结构的数据库文件)。

流式文件:这是直接由字符序列(字符流)所构成的文件,故又祢为流式文件

大量的源程序、可执行文件、库函数等,所采用的就是无结构的文

件形式,即流式文件。其长度以字节为单位。对流式文件的访问,

则是采用读/写指针来指出下一个要访问的字符。可以把流式文件看

做是记录式文件的一个特例。在UNIX 系统中,所有的文件都被看

做是流式文件,即使是有结构文件,也被视为流式文件,系统不对

文件进行格式处理。

记录式文件:由若干个记录所构成的文件,故又称为记录式文件。也叫数据库文件。

可采用多种方式组织记录,形成不同的文件:

①顺序文件:是由一系列记录按某种顺序排列所形成的文件。

②索引文件:当记录为可变长度时,通常为之建立一张索引表。

③索引顺序文件:它为文件建立一张索引表,为每一组记录中的第一个记录设置一个

表项。

按文件的物理结构分类:顺序文件(也叫串联文件,连续文件)、链接文件、索引文件、HASH文件、索引顺序文件。

按文件的存取方式:顺序存取文件、随机存取文件。

在管理信息系统中,按文件的组织方式分类:顺序文件、索引文件、直接存取文件。

按文件中的数据形式分类

源文件:由源程序和数据构成的文件

目标文件:由源程序经过相应的计算机语言编译程序编译,但尚未经过链接程序链接的目标代码所形成的文件

3. 文件的存取方式

文件的存取方式是由文件的性质和用户使用文件的情况决定。

1 顺序存取。

2 随机存取(也叫直接存取)。

3 索引存取

磁带是顺序存取。磁盘是随机存取。

3. 1. 顺序存取

顺序存取是按照文件的逻辑地址顺序存取。

固定长记录的顺序存取是十分简单的。读操作总是读出上一次读出的文件的下一个记录,同时,自动让文件记录读指针推进,以指向下一次要读出的记录位置。如果文件是可读可写的。再设置一个文件记录指针,它总指向下一次要写入记录的存放位置,执行写操作时,将一个记录写到文件末端。允许对这种文件进行前跳或后退N(整数)个记录的操作。顺序存取主要用于磁带文件,但也适用于磁盘上的顺序文件。

??可变长记录的顺序文件,每个记录的长度信息存放于记录前面一个单元中,它的存取操作分两步进行。读出时,根据读指针值先读出存放记录长度的单元。然后,得到当前记录长后再把当前记录一起写到指针指向的记录位置,同时,调整写指针值。

由于顺序文件是顺序存取的,可采用成组和分解操作来加速文件的输入输出。

3. 2. 直接存取(随机存取法)

很多应用场合要求以任意次序直接读写某个记录。例如,航空订票系统,把特定航班的所有信息用航班号作标识,存放在某物理块中,用户预订某航班时,需要直接将该航班的信息取出。直接存取方法便适合于这类应用,它通常用于磁盘文件。

为了实现直接存取,一个文件可以看作由顺序编号的物理块组成的,这些块常常划成等长,作为定位和存取的一个最小单位,如一块为1024字节、4096字节,视系统和应用而定。于是用户可以请求读块22、然后,写块48,再读块9等等。直接存取文件对读或写块的次序没有限制。用户提供给操作系统的是相对块号,它是相对于文件开始位置的一个位移量,而绝对块号则由系统换算得到。

3.3. 索引存取

第三种类型的存取是基于索引文件的索引存取方法。由于文件中的记录不按它在文件中的位置,而按它的记录键来编址,所以,用户提供给操作系统记录键后就可查找到所需记录。

通常记录按记录键的某种顺序存放,例如,按代表健的字母先后次序来排序。对于这种文件,除可采用按键存取外,也可以采用顺序存取或直接存取的方法。信息块的地址都可以通过查找记录键而换算出。实际的系统中,大都采用多级索引,以加速记录查找过程。

4. 几种常见的文件物理结构

几种常见的文件物理结构:

顺序文件(也叫串联文件,连续文件)、链接文件、索引文件、HASH文件、索引顺序文件。5. 顺序文件

是指文件中的物理记录按其在文件中的逻辑记录顺序依次存入存储介质而建立的。即顺序文件中物理记录的顺序和逻辑记录的顺序是一致的。

顺序文件在存储介质中可以有两种不同的实现结构:连续结构和链结构。

连续结构:是一种最简单的物理文件结构,它把逻辑上连续的文件信息依次存放在连续编号的物理块中。即次序相继的两个物理记录在存储介质上的位置是相邻的。也称为连续文件;

图5.19给出了连续结构文件的图形说明。在图中,一个逻辑块号为0、1、2、3的文件依次存放在物理块15、16、17、18中。

5.19连续结构文件的示意图件

连续文件结构的优点是一旦知道了文件在文件存储设备上的起始地址(首块号)和文图5.19连续结构文件的示意图件长度(总块数),就能很快地进行存取。但是连续结构文件在建立文件时必须在文件说明信息中确定文件信息长度,且以后不能动态增长;而且在文件进行某些部分的删除后,又会留下无法使用的零头空间。因此,连续结构不宜用来存放用户文件、数据库文件等经常被修改的文件。

连续结构的优点是:

(1)结构简单;

(2)顺序访问速度快,对于等长记录的连续文件可以进行顺序存取,也可以进行类似折半查找的随机存取,但是对于不等长记录的连续文件只能进行顺序存取;

(3)因为数据集中存放在连续的盘块中,访问时所需的寻道次数和寻道时间少。

连续结构存储的缺点:

(1)由于插入和删除记录会引起其它记录的移动,在外存中执行此操作会引起磁头的频繁来回移动,因此连续结构只能在文件的末尾插入记录,删除记录时,只作标记进行逻辑删除,只有用户指定物理删除时才真正删除相应记录,进行记录的移动;

(2)顺序文件需要连续的盘块存放数据,因此,在插入记录时如果原来分配的盘块已没有空闲空间,而与其邻接的盘块也不空闲时,需要重新在外存中查找新的较大的空闲空间,并将原有数据移动到新空间中,然后才能插入新的数据,因此,连续结构不易动态增长,而且外存容易存在碎片。

链结构将逻辑上连续的文件信息分散存放在若干不连续的物理块中,其中每个物理块设有一个指针,指向其后续连接的另一个物理块。即物理记录的次序由指针相链表示。也称串联文件

图5.20给出了链结构文件的物理结构。使用链结构时,不必在文件说明信息中指明文件的长度,只要指明该文件的第一个块号就可以按链指针检索整个文件。链结构的另一个特点是文件长度可以动态地增长,只要调整链指针就可在任何一个信息块之间插入或删除一个信息块。

图5.20链结构文件的示意图

文件采用链结构时,逻辑块到物理块的转换由系统沿链查找与逻辑块号对应的物理块号的办法完成。例如,在图5.20的文件结构中,如果用户所要进行操作的逻辑块号为2,则系统从第一个物理块20开始,一直沿链搜索到逻辑块号为2的第三块时,得到其所对应的物理块号为22。因此,链结构不适宜随机存取访问。

链结构主要优点是:

(1)提高了磁盘空间利用率,解决了磁盘碎片问题;

(2)便于文件的插入和删除操作;

(3)便于文件的动态增长。

从本质上讲,顺序文件就是线性表,因而对顺序文件的各种操作与线性表类似,但是,外存的访问速度比主存要慢的多,在考虑算法时要立足于尽量减少外存的访问次数,寻道次数和寻道时间。

磁带是典型的顺序存取设备,因此存储在磁带上的文件只能顺序文件。

6. 索引文件

1.索引文件

建立一张逻辑记录和物理记录之间对应关系的索引表。这类包括数据去和索引表两大部分的文件称做索引文件。

2.索引表组成

索引表由若干索引项组成。一般索引项由主关键字和该关键字所在记录的物理地址组成。如图6.1(b)。

注意:索引表必须按主关键字有序,而主文件本身则可以按主关键字有序或无序。

3.索引顺序文件和索引非顺序文件

(1)索引顺序文件(Indexed Sequential File):主文件按主关键字有序的文件称索引顺序文件。

在索引顺序文件中,可对一组记录建立一个索引项。这种索引表称为稀疏索引。

(2)索引非顺序文件(Indexed NonSequentail File):主文件按主关键字无序得文件称索引非顺序文件。

在索引非顺序文件中,必须为每个记录建立一个索引项,这样建立的索引表称为稠密索引。

注意:

①通常将索引非顺序文件简称为索引文件。

②索引非顺序文件主文件无序,顺序存取将会频繁地引起磁头移动,适合于随机存取,不适合于顺序存取。

③索引顺序文件的主文件是有序的,适合于随机存取、顺序存取。

④索引顺序文件的索引是稀疏索引。索引占用空间较少,是最常用的一种文件组织。

⑤最常用的索引顺序文件:ISAM文件和VSAM文件。

4. 索引文件操作:

1). 检索方式为:直接存取和按关键字存取。“检索”将分两步进行:先查索引表,利用折半查找法去检索索引表,然后根据索引中指针所指记录(索引项指示的外存物理地址)读取外存记录。

注意:①索引表不大时,索引表可一次读入内存,在索引文件中检索只需两次访问外存:一次读索引,一次读记录。

②由于索引表有序,对索引表的查找可用顺序查找或二分查找等方法。

2).插入记录时,“记录”插入在主文件的末尾,而相应的“索引项”必须插入在索引的合适位置上。因此,最好在建索引表时留有一定“空位”。

3).删除记录时,仅需删除索引表中相应的索引项即可。

4).更新记录时,应将更新后的记录插入在主文件的末尾,同时修改相应的索引项。

图6.1 (a)主文件(数据区)(b)索引表c(输入过程中建立的索引表)

5. 利用查找表建立多级索引

1)查找表:

对索引表建立的索引,称为查找表。查找表的建立可以为占据多个页块的索引表的查阅减少外存访问次数。

图6.1 (b)的索引表占用了三个页块的外存,每个页块能容纳三个索引项,则可为图6.2所示。检

索记录时,先查找查找表,再查索引表,然后读取记录,三次访问外存即可。

图6.2 图6.1(b)索引表的索引,

2)多级索引

当查找表中项目仍很多,可建立更高一级的索引。通常最高可达四级索引:

数据文件一索引表一查找表一第二查找表一第三查找表。

【例】检索过程从最高一级索引--第三查找表开始,需要5次访问外存。:

注意:

①多级索引是一种静态索引

②多级索引的各级索引均为顺序表,结构简单,修改很不方便,每次修改都要重组索引。

3)动态索引

当数据文件在使用过程中记录变动较多时,利用二叉排序树(或AVL树)、B-树(或其变型)等树表结构建立的索引,为动态索引。

(1)树表特点

①插入、删除方便

②本身是层次结构,无须建立多级索引

③建立索引表的过程即为排序过程。

(2)树表结构选择

①当数据文件的记录数不很多,内存容量足以容纳整个索引表时,可采用二叉排序树(或AVL树)作索引;

②当文件很大时,索引表(树表)本身也在外存,查找索引时访问外存的次数恰为查找路径上的结点数。采用m阶B-树(或其变型)作为索引表为宜(m的选择取决于索引项的多少和缓冲区的大小)。(3)外存的索引表的查找性能评价

由于访问外存的时间比内存中查找的时间大得多,所以外存的索引表的查找性能主要着眼于访问外存的次数,即索引表的深度。

优缺点:

索引结构是链式结构的一种扩展,除了具备链式结构的优点外,还克服了它只能作顺序存取的缺点,具有直接读写任意一个记录的能力,便于文件记录的插入、删除、修改。

索引文件的缺点是:增加了索引表的空间开销和查找时间,索引表的信息量甚至可能远远超过文件记录本身的信息量。

有两种典型的索引顺序文件:

一、ISAM文件:ISAM(IndexSequential Access Method)(索引顺序存取方法)是一种专为磁盘存取设计的文件组织方法。

二、VSAM文件:VSAM(Vistual Storage Access Method)文件是利用操作系统中提供的虚拟存储器的功能组织的文件,免除了用户为读/写记录时直接对外存进行的操作,对用户而言,文件只有控制区间和控制区域等逻辑存储单位。

7. ISAM文件和VSAM文件

7.1 ISAM文件

1. ISAM文件组成

ISAM为Indexed Sequential Access Method(索引顺序存取方法)的缩写,它是一种专为磁盘存取文件设计的

文件组织方式,采用静态索引结构。

由于磁盘是以盘组、柱面和磁道三级地址存取的设备,所以可对磁盘上的数据文件建立盘组、柱面和磁道三级索引。

1)磁道索引

磁道索引中的每一个索引项,都由两个子索引项组成:基本索引和溢出索引项,每一子索引项又由关键字和指针两项组成。

基本索引项关键字记录该磁道中最大(最末一个记录)的关键字,指针记录该磁道中第一记录的位置;

溢出索引项记录该磁道中溢出的记录的最键字,指针记录溢出区中的第一个记录。

2)柱面索引

柱面索引每一索引项由关键字和指针两项组成,关键字记录该柱面中最大(最末一个记录)的关键字,指针记录该柱面中磁道索引的位置。

3)主索引

柱面索引存放在某个柱面上,如果柱面索引过大,占多个磁道时,则建立柱面索引的索引—主索引。

因此,ISAM文件由多级主索引、柱面索引、磁道索引和主文件组成。文件存放记录时遵循下面原则:

记录在同一盘组上存放时,应先集中放在一个柱面上,然后再顺序存放在相邻的柱面上;对同一柱面,则应按盘面的次序顺序存放。

各种索引项结构如图7.1所示:

->->

图7.1

图7.2 为一ISAM文件结构示意图,从图中可看出,主索引是柱面索引的索引,这里只有一级主索引。

7.2 VSAM文件示意图

当文件占用的柱面索引很大,使得一级主索引也很大时,可采用多级主索引。当然,若柱面索引较小时,则主索引可省略。通常主索引和柱面索引放在同一个柱面上(图7.2是放在0号柱面上),主索引放在该柱面最前面的一个磁道上(图7.2中

放在0柱面0磁道上),其后的磁道中存放柱面索引。每个存放主文件的柱面都建立有一个磁道索引,放在该柱面的最前面的磁道T0上,其后的若干个磁道是存放主文件记录的基本区,该柱面最后的若干个磁道是溢出区。基本区中的记录是按主关键字大小顺序存储的,溢出区被整个柱面上的基本区中各磁道共享,当基本区中某磁道溢出时,就将该磁道的溢出记录,按主关键字大小链成一个链表(溢出链表)放入溢出区。

2. ISAM文件的检索

在ISAM文件上检索记录时,过程如下:

1)从主索引出发,找到相应的柱面索引;

2)从柱面索引找到记录所在柱面的磁道索引;

3)从磁道索引找到记录所在磁道的起始地址,由此出发在该磁道上进行顺序查找,直到找到为止。

若找遍该磁道均不存在此记录,则表明该文件中无此记录;若被查找的记录在溢出区,则可从磁道索引项的溢出索引项中得到溢出链表的头

指针,然后对该表进行顺序查找。

例如,要在图7.2中查找记录R136,先查主索引,即读入C0T0;因为136<286,则查找柱面索引的C0T1,即读人C0T1;因为136<145,所以进一步把C1T0读入内存;查磁道索引,因为90<136<145,所以C1T2即为R136所存放的磁道,读人C1T2后即可查得R136。

为了提高检索效率,通常可让主索引常驻内存,并将柱面索引放在数据文件所占空间居中位置的柱面上,这样,从柱面索引查找到磁道索引时,磁头移动距离的平均值最小。

3.ISAM文件的插入操作

当插人新记录时,首先找到它应插入的磁道,若该磁道不满,则将新记录插入该磁道的适当位置上即可;若该磁道已满,则新记录或者插在该磁道上,或者直接插入到该磁道的溢出链表上。插入后,可能要修改磁道索引中的基本索引项和溢出索引项。

(1)插入R65,首先将1柱面1磁道中大于65的记录顺次后移,导致R90溢出至溢出区T11’0(11磁道0块中),造成磁道T1中最大关键字成为R80,修改磁道索引,将基本项中最大关键字90修改为80,将溢出项中最大关键字改为90,指针指向T11’0(溢出链表头在11磁道0块中),然后在相应位置插入

R65。

例如,在图7.2中依次插入R65 R95和R83。

(2)插入R95,使得T2中的R145溢出至溢出区T11’1,修改相应磁道索引。(3)插入R83,因为

80<83<90,则83直接插入溢出区T11’2中,其指针指向T11’0,并修改磁道1的溢出链表,使得表头指向T11’2。插入完成后的结果如图7.3所示。

图7.3 VSAM

4. ISAM文件的删除操作

ISAM文件中删除记录的操作,比插入简单得多,只要找到待删除的记录,在其存储位置上作删除标记即可,而不需要移动记录或改变指针。在经过多次的增删后,文件的结构可能变得很不合理。此时,

大量的记录进入溢出区,而基本区中又浪费很多的空间。因此,通常需要周期性地整理ISAM文件,把记录读入内存重新排列,复制成一个新的ISAM文件,填满基本区而空出溢出区。

7.2 VSAM文件

VSAM是Virtual Storage Access Method(虚拟存储存取方法)的缩写,它也是一种索引顺序文件的组

织方式,采用B+树作为动态索引结构。这种文件组织方式利用了操作系统中提供的虚拟存储器的功能,用户读/写记录时不必再考虑外存储器中的柱面、磁道等具体存储信息,文件只有控制区间和控制区域等逻辑存储单位,这种存储方式可以在一个磁道中放个控制区间,也可以一个控制区间跨个磁道。

1. VSAM文件结构

VSAM文件的结构由三部分组成:索引集顺序集数据集

图7.4

2.VSAM文件中控制区间的结构

在VSAM文件中,记录可以是定长的也可以是不定长的。因而在控制区间中,除了存放记录本身之外,还有每个记录的控制信息(如记录的长度等)和整个区间的控制信息(如区间中存放的记录数等),控制区间的结构如图7.5所示。在控制区间上存取一个记录是需从控制区间的两端出发同时向中间扫描。

图7.5 VSAM文件控制区间结构图

3.VSAM文件的插入

VSAM文件中没有溢出区,解决插入的方法是在初建文件时留出空间:一是每个控制区间内不填满记录,在最末一个记录和控制信息之间留有空隙;二是在每个控制区域中有一些完全空的控制区间,并在顺序集的索引中指明这些空区间。当插入新记录时,大多数的新记录能插入到相应的控制区间内,但要注意:为了保持区间内记录的关键字从小至大有序,则需将区间内关键字大于插入记录关键字的记录,向控制信息的方向移动。

若在若干记录插入之后控制区间已满,则在下一个记录插入时,要进行控制区间的分裂,即把近乎一半的记录移到同一控制区域内全空的控制区间中,并修改顺序集中相应索引。倘若控制区域中已经没有全空的控制区间,则要进行控制区域的分裂,此时顺序集中的结点亦要分裂,由此需要修改索引集中的结点信息。但由于控制区域较大,通常很少发生分裂的情况。

4. VSAM文件的删除

在VSAM文件中删除记录时,需将同一控制区间中,比删除记录关键字大的记录向前移动,把空间留给以后插人的新记录。若整个控制区间变空,则回收用作空闲区间,且需删除顺序集中相应的索引项。

5. VSAM文件的优点

和ISAM文件相比,基于B+树的VSAM文件有如下优点:能保持较高的查找效率,查找一个后插入记录和查找一个原有记录具有相同的速度;动态地分配和释放存储空间,可以保持平均75%的存储利用率;而且永远不必对文件进行再组织。因而基于B+树的VSAM文件,通常被作为大型索引顺序文件的标准组织。

8. Hash(直接文件)文件

1. Hash文件

哈希(Hash)文件又称散列文件或者直接存取文件,是利用哈希函数法组织的文件,它类似于哈希表,即根据文件记录的关键字的特点,设计一种哈希函数和处理冲突的方法,从而将记录散列到外存储器上。由于哈希文件中通过计算来确定一个记录在存储设备上的存储位置,因而逻辑顺序的记录在物理地址上是不相邻的,因此哈希文件不宜使用磁带存储,只适宜使用磁盘存储;并且哈希文件这种结构只适用于定长记录文件和按主键随机查找的访问方式。

哈希文件的组织方法与哈希表的组织方法相比有一点不同。对于哈希文件来说,磁盘上的文件记录通常是成组存放的,若干个记录组成一个称为桶的存储单位。假若一个桶能存放m个记录,即m个哈希函数值相同的记录可以存放在同一个桶中,而当第m+1个哈希函数值相同的记录出现时才发生冲突。

2. 链地址法解决冲突的方法是

哈希文件中处理冲突的方法也可采用哈希表中处理冲突的各种方法,但链地址法是哈希文件处理冲突的首选方法。

当某个桶中的哈希函数值相同的记录超过m个时,便产生“溢出”,此时会动态生成一个桶以存放那些溢出的哈希函数值相同的记录。通常把存放前m个哈希函数值相同的记录的桶称为基桶,把存放溢出记录的桶称为溢出桶。基桶和溢出桶的结构相同,均为m个记录的数组加一个桶地址指针。

当某个基桶未溢出时,基桶中的指针为空;当基桶溢出时,动态生成一个溢出桶存放溢出记录,基桶中的指针置为指向该溢出桶;若溢出桶中的哈希函数值相同的记录再溢出时,再动态生成第二个溢出桶存放溢出记录,第一个溢出桶中的指针置为指向第二个溢出桶。这样就构成了一个链

图8.1 hash文件。

例如,假定某个文件有20个记录,其关键字集合为{2,23,5,26,1,3,24,18,27,12,7,9,4,19,6,16,33,11,10,13}。桶的容量=3,桶

数=7,用除留余数法作哈希函数H(key)=key%7,其对应的哈希文件如图8.1所示。

3.在哈希文件中查找记录

首先根据待查记录的关键字值求得哈希地址(即基桶地址),将基桶的记录读入内存进行顺序查找,若找到某记录的关键字等于待查记录的关键字,则查找成功;若基桶内无待查记录且基桶内指针为空,则文件中没有待查记录,查找失败;若基桶内无待查记录且基桶内指针不空,则将溢出桶中的记录读入内存进行顺序查找,若在某个溢出桶中查找到待查记录,则查找成功;若所有溢出桶链内均未查找到待查记录,则查找失败。

4.哈希文件中删去一个记录

仅需对被删记录作删除标记即可。

6.哈希文件的优点是:

(1)文件随机存放,记录不需进行排序;

(2)插入、删除方便;

(3)存取速度快;

(4)不需要索引区,节省存储空间。

7.哈希文件的缺点是:

(1)不能进行顺序存取,只能按关键字随机存取;

(2)询问方式限于简单询问;

(3)在经过多次插入、删除后,可能造成文件结构不合理,需要重新组织文件。

9. 多重文件

1.多重表文件

多重表文件是一种将索引方法和链接方法相结合的组织方式,他对主关键字建立主索引,对每个需要查询的次关键字均建立一个索引,同时将具有相同次关键字的记录链接成一个链表,并将此链表的头指针、链表长度及次关键字,作为索引表的一个索引项。通常多重表文件的主文件是一个顺序文件。如图:

2. 倒排文件

倒排文件和多重表文件构造相似,主要区别在于在次关键字索引中,具有相同次关键字的记录之间

不设指针进行链接,而是在倒排表中列出具有该次关键字记录的所有物理记录号。倒排文件中的次关键字索引称做倒排表。倒排表和主文件一起就构成了倒排文件。上例文件中的倒排表如图9.2所示。

图9.2 倒排表

3. 倒排文件的应用

倒排文件应用非常广泛,例如在WEB或者其它文本搜索引擎的设计中,在搜索引擎收集完数据进行预处理时,搜索

引擎往往需要一种高效的数据结构来对外提供检索服务,而现行最有效的数据结构就是倒排文件,他是搜索引擎的核心内容之一。

操作系统模拟文件管理

操作系统课程设计报告 模拟文件管理 目) 院系:计算机科学技术学院计算机科学与技术系班级:计07--2 班 姓名:刘德庆 学号:12 指导教师:鲁静轩 2009 年6 月15 日

操作系统课程设计任务书 一、设计题目:模拟文件管理 二、设计目的 《操作系统原理》课程设计是软件工程专业实践性环节之一,是学习完《操作系统原理》课程后进行的一次较全面的综合练习。其目的在于加深对操作系统的理论、方法和基础知识的理解,掌握操作系统结构、实现机理和各种典型算法,系统地了解操作系统的设计和实现思路,培养学生的系统设计能力,并了解操作系统的发展动向和趋势。 三、设计要求 (1)选择课程设计题目中的一个课题,合作完成。 (2)良好的沟通和合作能力 (3)充分运用前序课所学的软件工程、程序设计等相关知识 (4)充分运用调试和排错技术 (5)简单测试驱动模块和桩模块的编写 (6)查阅相关资料,自学具体课题中涉及到的新知识。 (7)课题完成后必须按要求提交课程设计报告,格式规范,内容详实 四、设计内容及步骤 1.根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么。 2.根据实现的功能,划分出合理的模块,明确模块间的关系。 3.编程实现所设计的模块。 4.程序调试与测试。采用自底向上,分模块进行,即先调试低层函数。能够熟练掌握调试工具的各种功能,设计测试数据确定疑点,通过修改程序来证实它或绕过它。调试正确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果; 5.结果分析。程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。

6.编写课程设计报告; 设计报告要求:A4纸,详细设计部分主要叙述本人的工作内容 五、课程设计工作计划 设计在学期的第15、16周进行,时间安排如下: 序号内容时间(天) 1 预习、讲课 1 2 设计 3 3 编码、测试 5 4 验收 1 合计10 。 六、成绩评定办法 成绩分为优(A)、良(B)、中(C)、及格(D)、不及格(E)五个等级。其中设计表现占30%,验收40%,设计报告占30%。 1.设计表现:教师可依据学生使用实验环境的能力、观察和分析实验现象的能力、实验结果和数据的正确性以及学生的课堂纪律、实验态度、保持实验室卫生等方面的表现进行综合考核。 2.验收:要求学生演示设计的程序,讲解设计思路、方法、解决的主要问题,教师根据具体情况向每个学生提问2至3个问题。 3.设计报告:学生设计后应按时完成设计报告。要求:内容充实、写作规范、项目填写正确完整、书面整洁等。

操作系统文件管理实验报告

操作系统实验报告实验名称:文件管理 专业班级:网络工程1301 学号: 姓名: 2015 年6 月16 日

实验一文件管理 一、实验目的 文件管理是操作系统的一个非常重要的组成部分。学生应独立用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质容和执行过程有比较深入的了解,掌握它们的实施方法,加深理解课堂上讲授过的知识。 二、预备知识 1.VS2010的使用 2.C#的学习 3.文件主目录与子目录的理解 三、实验容与步骤 用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。要求设计一个10 个用户的文件系统,每次用户可保存10 个文件,一次运行用户可以打开5 个文件。系统能够检查打入命令的正确性,出错时能显示出错原因。对文件必须设置保护措施,例如只能执行,允许读等。在每次打开文件时,根据本次打开的要求,在此设置保护级别,即有二级保护。文件的操作至少有Create、delete、open、close、read、write 等命令。 所编写的程序应采用二级文件目录,即设置主文件目录和用户文件目录。前者应包含文件主及它们的目录区指针;后者应给出每个文件占有的文件目录,即文件名,保护码,文件长度以及它们存放的位置等。另外为打开文件设置运行文件目录(AFD),在文件打开时应填入打开文件号,本次打开保护码和读写指针等。 程序流程图:

逻辑设计: 使用线性数组表表示MFD,泛型数组表示UFD,每个元素包括用户ID、保存的文件数、再使用线性表表示文件信息,每个元素包括文件名,文件属性(保护码),文件的状态等信息。 物理设计: //主目录 private FileUser[] mfd; //当前用户 private FileUser currentuser; ///

/// 文件 /// public class FileObject { public string filename; public int size=20; public int read=0; public int write = 0; public string author; } /// /// 文件系统用户 /// public class FileUser { public string username;

操作系统文件管理系统模拟实验

文件管理系统模拟 1.实验目的 通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现 2.实验内容 为Linux系统设计一个简单的二级文件系统。要求做到以下几点: (1)可以实现下列几条命令(至少4条) login 用户登录 dir 列文件目录 create 创建文件 delete 删除文件 open 打开文件 close 关闭文件 read 读文件 write 写文件 (2)列目录时要列出文件名、物理地址、保护码和文件长度; (3)源文件可以进行读写保护。 3.实验提示 (1)首先应确定文件系统的数据结构:主目录、子目录及活动文件等。主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。 (2)用户创建的文件,可以编号存储于磁盘上。入file0,file1,file2…并以编号作为物理地址,在目录中进行登记。 4.源代码 #include #include #include #define MEM_D_SIZE 1024*1024 //总磁盘空间为1M #define DISKSIZE 1024 //磁盘块的大小1K #define DISK_NUM 1024 //磁盘块数目1K #define FATSIZE DISK_NUM*sizeof(struct fatitem) //FAT 表大小

#define ROOT_DISK_NO FATSIZE/DISKSIZE+1 //根目录起始盘块号 #define ROOT_DISK_SIZE sizeof(struct direct) //根目录大小#define DIR_MAXSIZE 1024 //路径最大长度为1KB #define MSD 5 //最大子目录数5 #define MOFN 5 //最大文件深度为5 #define MAX_WRITE 1024*128 //最大写入文字长度128KB struct fatitem /* size 8*/ { int item; /*存放文件下一个磁盘的指针*/ char em_disk; /*磁盘块是否空闲标志位0 空闲*/ }; struct direct { /*-----文件控制快信息-----*/ struct FCB { char name[9]; /*文件/目录名8位*/ char property; /*属性1位目录0位普通文件*/ int size; /*文件/目录字节数、盘块数)*/ int firstdisk; /*文件/目录起始盘块号*/ int next; /*子目录起始盘块号*/ int sign; /*1是根目录0不是根目录*/ }directitem[MSD+2]; }; struct opentable { struct openttableitem { char name[9]; /*文件名*/ int firstdisk; /*起始盘块号*/ int size; /*文件的大小*/ }openitem[MOFN]; int cur_size; /*当前打文件的数目*/ }; struct fatitem *fat; /*FAT表*/ struct direct *root; /*根目录*/ struct direct *cur_dir; /*当前目录*/ struct opentable u_opentable; /*文件打开表*/ int fd=-1; /*文件打开表的

操作系统文件管理练习和答案

文件管理练习题 (一)单项选择题 1.操作系统对文件实行统一管理,最基本的是为用户提供( )功能。A.按名存取 B.文件共享 C.文件保护 D.提高文件的存取速度 2.按文件用途分类,编译程序是( )。 A.系统文件 B.库文件 C.用户文件 D.档案文件 3.( )是指将信息加工形成具有保留价值的文件。 A.库文件 B.档案文件 C.系统文件 D.临时文件 4.把一个文件保存在多个卷上称为( )。 A.单文件卷 B.多文件卷 C.多卷文件 D.多卷多文件 5.采取哪种文件存取方式,主要取决于( )。 A.用户的使用要求 B.存储介质的特性C.用户的使用要求和存储介质的特性 D.文件的逻辑结构 6.文件系统的按名存取主要是通过( )实现的。 A.存储空间管理 B.目录管理 C.文件安全性管理 D.文件读写管理 7.文件管理实际上是对( )的管理。 A.主存空间 B.辅助存储空间 C.逻辑地址空间D.物理地址空间 8.如果文件系统中有两个文件重名,不应采用( )结构。 A.一级目录 B.二级目录C.树形目录 D.一级目录和二级目录 9.树形目录中的主文件目录称为( )。 A.父目录 B.子目录 C.根目录 D.用户文件目录 10.绝对路径是从( )开始跟随的一条指向制定文件的路径。 A.用户文件目录 B.根目录C.当前目录 D.父目录 11.逻辑文件可分为流式文件和( )两类。A.索引文件 B.链接文件 C.记录式文件 D.只读文件 12.由一串信息组成,文件内信息不再划分可独立的单位,这是指( )。A.流式文件 B.记录式文件 C.连续文件 D.串联文件 13.记录式文件内可以独立存取的最小单位是由( )组成的。A.字 B.字节 C.数据项D.物理块 14.在随机存储方式中,用户以( )为单位对文件进行存取和检索。 A.字符串 B.数据项C.字节 D.逻辑记录 15.数据库文件的逻辑结构形式是( )。A.链接文件 B.流式文件 C.记录式文件 D.只读文件 16.文件的逻辑记录的大小是( )。 A.恒定的 B.相同的 C.不相同的 D.可相同也可不同 17.能用来唯一标识某个逻辑记录的数据项为记录的( )。 A.主键 B.次键 C.索引D.指针 18.在文件系统中,( )要求逻辑记录顺序与磁盘块顺序一致。A.顺序文件 B.链接文件 C.索引文件 D.串联文件 19.下列文件中,( )的物理结构不便于文件的扩充。A.顺序文件 B.链接文件 C.索引文件 D.多级索引文件 20.( )的物理结构对文件随机存取时必须按指针进行,效率较低。 A.连续文件 B.链接文件 C.索引文件 D.多级索引文件 2l.链接文件解决了顺序结构中存在的问题,它( )。 A.提高了存储空间的利用率 B.适合于随机存取方式 C不适用于顺序存取 D.指针存入主存,速度快

操作系统文件管理_答案

第六部分文件管理 1、文件系统的主要目的就是( )。 A、实现对文件的按名存取 B、实现虚拟存储 C、提供外存的读写速度 D、用于存储系统文件 2、文件系统就是指( )。 A、文件的集合 B、文件的目录集合 C、实现文件管理的一组软件 D、文件、管理文件的软件及数据结构的总体 3、文件管理实际上就是管理( )。 A、主存空间 B、辅助存储空间 C、逻辑地址空间 D、物理地址空间 4、下列文件的物理结构中,不利于文件长度动态增长的文件物理结构就是( )。 A、顺序文件 B、链接文件 C、索引文件 D、系统文件 5、下列描述不就是文件系统功能的就是( )。 A、建立文件目录 B、提供一组文件操作 C、实现对磁盘的驱动调度 D、实现从逻辑文件到物理文件间的转换 6、文件系统在创建一个文件时,为它建立一个( )。 A、文件目录 B、目录文件 C、逻辑结构 D、逻辑空间 7、索引式(随机)文件组织的一个主要优点就是( )。 A、不需要链接指针 B、能实现物理块的动态分配 C、回收实现比较简单 D、用户存取方便 8、面向用户的文件组织机构属于( )。 A、虚拟结构 B、实际结构 C、逻辑结构 D、物理结构 9、按文件用途来分,编译程序就是( )。 A、用户文件 B、档案文件 C、系统文件 D、库文件 10、将信息加工形成具有保留价值的文件就是( )。 A、库文件 B、档案文件 C、系统文件 D、临时文件 11、文件目录的主要作用就是( )。 A、按名存取 B、提高速度 C、节省空间 D、提高外存利用率 12、如果文件系统中有两个文件重名,不应采用( )。 A、一级目录结构 B、树型目录结构 C、二级目录结构 D、A与C 13、文件系统采用树型目录结构后,对于不同用户的文件,其文件名( )。 A、应该相同 B、应该不同 C、可以不同,也可以相同 D、受系统约束 14、文件系统采用二级文件目录可以( )。 A、缩短访问存储器的时间 B、实现文件共享 C、节省内存空间 D、解决不同用户间的文件命名冲突

模拟一个简单二级文件管理系统

模拟一个简单二级文件管理系统 设计目的:通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。 设计内容:模拟一个简单二级文件管理系统 一、实验内容描述 1 实验目标 本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现. 2 实验要求 为DOS系统设计一个简单的二级文件系统.要求做到以下几点: ①可以实现下列命令: login 用户登录 dir 列文件目录 create 创建文件 delete 删除文件 open 打开文件 close 关闭文件 read 读文件 write 写文件 ②列目录时要列出文件名、物理地址、保护码和文件长度. ③源文件可以进行读写保护. 二、程序主要内容 1设计思路 程序中要求每个用户在登陆后才可对其拥有的文件进行操作,用户对于其他用户的文件无操作权.文件操作包括浏览、创建、删除、打开、关闭、阅读、写入、修改模式.其他操作包括新建用户、帮助、用户登入、用户登出、退出系统. 在程序文件夹下有个名为“file”的系统根目录,此目录下包括:一个名为“mfd”的文件,记录所有注册过的帐号及密码;用户文件,以用户名作为文件名,内容为其拥有的文件名及属性;一个名为“keiji”的文件夹.“keiji”文件夹中包括:“”指针文件,记录所有已用的物理地址;一些以物理地址为名的文件,内容为文件内容. 2 数据结构 file结构体系统文件数据结构: fpaddrint,文件的物理地址、flengthint,文件长度、fmodeint,文件模式 0.只读;1.可写;2.可读写;3.保护、 fname[]char,文件名; filemode结构体文件状态数据结构: isopenint,文件当前状态,0.关闭;1.打开、modeint,文件模式 0.只读;1.可写;2.可

操作系统文件管理

操作系统文件管理 博文很长,我把一章的内容都总结在这里了。 在现代计算机系统中,要用到大量的程序和数据,因内存容量有限,且不能长期保存,故而平时总是把它们以文件的形式存放在外存中,需要时再随时将它们调入内存。如果由用户直接管理外存上的文件,不仅要求用户熟悉外存特性,了解各种文件的属性,以及它们在外存上的位置,而且在多用户环境下,还必须能保持数据的安全性和一致性。显然,这是用户所不能胜任、也不愿意承担的工作。于是,取而代之的便是在操作系统中又增加了文件管理功能,即构成一个文件系统,负责管理在外存上的文件,并把对文件的存取、共享和保护等手段提供给用户。这不仅方便了用户,保证了文件的安全性,还可有效地提高系统资源的利用率。 1. 有关文件的概念 文件: 具有符号名(文件名)的一组相关元素的有序序列,是一段程序或数据的集合。 文件系统: 是操作系统中统一管理信息资源的一种软件,管理文件的存储、检索、更新,提供安全可靠的共享和保护手段,并且方便用户使用。 文件系统包含文件管理程序(文件与目录的集合)和所管理的全部文件,是用户与外存的接口,系统软件为用户提供统一方法(以数据记录的逻辑单位),访问存储在物理介质上的信息。 有关直接(随机)存取设备的磁盘知识:硬盘的读写原理和磁盘碎片的产生 2. 文件的分类 按性质和用途分类:系统文件、库文件、用户文件。 系统文件:由系统软件构成的文件,只允许用户通过系统调用或系统提供的专用命今来执行它们,不允许对其进行读写和修改。主要有操作系统核心和各种系统应用程序或实用工具程序和数据组成库文件:文件允许用户对其进行读取和执行,但不允许对其进行修改。主要由各种标准子程序库组成 用户文件:是用户通过操作系统保存的用户文件,由文件的所有者或所有者授权的用户才能使

计算机操作系统实验-文件管理

哈尔滨工业大学计算机科学与技术学院 实验报告 课程名称:操作系统 课程类型:必修 实验项目名称:文件管理 实验题目:设计一个多用户的文件系统 班级:实验学院一班 学号:6040310110 姓名:张元竞 设计成绩报告成绩指导老师

一、实验目的 随着社会信息量的极大增长,要求计算机处理的信息与日俱增,涉及到社会生活的各个方面。因此,文件管理是操作系统的一个非常重要的组成部分。学生应独立用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解,掌握它们的实施方法,加深理解课堂上讲授过的知识。 二、实验要求及实验环境 用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。要求设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。系统能够检查打入命令的正确性,出错时能显示出错原因。对文件必须设置保护措施,例如只能执行,允许读等。在每次打开文件时,根据本次打开的要求,在此设置保护级别,即有二级保护。文件的操作至少有Create、delete、open、close、read、write等命令。 所编写的程序应采用二级文件目录,即设置主文件目录和用户文件目录。前者应包含文件主及它们的目录区指针;后者应给出每个文件占有的文件目录,即文件名,保护码,文件长度以及它们存放的位置等。另外为打开文件设置运行文件目录(AFD),在文件打开时应填入打开文件号,本次打开保护码和读写指针等。 三、设计思想(本程序中的用到的所有数据类型的定义,主程序的流程图及各程序模块之间的调用关系)

操作系统精髓与设计原理-第12章-文件管理

第12章文件管理 复习题: 12.1、域和记录有什么不同? 答:域(field)是基本数据单位。一个域包含一个值。记录(record)是一组相关的域的集合,它可以看做是应用程序的一个单元。 12.2、文件和数据库有什么不同? 答:文件(file)是一组相似记录的集合,它被用户和应用程序看做是一个实体,并可以通过名字访问。数据库(database)是一组相关的数据集合,它的本质 特征是数据元素间存在着明确的关系,并且可供不同的应用程序使用。 12.3、什么是文件管理系统? 答:文件管理系统是一组系统软件,为使用文件的用户和应用程序提供服务。12.4、选择文件组织时的重要原则是什么? 答:访问快速,易于修改,节约存储空间,维护简单,可靠性。 12.5、列出并简单定义五种文件组织。 答:堆是最简单的文件组织形式。数据按它们到达的顺序被采集,每个记录由一串数据组成。顺序文件是最常用的文件组织形式。在这类文件中,每个记录 都使用一种固定的格式。所有记录都具有相同的长度,并且由相同数目、长度 固定的域按特定的顺序组成。由于每个域的长度和位置已知,因此只需要保存 各个域的值,每个域的域名和长度是该文件结构的属性。索引顺序文件保留 了顺序文件的关键特征:记录按照关键域的顺序组织起来。但它还增加了两个 特征:用于支持随机访问的文件索引和溢出文件。索引提供了快速接近目标记 录的查找能力。溢出文件类似于顺序文件中使用的日志文件,但是溢出文件中 的记录可以根据它前面记录的指针进行定位。索引文件:只能通过索引来访 问记录。其结果是对记录的放置位置不再有限制,只要至少有一个索引的指针 指向这条记录即可。此外,还可以使用长度可变的记录。直接文件或散列 文件:直接文件使用基于关键字的散列。 12.6、为什么在索引顺序文件中查找一个记录的平均搜索时间小于在顺序文件中的平均 搜索时间? 答:在顺序文件中,查找一个记录是按顺序检测每一个记录直到有一个包含符合条件的关键域值的记录被找到。索引顺序文件提供一个执行最小穷举搜索的索引 结构。 12.7、对目录执行的典型操作有哪些? 答:搜索,创建文件,删除文件,显示目录,修改目录。 12.8、路径名和工作目录有什么关系? 答:路径名是由一系列从根目录或主目录向下到各个分支,最后直到该文件的路径 中的目录名和最后到达的文件名组成。工作目录是一个这样的目录,它是含有用 户正在使用的当前目录的树形结构。 12.9、可以授予或拒绝的某个特定用户对某个特定文件的访问权限通常有哪些? 答:无(none),知道(knowledge),执行(execution),读(reading),追加(appending), 更新(updating),改变保护(changing protection),删除(deletion)。 12.10、列出并简单定义三种组块方式。 答:固定组块(fixed blocking):使用固定长度的记录,并且若干条完整的记录被保存在一个块中。在每个块的末尾可能会有一些未使用的空间,称为内部碎片。

操作系统 实验报告 文件管理

昆明理工大学信息工程与自动化学院学生实验报告 (201 —201 学年第二学期) 课程名称:操作系统开课实验室:年月日 一、实验目的 用C或C++语言编写和调试一个简单的文件系统,模拟文件管理的基本功能。从而 对各种文件操作命令的实质内容和执行过程有比较深入的了解。 二、实验原理及基本技术路线图(方框原理图) 用C模拟实现文件系统的管理;要求设计一个多级目录结构的文件系统,能正确描述文件控制块,采用合理的外存分配方式,能实现基本的目录及文件的操作,包括创建、删除、重命名、复制、移动等功能,并对文件有一定的存取权限控制。 功能设计: Help 显示命令帮助 dir 显示当前目录下的文件和文件夹 exit 退出系统 create [文件名] 创建文本文件 cdir [目录名] 创建文件夹 read [文件名] 读取一个文件最多可同时读取五个 close[文件名] 关闭一个文件 edit [文件名] 编辑一个文件 cd [目录名] 进子目录或者上级目录 attr [文件名] 显示该文件的属性 del [文件名] 删除文件 rename [文件名] 重命名

编辑功能流程图

删除文件流程图创建文件流程图 核心算法: bool Format(void); //格式化 bool install(void); //装载虚拟硬盘的数据 void login(void); /用户登陆

void showMenu(void);//显示功能菜单 bool onAction(void);//用户选择功能并执行 void createFile(string str);//创建文件 bool read(string str);//读取文件 void editFile(string str);//编辑文件 void Delete(string str);//删除一个文件 数据结构: /*---------常变量------*/ const unsigned int BLOCK_SIZE=512; //块长 const unsigned int DATA_BLOCK_NUM=512; //数据块数量 const unsigned int DINODE_START=4*BLOCK_SIZE; //inode起始位置 const unsigned int DINODE_SIZE=512; //inode大小 const unsigned int DINODE_NUM=32; //inode数量 const unsigned int DATASTART=(2+DINODE_NUM)*BLOCK_SIZE; //数据区的开始地址 const unsigned int ACCOUNT_NUM=10; //用户数量 /*inode结构体*/ struct inode{ unsigned short di_tag; /*inode标识*/ unsigned short di_number; /*关联文件数,当为0时表示删除文件,如一个目录至少 包含两个文件:"."和".."*/ unsigned short di_mode; /*存取模式:0为目录,1为文件*/ unsigned short di_userID; /*当前inode所属用户0为根目录ID,一次下去是管理员目

操作系统文件管理系统模拟实验

操作系统文件管理系统模拟实验 文件管理系统模拟 1.实验目的 通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现 2.实验内容 为Linux系统设计一个简单的二级文件系统。要求做到以下几点: (1)可以实现下列几条命令(至少4条) login 用户登录 dir 列文件目录 create 创建文件 delete 删除文件 open 打开文件 close 关闭文件 read 读文件 write 写文件 (2)列目录时要列出文件名、物理地址、保护码和文件长度; (3)源文件可以进行读写保护。 3.实验提示 (1)首先应确定文件系统的数据结构:主目录、子目录及活动文件等。主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。 (2)用户创建的文件,可以编号存储于磁盘上。入file0,file1,file2…并以编号作为物理地址,在目录中进行登记。 4.源代码

#include DISK_NUM*sizeof(struct fatitem) #include //FAT表大小 #include #define ROOT_DISK_NO FATSIZE/DISKSIZE+1 #define MEM_D_SIZE 1024*1024 //根目录起始盘块号//总磁盘空间为1M #define ROOT_DISK_SIZE #define DISKSIZE 1024 sizeof(struct direct) //根 //磁盘块的大小1K 目录大小 #define DISK_NUM 1024 #define DIR_MAXSIZE 1024 //磁盘块数目1K //路径最大长度为1KB #define FATSIZE #define MSD 5 //最大子目录数5 }openitem[MOFN]; #define MOFN 5 int cur_size; /*当前打文件的 //最大文件深度为5 数目*/ #define MAX_WRITE 1024*128 }; //最大写入文字长度128KB struct fatitem *fat; /*FAT表*/ struct fatitem /* size 8*/ struct direct *root; /*根目录*/ { struct direct *cur_dir; /*当前int item; /*存放文件下一个磁目录*/ 盘的指针*/ struct opentable u_opentable; /* char em_disk; /*磁盘块是否空闲文件打开表*/ 标志位 0 空闲*/ int fd=-1; /*文件打开表的序}; 号*/ char *bufferdir; /*记录当前路struct direct 径的名称*/ { char *fdisk; /*虚拟磁盘起始地 /*-----文件控制快信息-----*/ 址*/ struct FCB

计算机操作系统第七章-文件管理资料

第七章文件管理 第一节文件和文件系统 一、文件系统的引入 1、用户在使用计算机的过程中遇到的有关软件资源的两个基本问题: ●产生了新的资源时:怎样长期存放; ●使用系统中现有资源时:怎样检索,如何使用; 解决的方法:把信息以一种单元--文件--的形式存储在磁盘或其他外部存储介质上。文件由操作系统来统一管理,包括:文件的结构,命名,存取,使用,保护,以及实现方法。 2、现代OS中引入文件系统的目的 ●管理系统和用户的软件资源,让用户实现对信息的“按名存取”; ●提供信息的存储、检索、更新、共享和文件保护等一系列文件操作,使用户能方便有效地使用和操作文件; ●文件系统给用户带来的好处是:使用方便、数据安全、接口统一 3、文件系统的功能 ●统一管理文件的存储空间(外存空间),实施存储空间的分配与回收●实现文件的按名存取:名字空间映射存储空间 ●实现文件信息的共享,并提供文件的保护和保密措施 ●向用户提供一个方便使用的接口 ●系统维护及向用户提供有关信息 ●提供与I/O的统一接口 文件系统在操作系统接口中占的比例最大,用户使用操作系统的

感觉在很大程度上取决于对文件系统的使用效果。 二、文件系统中的相关概念 1、数据项:构成文件内容的基本单位 ●基本数据项。这是用于描述一个对象的某种属性的字符集,是数据组织中可以命名的最小逻辑数据单位,即原子数据,又称为数据元素或字段。它的命名往往与其属性一致。 ●组合数据项。它是由若干个基本数据项组成的,简称组项。 2、记录:是一组相关数据项的集合,用于描述一个对象在某方面的一组属性。 3、关键字:是能唯一标识一个记录的数据项。记录的关键字可以不止一个;关键字可以是一个基本数据项,也可以是一个组合数据项。 4、文件:是指由创建者所定义的、具有文件名的一组相关信息的集合,可分为有结构文件和无结构文件两种。 在有结构的文件中,文件由若干个相关记录组成(是记录的序列);而无结构文件则被看成是一个字符(字节)流。 文件是文件系统中一个最大的数据单位,它描述了一个对象集。 图7-1文件、记录和数据项之间的层次关系

操作系统(文件管理)_答案

第六部分文件管理 1、文件系统的主要目的是()。 A、实现对文件的按名存取 B、实现虚拟存储 C、提供外存的读写速度 D、用于存储系统文件 2、文件系统是指()。 A、文件的集合 B、文件的目录集合 C、实现文件管理的一组软件 D、文件、管理文件的软件及数据结构的总体 3、文件管理实际上是管理()。 A、主存空间 B、辅助存储空间 C、逻辑地址空间 D、物理地址空间 4、下列文件的物理结构中,不利于文件长度动态增长的文件物理结构是()。 A、顺序文件 B、链接文件 C、索引文件 D、系统文件 5、下列描述不是文件系统功能的是()。 A、建立文件目录 B、提供一组文件操作 C、实现对磁盘的驱动调度 D、实现从逻辑文件到物理文件间的转换 6、文件系统在创建一个文件时,为它建立一个()。 A、文件目录 B、目录文件 C、逻辑结构 D、逻辑空间 7、索引式(随机)文件组织的一个主要优点是( )。 A、不需要链接指针 B、能实现物理块的动态分配 C、回收实现比较简单 D、用户存取方便 8、面向用户的文件组织机构属于( )。 A、虚拟结构 B、实际结构 C、逻辑结构 D、物理结构 9、按文件用途来分,编译程序是()。 A、用户文件 B、档案文件 C、系统文件 D、库文件 10、将信息加工形成具有保留价值的文件是()。 A、库文件 B、档案文件 C、系统文件 D、临时文件 11、文件目录的主要作用是()。 A、按名存取 B、提高速度 C、节省空间 D、提高外存利用率 12、如果文件系统中有两个文件重名,不应采用()。 A、一级目录结构 B、树型目录结构 C、二级目录结构 D、A和C 13、文件系统采用树型目录结构后,对于不同用户的文件,其文件名()。 A、应该相同 B、应该不同 C、可以不同,也可以相同 D、受系统约束 14、文件系统采用二级文件目录可以()。 A、缩短访问存储器的时间 B、实现文件共享 C、节省内存空间 D、解决不同用户间的文件命名冲突

操作系统实验里模拟实现磁盘文件管理

操作系统实验(七)磁盘文件1.实验内容 使用C++模拟实现磁盘文件存储结构。 2.实验目的 了解磁盘文件的存储物理结构。 3.实验题目 实现磁盘文件写(必做)和插入(选做)操作。 4.程序流程图

5.程序代码和结果 #include #include using namespace std; typedef struct MULU{ string name; int start; int length; }MULU; typedef struct FAT{ int num; int next; }FAT; MULU mulu[10]; int mulu_i=0; FAT fat[10]; int allnum=10; int fat_i=0; void init(){ for(int i=0;i<20;i++){ fat[i].num=i; fat[i].next=0; } fat[0].next=-2; fat[1].next=-1; allnum-=2; } int getEmpty(){ for(int i=0;i<20;i++){ if(fat[i].next==0){ allnum--; return i; } } return -1; } int write(){ cout<<"\n请输入文件名和记录数:"; string name; int n; int temp=0; int next=0; int s=0;

cin>>name; cin>>n; if(n>allnum){ cout<<"你输入的记录数过大!"<

模拟文件存储空间管理

实验三模拟文件存储空间管理 1.内容:模拟文件存储空间的管理,采用空白文件目录法和空白块链法实施空间分配。2.思想: 文件存储空间管理是文件系统的重要内容。常用的管理思想有空白文件目录法、空白块链法和位示图法。本实验采用前两种方法进行空间分配。 (1)空白文件目录法进行空间分配时,需要建立相关的数据结构,记录目前空白区域和已使用区域,假设开始时全部区域空闲。当有文件需要存储时,先检查空白文件目录,找到适合区域立即分配,并修改空白文件目录表和已使用区域分配表。为此需建立两张表格,分别记录相关数据。 空白文件目录表(初始) 空白文件目录(中间) 已使用区域表(中间) 上述两张表的数据在系统运行中是发生变化的。

文件空闲区分配和释放算法如下图所示: 图一文件空闲区分配算法

图二文件空闲区回收算法

(2)空白块链法进行空间分配时,需要建立链表数据结构,将空闲块按顺序加以组织,分配和回收时在链首完成,同时建立文件目录,记录文件占用空间情况。 3.要求: (1)自拟模拟数据演示运行结果(假定系统可用空闲块数为100)。为便于检查,建立和删除文件顺序如下: 分配文件:F1,3 分配文件:F2,5 分配文件:F3,3 分配文件:F4,8 分配文件:F5,4 分配文件:F6,2 删除文件:F1 删除文件:F2 分配文件:F7,6 删除文件:F3 分配文件:F8,4 删除文件:F5 分配文件:F9,4 …… 每完成一个文件的分配和删除后,显示空白文件目录当前内容。 (2)空白文件目录法必须完成,空白块链法选做。 4.书写实验报告:

①实验题目; ②程序中所用的数据结构及说明; ③源程序并附上必要的说明; ④按照文件的创建和删除顺序,打印输出结果。 源代码: 1. package com.gongziqian.savefile; public class FileInformation { // 插入文件名 String fileName; // 首块号 int start; // int n; /** * 文件块 * @param fileName * @param start * @param n */ public FileInformation(String fileName, int start, int n) { this.fileName = fileName; this.start = start; this.n = n; } } 2. package com.gongziqian.savefile; import java.util.*; public class FileOprator { int[] file = new int[100]; List list = new ArrayList(); /** * 构造方法 */ public FileOprator() { } /**

操作系统磁盘文件管理源码

#include #include #include #define MEM_D_SIZE 1024*1024 //总磁盘空间为1M #define DISKSIZE 1024 //磁盘块的大小1K #define DISK_NUM 1024 //磁盘块数目1K #define FATSIZE DISK_NUM*sizeof(struct fatitem) //FAT表大小 #define ROOT_DISK_NO FATSIZE/DISKSIZE+1 //根目录起始盘块号 #define ROOT_DISK_SIZE sizeof(struct direct) //根目录大小 #define DIR_MAXSIZE 1024 //路径最大长度为1KB #define MSD 5 //最大子目录数5 #define MOFN 5 //最大文件深度为5 #define MAX_WRITE 1024*128 //最大写入文字长度128KB struct fatitem /* size 8*/ { int item; /*存放文件下一个磁盘的指针*/ char em_disk; /*磁盘块是否空闲标志位0 空闲*/ };

struct direct { /*-----文件控制快信息-----*/ struct FCB { char name[9]; /*文件/目录名8位*/ char property; /*属性1位目录0位普通文件*/ int size; /*文件/目录字节数、盘块数)*/ int firstdisk; /*文件/目录起始盘块号*/ int next; /*子目录起始盘块号*/ int sign; /*1是根目录0不是根目录*/ }directitem[MSD+2]; }; struct opentable { struct openttableitem { char name[9]; /*文件名*/ int firstdisk; /*起始盘块号*/

操作系统课程设计++模拟磁盘文件管理的程序

模拟磁盘文件管理的程序 一、课程设计内容 ⑴自定义磁盘文件管理的数据结构; ⑵能够自由创建、修改、删除文件; ⑶文件具有一定自定义的属性; ⑷能够显示当前系统文件的状态。 二、课程设计的数据结构说明 程序中定义了两个类: class file//文件类 {private: char name[10]; //文件名 public: int tag; //删除标记 1:已删 0:未删 file( ){ } char *getname( ){return name;} //获取文件名 int gettag( ){return tag;} //获取删除标记 int getlength() {return length;} //获取文件大小 int getblocknum() {return blocknum;} // 磁盘块数 int getblocksum1(){return blocksum1;} //磁盘块号的始点 int getblocksum2(){return blocksum2;} //磁盘块号的终点 int length,blocknum,blocksum1,blocksum2; void setname(char na[ ] ) {strcpy(name,na);} //设置文件名 void delwenjian(){ tag=1; }//设置删除标记 1:已删 0:未删 void creatfile(char *na,int L,int num,int s1,int s2) //创建文件 void deltefile(char *na) {tag=1; strcpy(name,na);} //删除文件 void disp( )//输出文件信息 class fdatabase //文件库类 { private: int top; //文件记录指针 file f[50]; public: fdatabase(){top=-1;} //构造函数 int search(char *fname)//按文件名查找 int creatfile(char *na,int L,int num,int s1,int s2)//创建文件时先查找是否存在 int deltefile(char *na)//删除文件时先查找是否存在 void disp() //输出所有文件信息 };

相关主题