16281271 巫勐
本實驗要求在模擬的i/o系統之上開發乙個簡單的檔案系統。使用者通過create, open, read等命令與檔案系統互動。檔案系統把磁碟視為順序編號的邏輯塊序列,邏輯塊的編號為0至l − 1。i/o系統利用記憶體中的陣列模擬磁碟。
實際物理磁碟的結構是多維的:有柱面、磁頭、扇區等概念。i/o系統的任務是隱藏磁碟的結構細節,把磁碟以邏輯塊的面目呈現給檔案系統。邏輯塊順序編號,編號取值範圍為0至l−1,其中l表示磁碟的儲存塊總數。實驗中,我們可以利用陣列ldisk[c][h][b]構建磁碟模型,其中chb 分別表示柱面號,磁頭號和扇區號。每個扇區大小為512位元組。i/o系統從檔案系統接收命令,根據命令指定的邏輯塊號把磁碟塊的內容讀入命令指定的記憶體區域,或者把命令指定的記憶體區域內容寫入磁碟塊。檔案系統和i/o系統之間的介面由如下兩個函式定義:
• read_block(int i, char *p);
該函式把邏輯塊i的內容讀入到指標p指向的記憶體位置,拷貝的字元個數為儲存塊的長度b。
• write block(int i, char *p);
該函式把指標p指向的內容寫入邏輯塊i,拷貝的字元個數為儲存塊的長度b。此外,為了方便測試,我們還需要實現另外兩個函式:乙個用來把陣列ldisk 儲存到檔案;另乙個用來把檔案內容恢復到陣列。
檔案系統位於i/o系統之上。
3.1 使用者與檔案系統之間的介面
檔案系統需提供如下函式;create, destroy, open, read, write。
• create(filename): 根據指定的檔名建立新檔案。
• destroy(filename): 刪除指定檔案。
• open(filename): 開啟檔案。該函式返回的索引號可用於後續的read, write, lseek,或close操作。
• close(index): 關閉制定檔案。
• read(index, mem_area, count): 從指定檔案順序讀入count個位元組memarea指定的記憶體位置。讀操作從檔案的讀寫指標指示的位置開始。
• write(index, mem_area, count): 把memarea指定的記憶體位置開始的count個位元組順序寫入指定檔案。寫操作從檔案的讀寫指標指示的位置開始。
• lseek(index, pos): 把檔案的讀寫指標移動到pos指定的位置。pos是乙個整數,表示從檔案開始位置的偏移量。檔案開啟時,讀寫指標自動設定為0。每次讀寫操作之後,它指向最後被訪問的位元組的下乙個位置。lseek能夠在不進行讀寫操作的情況下改變讀寫指標能位置。
• directory: 列表顯示所有檔案及其長度。
3.2 檔案系統的組織
磁碟的前k個塊是保留區,其中包含如下資訊:點陣圖和檔案描述符。位圖用來描述磁碟塊的分配情況。點陣圖中的每一位對應乙個邏輯塊。建立或者刪除檔案,以及檔案的長度發生變化時,檔案系統都需要進行位圖操作。前k個塊的剩餘部分包含一組檔案描述符。每個檔案描述符包含如下資訊:
• 檔案長度,單位位元組
• 檔案分配到的磁碟塊號陣列。該陣列的長度是乙個系統引數。在實驗中我們可以把它設定為乙個比較小的數,例如3。
3.3 目錄
我們的檔案系統中僅設定乙個目錄,該目錄包含檔案系統中的所有檔案。除了不需要顯示地建立和刪除之外,目錄在很多方面和普通檔案相像。目錄對應0號檔案描述符。初始狀態下,目錄中沒有檔案,所有,目錄對應的描述符中記錄的長度應為0,而且也沒有分配磁碟塊。每建立乙個檔案,目錄檔案的長度便增加一分。目錄檔案的內容由一系列的目錄項組成,其中每個目錄項由如下內容組成:
• 檔名
• 檔案描述符序號
3.4 檔案的建立與刪除
建立檔案時需要進行如下操作;
• 找乙個空閒檔案描述符(掃瞄ldisk [0]~ldisk [k - 1])
• 在檔案目錄裡為新建立的檔案分配乙個目錄項(可能需要為目錄檔案分配新的磁碟塊)
• 在分配到的目錄項裡記錄檔名及描述符編號.
• 返回狀態資訊(如有無錯誤發生等)
刪除檔案時需要進行如下操作(假設檔案沒有被開啟):
• 在目錄裡搜尋該檔案的描述符編號
• 刪除該檔案對應的目錄項並更新位圖
• 釋放檔案描述符
• 返回狀態資訊
3.5 檔案的開啟與關閉
檔案系統維護一張開啟檔案表.開啟檔案表的長度固定,其表目包含如下資訊:
• 讀寫緩衝區
• 讀寫指標
• 檔案描述符號
檔案被開啟時,便在開啟檔案表中為其分配乙個表目;檔案被關閉時,其對應的表目被釋放。讀寫緩衝區的大小等於乙個磁碟儲存塊。開啟檔案時需要進行的操作如下:
• 搜尋目錄找到檔案對應的描述符編號
• 在開啟檔案表中分配乙個表目
• 在分配到的表目中把讀寫指標置為0,並記錄描述符編號
• 讀入檔案的第一塊到讀寫緩衝區中
• 返回分配到的表目在開啟檔案表中的索引號
關閉檔案時需要進行的操作如下:
• 把緩衝區的內容寫入磁碟
• 釋放該檔案在開啟檔案表中對應的表目
• 返回狀態資訊
3.6 讀寫
檔案開啟之後才能進行讀寫操作.讀操作需要完成的任務如下:
計算讀寫指標對應的位置在讀寫緩衝區中的偏移
把緩衝區中的內容拷貝到指定的記憶體位置,直到發生下列事件之一:
• 到達檔案尾或者已經拷貝了指定的位元組數。這時,更新讀寫指標並返回相應資訊
• 到達緩衝區末尾。這時,把緩衝區內容寫入磁碟,然後把檔案下一塊的內容讀入磁碟。最後返回第2步。
其他操作請同學們自己考慮。
1、命令選單
2、建立檔案
3、目錄
4、修改檔名
5、刪除檔案
6、開啟檔案
7、寫檔案
8、讀檔案
9、關閉檔案
10、退出
作業系統實驗五
實驗內容 理髮店問題 假設理髮店的理髮室中有3個理髮椅子和3個理髮師,有乙個可容納4個顧客坐等理髮的沙發。此外還有一間等候室,可容納13位顧客等候進入理髮室。顧客如果發現理髮店中顧客已滿 超過20人 就不進入理髮店。在理髮店內,理髮師一旦有空就為坐在沙發上等待時間最長的顧客理髮,同時空出的沙發讓在等...
作業系統實驗
一 實驗目的 理解vi的三種執行模式及其切方法。學會使用vi的各種操作命令進行文字檔案的編輯。用vi編寫linux下c程式,會用gcc編譯。二 實驗環境 一台裝有linux的機器 這裡預設是red hat linux 9 系統裡面有gcc編譯器。三 實驗內容 寫出主要的內容 首先用合法使用者登入系統...
作業系統實驗
分析bootloader進入保護模式的過程。在剛進入bootloader的時候,最先執行的操作分別為關閉中斷 清除eflags的df位以及將ax,ds,es,ss暫存器初始化為0 globl start start code16 cli 關中斷 cld 清除方向標誌 xorw ax,ax ax清0 ...