学习笔记:计算机组成原理Ch9.文件管理
在之前介绍过,外部的存储可以作为Virtual Memory使用,但是一般来说不这么用,所以就要建立一套管理文件的系统:
先来看看硬盘的组成:

硬盘就是一个一个光盘叠加在一起,有个梳子(comb)在每个地方划过,同一个轨道的一圈圆柱体叫做Cylinder,某个轨道上的一篇圆弧就叫做sector,很明显,sector就是用来存储数据的单元。
那么,如何定义sector的大小呢?
对于大的磁盘,sector就大一点好,这样不行呀。要有一个统一的标准。
于是,先规定sector有统一的尺寸,然后把几个sector汇编成cluster。
每个cluster就有自己的 Physical Cluster Number,也就是地址PCN
一个文件就是由不同的cluster组成的,那么在这个文件中,各个cluster的顺序就给个编号叫做Logical Cluster Number,也就是在这个文件中的地址,和上面的PCN要区分开。
问题就来了,如何把LCN和PCN关联起来呢?
FAT16:
第一种方式是,类似于linkedlist,每个cluster附带一个指针,指向下一个cluster的物理地址,这样文件就可以得到访问了,也不用管LCN的问题。
如果删除文件呢?
在磁盘中设置以一个区域叫free:删除了文件,就是把这个文件的cluster放进free里,所以实质上,文件并没有删除,只是把这个文件的指向关系删除了,后面就可以通过软件恢复。

这些指针们,通常不是cluster里面的内容,所以把这些指针一般放在一个专门的表格里,叫做File Access Table,这个表格通常有两个copy,防止被误删。
之后我们来研究这个指针,在FAT16里,指针就是16bits的,也就是一个指针最多能表示65536个cluster number,因为cluster的大小是可以改变的,盘小的时候没什么影响,当盘的大小增加到65536分不开,cluster 的数量不变,cluster 的大小就有变化,例如在8Gb里,每个cluster要有128Kb大,这就意味着,一个文件,就算啥都没有,都要有一个cluster大,也就是128Kb。
如何解决呢?
- 把磁盘分为几个小的磁盘使用
- 提高指针的bits,后面就发布了FAT32
MS的工程师又想到了一种新的文件管理系统,叫做NTFS
原则是,把物理地址连续的cluster,分给同一个file,也就是在logical 地址上也连续。
这样就只需要第一个指针指向PCN,然后后面说一下这个cluster列有多长就可以了。如下图所示:

相对于DOS的这种管理方式,unix给了一种新的方式,inode
每个文件都有自己的table,用来主席昂不同的cluster,他的结构如下图所示:

可以指向相当多的PCN。
前面的方法只给了PCN和LCN,也就是说,用户想要这个文件,要报PCN或者LCN,如果用户想要给这个文件命名该怎么办呢?
要建立一个目录(directory),用来管理用户命名的名字。
只需要给每个文件分一个指针,指向PCN就可以了

先来看看DOS里的directory entry信息:

NTFS想了,既然之前说可以设一个table在磁盘里,那我是不是也可以设置table在磁盘里,存一下这个文件的名字什么的信息,然后再给他指针,指向物理地址:

所以,NTFS的directory也是一个table文件存在这个table里,
在最右边那个格子有个data项,如果文件大的化,就把指针放里头,如果文件小的化,我直接把文件放里头看起来也可以。
同样的directory’文件里,如果目录小的小,我就把目录全放里头,如果目录多的化,我就放指针:

与此同时:
unix给了一种不同的管理方式,就是不同的路线,可以指向同一个文件:
