
前言
我們所有的文件都是與進程相關(guān)的文件–進程打開的文件
系統(tǒng)中是不是所有的文件都被打開了呢?如果沒有被打開呢?那么沒有被打開的文件在哪里保存起來呢?
- 在宏觀上,大部分文件是沒有被打開的。沒有被打開的文件保存在磁盤,SSD中。
文件被打開后會在內(nèi)存里,也會像進程一般,OS會有一定的數(shù)據(jù)結(jié)構(gòu)對其進行管理,那么OS要不要管理一下磁盤上的文件呢?
- 操作系統(tǒng)OS本身是在內(nèi)存里的,打開文件也是在內(nèi)存里的,本質(zhì)上OS是管理內(nèi)存即可,但是磁盤是一個很重要的設(shè)備,里面存儲著我們很多重要的數(shù)據(jù)以及程序等等,磁盤是一個大的存儲設(shè)備,那么如何保證我們在磁盤里面準(zhǔn)確的找到我們想要的文件并打開呢?OS就會在磁盤里做一個工作–快速定位一個文件
例如:我們?nèi)粘I钪械牟锁B驛站,你在網(wǎng)上買了幾個快遞到了菜鳥驛站,每日會菜鳥驛站會到很多個快遞,當(dāng)快遞到站了其工作人員會將快遞按照快遞單號都分門別類的放好,也便于人們?nèi)ト】爝f,其核心工作就是為了讓用戶快速定位快遞進行提取,這也就是相當(dāng)于我們的OS所做的工作。
菜鳥驛站的老板不僅會做這些工作,還需要知道菜鳥驛站今天會到多少快遞,已經(jīng)存儲了多少快遞,還有預(yù)估還能存儲多少快遞等等信息,為讓菜鳥驛站好好的運作下去,要讓這些包裹都好好存儲起來。
整個菜鳥驛站就是我們的磁盤,菜鳥驛站的包裹就是我們一個個沒有被打開的文件,菜鳥驛站的老板就相當(dāng)于我們OS內(nèi)的一個文件管理模塊–我們稱為文件系統(tǒng)
- 其主要工作是幫我們把磁盤空間好好管理起來,將眾多文件分門別類的放好,給用戶輸出一種統(tǒng)一的服務(wù),快速定位到文件,定位文件的方式就是我們的路徑
1.磁盤物理結(jié)構(gòu)
為了好好理解文件系統(tǒng),我們先來認識一下磁盤
- 磁盤我們大部分人都不理解,只是清晰其概念,是一個很大的存儲設(shè)備。
- 筆記本一般是不裝磁盤了,一般都是SSD(固態(tài)硬盤),臺式電腦可能還會有磁盤。
- 磁盤一般按照功能劃分會分成桌面級磁盤和企業(yè)級磁盤,退回到2012年,那個時候的電腦大部分裝的都是磁盤,SSD(固態(tài)硬盤)在那個時候比較貴。
我們今天談?wù)摰拇疟P是企業(yè)級磁盤。磁盤在今天是并沒有被淘汰,SSD在今天比磁盤依然是要貴的,磁盤存儲的數(shù)據(jù)量比較大,又便宜,性價比比較高
- 盤片:白色的盤像光盤一樣的就是盤片,我們的數(shù)據(jù)就是存儲在上面,我們平時見到的光盤是只讀的,只能被寫入一次,盤片是可以不限次數(shù)被寫入的,光盤一般只有一面是光的,也就是只有一面有我們的數(shù)據(jù),而盤片兩面都是光的,沒有正反,或者正反兩面都可以存儲數(shù)據(jù),家用的桌面級磁盤,這個盤片只有一片兩面,很薄;企業(yè)級磁盤拆開的就是一摞的。
-
磁頭:磁盤上一個像指針的東西,一個尖尖的就是我們的磁頭,一面一個磁頭,不是一個盤片一個磁頭,加點后磁頭就會移動到盤面區(qū)。
-
音圈馬達:盤片中央的位置就是我們的音圈馬達,馬達就是充電了就會轉(zhuǎn),盤片就是被音圈馬達帶動著旋轉(zhuǎn),盤片轉(zhuǎn)動的時候,我們的磁頭就會來回左右搖擺,磁頭的擺動就是在盤片上進行尋址。
-
伺服系統(tǒng):在硬盤的背面,有磁盤對應(yīng)的硬件電路,叫做伺服系統(tǒng),用來控制我們的磁盤,磁盤內(nèi)部的二進制指令通過伺服系統(tǒng)進行識別,比如開機關(guān)機尋址讀寫等等,控制盤片和磁頭進行尋址。
- 每一個盤片的轉(zhuǎn)動速度取決于錢越多轉(zhuǎn)動速度越快,磁頭擺的也就越快,對應(yīng)的速度也越快。
- 磁頭貼在盤片上,好像是挨在一起,但是是沒有挨在一起的,如果挨在一起就會刮花盤片,就會丟失數(shù)據(jù)。
- 在剛開機的時候一定是盤片高速旋轉(zhuǎn),然后磁頭懸浮在盤面之上,幫我們找到數(shù)據(jù),這個時候臺式機最怕的就是突然斷電或者強制關(guān)機,磁頭失去動力就會落下來,由于慣性盤片會持續(xù)旋轉(zhuǎn),那么就會刮花盤片。這也是磁盤為什么被淘汰的原因之一
- 我們聽到過很多說計算機只認識二進制01,這是沒問題的,但是電腦上真正存的是01二進制數(shù)據(jù)嗎?早期發(fā)明計算機的人發(fā)明了一種硬件電路,這個硬件電路可以短暫進行存儲數(shù)據(jù),存一個高低點位,我們叫做觸發(fā)器,有一個觸發(fā)器就存一個高電平,兩個觸發(fā)器就能存兩個,一個高電平一個低電平,所以這就是有和無,也就是1和0。計算機里面存的根本就不是0和1這樣的二進制數(shù)字,這是被人為規(guī)定出來的,根據(jù)不同的介質(zhì)0和1也會被賦予不同的含義,有的是以信號的強弱表示0和1,有的是以信號的有無表示0和1,所以主要我們對應(yīng)的計算機設(shè)備能夠找出對應(yīng)兩態(tài)的就可以用0和1進行表示。
- 磁盤能存數(shù)據(jù),我們可以將其想象成由無數(shù)個磁鐵構(gòu)成,磁鐵是具有南北兩極的,在磁盤當(dāng)中每一塊小磁鐵可以看做南極為1,北極為0,這樣盤片上連續(xù)寫一二十個字節(jié)也就是在改變小磁鐵的朝向,我們想改寫全1,就是將小磁鐵南極朝上即可。
- 一塊磁鐵扔到家里不管,如果很久不管依然會有磁性,這也就是磁盤為什么能長久存儲數(shù)據(jù)的原因,所以我們將磁盤叫為永久存儲設(shè)備
[總結(jié)]
1. 磁盤是有多個盤片和磁頭組成的,盤片和磁頭是1:1的
2. 磁頭和盤片經(jīng)過旋轉(zhuǎn)移動進行定位尋址
3. 磁盤是機械設(shè)備,不允許我們在其開機時進行移動、搬遷等等,出現(xiàn)物理上的損失
4. 盤片和磁頭離得比較近,所以要求我們的磁盤要防震,以及內(nèi)部要是無塵的,磁盤是很需要高精度的技術(shù)的,國外走的比較早,所以國外的技術(shù)是非常領(lǐng)先的
5. 企業(yè)磁盤的數(shù)據(jù)失去其價值的時候,是不會將磁盤隨便扔掉的,但是對于磁盤需要去銷毀,有人說可以消磁也有人說可以丟進火里燒毀,當(dāng)然了這兩種辦法都是可行的,但是這費人費力消耗太大,所以我們的企業(yè)通過和另一些企業(yè)通力合作,通過一定的指令技術(shù),將磁盤數(shù)據(jù)全部寫0或者1,來達到消除數(shù)據(jù)的功效,進行集中報廢
2.磁盤的物理存儲
磁盤各個面的展開圖如下:
-
磁道/柱面:這里面的扇區(qū)是我們磁盤IO的基本單位—不一定是系統(tǒng)和磁盤IO的基本單位,每一個扇區(qū)都有唯一的編號
- 磁頭、盤面:盤片的每一個面叫做盤面,每一個盤面都有唯一的編號
如果我們想訪問磁盤里的一個扇區(qū):
通過磁頭定位:磁道/柱面(cylinder),確認使用哪一個磁頭(head),再進行確認哪一個扇區(qū)(sector)
這種定位方案叫做CHS定位法
了解了這些,那么文件不就是多個扇區(qū)承載的數(shù)據(jù)嗎?
3.磁盤的邏輯存儲
我們先來認識一下磁帶
磁帶存儲的數(shù)據(jù)就在這一條帶子上面,它是圈起來通過馬達將其一點一點移動的,通過技術(shù)讀取帶子數(shù)據(jù),這一整個帶子圈起來就相當(dāng)于盤片里的一面,全部抽出來拉直了不就是一惡搞線性存儲結(jié)構(gòu)嗎?
在我看來,磁盤也就是一個非常巨大的線性空間,而扇區(qū)就是其中一塊一塊的連續(xù)空間,可以理解為磁盤是這一整個線性空間,而磁道和扇區(qū)就是這其中一個一個的子空間,也就是說,我們對磁盤的管理也就是對數(shù)組的增刪查改!我們就可以通過一個磁道有多少個扇區(qū)來訪問到目標(biāo)扇區(qū)
-
磁盤是會自己轉(zhuǎn)化成為線性地址供我們訪問的
-
操作系統(tǒng)認為,一次和磁盤IO一個扇區(qū)單位太小了,訪問速度太慢了,OS文件系統(tǒng)認為:IO的基本單位是4KB,如果一個扇區(qū)是512B,那么OS會一次訪問8個扇區(qū)去進行IO。
-
在OS內(nèi)部就會重新形成一個8個扇區(qū)為一個子數(shù)組的線性結(jié)構(gòu),這樣每8個扇區(qū)就會對應(yīng)一個數(shù)組下標(biāo)。這每一塊數(shù)組的地址就是邏輯區(qū)塊地址(Logical Block Address, LBA)
-
邏輯區(qū)塊地址(Logical Block Address, LBA)是描述計算機存儲設(shè)備上數(shù)據(jù)所在區(qū)塊的通用機制,一般用在像硬盤這樣的輔助記憶設(shè)備。LBA可以意指某個數(shù)據(jù)區(qū)塊的地址或是某個地址所指向的數(shù)據(jù)區(qū)塊?,F(xiàn)今計算機上所謂一個邏輯區(qū)塊通常是512或1024位組。ISO-9660格式的標(biāo)準(zhǔn)CD則以2048位組為一個邏輯區(qū)塊大小。
-
LBA是非常單純的一種定址模式﹔從0開始編號來定位區(qū)塊,第一區(qū)塊LBA=0,第二區(qū)塊LBA=1,依此類推。這種定址模式取代了原先操作系統(tǒng)必須面對存儲設(shè)備硬件構(gòu)造的方式。最具代表性的首推CHS(cylinders-heads-sectors,磁柱-磁頭-扇區(qū))定址模式,區(qū)塊必須以硬盤上某個磁柱、磁頭、扇區(qū)的硬件位置所合成的地址來指定。CHS模式對硬盤以外的設(shè)備來說沒什么作用(例如磁帶或是網(wǎng)絡(luò)存儲設(shè)備),所以通常也不會用在這些地方。過去MFM(Modified Frequency Modulation, 改良調(diào)頻式)和RLL(Run Length Limited)存儲設(shè)備都曾使用CHS模式,ATA-1設(shè)備更將延伸CHS(Extended Cylinders-Heads-Sectors, ECHS)也派上了用場。
-
SCSI采用LBA抽象定址。實際上硬件控制器還是以CHS來定址區(qū)塊,但無論驅(qū)動程序還是任何以低級訪問磁盤的應(yīng)用程序(例如數(shù)據(jù)庫軟件)通常都不再需要這個參數(shù)。各種要求區(qū)塊低級訪問的系統(tǒng)調(diào)用把定義好的LBA傳給驅(qū)動程序﹔最直接的情況下(邏輯器件與實體設(shè)備單一對應(yīng))驅(qū)動程序只是將LBA再傳給硬件控制器。
一個磁盤整體空間是非常大的,我們OS會將其劃分成一個一個小塊。會對這個空間進行分區(qū)操作,分完區(qū)又會對其進行分組,將每一個小塊進行管理就會將整個空間管理好了
大部分筆記本都只有一塊磁盤,我們電腦里的C盤D盤是我們系統(tǒng)對其進行了分區(qū)的。
4.文件系統(tǒng)
Linux磁盤文件特性:
文件=內(nèi)容+屬性
內(nèi)容和屬性分開存儲
內(nèi)容是大小不確定,可能很大,也可能很小,這是可變的
屬性是固定大小的,屬性的類別是一樣的,只不過每個類別內(nèi)容不一樣
我們所有的文件的屬性對應(yīng)的結(jié)構(gòu)體存儲都叫inode
注: 文件名不屬于文件屬性!
為了能解釋清楚inode
我們先簡單了解一下文件系統(tǒng)
Linux ext2文件系統(tǒng),上圖為磁盤文件系統(tǒng)圖(內(nèi)核內(nèi)存映像肯定有所不同),磁盤是典型的塊設(shè)備硬盤分區(qū)被劃分為一個個的block。一個block的大小是由格式化的時候確定的,并且不可以更改。例如mke2fs的-b選項可以設(shè)定block大小為1024、2048或4096字節(jié)。而上圖中啟動塊(Boot Block)的大小是確定的
-
Block Group
:ext2文件系統(tǒng)會根據(jù)分區(qū)的大小劃分為數(shù)個Block Group。而每個Block Group都有著相同的結(jié)構(gòu)組成。政府管理各區(qū)的例子 -
超級塊(Super Block)
:存放文件系統(tǒng)本身的結(jié)構(gòu)信息。記錄的信息主要有:bolck 和 inode的總量,未使用的block和inode的數(shù)量,一個block和inode的大小,最近一次掛載的時間,最近一次寫入數(shù)據(jù)的時間,最近一次檢驗磁盤的時間等其他文件系統(tǒng)的相關(guān)信息。Super Block的信息被破壞,可以說整個文件系統(tǒng)結(jié)構(gòu)就被破壞了 -
GDT,Group Descriptor Table
:塊組描述符,描述塊組屬性信息,有興趣的同學(xué)可以在了解一下塊位圖(Block Bitmap):Block Bitmap中記錄著Data Block中哪個數(shù)據(jù)塊已經(jīng)被占用,哪個數(shù)據(jù)塊沒有被占用 -
inode位圖(inode Bitmap)
:每個bit表示一個inode是否空閑可用。 -
i節(jié)點表(inode table)
:存放文件屬性 如 文件大小,所有者,最近修改時間等 -
數(shù)據(jù)區(qū)
:存放文件內(nèi)容
使用指令ls -i
就可以看到文件的inode
位于文件最前面的數(shù)字編號就是inode編號
系統(tǒng)中,標(biāo)識一個文件,用的不直接是文件名,而是inode
將屬性和數(shù)據(jù)分開存放的想法看起來很簡單,但實際上是如何工作的呢?我們通過touch一個新文件來看看如何工作。
為了說明問題,我們將上圖簡化:
創(chuàng)建一個新文件主要有一下4個操作:
- 存儲屬性
內(nèi)核先找到一個空閑的i節(jié)點(這里是263466)。內(nèi)核把文件信息記錄到其中。
- 存儲數(shù)據(jù)
該文件需要存儲在三個磁盤塊,內(nèi)核找到了三個空閑塊:300,500,800。將內(nèi)核緩沖區(qū)的第一塊數(shù)據(jù)復(fù)制到300,下一塊復(fù)制到500,以此類推。
- 記錄分配情況
文件內(nèi)容按順序300,500,800存放。內(nèi)核在inode上的磁盤分布區(qū)記錄了上述塊列表。文章來源:http://www.zghlxwxcb.cn/news/detail-847920.html
- 添加文件名到目錄
新的文件名abc。linux如何在當(dāng)前的目錄中記錄這個文件?內(nèi)核將入口(263466,abc)添加到目錄文件。文件名和inode之間的對應(yīng)關(guān)系將文件名和文件的內(nèi)容及屬性連接起來。文章來源地址http://www.zghlxwxcb.cn/news/detail-847920.html
到了這里,關(guān)于【linux深入剖析】深入理解基礎(chǔ)外設(shè)--磁盤以及理解文件系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!