linux文件物理结构,文件物理结构和存储空间管理
本文將要為您介紹的是文件物理結(jié)構(gòu)和存儲(chǔ)空間管理,具體實(shí)現(xiàn)方法:磁盤結(jié)構(gòu):
磁盤也和內(nèi)存一樣分塊,并且塊大小和內(nèi)存塊大小相同,方便數(shù)據(jù)交換。
一、文件物理結(jié)構(gòu)
1、連續(xù)分配
文件連續(xù)分配在磁盤的塊上,查找效率最高,磁頭移動(dòng)最快,但是產(chǎn)生碎片最多,不容易擴(kuò)展。
下面用Python實(shí)現(xiàn)以下連續(xù)分配的邏輯
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("磁盤已經(jīng)滿了")
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) 顯式鏈接(支持隨機(jī)訪問(wèn))
文件目錄表FCB:
文件名
....
起始?jí)K號(hào)
a.txt
0
FAT文件分配表(長(zhǎng)駐內(nèi)存,方便查找):
一個(gè)磁盤一張F(tuán)AT表
物理塊號(hào)
下一個(gè)物理塊號(hào)(-1表示沒(méi)有)
0
3
1
2
2
-1
3
6
4
-1
6
-1
上面a.txt文件依次存放在0->3->6這三個(gè)塊中
(2)隱式鏈接
只支持順序訪問(wèn)、存在連續(xù)的塊中,每個(gè)塊同時(shí)也有指向下一個(gè)塊的指針
FCB
文件名
....
起始?jí)K號(hào)
結(jié)束塊號(hào)
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("沒(méi)有空閑塊")
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、索引分配
支持隨機(jī)訪問(wèn)
FCB
文件名
.....
索引塊號(hào)
a.txt
13
索引表(每個(gè)文件都有一個(gè)索引表,FCB保存著索引表的物理塊號(hào))
邏輯塊
物理塊
0
6
1
98
2
5
3
12
4
4
上面文件存放的塊號(hào)為6->98->5->12->4,一個(gè)索引表不夠可以鏈接另外一個(gè)物理塊再創(chuàng)建一個(gè)索引表
,這種鏈?zhǔn)叫事?#xff0c;一般采用多級(jí)索引。
二、文件存儲(chǔ)空間管理
分區(qū)
一個(gè)磁盤分為好幾個(gè)文件卷或區(qū),A盤B盤D盤等,這些都是邏輯分區(qū),
通常將一個(gè)磁盤分為好幾個(gè)邏輯分區(qū),也可以把好幾個(gè)磁盤劃為一個(gè)邏輯分區(qū)
分區(qū)結(jié)構(gòu)
在一個(gè)分區(qū)內(nèi)分為目錄區(qū)和文件區(qū),目錄區(qū)存放目錄基本信息和索引、文件區(qū)存放具體數(shù)據(jù)
文件空閑空間管理
1、空閑區(qū)鏈表法
將連續(xù)的空閑塊鏈接成鏈表,使用時(shí)尋找最佳空閑區(qū)、如何刪除空閑鏈表節(jié)點(diǎn)、回收時(shí)加入鏈接尾部
2、位示圖法
0
1
2
3
4
5
1
1
1
0
1
1
位為1代表非空閑塊,根據(jù)磁盤塊號(hào)算出位的位置,然后管理文件物理結(jié)構(gòu)和存儲(chǔ)空間管理就為您介紹到這里,感謝您關(guān)注懶咪學(xué)編程c.lanmit.com.
本文地址:https://c.lanmit.com/czxt/Linux/38865.html
總結(jié)
以上是生活随笔為你收集整理的linux文件物理结构,文件物理结构和存储空间管理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux获取ad用户列表,Powers
- 下一篇: 连接linux工具Mtr,mtr命令_L