為什么蘋果電腦硬盤不分區(qū)?

0 評論 10681 瀏覽 0 收藏 9 分鐘

本文翻譯自程序員的問答社區(qū)stackexchange.com上的一個(gè)問題。

有人可以給我解釋一下,為什么Linux的文件系統(tǒng)是“單目錄層階樹狀”結(jié)構(gòu),而不像Windows那樣有個(gè)C:\、D:\分區(qū)啥的,這樣做有沒有特別的原因呢?

一句話答案:不分區(qū)的好,Windows那是為了向下兼容。

Doug O’Neal 163票

說起來Unix的文件系統(tǒng)的道行要比Windows的早很多年,所以您的問題得改成:“為什么Windows要自搞一套弄出個(gè)硬盤分區(qū)符號來呢?”

樹狀的文件結(jié)構(gòu)有個(gè)優(yōu)勢就是任何子目錄或者文件,都能順著根目錄找到,所以,如果你需要把本地文件遷移到一個(gè)網(wǎng)絡(luò)硬盤上,這時(shí)候?qū)τ谲浖碚f,它們不會察覺到任何區(qū)別。

假設(shè)你有一套系統(tǒng),操作系統(tǒng)焊死不能動,但是有個(gè)程序有很高的I/O需求,那么你可以很方便地把/usr目錄加載為只讀,然后把/opt(應(yīng)用程序安裝目錄)目錄加載到一塊SSD上。這樣整個(gè)文件系統(tǒng)的結(jié)構(gòu)對于操作系統(tǒng)來說沒有發(fā)生任何改變。

然而在Windows下,這種問題就比較討厭,特別是程序路徑前面帶著個(gè)C:\Program Files\的時(shí)候……

Gilles 70票

這都是有歷史原因在里面的,部分上是因?yàn)檫@樣做在當(dāng)時(shí)更有效。

Multics

Multics是我所知的歷史上第一個(gè)采用“層階樹狀文件結(jié)構(gòu)”的操作系統(tǒng),一個(gè)目錄里還嵌著子目錄這種機(jī)制。引用R. C. Daley和P. G. Neumann的《通用輔助文件存儲(A General-Purpose File System For Secondary Storage)》一文中的話:

論文第二部分闡述了一種“層階樹狀文件結(jié)構(gòu)”的文件系統(tǒng),對于操作系統(tǒng)來說,它非常高效。這種結(jié)構(gòu)兼顧了可靠性和靈活性……

為了便于理解,我們可以把這種結(jié)構(gòu)想象成一棵樹,文件的樹,其中有一些目錄其實(shí)也是文件。但是有一個(gè)例外的目錄,它自身的指針只指向一個(gè)單一的,確定的目錄,那就Root目錄。它沒有明確地被其他目錄所指,Root目錄只是隱式地代表一個(gè)虛擬的分支,我們稱這個(gè)分支結(jié)構(gòu)為“文件系統(tǒng)”。

在任何時(shí)候,用戶都處于一個(gè)目錄下面,我們稱它為“工作目錄(working directory)”,用戶可以通過指定入口訪問工作目錄下面的文件,而且多個(gè)用戶可以同時(shí)工作在同一個(gè)工作目錄之下。

在其他各個(gè)方面,Multics追求的是靈活性,用戶只需工作在整個(gè)文件系統(tǒng)的一條分支上,其他的不用管,但還能保證用目錄管理文件的便捷性。目錄還被用來控制訪問權(quán)限——目錄的READ屬性允許用戶訪問目錄中的文件,而EXECUTE屬性允許用戶修改目錄中的文件(這個(gè)特性被后來的unix系統(tǒng)繼承下來)。

Multics還遵循了“單一存儲對象池”的設(shè)計(jì)原則,但是論文沒有在這方面展開。“單一存儲對象池”對于當(dāng)時(shí)的硬件條件來說非常合適,那時(shí)候沒有可移動的硬盤,起碼是沒有人關(guān)心這個(gè)問題。Multics確實(shí)有一個(gè)備用的備份存儲池,但對于用戶來說,它是不存在的。

Unix

Unix系統(tǒng)深受Multics的影響,但是比起Multics的“靈活”,Unix更專注于加強(qiáng)系統(tǒng)的“簡潔”。

單一目錄樹層級”的文件系統(tǒng)就很適合Unix系統(tǒng)。就和Multics一樣,存儲池的細(xì)節(jié)經(jīng)常不需要用戶關(guān)心,但是后來出現(xiàn)了可拆卸的硬盤,Unix通過mount和umount兩個(gè)命令把對存儲設(shè)備的操作暴露給用戶(只有“管理員權(quán)限”的用戶才能執(zhí)行這樣的操作)。在《Unix分時(shí)系統(tǒng)設(shè)計(jì)(The Unix Time-Sharing System)》一文中,Dennis Ritchie和Ken Tompson解釋道:

雖然系統(tǒng)根目錄一般都在同一個(gè)存儲設(shè)備上,但是對于其他分支目錄則未必要這樣做。出于兩種考慮,我們需要mount命令完成存儲設(shè)備掛載的工作:普通文件的文件名一致性,和文件所在的存儲設(shè)備可能有其獨(dú)立的文件存儲結(jié)構(gòu)。通過mount命令,可以把之前的一個(gè)文件,替換成一個(gè)可移動存儲設(shè)備上的完整的目錄結(jié)構(gòu),事實(shí)上,mount命令把文件層級的某一部分,通過引用外部數(shù)據(jù),替換成一個(gè)新的結(jié)構(gòu)。這樣對于之前整個(gè)文件系統(tǒng)來說,沒有發(fā)生任何改變。

其實(shí),拿我們的系統(tǒng)安裝過程舉例,root目錄一直在我們的硬盤上占了一小塊地方,但其他用戶數(shù)據(jù)在不同的硬盤上,通過mount機(jī)制,按序列加載組成一個(gè)初始化的系統(tǒng)。一個(gè)“可掛載”的系統(tǒng),完全是通過讀寫特殊文件完成的。各種應(yīng)用可以創(chuàng)建自己的文件系統(tǒng),或者簡單地從他處拷貝一份。(注:上面這段文字的中心思想:在UNIX中,一切都是文件。

“層階樹狀文件系統(tǒng)”還有一個(gè)優(yōu)勢,就是可以把管理存儲設(shè)備的復(fù)雜任務(wù)交給內(nèi)核處理,這就意味著內(nèi)核雖然越來越復(fù)雜,但是對于建立其上的應(yīng)用來說,其結(jié)果就是保持簡潔,因?yàn)閮?nèi)核已經(jīng)把臟活累活都包了,大部分應(yīng)用都不用關(guān)心這部分細(xì)節(jié),這是一種更加自然的設(shè)計(jì)。

Windows

Windows系統(tǒng)流淌著兩支古老血脈:設(shè)計(jì)運(yùn)行在VAX微機(jī)上的VMS操作系統(tǒng),和早期Intel微機(jī)(如8080、Z80)上運(yùn)行的CP/M操作系統(tǒng)。

VMS有一個(gè)分布式的層級文件系統(tǒng),叫做Files-11。在Files-11中,一個(gè)文件的完整路徑包括一個(gè)“節(jié)點(diǎn)名稱”、一個(gè)關(guān)聯(lián)的用戶賬戶、設(shè)備名稱、目錄樹、文件名和文件類型,以及版本號。VMS有強(qiáng)大的Logical Names功能,這個(gè)功能允許自定義“快捷方式”到指定的路徑,所以用戶不需要在意目錄的“真實(shí)”路徑。

CP/M是為了64KB的內(nèi)存和軟盤系統(tǒng)設(shè)計(jì)的。為了一切從簡,所以從誕生起,它就沒有“目錄”這個(gè)概念,但是文件是通過引用“驅(qū)動器位置”來訪問的,比如A:或者B:。

MSDOS 1.0繼承了CP/M的這個(gè)特性,所以當(dāng)MSDOS 2.0引入“目錄”的概念以后,為了兼容1.0也在路徑前保留了“盤符”字符,而斜杠“/”符號是原來VMS和CP/M系統(tǒng)中表示“命令參數(shù)開始”的符號,所以后來的DOS以及Windows必須區(qū)分,并采用反斜杠“\”符號作為路徑分隔符。

Windows繼承了DOS和VMS的習(xí)慣,雖然已經(jīng)意義不大,但是依舊保留著“盤符”的傳統(tǒng)。如今,在Windows底層采用的是UNC路徑(通用命名規(guī)則即\servername\sharename的規(guī)范),但這只是一些高級Windows用戶需要知道的功能,Windows現(xiàn)在確實(shí)可以通過“重解析點(diǎn)”(Reparse Points)來掛在存儲設(shè)備(所以不需要C:這樣的盤符了)。

為什么蘋果電腦硬盤不分區(qū)?

來源:驅(qū)動之家

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發(fā)揮!