(一)文件操作
VFS 在讀寫操作之外提供了文件打開和關(guān)閉操作芯杀。
1、打開操作(open)——負(fù)責(zé)文件路徑名解析和權(quán)限檢查
打開操作創(chuàng)建file結(jié)構(gòu)图仓,一個 file 結(jié)構(gòu)描述一個進(jìn)程對一個文件或一種 I/O 操作方式罐盔,成為打開文件對象。ucore 的 file 結(jié)構(gòu):
ucore 為每個進(jìn)程準(zhǔn)備了一個 file 結(jié)構(gòu)數(shù)組救崔,稱為文件描述符表:
idleproc 進(jìn)程的 files_struct 是單獨(dú)建立的惶看,其余進(jìn)程是從父進(jìn)程復(fù)制的捏顺。
文件打開操作 open 。(具體過程見 ppt)
獲得文件描述符后可對其進(jìn)程行I/O 操作纬黎。在所有的文件I/O操作中草丧,用文集愛你描述符代替文件名,避免路徑名的重復(fù)解析莹桅。讀寫操作后會自動調(diào)整讀寫頭的位置。
2烛亦、關(guān)閉操作(close)——釋放打開文件對象
具體過程見 ppt诈泼。
3、文件讀操作(read)
具體過程見 ppt煤禽。
4铐达、文件寫操作(write)
具體過程見 ppt。
文件讀寫兩種方式:①直接讀寫(read檬果、write)瓮孙;②間接讀寫(mmap 類系統(tǒng)調(diào)用--> 將文件映射到進(jìn)程,讀寫時缺頁选脊,將工作交給虛擬內(nèi)存管理)
5杭抠、
6、Linux 的 open恳啥、close偏灿、read、write钝的、seek (具體見 ppt)
關(guān)閉操作不會刪除文件翁垂,不能再用描述符使用,還在系統(tǒng)中還可以再次打開硝桩。問阿金一旦被刪除沿猜,就永遠(yuǎn)從系統(tǒng)消失了。write 返回的是真正寫入的字節(jié)數(shù)碗脊,可能少于 count 參數(shù)啼肩。seek 將文件fd的讀寫頭重定位到參數(shù) offset 處。
(二)文件緩存/共享
1望薄、文件緩存
暫存文件內(nèi)容的內(nèi)存稱為文件緩存疟游。
建立緩存的方法——鏈表、Hash 表痕支、基數(shù)樹(類似于多級頁表)
2颁虐、文件共享
共享 --> 一個文件能被多個用戶或進(jìn)程使用 -->可以實現(xiàn)進(jìn)程間通信。
文件屬主(owner)——文件擁有者卧须;文件組(group)——一組用戶另绩,可共享該文件儒陨;其他用戶(others)——既不是屬主也不是同組用戶
文件的共享權(quán)限:
多個用戶同時存取一個共享文件 --> 保持文件的一致性(完整性) --> 與進(jìn)程的同步密切相關(guān)
3、文件保護(hù)
保護(hù) -->文件存取控制笋籽,限制用戶對文件的存取操作蹦漠。
對文件的操作通常包括:讀、寫车海、執(zhí)行笛园、執(zhí)行、追加侍芝、刪除研铆、列表、拷貝州叠、換名等棵红。
(1)直接保護(hù)方法
為每個文件或者目錄定義一個存取控制表ACL(Access Control List),規(guī)定各用戶可執(zhí)行的操作咧栗。
濃縮 ACL——把用戶分為三類(文件屬主逆甜、同組用戶、其他用戶)致板,值規(guī)定每類用戶的存取權(quán)限交煞。將文件的存取權(quán)限濃縮為三種(讀、寫可岂、執(zhí)行)错敢。
若覺得9位太粗,可以加 ACL缕粹,Linux 對兩種均支持稚茅。--> 位圖 + ACL
Windows --> DACL(自主存取控制表)
(2)其他保護(hù)方法
4、文件恢復(fù)
保證文件系統(tǒng)可靠性 --> eg:RAID平斩、備份與恢復(fù)
備份方法:全量備份亚享、增量備份 --> 異地備份、災(zāi)難恢復(fù)
由于緩存绘面,文件系統(tǒng)的數(shù)據(jù)同時存在于內(nèi)存和外存欺税,需要保證一致性 --> 事務(wù)和日志。
(1)事務(wù):完成一個特定任務(wù)所需的一組操作稱為一個事務(wù)
為保證文件系統(tǒng)的一致性揭璃,事務(wù)應(yīng)具有原子性晚凿。 --> 需在外存增加一個日志
(2)日志:記錄各種事務(wù)
EXT4上增加了日志,EXT3還沒有瘦馍。
日志與事務(wù)能夠保證系統(tǒng)的一致性歼秽。