日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

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

發(fā)布時(shí)間:2024/9/30 linux 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux文件物理结构,文件物理结构和存储空间管理 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文將要為您介紹的是文件物理結(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。