5 filesystem implementation requirements
本章詳細描述所有檔案系統的實現都必須堅持的要求。
5.1 general
rtems~檔案系統框架的用意是與~posix~檔案和目錄介面標準相相容。
下面檔案系統的特性導致了功能交換層。
向應用程式提供與~posix~標準相容的函式集,使他們能夠與檔案系統中的檔案,裝置和目錄對接。
對這些函式來說介面不會影響下級檔案系統的實現(???);
在~rtems~檔案系統框架下開發允許掛載不同型別的檔案系統到基礎檔案系統上;
定位檔案資訊的機制可能在不同檔案型別之間有很大的差異;
定位乙個檔案的過程可能需要跨越檔案系統邊界;
檔案系統之間的轉換和在不同的檔案系統下處理需要訪問的資訊在~posix~函式級別是不可見的;
posix~介面標準中的一些函式通過用檔案字串名稱的方式提供對檔案的訪問,另外一些通過整數檔案描述符進行訪問;
整數檔案描述符的本質及其相關的處理與作業系統和檔案系統高度相關;
目錄和裝置資訊必須被一些相同的可用於檔案的函式加以處理;
目錄的形式內容和裝置的資訊與普通檔案是有很大的不同的;
檔案,目錄和裝置代表了樹結構中的元素(節點);
用於處理檔案系統上每個節點型別的規則是與節點相關的,但不在~posix~介面的函式中考慮。
5.2 檔案和目錄刪除約束
所有的檔案系統都必須兌現以下~posix~的約束。
如果乙個節點是乙個帶有孩子的目錄,它不能被刪除;
任何檔案系統的根結點,無論是基礎檔案系統或掛載檔案系統的,都不能被刪除;
乙個節點作為檔案系統掛載點的目錄是不能被刪除的;
支援硬鏈結的檔案系統,需要維護鏈結數。在移動節點之前,節點接數要減一。鏈結數必須小於一以允許節點的刪除。
access()
chdir()
chmod()
chown()
close()
closedir()
fchmod()
fcntl()
fdatasync()
fpathconf()
fstat()
fsync()
ftruncate()
link()
lseek()
mkdir()
mknod()
mount()
open()
opendir()
pathconf()
read()
readdir()
rewinddir()
rmdir()
rmnod()
scandir()
seekdir()
stat()
telldir()
umask()
unlink()
unmount()
utime()
write()
檔案系統的型別以及檔案系統內的節點型別
決定了處理的性質,必須為上述物件執行上面函式進行處理。
rtems~檔案系統提供了乙個框架,允許開發和整合新的檔案系統,不需要改變基本的框架。
為了提供所需要的功能切換,每個~posix~檔案和目錄函式實現成乙個~shell~函式(???)。
shell~函式遵守~posix~介面標準。
在這個功能外殼裡(????),訪問檔案系統和節點型別資訊是通過呼叫合適的檔案系統和節點型別中特殊的處理函式處理~posix~函式呼叫。
5.3.2 file/device/directory function access via file control block rtems_libio_t structure
posix~open()~函式返回乙個整數檔案描述符作為檔案控制塊資訊以引用的特定檔案。
檔案控制塊包含的資訊用於定位節點、檔案系統、安裝表和處理程式資訊。
這是乙個~rtems~內部資料結構,跟蹤所有當前定義的檔案系統中的描述符。
該檔案的~open()~操作返回的索引在這個表中引用乙個位置。
該位置包含指向此檔案的檔案描述符表項的指標。rtems_libio_t~結構代表檔案控制塊;
訪問檔案描述符表是由訊號量控制,申請通過~rtems_libio_allocate()~函式實現。
此函式將獲取乙個訊號量然後掃瞄檔案控制塊來確定哪些是可供使用的空位置。
第一空位置將被標記為使用,而這個位置的索引作為~open()~返回的檔案描述符被返回。
完成對檔案控制塊表改變後,訊號量被釋放,以允許對這個表的其他操作;
如果定義了~configure_libio_maximum_file_descriptors~常數,它的值將代表檔案描述符的最大允許的數量。
如果~configure_libio_maximum_file_descriptors~沒有指定,它的預設值為~20,將作為檔案描述符的數量上限。
struct rtems_libio_tt ;
size:對於乙個檔案,代表目前在乙個檔案中儲存的位元組數。對於目錄這個欄位是不填寫的;
offset:對於乙個檔案,這是檔案位置相對於該檔案開始位置的位元組數。對於目錄,這是~dirent~結構序列的位元組偏移量;
pathinfo: 這是乙個結構,提供指向節點的資訊指標、指向~ops~表函式的指標、指向處理函式的指標和指向與此節點關聯的~mount~表項的指標;
file_info:乙個指向節點處理函式資訊的指標;
handlers:指向乙個處理函式表,用於通過乙個檔案描述符索引操作乙個檔案、裝置或目錄。
5.3.3 file/directory function access via rtems filesystem location info t structure
下面的~rtems_filesystem_location_info_tt~結構提供了足夠的資訊來處理乙個掛載檔案系統上的節點。
struct rtems_filesystem_location_info_tt ;
它包含乙個指向檔案系統特定的節點結構的無型別指標,乙個指向包含該節點的檔案系統的~ops~表的指標
乙個指向該節點的處理程式表指標和乙個指向與該節點所在檔案系統相關的~mount~表項。
檔案系統學習5 檔案系統IO子系統
io系統 01 io子系統 io系統 02 使用者態的檔案io操作 io系統 03 虛擬檔案系統 vfs io系統 04 節點路徑搜尋 io系統 05 open流程分析 io系統 06 因open建立的結構體關係 io系統 07 io寫流程分析 io系統 08 io讀流程分析 io系統 09 直接i...
作業系統 5 檔案系統
檔案和檔案系統 檔案 資料的有序集合,使用者儲存資訊於輔存的基本邏輯單位。檔案系統的功能 提供了對資料的儲存手段 提供了對檔案操作的功能介面 維護檔案屬性 檔案系統中的常用術語 域 基本資料單元,乙個域保護乙個值,如名字 日期或感測器讀取的數值等。記錄 一組相關域的集合,長度固定或可變,如一條記錄可...
6 檔案系統
root edaserver1 ls bin boot dev etc home lib lib64 lost found media misc mnt net opt proc root sbin selinux srv sys tftpboot tmp usr var bin所有賬號命令,二進位...