版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、操作系統實習,南京工業(yè)大學信息學院計算機系,2,實驗題目,文件管理系統的設計,實驗目的,了解有關文件管理的知識;理解FAT16的存儲格式;掌握文件管理系統的開發(fā)方法。,3,基本要求,目錄操作命令:cd [] 改變當前目錄 create [] del dir[ [ ]] md rd ,設計并實現以下文件和目錄系統操作命令:,4,文件操作命令:open write [][insert] read [
2、 []] close type copy ren attrib [ ],5,程序初始化時構造如圖1所示的目錄結構。,7,目錄項(FCB)結構,struct FCB//每個目錄項16個字節(jié){char FileName[11];//文件名最多10個字符且以'\0'結尾char Fattrib;//文件屬性short int Addr;//文件首塊號short int F
3、size;//文件長度};,詳細說明參見《指導書》,8,1表示目錄,1表示系統,1表示隱藏,1表示只讀,,,,,目錄項中的屬性字節(jié):,9,根目錄,本系統的根目錄存儲在1~30號盤塊中,即存儲在Disk[1]~Disk[30]的盤塊中。因每個盤塊64B,每個目錄項16B,故每個盤塊可存儲4個目錄項,因此本系統根目錄中的文件目錄項及子目錄項最多共計120個。從31號盤塊開始為文件區(qū),用于存儲文件及子目錄。子目錄中的文件目錄項個數任意
4、(即不受“最多120個”的限制),只要磁盤文件區(qū)有空余空間。,10,用戶已打開文件表(UOF),設置一張“用戶已打開文件表”(UOF),用于記錄用戶當前正在使用文件的情況。,struct UOF { //定義用戶打開文件表的結構 char fname[PATH_LEN]; //文件全路徑名 char attr;//文件屬性,1=只可讀;0=可讀寫 short int faddr;//文件的首塊號 sho
5、rt int fsize;//文件大小(字節(jié)數) FCB *fp;//指向該文件的目錄項指針 short int state;//狀態(tài):0=空表項;1=新建;2=打開 short int readp;//讀指針,0=空文件 short int writep;//寫指針};,本程序中,用戶打開文件表用數組UOF uof[32]表示,即最多允許同時打開32個文件。,11,當前目錄curpath數據結構,
6、struct CurPath { short int fblock;//當前目錄的首塊號 char cpath[PATH_LEN];//當前目錄路徑名};,當前目錄用全局變量CurPath curpath存儲。根目錄的路徑字符串cpath是“/”,首塊號為1。,12,刪除文件恢復表udtab數據結構,struct UnDel //恢復被刪除文件信息表的數據結構{ char gpath[PATH_LE
7、N]; //被刪除文件的全路徑名(不含文件名) char ufname[FILENAME_LEN]; //被刪除文件名 short ufaddr;//被刪除文件的首塊號 short fb;//存儲被刪除文件塊號的鏈表頭指針};,本系統的被刪除文件恢復表用全局數組udtab存儲,定義為:UnDel udtab[40]; 退出系統時,該數組以文件名“UdTab2008.dat”存盤,以便下次啟動時調入使用。,13,
8、fb所指的盤塊中記錄了對應的被刪除文件的所有盤塊號(包括文件首塊號)。由于只用一個盤塊存儲被刪除文件的塊號,因此只適用于盤塊數不超過31的情況(以-1作為結束標記)。功能完整程序"OS實驗.exe"中已作了如下改進:,udtab表存于Disk[][]的一片連續(xù)盤塊空間;修改了struct UnDel,使之包含FCB的全部信息,這樣即使原先的目錄項位置已被占用,仍可能恢復該文件;文件的塊號允許用多個盤塊存儲,即被
9、刪除文件長度不受最多31個盤塊的限制。盤塊大小改為256B, UnDel表項128B,每個盤塊存儲2個表項, UnDel表占20個連續(xù)盤塊。,14,全局變量ffbp和Udelp,short Udelp; 它是udtab表的第一個空表項的下標,系統初始化時為0。short ffbp; 它是分配盤塊時FAT表的起始指針(下標),這樣使得分配盤塊類似于分區(qū)存儲管理的“循環(huán)首次適應”分配算法,這有利于被刪除文件的恢復。退出系統時,
10、Udelp和ffbp保存到0號盤塊Disk[0]中?!肮δ芡暾绦颉敝校瑄dtab表的首塊號以及回收站recycled的首塊號也存儲在0號盤塊中。,15,定義的若干符號常量,#define S 32//假設最多同時打開32個文件 #define K 5000//假設磁盤共有5000個盤塊#define SIZE 64//假設磁盤的大小是64字節(jié)#define CK 8//命令分解后的段數#define INPUT_L
11、EN 128//輸入緩沖區(qū)長度#define COMMAND_LEN 11 //命令字符串長度#define FILENAME_LEN 11 //文件名長度#define PATH_LEN INPUT_LEN-COMMAND_LEN#define DM 40//恢復被刪除文件表的表項數,16,命令行緩沖區(qū)char cmd[INPUT_LEN]; 用于存儲輸入的命令。全局數組char comd[CK][PATH_LEN];
12、用于存儲分解命令后各個參數。其中CK=8,因此本系統的命令最多允許有8段。執(zhí)行語句k=ParseCommand(cmd);分解命令后comd[0]中為命令字符串;comd[1]中為命令的第一個參數;comd[2]中為命令的第二個參數;……comd[7]中為命令的第七個參數;k=參數個數。例如,輸入的命令為copy test box,則分解該命令后comd[0]="copy",comd[1]=&quo
13、t;test",comd[2]="box"k=2,17,主程序的簡單流程如下:,等待輸入命令cmd,顯示提示符,調用ParseCommand(cmd)分解命令,調用ExecComd(k)執(zhí)行命令,,,,,,,,,ParseCommand(cmd)中以空格或"/"作為分隔符來分解命令; ExecComd(k)中用comd[0]匹配命令表,然后執(zhí)行匹配的命令或報錯。,18,ExecComd
14、(k)函數的程序清單示意如下:,19,本系統命令不區(qū)分大小寫,但文件名和子目錄名區(qū)分大小寫。同學們很容易修改程序,使后者也不區(qū)分大小寫。同學們在自己編寫程序前,除了搞清程序的總體結構、讀懂有關命令函數外,還應仔細讀懂一些重要的函數,例如FindPath()、FindFCB()等與目錄查找有關的函數。例如執(zhí)行命令:,copy /usr/user/abc /bin/xyz,此命令的功能是將根目錄下usr子目錄中user子目錄中的文件復制
15、到根目錄下bin子目錄中,新文件名為xyz。命令執(zhí)行過程中要調用目錄查找函數。,20,實驗任務,《指導書》的4.1~4.17實驗任務中,每個學生可在4.1~4.8中任選6項任務(浦計學生可任選4項)。4.9~4.17為“選做內容”,能力較強的學生可在完成上述必做題目基礎上,選擇幾項“選做”任務并努力完成之。4.1~4.17中的各項功能,在“OS實驗.exe”程序都已實現,同學們可運行該程序,觀察各項功能的執(zhí)行情況并模仿之。,21,學生
16、應提交的實驗材料,每個學生至少應提交如下三種材料:,實驗報告 源程序清單 程序測試、運行的結果,上述材料以電子文檔形式發(fā)送到下列郵箱中:qjiang_njut2004@163.com發(fā)送時請將多個電子文檔打包壓縮成一個文件。壓縮文件、實驗報告、源程序、程序測試運行結果(文本文件)的文件名統一使用學號命名。如:計080140.rar、計080140實驗報告.doc、計080140.cpp、計080140測試結果.txt
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論