FAT檔案系統作業系統課程設計實驗報告

2021-04-11 19:16:28 字數 3553 閱讀 8957

作業系統課程設計之三

設計任務:模擬os檔案系統

在任一os(window或者dos;也可以是在linux下,但要求能將結果演示給老師看)下,建立乙個大檔案,把它假象成一張盤,在其中實現乙個簡單的模擬os檔案系統。

1、在現有機器硬碟上開闢10m(共10000個盤塊,每盤塊大小為1k)的硬碟空間(生成乙個10m的使用者檔案sdisk.dat即可),作為設定的硬碟空間。

2、編寫一管理程式sdisk,對此空間進行管理,以模擬os檔案系統,要求:

⑴、盤塊大小1k

⑵、空閒盤塊的管理:採用位示圖法

⑶、檔案空間管理:採用fat(檔案分配表),每個盤塊號佔2個位元組

⑷、目錄項管理:

①、每個目錄項占用32位元組,其中前8個位元組(0-7)為檔名,之後跟3個位元組(8-10)的副檔名,26-27位元組,存放檔案的第乙個盤塊號,最後四個位元組(28-31),存放檔案長度(如果目錄項對應的是下一級子目錄(檔案),其檔案長度部分為0)

②、目錄按檔案方式管理,每個目錄僅用乙個盤塊(即1k,最多裝32個目錄項)

③、第0個目錄項為本目錄,即「.」,第0個位元組為「.」,即0x2e,第26-27位元組指明本目錄所在盤塊。

④、第1個目錄項為父目錄,即「..」,第0,1個位元組為「..」即0x2e,0x2e,第26-27位元組指明父目錄所在盤塊。

⑤、每個目錄實際能放下檔案或子目錄30項。

⑸、檔案系統空間分配:

①、第0個盤塊(1k)存放磁碟資訊(可以設定為格式說明「fat32」、盤塊大小,盤塊數等內容)

②、第1個盤塊起,至125盤塊,共125個盤塊(125k)存放fat內容

③、第126、127(2個)盤塊,存放位示圖

④、從第128盤塊至10000盤塊,皆為資料(區)盤塊,其邏輯編號從0開始,至9872號資料盤塊,即第0資料盤塊為128號盤塊,第1資料盤塊為129號盤塊,…

⑤、第0資料盤塊(即128號盤塊),存放根目錄(同樣只用乙個盤塊作根目錄),由於第0、1目錄項為「.」(本目錄), 「..」(父目錄),因此根目錄下同樣只能存放30個檔案或目錄,並且從第2個目錄項開始。

⑥、檔案或子目錄資料,放在第1資料盤塊及以後的資料盤塊中,由使用者按需要使用。

3、sdisk管理程式的功能要求如下:

⑴、正常情況下,顯示等待命令輸入符號#

⑵、改變目錄命令:

#cd 目錄名,改變當前工作目錄,目錄不存在時給出出錯資訊

#cd ..,返回上一級目錄,如果是根目錄,給出提示資訊

⑶、生成新目錄

#md 目錄名,建立新目錄(需要更改fat內容和位示圖內容)

⑷、刪除目錄

#rd 目錄名,刪除目錄,如果目錄不存在時給出出錯資訊(需要更改fat內容和位示圖內容)

⑸、顯示目錄

#dir,顯示指定目錄下或當前目錄下的資訊,包括檔名、副檔名、實體地址(檔案或目錄第乙個盤塊號)、檔案長度、子目錄

⑹、建立新檔案

#createfile 檔名.副檔名檔案長度,根據檔名.副檔名,建立乙個目錄項(fcb),根據檔案長度和位示圖中空閒盤塊情況,分配足夠多的連續盤塊,給新檔案(需要更改fat內容和位示圖內容)。

⑺、刪除檔案

#delfile 檔名.副檔名,在檔案所在的目錄項中,將第乙個位元組變為0xe5,並同時修改fat內容和位示圖內容;如果檔案不存在,給出出錯資訊

⑻、檔案拷貝

#copyfile 老檔案,新檔案,為新檔案建立乙個目錄項,並將老檔案內容複製到新檔案中,並同時修改fat內容和位示圖內容

⑼、顯示位示圖內容

#showbitmp,將位示圖內容(已有資訊部分),顯示在螢幕上(按十六進製制)

⑽、顯示fat內容

#showfat,將fat內容(已有資訊部分),顯示在螢幕上(按十六進製制)

4、程式的總體流程為:

⑴、輸出提示符#,等待接受命令,分析鍵入的命令;

⑵、對合法的命令,執行相應的處理程式,否則輸出錯誤資訊,繼續等待新命令

(1、請參考「03.fat32檔案系統簡介.doc」中,有關檔案系統的規定;

2、請參考winhex中,目錄所顯示的資訊進行程式設計)

//關於fat 和map表的解釋

//用bitset庫,做map的是否判斷,因為作業要求從資料塊從128位開始,所以bitset的前128位被置為-1,同樣fat表也是,其次,map表和fat表同樣是用陣列方式做儲存,這樣就略過了是對具體位址的操作,從陣列的下標很容易的定位,

關於對fat表和map表的用法

1. 當要用到資料塊是,查詢map表(因為只做比較查詢即可),查詢到的未用位置置1,然後在fat表上進行相應記錄,在本程式做出的規定是,當資料夾fat表做-1,若是檔案則按照fat做對應的順序記錄,最後一塊同樣是-1結束,

2. **的時候,是按照fat表的首項,做順序置0,然後map也在相應位置置0

#include

#include

#include

#include

#include

//author:chenlog

//enviroment:vc2008 win7

//date:2011-6-5 version 1.0

using namespace std;

const int blocknum_size=2盤塊號大小

const int block_size=1024乙個盤塊大小數

const int block_num=10001盤塊數量

const int disk_size=1024*1000*10磁碟大小

const int list_size=32目錄項大小

const int map_size=10001map 長度

const int fatnum=125fat的盤塊數第塊沒有用

const int fatlist=512每個盤口fat的記錄數

const int databeg=128資料項開始fat號

struct fcb

;struct fatid*fat;

struct map*map;

struct dir

*filedir;

int currentid=128當前fat號

int currentdir=128當前目錄塊號初始化是+1 由於第個單元沒有使用

char *file磁碟的首位址

char *filepath="myfatwindow檔案儲存位址

file *fpwindow 檔案位址

string current="root當前路徑

char cmd[30輸入指令

char command[16];

/**對檔案儲存器進行格式化

*建立根目錄**/

void findbit(struct map *map)

void init(struct fatid *fat)

}void format()

/**建立子目錄

*/int mkdir(char *str)

dir=(struct dir *)(file+(currentdir)*block_size);

map=(struct map *)(file+(fatnum+1)*block_size);

作業系統 檔案系統課程設計報告 附原始碼

作業系統課程設計 題目檔案系統 學院計算機學院 專業電腦科學與技術 年級班別 10級7 班 學號 3110006154 學生姓名 指導教師劉老師 20年月日 檔案系統 1 課程設計的內容 模擬檔案系統實現的基本功能,了解檔案系統的基本結構和管理方法,加深理解檔案系統的內部功能及內部實現。通過用高階語...

作業系統課程設計報告 蔡瓊 虛擬檔案系統

武漢工程大學 電腦科學與工程學院 綜合設計報告 設計名稱 作業系統綜合設計 設計題目 虛擬檔案系統的實現 學生學號 專業班級計工02 學生姓名 學生成績 指導教師 職稱 蔡瓊 副教授 課題工作時間 12年2月13日至 12年2 月24日 說明 1 報告中的第 一 二 三項由指導教師在綜合設計開始前填...

作業系統課程設計指導

一 本課程的教學目的及基本要求 1 教學目的 作業系統課程設計是作業系統課程的重要實踐環節,是作業系統課程內實驗的有益補充,它旨在培養學生的實踐能力,促進理論與實踐的結合。要求學生通過上機程式設計,了解如何模擬作業系統原理的實現,從而加深對作業系統原理的領會,加深對作業系統實現方法的理解,與此同時使...