记录:记录是一组相关数据项的集合,用于描述一个对象某方面的属性。
文件:文件是具有文件名的一组相关信息的集合。
文件系统:
目录:文件控制块的集合构成了文件目录。
目录项:一个文件控制块就是一个文件目录项。
文件控制块:文件控制块(FCB)是操作系统用来描述和控制文件的数据结构。
索引节点:除了文件名,文件控制块的其他控制信息称之为索引节点(I节点)。
文件逻辑结构:从用户观点出发,研究的是用户思维中的抽象文件,也叫逻辑文件。一般可分为记录式文件和流式文件两种。
文件物理结构:是指文件在物理存储介质上的结构,它与存储介质的存储特性有关,它对文件的存取方法有较大的影响。
打开文件:使用已经存在的文件,首先必须打开文件,调用open将文件名传给文件系统。打开文件就是建立起用户、应用进程和文件之间的联系。将打开文件的文件控制块填入打开文件表中,如果打开文件表中存在该文件(共享文件),则该文件的访问计数器加一,此时用户就可以对文件进行访问了。
关闭文件:关闭文件就是切断用户、应用进程和文件之间的联系。将该文件的访问计数减一,如果访问计数为零,则将该文件的条目从打开文件表中删除,撤消内存中该文件的内容信息,若该文件内容被修改,应该由用户决定是否回写外存。
FAT:文件分配表(File Allocation Table,FAT),FAT文件系统于1982年开始应用于MS-DOS中。
事务:事务是用于访问和修改各种数据项(可分散在多个文件中)的一个程序单位,其可被看作是一系列的读写操作,且具有“原子性”的特性。
检查点:即每隔一定时间,便扫描事务记录表,同时将驻留在易失性存储器即内存中当前事务记录表的全部记录和<检查点>记录及所有已修改数据输出到稳定存储器中;
1.文件的物理结构有哪几种形式?各有什么特点?
一、顺序结构
顺序结构的主要优点如下:
⑴简单。⑵顺序访问速度快。⑶所需的磁盘寻道次数和寻道时间最少。
顺序结构的主要缺点如下:
⑴文件不易动态增长。⑵不利于文件插入和删除操作。⑶外存存在碎片问题。
二、链接结构
链接结构的主要优点如下:
⑴提高了磁盘空间利用率,解决了碎片问题。⑵有利于文件插入和删除。⑶有利于文件动态扩充。
链接结构的主要缺点如下:
⑴存取速度慢,不适于随机存取。⑵链接指针占用一定的空间。⑶可靠性问题,如指针出错。⑷更多的寻道次数和寻道时间
三、索引结构
索引结构的主要优点如下:
⑴保持了链接结构的优点,又解决了其缺点。⑵即能顺序存取,又能随机存取。⑶满足了文件动态增长、插入删除的要求。⑷能充分利用外存空间。
索引结构的主要缺点如下:索引表本身带来了系统开销。
2.试说明用户可以对文件施加的主要操作有哪些?
建立新文件,打开文件,关闭文件,读写文件,保存文件,删除文件等。
3.解释open和close操作的目的是什么?
open操作的目的是,一旦文件被创建,它就能用于I/O。使用已经存在的文件,首先必须打开文件,调用open将文件名传给文件系统。打开文件就是建立起用户、应用进程和文件之间的联系。
close操作的目的是,用户完成使用文件之后关闭文件。这不但是为了释放内存空间,而且也因为许多系统常常限制可以同时打开的文件数。
4.如果一个系统仅允许安装一个文件系统时会产生什么问题?
绝大多数操作系统都支持多个文件系统。Windows NT支持磁盘文件系统FAT、FAT32和NTFS,还有CD-ROM、DVD-ROM和软盘文件系统。如果一个系统仅允许安装一个文件系统时,用户无法读取和使用其他文件系统的数据。
5.试说明顺序文件的结构及其优点?
顺序结构也叫连续结构,它将一个文件在逻辑上连续的信息块存放在外存上连续物理块中,采用顺序结构存放的文件称为连续文件。连续文件的信息逻辑相邻,物理也相邻。
顺序结构的主要优点如下:
⑴简单。⑵顺序访问速度快。⑶所需的磁盘寻道次数和寻道时间最少。
顺序结构的主要缺点如下:
⑴文件不易动态增长。⑵不利于文件插入和删除操作。⑶外存存在碎片问题。
6.什么是索引文件?为什么要引入多级索引?
索引结构是一种离散结构,一个文件的信息存放在若干不连续物理块中,系统为每个文件建立一个专用数据结构,即索引表,索引表就是文件信息所在的逻辑块号和与之对应的物理块号的对照表。采用索引结构存放的文件称为索引文件。
由于一个索引块占据一个物理块,所能表示文件长度是相当有限的。当文件很大时,可以采用多级索引结构。
7.试说明UNIX系统中所采用的混合索引分配方式。
UNIX文件系统采用的是混合多级索引结构。在UNIX系统Ⅴ中,每个文件地址分为13个地址项,地址项分成两类,即直接地址(指针)和间接地址。地址项i.addr[0]~i.addr[9] 为直接地址,也叫直接块,UNIX对10KB以下的小文件采用直接地址,直接登记存放文件信息的物理块号;i.addr[10]~i.addr[12] 为间接地址,也叫间接块,i.addr[10]为一次间接地址,i.addr[11]为二次间接地址,i.addr[12]为三次间接地址。
图7-8 UNIX混合多级索引结构
8.目前广泛采用的目录结构形式是哪种?它有什么优点?
无环图结构目录是树型目录的推广,有些教材称为带有链接的树型目录。无环图结构目录被现代操作系统广泛采用。
无环图结构目录的优点:
⑴用户的逻辑结构清晰,有利于文件分类,便于管理和保护。
⑵提高文件检索速度。
⑶树型目录结构允许用户在不同子目录中命名相同的文件名,但不允许在同一子目录中重名,从而解决了重名问题。
⑷能进行存取权限的控制。
⑸支持文件或目录的共享
无环图结构目录的优点是比树结构目录更灵活,可以实现不同用户共享同一个文件,缺点是实现比较复杂。
9.基于索引节点的文件共享方式有何优点?
就基于索引结点的共享方式而言,其优点在于“建立新的共享链接,并不改变文件拥有者的关系,仅把索引结点共享计数器加1,所以系统可方便获悉由多少个目录项指向该文件”。同时,该方式也存在所谓“悬空指针”的问题和缺点。具体而言,文件拥有者不能删除自己的文件,否则将留下指向该结点的悬空指针,造成该结点再分配时,系统出错;为此,拥有者只能清除自己的目录项,且要为其它共享者无端付费,直至其它共有者清除该文件?
10.基于符号链的文件共享方式有何优点?
就基于符号链的文件共享方式来说,只有文件主才拥有指向其索引结点的指针,而共享该文件的其它用户只有该文件的路径名且没有指向索引结点的指针,所以也就不会发生在文件主删除共享文件后留下所谓“悬空指针”的问题。当文件拥有者把一个共享文件删除后,其它用户试图通过符号链来访问一个被删除的共享文件时将因系统找不到该文件而使访问失败,于是将符号链删除,此时不会有任何其它负面效应。当然,这种方式也存在自己的问题。在其它用户访问共享文件时,系统是根据给定的文件路径名,逐个分量地去查找目录,直至找到该文件的索引结点。因此,在访问共享文件时要多次读盘,使每次访问文件的系统开销加大,且增加了启动磁盘的频率。此外,要为每个共享用户建立一条符号链,而该链实际上是一个文件,尽管该文件非常简单,却仍需为之配置一个索引结点,故而也要消耗一定的磁盘空间。需要指出的是,本共享方式还有一个特殊的优点,即它能够用于链接(通过计算机网络)世界上任何地方的机器中的文件,此时只需提供该文件所在机器的网络地址以及在该机器中的文件路径。
11.什么是重名问题?如何解决这一问题?
重名,即两个用户使用相同文件名,早期操作系统采用单级目录不支持重名。当操作系统采用多级目录时,由于用户目录名不同,多级目录结构允许用户在不同子目录中命名相同的文件名,但不允许在同一子目录中重名,从而解决了重名问题。
12.什么是打开文件操作?什么是关闭文件操作?引入这两个操作的目的是什么?
使用已经存在的文件,首先必须打开文件,调用open将文件名传给文件系统。打开文件就是建立起用户、应用进程和文件之间的联系。将打开文件的文件控制块填入打开文件表中,如果打开文件表中存在该文件(共享文件),则该文件的访问计数器加一,此时用户就可以对文件进行访问了。
关闭文件就是切断用户、应用进程和文件之间的联系。将该文件的访问计数减一,如果访问计数为零,则将该文件的条目从打开文件表中删除,撤消内存中该文件的内容信息,若该文件内容被修改,应该由用户决定是否回写外存。
open操作的目的是,一旦文件被创建,它就能用于I/O。使用已经存在的文件,首先必须打开文件,调用open将文件名传给文件系统。打开文件就是建立起用户、应用进程和文件之间的联系。
close操作的目的是,用户完成使用文件之后关闭文件。这不但是为了释放内存空间,而且也因为许多系统常常限制可以同时打开的文件数。
13.目录管理的基本功能是什么?
目录管理应具有如下几个功能:
⑴实现文件按名存取。用户只需提供文件名就可以对文件进行操作。这既是目录管理的最基本功能,也是文件系统向用户提供的最基本服务。
⑵提高文件检索速度。它是文件系统所追求的最重要的目标,这就需要在设计文件系统时合理地设计目录结构。
⑶允许文件重名。为了便于用户按照自己的习惯来命名和使用文件,文件系统允许在不同目录使用相同的文件名。
⑷便于文件共享。在多用户系统中,应该允许多个用户共享文件,这样就可以节省文件的存储空间,方便用户共享文件资源。当然,还需要相应的安全措施,以保证不同权限的用户只能取得相应的文件操作权限,防止越权行为。
14.事务的原子性和原语之间存在着什么区别?如何保证事务的原子性?
事务是用于访问和修改各种数据项(可分散在多个文件中)的一个程序单位,其可被看作是一系列的读写操作,且具有“原子性”的特性。
原语的执行具有原子性,即原语在执行过程中不能被分割。
为保证事务的原子性,只有当所有操作全部完成时,才进行提交操作Commit Operation来终止事务;而只要有一个读或写操作失败,也即一个夭折的事务,应执行夭折操作,进一步说,由于该事务通常已经执行了一些操作,所以已对某些数据项进行了修改,为使夭折的事务不会引起数据的不一致性,须将该事务内刚被修改过的数据项恢复成原来的情况,使系统中数据项与该事务未执行时的数据项完全相同。为了实现上述的原子修改,通常需借助于称为事务记录(或运行记录)的数据机构和有关的恢复算法来实现。事务记录用于记录事务运行时数据项修改的全部信息,支持原子修改,存放于稳定存储器中。
15.在事物操作中引入检查点主要是为了解决什么问题?
引入检查点的主要目的是使对事务记录表中事务记录的清理工作经常化,即每隔一定时间,便扫描事务记录表,同时将驻留在易失性存储器即内存中当前事务记录表的全部记录和<检查点>记录及所有已修改数据输出到稳定存储器中;并且每当出现一个<检查点>记录时,应利用Redo和Undo过程执行恢复操作。引入检查点后的恢复例程首先查找事务记录表,确定在最近检查点以前开始执行的最后事务Ti;在找到这样的事务后,再返回到事务记录表,便可找到第一个检查点记录,进而从该检查点开始依次搜索各个事务记录,并基于Redo和Undo过程执行恢复操作。具体而言,针对Ti以后开始执行的事务集T中的事务Tk,区别不同情况分别执行恢复操作Redo(Tk) /Undo(Tk):(1)如果在事务记录表中出现了<Tk提交>记录,则执行Redo(Tk)操作;(2)如果在事务记录表中未出现<Tk提交>记录,则执行Undo(Tk)操作。
16.为什么事务执行具有顺序性,如何实现事务的顺序性?
在多用户系统中,可能有多个用户在执行事务。由于事务的原子性,各个事务的执行必然是按某种次序依次执行的,只有在一个事务执行完后,才允许另外一个事务执行,即事务对数据项的修改是互斥的。这也即事务的顺序性。实现事务顺序性的一种最简单的方法是为每个共享对象(文件、记录或数据项)设置一个互斥锁,同时要求事务对对象的访问以首先获得该对象的互斥锁为前提条件。进一步说,当一个事务Ti获得某共享对象的互斥锁后,便可对该对象执行读写操作;而其它事务由于不能获得互斥锁故不能访问该对象。特别地,如果Ti需要对一批对象进行访问,为了保证事务操作的原子性,Ti应首先获得这一批对象的互斥锁,以将它们全部锁住。如果成功,便可对这一批对象执行读写操作,操作完毕后释放所有互斥锁;而如果不成功,即这一批对象中至少存在某个对象已被其它事务锁住,则应将那些刚被Ti锁住的对象进行开锁,宣布此次事务运行失败,而不致引发数据变化。必须指出,基于互斥锁实现顺序性的方法尽管简单易行,但却存在效率不高的问题。因为一个共享文件虽然只允许一个事务去写,但却允许多个事务同时读,而利用互斥锁来锁住文件时,则不加区分地只允许一个事务进行读或写操作。为了提高运行效率,应引入另外一种形式的锁即共享锁。具体而言,如果事务Ti要对Q执行读操作,则只需获得Q的共享锁即可;而如果事务Ti获得了某对象Q的共享锁,仅仅允许Ti去对对象Q执行读操作,而不允许写操作。当事务Ti试图去获取对象Q的共享锁时,Q已被互斥锁锁住,则Ti必须等待;否则,便可获得共享锁而对Q执行读操作。但如果Ti要对Q执行写操作,则它还须去获得互斥锁。若失败,则等待;否则,可获得互斥锁而对Q执行写操作。
17.在文件一致性检查过程中,可能会出现哪些异常现象?如何解决?
当系统中有重复文件时,可采用两种方法来保证和实现文件数据的一致性:
(1)当一个文件被修改后,可查找文件目录,以得到其另外几个拷贝的索引结点号,从这些索引结点中找到各个拷贝的物理位置,然后对它们进行同样的修改;
(2)为新修改的文件建立几个拷贝,并用它去替换原有文件拷贝。