目录
文件是存储在辅助存储设备或二级存储设备中,文件在二级存储设备中是可以读写的。文件是记录的集合,存取方式决定了怎样检索记录:顺序或者随机的。
顺序文件
顺序文件是指记录只能按照顺序从头到尾一个接一个地进行存取,如图记录被一个接一个地存储到辅助存储器中,只能从头到尾一个个的查找。
索引文件
索引文件有数据文件组成,它是带索引的顺序文件,索引本身只占两个字段:顺序文件的键和在磁盘上相应记录的地址。索引文件必须将文件的索引保存在磁盘上,当需要处理数据文件时,先将索引文件导入到内存中,搜索索引找到数据记录的地址,再访问数据文件存取记录。
散列文件
散列文件用一个数学函数来完成键和地址的映射,在散列文件中,不需要额外的文件,直接用函数来寻找地址。
散列方法
直接散列法
键不经过处理直接映射,简单的说键的值就是映射的地址值。没有冲突但很浪费。
求模法
也称为除余散列法,求模方法使用文件大小除键后,将余数作为地址。用素数作为除数冲突要小一些。
还有数字析取法、平方中值法、折叠法、旋转法、和伪随机法等散列的方法。
散列冲突
因为在文件中有很多键对应一个地址,很可能多于一个的键将被散列为文件中的同一个地址。这就造成了冲突。如下图所示,两个键散列到了一个地址。
冲突解决
除了直接散列的方法,其余的方法都可能带来冲突,都可以用于冲突解决法。
开放寻址:当发生冲突时,主区地址将查找开放的或空闲的地址来存新数据,但是这也会造成了新的冲突。
链表解决法:在这种方式中,第一条记录存储在内部地址,每一条记录中包含了一个指向下一条记录的指针。
桶散列法:散列到桶,桶是一个能容纳多个记录的节点,这种方法的缺点是可能有很多浪费存储单元。
这里的桶的结构是一个固定大小的数组,才会有浪费空间的说法,其实上面的链表解决法也可以理解为散列到桶,而桶的数据结构是一个链表。
目录
在操作系统中基本上都会有目录,目录被表示为含有其他文件信息的一种特殊文件类型。目录像一种索引文件,告诉操作系统文件在辅助存储设备上的位置,目录也包含了它所有文件的其他信息:访问权限、文件修改日期等。在大多数操作系统中,目录被组织成像树的数据类型。
路径和文件名
文件系统中没有目录和文件都必须有一个名字。可以用相对路径和绝对路径访问:
文本文件和二进制文件
不管是什么文件,在存储设备中存的都是二进制,其通过文件头部编码来区别不同类型,同时操作系统使用不同方式类解释打开。 下图使用不同的解释方式解释相同的一段二进制编码,得到的是不同的结果。
凡是过往,即为序章