操作系統(tǒng)課程設(shè)計(jì)模擬文件系統(tǒng)_第1頁
操作系統(tǒng)課程設(shè)計(jì)模擬文件系統(tǒng)_第2頁
操作系統(tǒng)課程設(shè)計(jì)模擬文件系統(tǒng)_第3頁
操作系統(tǒng)課程設(shè)計(jì)模擬文件系統(tǒng)_第4頁
操作系統(tǒng)課程設(shè)計(jì)模擬文件系統(tǒng)_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、操作系統(tǒng)課程設(shè)計(jì)模擬文件系統(tǒng)學(xué) 院: 計(jì)算機(jī)科學(xué)技術(shù) 專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù)(工)班 級(jí): 計(jì)10- 1班 姓 名: 曲艷波 學(xué) 號(hào): 201017020118 指導(dǎo)教師: 葛建梅 2013年07月16日操作系統(tǒng)原理課程設(shè)計(jì)任務(wù)書(計(jì)算機(jī)科學(xué)與技術(shù)專業(yè) 10-1)一、課程設(shè)計(jì)題目(任選一個(gè)題目)1.模擬進(jìn)程管理2.模擬處理機(jī)調(diào)度3.模擬存儲(chǔ)器管理4.模擬文件系統(tǒng)5.模擬磁盤調(diào)度二、設(shè)計(jì)目的和要求1.設(shè)計(jì)目的操作系統(tǒng)原理課程設(shè)計(jì)是網(wǎng)絡(luò)工程專業(yè)實(shí)踐性環(huán)節(jié)之一,是學(xué)習(xí)完操作系統(tǒng)原理課程后進(jìn)行的一次較全面的綜合練習(xí)。其目的在于加深對(duì)操作系統(tǒng)的理論、方法和基礎(chǔ)知識(shí)的理解,掌握操作系統(tǒng)結(jié)構(gòu)、實(shí)現(xiàn)機(jī)理和

2、各種典型算法,系統(tǒng)地了解操作系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)思路,培養(yǎng)學(xué)生的系統(tǒng)設(shè)計(jì)能力,并了解操作系統(tǒng)的發(fā)展動(dòng)向和趨勢。2.基本要求:(1)選擇課程設(shè)計(jì)題目中的一個(gè)課題,獨(dú)立完成。(2)良好的溝通和合作能力(3)充分運(yùn)用前序課所學(xué)的軟件工程、程序設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)等相關(guān)知識(shí)(4)充分運(yùn)用調(diào)試和排錯(cuò)技術(shù)(5)簡單測試驅(qū)動(dòng)模塊和樁模塊的編寫 (6)查閱相關(guān)資料,自學(xué)具體課題中涉及到的新知識(shí)。(7)課題完成后必須按要求提交課程設(shè)計(jì)報(bào)告,格式規(guī)范,內(nèi)容詳實(shí)。三、設(shè)計(jì)內(nèi)容及步驟1.根據(jù)設(shè)計(jì)題目的要求,充分地分析和理解問題,明確問題要求做什么。2.根據(jù)實(shí)現(xiàn)的功能,劃分出合理的模塊,明確模塊間的關(guān)系。3.編程實(shí)現(xiàn)所設(shè)計(jì)的模塊

3、。4.程序調(diào)試與測試。采用自底向上,分模塊進(jìn)行,即先調(diào)試低層函數(shù)。能夠熟練掌握調(diào)試工具的各種功能,設(shè)計(jì)測試數(shù)據(jù)確定疑點(diǎn),通過修改程序來證實(shí)它或繞過它。調(diào)試正確后,認(rèn)真整理源程序及其注釋,形成格式和風(fēng)格良好的源程序清單和結(jié)果;5.結(jié)果分析。程序運(yùn)行結(jié)果包括正確的輸入及其輸出結(jié)果和含有錯(cuò)誤的輸入及其輸出結(jié)果。 目錄1.課程設(shè)計(jì)的目的 12.課程設(shè)計(jì)的要求 13.需求分析13.1問題描述 13.2數(shù)據(jù)結(jié)構(gòu) 13.2.1 類 13.2.2 結(jié)構(gòu) 23.2.3 函數(shù) 23.3系統(tǒng)運(yùn)行環(huán)境 24.概要設(shè)計(jì) 34.1創(chuàng)建文件操作34.2刪除文件操作 44.3查看文件塊號(hào) 45 詳細(xì)設(shè)計(jì)45.1創(chuàng)建文件 45

4、.2刪除文件 75.3查看文件塊號(hào)106.總結(jié) 12參考文獻(xiàn) 14附錄 151.課程設(shè)計(jì)的目的掌握模擬文件系統(tǒng)的設(shè)計(jì)方法,具備初步的獨(dú)立分析和設(shè)計(jì)能力。初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測試等基本方法和技能。提高綜合運(yùn)用所學(xué)的理論知識(shí)和方法以及獨(dú)立分析和解決問題的能力。訓(xùn)練用系統(tǒng)的觀點(diǎn)和軟件開發(fā)的一般規(guī)范進(jìn)行軟件開發(fā),培養(yǎng)軟件工作者所應(yīng)具備的科學(xué)的工作方法和作風(fēng)。理論聯(lián)系實(shí)踐提高計(jì)算機(jī)專業(yè)綜合水平。2.課程設(shè)計(jì)的要求將所要設(shè)計(jì)的文件系統(tǒng)確定化,并設(shè)計(jì)出該確定化的模擬文件系統(tǒng)程序,要求程序有效不出現(xiàn)死循環(huán),具有實(shí)際應(yīng)用意義。按操作由鍵盤輸入所要執(zhí)行的命令的代號(hào),并輸入相應(yīng)要求的

5、內(nèi)容。根據(jù)命令執(zhí)行,并輸出結(jié)果。3.需求分析3.1問題描述模擬文件系統(tǒng)實(shí)驗(yàn)內(nèi)容和步驟:建立一個(gè)用戶接口,其功能包括能根據(jù)用戶的選擇,運(yùn)行相應(yīng)的程序模塊,實(shí)現(xiàn)諸如改名文件、刪除文件、顯示文件等功能。3.2數(shù)據(jù)結(jié)構(gòu)3.2.1 類class cuser3.2.2結(jié)構(gòu)typedef struct ufd/存儲(chǔ)文件信息 char name10; int attribute;/文件屬性 int length; int a10; int *p1;/一級(jí)索引 int (*p2)100;/二級(jí)索引 struct ufd *next;/ 指向文件鏈表中此文件結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn)ufd;3.2.3 函數(shù) ufd *fh

6、ead;/文件鏈表的頭結(jié)點(diǎn) int dis_file();/顯示文件所占外存塊號(hào) int dele_file(ufd *f);/刪除文件的具體實(shí)現(xiàn)部分 int new_file(); int open_file(); int first_dele_file();/實(shí)現(xiàn)刪除文件的前部分工作3.3系統(tǒng)運(yùn)行環(huán)境操作系統(tǒng):windows xp 運(yùn)行軟件:microsoft visual c+ 6.04.概要設(shè)計(jì)4.1創(chuàng)建文件操作由于創(chuàng)建文件必須要有文件名,所以空路徑和路徑“”在此成為錯(cuò)誤。而且正因?yàn)槿绱耍诖四K中需要分解出文件名,再把不含文件名的路徑傳遞給“查找模塊”,其次,其中涉及了創(chuàng)建文件的操作

7、,它包括:在找到目錄中的nextf中添加一項(xiàng)并把文件的指針指向目錄,即給文件賦值等操作。具體流程如4-1-1所示:開始輸入2輸入文件名,長度,屬性p-lengthlength length110采用一級(jí)索引采用二級(jí)索引采用三級(jí)索引創(chuàng)建成功完成noyesnonoyesyes圖4-1-1 創(chuàng)建文件流程圖4.2刪除文件操作刪除文件必須有文件名,所以不允許空路徑或路徑文“”在此模塊中分解出文件名,對(duì)不含文件名的路徑進(jìn)行處理。刪除操作在找到上一級(jí)目錄后,再找出上一級(jí)目錄,將之后的指針向前移一位,文件被刪除。4.3查看文件塊號(hào)文件的內(nèi)存空間為1000塊,每當(dāng)創(chuàng)建一個(gè)文件分配連續(xù)的存儲(chǔ)塊號(hào)給此文件,查看的時(shí)

8、候先輸入要查詢的文件名根據(jù)用戶輸入的文件名找到此文件和相應(yīng)的塊號(hào)。5 詳細(xì)設(shè)計(jì)5.1創(chuàng)建文件在創(chuàng)建文件文件時(shí)要考慮文件的大小是否滿足當(dāng)前磁盤的剩余空間,只有當(dāng)希望創(chuàng)建文件的大小小于磁盤剩余空間才可創(chuàng)建。具體實(shí)現(xiàn)程序:int cuse:new_file() int i=0,j=0; ufd *p=0; p=new ufd; if(p=0) cout內(nèi)存空間已滿,創(chuàng)建文件失??!endl; return 1; cout請(qǐng)輸入建立的文件的名稱,長度,屬性(0:只讀,1:讀寫)p-namep-lengthp-attribute; if(p-lengthdisk_empty) cout作業(yè)太大,當(dāng)前硬盤可

9、用空間為:disk_emptyendl; delete p; return 0; for(i=0;ilength&i10;i+) for(j;jai=j; disk_blockj=1; j+; break; p-p1=0;p-p2=0;if(p-length10)/一級(jí)索引的實(shí)現(xiàn)p-p1=new int100;for(i=10;ilength&i110;i+)for(j;jp1)i-10=j;disk_blockj=1;j+;break;if(p-length110)/二級(jí)索引的實(shí)現(xiàn)p-p2=new int100100;for(i=110;ilength;i+)for(j;jp2mk=j;di

10、sk_blockj=1;j+;break;if(now=0)p-next=fhead;fhead=p;elsep-next=now-file_head;now-file_head=p;dir *h=now;while(h!=0)h-length+=p-length;h=h-above;cout文件創(chuàng)建成功!length;length+=p-length;return 1;具體調(diào)試界面如下圖所示:圖5-1-1圖5-1-25.2刪除文件具體實(shí)現(xiàn)程序:int cuse:first_dele_file() char temp10; cout請(qǐng)輸入你要?jiǎng)h除的文件名:temp; ufd *f=fhead;

11、 ufd *above=0; if(now!=0) f=now-file_head; while(f!=0) if(!strcmp(f-name,temp) break; above=f; f=f-next; if(f=0) cout此文件不存在!length; if(now=0) if(f=fhead) fhead=fhead-next; else above-next=f-next; else dir *d=now; while(d!=0)/修改刪除文件后各級(jí)目錄的大小 d-length-=f-length; d=d-above; if(f=now-file_head)/刪除文件結(jié)點(diǎn) no

12、w-file_head=now-file_head-next; else above-next=f-next; length-=f-length; this-dele_file(f); cout刪除成功endl; return 1;int cuse:dele_file(ufd *f) int i=0,m; for(i=0;i10&ilength;i+) m=f-ai; disk_blockm=0; if(f-p1!=0) for(i=10;i110&ilength;i+) m=f-p1i-10; disk_blockm=0; delete (f-p1); if(f-p2!=0) for(i=1

13、10;ilength;i+) m=(f-p2)(i-110)/100(i-110)%100; disk_blockm=0; delete (f-p2); delete f; f=0; return 1;具體調(diào)試如圖5-2-1所示:圖5-2-15.3查看文件塊號(hào)具體實(shí)現(xiàn)程序:int cuse:dis_file() int i; char n10; ufd *f=fhead; if(now!=0) f=now-file_head; cout請(qǐng)輸入你要查看的文件的名稱:n; while(f!=0) if(!strcmp(n,f-name) break; f=f-next; if(f=0) cout當(dāng)

14、前目錄下沒有這個(gè)文件:endl; return 0; cout 此文件占用硬盤塊號(hào)如下:endl; for(i=0;ilength&i10;i+) coutsetw(6)ai; if(i+1)%10=0) coutendl; for(i=10;ilength&i110;i+)/顯示一級(jí)索引塊號(hào) coutsetw(6)p1i-10; if(i+1)%10=0) coutendl; for(i=110;ilength;i+)/顯示二級(jí)索引塊號(hào) coutsetw(6)p2(i-110)/100(i-110)%100; if(i+1)%10=0)coutendl; coutendl; return 1

15、;具體調(diào)試如圖5-3-1所示:圖5-3-16.總結(jié)本次課程設(shè)計(jì)使知道了如何定義類來實(shí)現(xiàn)相應(yīng)的功能,運(yùn)用鏈表、指針等設(shè)計(jì)出了一個(gè)簡單實(shí)用的文件管理系統(tǒng)同時(shí)也使以前所學(xué)知識(shí)得到鞏固。操作系統(tǒng)是一門將硬件功能、程序設(shè)計(jì)語言、數(shù)據(jù)結(jié)構(gòu)、算法、計(jì)算機(jī)體系結(jié)構(gòu)、軟件工程等計(jì)算機(jī)知識(shí)緊密結(jié)合在一起的學(xué)科,它將對(duì)我今后的學(xué)習(xí)和工作產(chǎn)生巨大的幫助。參考文獻(xiàn)1 湯小丹. 計(jì)算機(jī)操作系統(tǒng)(第三版).西安:西安電子科技大學(xué)出版社,2007.52 譚浩強(qiáng). c+程序設(shè)計(jì). 北京:清華大學(xué)出版社,2004附錄課設(shè)全部程序:#include disk.h#include#include#include/int disk_b

16、lock10000;/int disk_empty;cdisk:cdisk() int i=0; char code10=123456; for(i=0;iuser0.set_user(jun,123); disk_empty=10000; cout.setf(ios:left);cdisk:cdisk()int cdisk:dele_user(int i) cuse c; c=useri; useri.dele_user(); return 1;int cdisk:dis_disk() int i=0; coutsetw(14)用戶名setw(14)占用空間大小endl; for(i=0;i

17、5;i+) if(useri.get_status()=1)coutsetw(14)useri.get_name()setw(14)useri.get_length()endl;cout已用空間:10000-disk_emptyendl剩余空間 :disk_emptyendl;return 1;int cdisk:login()char n10,c10;int i;cout請(qǐng)輸入用戶名與密碼,中間用空格隔開nc;for(i=0;i5;i+)if(useri.get_status()if(!strcmp(n,useri.get_name()if(!strcmp(c,useri.get_code(

18、)cout登陸成功!endl;cout歡迎useri.get_name()登陸endl;return i;elsecout密碼錯(cuò)誤:endl;return -1;cout不存在用戶endl;return -1;int cdisk:set_code() char temp110,temp210; cout請(qǐng)輸入密碼:temp1; if(strcmp(temp1,code) cout密碼錯(cuò)誤!endl; return 0; while(1) cout請(qǐng)輸入新密碼:temp1; cout請(qǐng)?jiān)俅屋斎胄旅艽a:temp2; if(strcmp(temp1,temp2) cout密碼設(shè)置出錯(cuò)!endl; b

19、reak; cout密碼設(shè)置成功!endl; strcpy(code,temp1); return 1;int cdisk:new_user() char n10,c10; int i=0; for(i=0;i5;i+) if(useri.get_status()=0) break;if(i=5)cout用戶名額已滿,創(chuàng)建不成功!endl;return 0;useri.set_status(1);cout請(qǐng)輸入用戶名稱:n;cout請(qǐng)輸入密碼:c;useri.set_user(n,c);cout用戶創(chuàng)建成功!endl;return 1;int cdisk:first_dele_user() c

20、har n10,c; int i; cout請(qǐng)輸入你要?jiǎng)h除的用戶的名稱:n; for(i=0;i5;i+) if(!strcmp(useri.get_name(),n)&useri.get_status() break;if(i=5)cout此用戶不存在!endl;return 0;cout確認(rèn)刪除此用戶?確認(rèn)請(qǐng)按y,取消請(qǐng)按其它鍵c;if(c!=y)cout已經(jīng)取消刪除!dele_user(i);cout用戶刪除成功!next=0) this-dele_file(f); f=0; break; while(f-next-next!=0) f=f-next; this-dele_file(f-

21、next); f-next=0; f=fhead; while(d!=0) if(d-next=0) this-dele_dir(d); d=0; break; while(d-next-next!=0) d=d-next; this-dele_dir(d-next); d-next=0; d=dhead; int cuse:new_file() int i=0,j=0; ufd *p=0; p=new ufd; if(p=0) cout內(nèi)存空間已滿,創(chuàng)建文件失?。ndl; return 1; cout請(qǐng)輸入建立的文件的名稱,長度,屬性(0:只讀,1:讀寫)p-namep-lengthp-a

22、ttribute; if(p-lengthdisk_empty) cout作業(yè)太大,當(dāng)前硬盤可用空間為:disk_emptyendl; delete p; return 0; for(i=0;ilength&i10;i+) for(j;jai=j; disk_blockj=1; j+; break; p-p1=0;p-p2=0;if(p-length10)/一級(jí)索引的實(shí)現(xiàn)p-p1=new int100;for(i=10;ilength&i110;i+)for(j;jp1)i-10=j;disk_blockj=1;j+;break;if(p-length110)/二級(jí)索引的實(shí)現(xiàn)p-p2=new

23、int100100;for(i=110;ilength;i+)for(j;jp2mk=j;disk_blockj=1;j+;break;if(now=0)p-next=fhead;fhead=p;elsep-next=now-file_head;now-file_head=p;dir *h=now;while(h!=0)h-length+=p-length;h=h-above;cout文件創(chuàng)建成功!length;length+=p-length;return 1;int cuse:new_dir() dir *p,*h; cout請(qǐng)輸入新目錄的名稱:p-name; p-dir_head=0;

24、p-length=0; p-file_head=0; if(now=0) h=dhead; else h=now-dir_head; while(h!=0) if(!strcmp(h-name,p-name) cout此目錄已經(jīng)存在next; if(now=0) p-above=0; p-next=dhead; dhead=p; else p-above=now;p-next=now-dir_head;now-dir_head=p; cout目錄創(chuàng)建成功!endl; return 1;int cuse:goback() if(now=0) cout主目錄,不能再次向上above; return

25、 1;int cuse:open_dir() char name10; dir *p; if(now=0) p=dhead; else p=now-dir_head; cout請(qǐng)輸入你要打開的目錄名稱:name; int flag=0; while(p!=0) if(strcmp(p-name,name)=0) now=p; return 1; p=p-next; cout當(dāng)前目錄中不存在該目錄endl; return 0;int cuse:first_dele_file() char temp10; cout請(qǐng)輸入你要?jiǎng)h除的文件名:temp; ufd *f=fhead; ufd *above

26、=0; if(now!=0) f=now-file_head; while(f!=0) if(!strcmp(f-name,temp) break; above=f; f=f-next; if(f=0) cout此文件不存在!length; if(now=0) if(f=fhead) fhead=fhead-next; else above-next=f-next; else dir *d=now; while(d!=0)/修改刪除文件后各級(jí)目錄的大小 d-length-=f-length; d=d-above; if(f=now-file_head)/刪除文件結(jié)點(diǎn) now-file_head

27、=now-file_head-next; else above-next=f-next; length-=f-length; this-dele_file(f); cout刪除成功endl; return 1;int cuse:dele_file(ufd *f) int i=0,m; for(i=0;i10&ilength;i+) m=f-ai; disk_blockm=0; if(f-p1!=0) for(i=10;i110&ilength;i+) m=f-p1i-10; disk_blockm=0; delete (f-p1); if(f-p2!=0) for(i=110;ilength;

28、i+) m=(f-p2)(i-110)/100(i-110)%100; disk_blockm=0; delete (f-p2); delete f; f=0; return 1;int cuse:first_dele_dir() char n10; char c; dir *p,*above=0; p=dhead; if(now!=0) p=now-dir_head; cout請(qǐng)輸入你要?jiǎng)h除的目錄的名稱:n; while(p!=0) if(!strcmp(p-name,n) break; above=p; p=p-next; if(p=0) cout沒有這個(gè)目錄endl; return 0;

29、 cout你確定要?jiǎng)h除當(dāng)前目錄及此目標(biāo)下面的所有信息嗎?按0確定,按其它鍵取消c; if(c!=0) return 0; disk_empty+=p-length; if(now=0) if(p=dhead) dhead=dhead-next; else above-next=p-next; else if(p=now-dir_head) now-dir_head=now-dir_head-next; else above-next=p-next; above=now; while(above!=0)/修改刪除目錄后各級(jí)目錄的大小 above-length-=p-length; above=a

30、bove-above; length-=p-length; this-dele_dir(p); p=0; cout刪除成功!dir_head; ufd *f=p-file_head; if(f!=0) while(p-file_head-next!=0)/刪除此目錄下的文件 f=p-file_head; while(f-next-next!=0)/尋找最后一個(gè)文件結(jié)點(diǎn) f=f-next; this-dele_file(f-next); f-next=0; if(p-file_head-next=0) this-dele_file(p-file_head); p-file_head=0; if(

31、d!=0) while(p-dir_head-next!=0)/刪除此目錄下的目錄 d=p-dir_head; while(d-next-next!=0)/尋找最后一個(gè)文件結(jié)點(diǎn) d=d-next; this-dele_dir(d-next);/遞歸調(diào)用此函數(shù) d-next=0; if(p-dir_head-next=0) this-dele_dir(p-dir_head); p-dir_head=0; delete p; p=0; return 1;int cuse:dis_now() dir *d=dhead; ufd *f=fhead; if(now!=0) d=now-dir_head; f=now-file_head; if(d=0&f=0) cout當(dāng)前目標(biāo)為空目錄endl; return 0; cout當(dāng)前目錄大小:; if(now=0) coutlength; else coutlength; coutendl; if(d=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論