這一篇是翻譯這裡(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnembedded/html/embedded06172003.asp)的前半段...
CE 的 File 操作是由 FileSys.exe完成的,也就是說,program中有關file 的操作,file的api都是由FileSys.exe 這個 progam 完成。
詳細一點說,FileSys.exe 負責 ObjectStore和Storage Manager。
CE的檔案系統結構跟Linux比較相似,存在於 Root : "\" 下。
跟Windows 的file system 有很多driver letter 為root 反而比較不同。
CE中,File Driver 會mount在 Root "\" 下的一個folder (跟linux一樣)。
FileSys.exe 含有以下三個component:
- ROM Filesystem
- Storage Manager
- Object Store
Object Store實際上是在memory heap中,Object Store內含 RAM system Registry,RAM filesytem,Property Database。
Registry 是所有CE所必須的,在CE 4.0 之前,registery 都是存在RAM 中,到了CE .NET後,registery 可以在RAM 或是以file的形式存在其他storage中。
RAM filesystem和Property Database則是optional,designer可以依需要選擇是否要加入這個支援到FileSys.exe這個module中(在platformbuilder)。
RAM File System一般就會mount在root上"\",也就是說,Root就是RAM Filesystem。
RAM File system下的file會直接出現在root"\"下。
ROM File System則會mount在"\Windows"下。也就是說,CE的"\Windows" folder是read-only。
Storage Manager是CE .NET新增加的module,負責所有Storage和Storage中使用的Filesystem。
Storage Manager主要處理四件事:
- Filesystem Filter
- Filesystem Driver
- Partition Driver
- Storage Driver
這四個driver和整個FileSys.exe的關係如下圖所示:
圖中可以看出,Block device負責storage hardware相關的read/write動作,Partition Driver負責在Storage中模擬出partition的動作(分割),其上是Filesystem。在Partition(在沒有partition的storage則直接對Block)做出filesystem。
上面是Filter,Filter可以讓designer implement一些像encription之類的動作
。另外,看Filter的位置,可以知道,Filter的動作只能對Block device,所以designer沒有辦法在ROM Filesystem和Object Store加上自己實做的encription動作。
除了實際的Block device外,Storage Manager也可處理network filesystem,只要filesystem implment所有 Storage manager和Filesystem Filter所需要的API,就可以完成一個實際的storage。
以下說明system loading filesystem的動作:
boot - NK.exe 啟動,將在ROM Filesystem中的FileSys.exe 載入,FileSys.exe將在ROM 中的registry 載入到RAM中初始化。
FileSys.exe讀入registry,依照registry中的設定值load其他的driver,第一個load的是device.exe,這個driver依照HKLM\Driver\builtin的內容依序將其他driver load進來。
Block driver也會在這個registry key下,所以也會被load進來。Block Driver "advertise" 一個特殊的class id : BLOCK_DRIVER_GUID {A4E7E......略}。
FileSys.exe中的Storage Manger提供一接口,接收所有block device driver loading, unloading時發出的通知訊息。
當有Blockdevice driver loading時,Storage Manager 對block device driver作open動作,並且查詢他的profilename。
每個block device都在registry中存有一個自己的PROFILE,說明這個block device使用的partition driver和filesystem driver種類。
Storage Manager 知道了block device使用的partition 和filesystem driver後,就去把這些driver load進來。
partition driver load進來後,Storage Manager請parition driver將block device中所有的partition 列出。同時列出partition使用的filesystem,Storage Manager再將filesystem driver loading進來,將對應的partition mount到對應的目錄。