虛擬文件系統——更好的文件抽象層

虛擬文件系統——更好的文件抽象層

任何一個軟件設計的難題都可以通過增加一個抽象層來解決
——題記

我們的系統開發中,經常遇到一些難辦的事情,比如,一臺linux服務器上,從源裏安裝了一套apache+php+mysql,然後另外一個管理員發現其中一個php項目的php版本不夠,就編譯安裝了一套新的php,然後將apache的php配置鏈過來。但php的配置要修改的話,就十分麻煩。

還有,像linux編譯安裝軟件,如果安裝好後,工程刪掉,再想移除安裝的文件就十分困難。

目前並沒有非常好的方式來讓軟件不產生垃圾文件,那麼這個原因可能就是操作系統對文件系統的管理並不十分先進,我們設計了一套虛擬文件系統來解決操作系統的諸多問題。

虛擬文件系統整體設計

虛擬文件系統是相對於真實文件系統而言的,虛擬文件系統不是磁盤文件的組織格式,而是抽象出來的文件樹的集合。例如在Windows下,真實文件系統可能是這樣的:

C:\
C:\program files\
C:\windows\
C:\users\
...

但虛擬文件系統,更像是Windows中庫的概念,是一組文件夾的集合,而且你可以通過api,動態的向其中增加或移除對應的目錄。
虛擬文件系統的目錄結構是仿照linux的,是按照功能區分,而不是物理結構區分。
例如:

/os/                    # 對應C:\windows
/software/              # 對應C:\program files\ 、 D:\program files\
/software/office/10/    # 對應C:\program files\office10

這樣的結構,在各種系統上,都能存在相同的抽象結構,從而,我們開發跨平臺程序,不再需要考慮文件系統結構的問題。

這樣設計的好處

首先是軟件易移動,在實目錄結構的情況下,軟件可能被其他軟件引用,那麼想移動軟件,就十分困難,但在虛擬文件系統下,由於多了一層映射,可以非常方便的修改映射路徑。如果你的C盤使用滿了,那麼只需要簡單的將一部分文件拷貝到D盤,重新指定路徑映射,不再需要進行任何其他操作。

其次是可以整合環境變量的功能。
linux下環境變量並不是十分關鍵,其原因就是在文件系統下,每款軟件幾乎都有固定的安裝位置,所以有時可以減少環境變量的指定。而通過虛擬文件系統,爲每款軟件分配獨立的路徑規則就可以,無需使用環境變量就可以方便的找到對應的軟件。

跨平臺設計

虛擬文件系統由於封裝了底層的文件系統,實際上可以進行跨平臺設計,抽象出一套通用的跨平臺的文件路徑模式,提供通用的接口來進行底層文件處理。

包括路徑的轉換工作,在不同平臺下,應該轉換爲不同的路徑格式。

設計思路可以參考Qt的跨平臺文件系統設計。

文件目錄映射設置

提供虛擬目錄瀏覽器進行查看,
提供編輯的接口,可以向任意一個虛擬目錄中,添加任意的真實目錄、真實文件。也可以移出一個目錄下的部分內容。
還可遍歷檢索全部的虛擬目錄,自動去除不存在的真實目錄和文件。

在虛擬目錄查看器下,也可以查看實目錄,並且進行實目錄移動時,會自動修改虛擬目錄的鏈接。

虛擬目錄和實目錄模式的兼容

在添加虛擬目錄後,出現了一系列問題,首先,軟件工作的訪問文件的目錄是實目錄,還是虛擬目錄。
答案是看你使用哪套接口,軟件訪問文件系統,必然是通過編程接口來的,如果使用系統底層的編程接口,那麼自然是使用實目錄,如果使用新的動態庫進行的文件系統訪問,那麼就是訪問虛擬目錄。
一般,我們推薦使用虛擬路徑進行訪問,這樣軟件即使被移動,那麼虛擬目錄依舊可以被重定向。

其次的問題就是當前目錄和控制檯的問題,我們一款軟件工作的當前目錄可以是虛擬目錄嗎?
我想答案是不可以,也沒有必要,當前目錄的作用一般是一些工具類軟件,爲了確定當前工作路徑的位置,這樣方便尋找要進行操作的文件。而虛擬目錄的作用,往往是爲了讓軟件能夠清楚系統中的其他軟件的位置,爲了在控制檯下能夠使用虛擬目錄,那麼我們需要一個虛擬目錄控制檯,但我個人不覺得這個設計有意義,因爲控制檯也是一樣,沒必要非得運行在虛擬目錄下。

虛擬文件系統和註冊表

其實windows的註冊表有部分虛擬目錄的功能,放置配置文件,設置路徑參數等等,幾乎是windows程序的配置檔案集合。
但我個人很討厭註冊表的設計,因爲他有個關鍵的問題是,用戶很難去手動的瀏覽和配置相關係統信息,也就是說,他的抽象層次太底層,而且註冊表的設計方式,更像是一個大配置文件庫,誰都可以放,而刪除相關的配置信息時,又百般困難,如果註冊表有表項殘留,那麼很可能會造成一款軟件的安裝失敗。

我不希望虛擬文件系統有配置參數的功能,我只希望它作爲一款抽象的文件系統,爲用戶提供訪問的控制,權限管理,目錄映射,目錄移動,自動無效目錄刪除等操作。要求其穩健、簡單,讓用戶可以通過GUI方便的控制即可。

虛擬文件的多用戶切換

雖然我們現在一款電腦往往只有一個用戶,但畢竟用戶組的概念對計算機還是十分重要的,畢竟一款軟件若能爲不同用戶提供不同的配置,確實是非常的方便。而現在,這些都放到用戶的文件夾中,既不好管理,卸載時又難以刪除。若啓用虛擬文件系統,那麼方便了,我們可以設置兩部分的虛擬文件配置,一部分是系統全局路徑配置對所有用戶都有效,一部分是用戶獨有配置,只對當前用戶有效,那麼在用戶切換時,我們可以切換相應虛擬文件配置。於是不同用戶的虛擬文件路徑沒變,但其中的內容卻變了。

總結

虛擬文件系統的設計,是針對當前操作系統中配置難,軟件管理難的問題提出的,相當於是在傳統文件系統上增加了一部分抽象層。由於幾乎沒有桌面軟件不依賴文件系統,所以推廣這款虛擬文件系統是很難的。不過我希望通過建立跟這個設計相符的軟件包管理器,然後將這種軟件包格式進行推廣,逐漸讓大家瞭解到虛擬文件系統的優勢,也能逐步將傳統的文件系統的濫用降低,從而最終形成,只有特定有root權限的軟件可以讀寫全部路徑,以及只有經過root用戶授權後的任意路徑寫入存在,其他默認路徑讀取都是通過靈活的虛擬路徑進行訪問的方式。

本文純屬個人對操作系統的設計觀點,可能有很多地方考慮不周,如有其他意見建議,歡迎批評指正及討論。

本文屬 西風逍遙遊 原創, 轉載請註明出處: 西風世界 http://blog.csdn.net/xfxyy_sxfancy

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章