文件物理结构和存储空间管理

编程

磁盘结构:

磁盘也和内存一样分块,并且块大小和内存块大小相同,方便数据交换。

一、文件物理结构

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代表非空闲块,根据磁盘块号算出位的位置,然后管理

以上是 文件物理结构和存储空间管理 的全部内容, 来源链接: utcz.com/z/514322.html

回到顶部