文件物理结构和存储空间管理
程序员文章站
2022-06-25 08:35:23
磁盘结构: 磁盘也和内存一样分块,并且块大小和内存块大小相同,方便数据交换。 一、文件物理结构 1、连续分配 文件连续分配在磁盘的块上,查找效率最高,磁头移动最快,但是产生碎片最多,不容易扩展。 下面用Python实现以下 连续分配 的逻辑 2、链接分配 (1) 显式链接(支持随机访问) 文件目录表 ......
磁盘结构:
磁盘也和内存一样分块,并且块大小和内存块大小相同,方便数据交换。
一、文件物理结构
1、连续分配
文件连续分配在磁盘的块上,查找效率最高,磁头移动最快,但是产生碎片最多,不容易扩展。
下面用python实现以下连续分配的逻辑
class category: #文件目录 def __init__(self,size): self.table=[] self.disk = disk(size) #模拟磁盘 def append(self,file_name,length): t=[none]*2 t[0] = file_name t[1] = self.disk.distribution(length) self.table.append(t) class disk: def __init__(self,size): self.table=[none]*size def distribution(self,length): for index,v in enumerate(self.table): if v==none and len(self.table)-length>0: for j in range(index,index+length): self.table[j] = true return index print("磁盘已经满了") return -1 if __name__ == '__main__': category = category(100) category.append("one",20) category.append("three",30) category.append("tow",15) print(category.table) print(category.disk.table)
2、链接分配
(1) 显式链接(支持随机访问)
文件目录表fcb:
文件名 | .... | 起始块号 |
---|---|---|
a.txt | 0 |
fat文件分配表(长驻内存,方便查找):
一个磁盘一张fat表
物理块号 | 下一个物理块号(-1表示没有) |
---|---|
0 | 3 |
1 | 2 |
2 | -1 |
3 | 6 |
4 | -1 |
6 | -1 |
上面a.txt文件依次存放在0->3->6这三个块中
(2)隐式链接
只支持顺序访问、存在连续的块中,每个块同时也有指向下一个块的指针
fcb
文件名 | .... | 起始块号 | 结束块号 |
---|---|---|---|
a.txt | 0 | 6 |
下面用python模拟
class category: def __init__(self,fat_size): self.table=[] self.fat = fat(fat_size) def append(self,file_name,size): file =[none]*3 file[0] = file_name file[1] = size file[2] = self.fat.findempty() if file[2]==-1: print("没有空闲块") return self.fat.distribution(file[2],file[1]) self.table.append(file) class fat: def __init__(self,size): self.table=[] for i in range(size): t = list() t.append(i) t.append(none) self.table.append(t) def distribution(self,cur,size): self.table[cur][1] = -1 for c in range(size): self.table[cur][1] = self.findempty() cur = self.table[cur][1] self.table[cur][1] = -1 def findempty(self): for i in self.table: if i[1]==none: return i[0] return -1 if __name__ == '__main__': fat_size = 100 category = category(fat_size) # category.append("one",4) category.append("tow",2) category.append("three",20) print(category.table) for w in category.fat.table: print(w[0],w[1])
3、索引分配
支持随机访问
fcb
文件名 | ..... | 索引块号 |
---|---|---|
a.txt | 13 |
索引表(每个文件都有一个索引表,fcb保存着索引表的物理块号)
逻辑块 | 物理块 |
---|---|
0 | 6 |
1 | 98 |
2 | 5 |
3 | 12 |
4 | 4 |
上面文件存放的块号为6->98->5->12->4,一个索引表不够可以链接另外一个物理块再创建一个索引表
,这种链式效率慢,一般采用多级索引。
二、文件存储空间管理
分区
一个磁盘分为好几个文件卷或区,a盘b盘d盘等,这些都是逻辑分区,
通常将一个磁盘分为好几个逻辑分区,也可以把好几个磁盘划为一个逻辑分区
分区结构
在一个分区内分为目录区和文件区,目录区存放目录基本信息和索引、文件区存放具体数据
文件空闲空间管理
1、空闲区链表法
将连续的空闲块链接成链表,使用时寻找最佳空闲区、如何删除空闲链表节点、回收时加入链接尾部
2、位示图法
0 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
1 | 1 | 1 | 0 | 1 | 1 |
位为1代表非空闲块,根据磁盘块号算出位的位置,然后管理
上一篇: 儿子你也太幽默了
下一篇: Shell 脚本面试问题大全
推荐阅读
-
Linux磁盘管理之df命令详细介绍和使用实例(统计文件或目录的磁盘占用情况)
-
用自定义的节来扩展web.config和machine.config配置文件的结构
-
Linux学习笔记(二):文件目录管理和VIM编辑器的使用
-
Redis物理文件结构
-
Linux磁盘管理之df命令详细介绍和使用实例(统计文件或目录的磁盘占用情况)
-
大势至电脑文件安全管理软件、电脑资料防止泄密管控软件和计算机文件防泄密软件V12版
-
Linux用户和权限——管理文件权限的命令
-
Asp.Net Core中配置使用Kindeditor富文本编辑器实现图片上传和截图上传及文件管理和上传(开源代码.net core3.0)
-
第 14 章 结构和其他数据形式(把结构内容保存到文件中)
-
利用泛型和反射,管理配置文件,把Model转换成数据行,并把数据行转换成Model