版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 操作系統(tǒng)課程設計</b></p><p><b> -模擬文件系統(tǒng)</b></p><p><b> 一.實驗目的</b></p><p> 用高級語言編寫和調(diào)試一個簡單的文件系統(tǒng)。模擬文件管理的工作過程。加深理解文件系統(tǒng)的內(nèi)部功能和內(nèi)部實現(xiàn)。</p>
2、<p><b> 二.基本要求</b></p><p> 在任意一個OS下,建立一個大文件,把它假象成一張盤,在其中實現(xiàn)一個簡單的模擬UNIX文件系統(tǒng) 。 </p><p> 可以實現(xiàn)下列幾條命令</p><p> DIR 列文件目錄</p><p> CREATE 創(chuàng)建文
3、件</p><p> MD 創(chuàng)建目錄</p><p> DELF 刪除文件</p><p> DELD 刪除目錄</p><p> CD 改變當前目錄</p><p> SAVEF 保存文件</p><p>
4、 SAVED 保存目錄</p><p> HELP 獲得命令的幫助</p><p> EXIT 退出系統(tǒng)</p><p><b> 三.設計思想說明</b></p><p><b> 1.設計環(huán)境</b></p><p>
5、 課程設計的環(huán)境是windows xp sp2操作系統(tǒng)。在windows系統(tǒng)中創(chuàng)建一個較大容量的文件,作為所設計文件系統(tǒng)的假想的“文件卷”,從而編寫各程序模塊。</p><p><b> 2.開發(fā)環(huán)境</b></p><p> 課程設計所使用的開發(fā)環(huán)境是VC++ 6.0</p><p><b> 3.基本思想</b>
6、</p><p> 以 1M 的存儲器空間作為文件空間,空間“分塊”。超級塊,在最前面,共占3.2k個字節(jié)。其中0.2K個字節(jié)存放目錄節(jié)點的位示圖,1K個字節(jié)存放文件節(jié)點的位示圖,2k字節(jié)存放盤塊節(jié)點的位示圖。用位狀態(tài)='0'表示空閑,狀態(tài)='1'表示已分配。后半部用于存放目錄接點和文件接點。超級塊不參與文件空間的動態(tài)分配。其他塊用于存貯目錄接點和文件接點的信息。</p&g
7、t;<p><b> 四.需求分析</b></p><p> 該模擬文件系統(tǒng)包括目錄文件(簡稱目錄)、普通文件(簡稱文件),并實現(xiàn)下面一些基本功能:</p><p> 1.改變目錄:CD 〈目錄名〉,工作目錄轉(zhuǎn)到指定的目錄下。</p><p> 2.創(chuàng)建文件:CREATE 〈文件名〉,創(chuàng)建一個指定名字的新文件,即在目錄中增
8、加一項,不考慮文件的內(nèi)容。</p><p> 3.刪除文件:DELF 〈文件名〉,刪除指定的文件。</p><p> 4.顯示目錄:DIR [〈目錄名〉],顯示目錄下全部文件和第一級子目錄,如果沒有指定路徑名,則顯示當前目錄下的內(nèi)容。</p><p> 5.創(chuàng)建目錄:MD 〈目錄名〉,再指定路徑下創(chuàng)建指定的目錄,或者在沒有指定路徑時,在當前目錄下創(chuàng)建子目錄。&
9、lt;/p><p> 6.刪除目錄:DELD〈目錄名〉,刪除指定的目錄。</p><p> 7. 保存文件SAVEF 〈目錄名〉 保存指定文件</p><p> 8. 保存目錄 SAVED〈文件名〉,保存指定目錄</p><p> 9. 獲得命令幫助 HELP </p><p> 10. 退出文件系統(tǒng)
10、EXIT</p><p><b> 要考慮的特殊情況:</b></p><p> 1.各個命令對全路徑和相對路徑的支持</p><p> <1>.目錄不存在時,給出錯誤信息</p><p> <2>.不能用cd 進入文件</p><p> <3>.相對
11、路徑的解析</p><p> <4>.路徑中的空格剔除</p><p> 2.新建目錄或文件時的問題</p><p><b> <1>重名問題; </b></p><p> <2>目錄或文件的名字長度限制;</p><p> <3>目錄或文
12、件的名字中包含不合法字符(注意空格)</p><p> 3.刪除目錄或文件時的問題</p><p> <1>刪除不存在的文件或目錄,給出錯誤提示</p><p> <2>刪除目錄時目錄不為空; 如果該目錄為空,則可刪除,否則給出是否做刪除,刪除操作將該目錄下的全部文件和子目錄都刪除</p><p> <3
13、>進入到某個目錄下,卻要刪除本目錄或者上級目錄</p><p> 4.保存目錄和文件時的問題</p><p> <1>保存不存在的文件和目錄,給出錯誤的提示</p><p> <2>保存目錄時,應當保存其下的的子目錄和文件</p><p><b> 五.系統(tǒng)設計</b></p&
14、gt;<p><b> 流程圖</b></p><p><b> 數(shù)據(jù)結(jié)構</b></p><p> <1>目錄文件結(jié)點信息存儲結(jié)構:</p><p> struct dir_node //目錄節(jié)點
15、 </p><p><b> {</b></p><p> SYSTEMTIME ctime; //創(chuàng)建時間</p><p> char dir_name[32]; //目錄名 </p><p
16、> int child_dir[8]; //子目錄索引 </p><p> int dir_count; //當前子目錄數(shù) </p><p> int child_file[16];
17、 //子文件索引 </p><p> int file_count; //當前子文件數(shù)</p><p> int parent; //父目錄索引</p><p><b> }</b></p>
18、<p> <2>文件目錄存儲位置存儲結(jié)構:</p><p> struct file_node //文件節(jié)點</p><p><b> {</b></p><p> SYSTEMTIME ctime; //創(chuàng)建時間
19、</p><p> char file_name[32]; //文件名 </p><p> int block[4]; //該文件占有的磁盤塊索引</p><p> int block_count;
20、 //該文件當前占有的磁盤塊數(shù)</p><p> int file_length; //文件長度 </p><p> int parent; //父目錄索引</p><p><b> } ;</b>&
21、lt;/p><p> <3>文件、目錄、盤塊的占用的標志位</p><p> int dir_flag[DIR_NUM]; //各目錄節(jié)點占用標志,0表示空閑,1表示被占用</p><p> int file_flag[FILE_NUM]; //各文件節(jié)點的占用標志</p>
22、<p> int block_flag[BLOCK_NUM]; //磁盤塊的占用標志 </p><p> <4>常駐內(nèi)存的標志文件(目錄)修改的標志位和標志文件(目錄)修改標志位的標志位</p><p> int dir_change_flag[DIR_NUM]; //用于標志目錄節(jié)
23、點的修改 </p><p> int file_change_flag[FILE_NUM]; //用于標志文件節(jié)點的修改 </p><p> int dirflag_flag[DIR_NUM]; //用于標志dir_flag
24、[DIR_NUM]的修改</p><p> int fileflag_flag[FILE_NUM]; //用于標志file_flag[FILE_NUM]的修改</p><p> int blockflag_flag[BLOCK_NUM]; //用于標志block_flag[BLOCK_NUM]的修改 </p>
25、;<p> <5>記錄當前路徑和當前目錄的全局變量</p><p> int curr; //當前目錄索引 </p><p> dir_node *curr_dir; //當前目錄節(jié)點指針
26、 </p><p> char curr_path[512]; //當前路徑 </p><p><b> 主要模塊說明</b></p><p><b> <1>創(chuàng)建文件</b></p><p> int get_file
27、(int parent,char *file_name) //創(chuàng)建文件節(jié)點,成功則返回文件的索引號,失敗返回-1</p><p><b> {</b></p><p> int index;</p><p> if(search(parent,file_name,1,index)!=-1) //搜索在父目錄下是否有同名文件存在,有則創(chuàng)建
28、失敗</p><p><b> {</b></p><p> printf("File name repeated!\n");</p><p> return -1;</p><p><b> }</b></p><p> for(int i=0
29、;i<FILE_NUM;i++) //搜索空閑的文件節(jié)點 </p><p> if(file_flag[i]==0)</p><p><b> {</b></p><p> strcpy(file[i].file_name,file_name);</p><p&
30、gt; file[i].block_count=0;</p><p> if(get_block(i)==-1) //給新創(chuàng)建的文件申請磁盤塊,如果失敗,創(chuàng)建文件將失敗 </p><p> { </p><p> printf("Disk volumn
31、error!\n");</p><p> return -1;</p><p><b> }</b></p><p> file_flag[i]=1;</p><p> fileflag_flag[i]++; //登記并給文件節(jié)點初始化</p><p> fi
32、le_change_flag[i]++;</p><p> file[i].file_length=0;</p><p> file[i].parent=parent;</p><p> GetLocalTime(&file[i].ctime); //獲得當前時間</p><p> return i; <
33、;/p><p><b> }</b></p><p> return -1;</p><p><b> }</b></p><p> int create_file(int parent,char *file_name) //在指定的目錄下創(chuàng)建文件,如果創(chuàng)建成功則返回 </p>
34、<p> { //文件的索引號,否則返回-1</p><p> if(dir[parent].file_count==16) //如果父目錄已滿,則創(chuàng)建失敗</p><p><b> {</b></p><p> printf
35、("Parent directory is full!\n");</p><p> return -1;</p><p><b> }</b></p><p> int pos=get_file(parent,file_name); //開始創(chuàng)建文件</p><p&g
36、t; if(pos==-1)</p><p><b> {</b></p><p> printf("Create file error!\n");</p><p> return -1;</p><p><b> }</b></p><p>
37、 dir_node *p=&dir[parent]; //修改父目錄的控制信息</p><p> int top=p->file_count; </p><p> p->child_file[top]=pos;</p><p> p->file_count++;</p>
38、<p> dir_change_flag[parent]++;</p><p> return pos;</p><p><b> }</b></p><p> int create(char *name) //創(chuàng)建文件的主調(diào)函數(shù),前提是已經(jīng)取得要創(chuàng)建文件的索引</p><p>
39、 { //成功返回文件的索引號,否則返回-1</p><p> int parent,p=0;</p><p> parent=get_parent(name,p);</p><p> if(parent==-1) //找不到父目錄,輸入錯誤,創(chuàng)
40、建失敗</p><p><b> {</b></p><p> printf("Path name error!\n");</p><p> return -1;</p><p><b> }</b></p><p> return create
41、_file(parent,name+p); //開始創(chuàng)建文件</p><p><b> }</b></p><p><b> <2>創(chuàng)建目錄</b></p><p> int create_dir(int parent,char *dir_name) //在指定的目錄下創(chuàng)建目
42、錄,如果成功則返回目錄 </p><p> { //的索引號,否則返回-1</p><p> if(dir[parent].dir_count==8) //如果父目錄已滿,則創(chuàng)建失敗</p><p><b>
43、; {</b></p><p> printf("Parent directory is full!\n");</p><p> return -1;</p><p><b> }</b></p><p> int pos=get_dir(parent,dir_name);
44、 //開始創(chuàng)建目錄</p><p> if(pos==-1)</p><p><b> {</b></p><p> printf("Create directory error!\n");</p><p> return -1;</p><p>&
45、lt;b> }</b></p><p> dir_node *p=&dir[parent]; //修改父目錄的控制信息</p><p> int top=p->dir_count; </p><p> p->child_dir[top]=pos;</p><
46、p> p->dir_count++;</p><p> dir_change_flag[parent]++;</p><p> return pos;</p><p><b> }</b></p><p> int md(char *name) //創(chuàng)建目
47、錄的主調(diào)函數(shù),它的參數(shù)只有用戶輸入</p><p> { //如果創(chuàng)建成功,則返回目錄的索引號,否則</p><p> int parent,p=0; //返回-1</p><p> parent=get_parent(na
48、me,p);</p><p> if(parent==-1) //父目錄找不到,輸入有誤,創(chuàng)建失敗</p><p><b> {</b></p><p> printf("Path name error!\n");</p><p> re
49、turn -1;</p><p><b> }</b></p><p> return create_dir(parent,name+p); //開始創(chuàng)建目錄</p><p><b> }</b></p><p><b> <3>刪除文件<
50、;/b></p><p> void del_file(int pos) //刪除文件,調(diào)用該函數(shù)的前提是已經(jīng)取得要刪除文件的索引號 </p><p> { </p><p> return_block(pos
51、); //釋放磁盤塊</p><p> file_flag[pos]=0; </p><p> fileflag_flag[pos]++;</p><p> file_change_flag[pos]=0;</p><p><b> }</b></p&
52、gt;<p> int del_file(int parent,char *file_name) //在指定的目錄下刪除文件,刪除成功則返回文件的 </p><p> { //索引號,否則返回-1</p><p> int del_pos,in
53、dex;</p><p> if((del_pos=search(parent,file_name,1,index))==-1)//搜索該文件是否存在,不存在則刪除失敗</p><p><b> {</b></p><p> printf("The file to delete not exist!\n");</
54、p><p> return -1;</p><p><b> }</b></p><p> del_file(del_pos); //開始刪除文件</p><p> dir_node *p=&dir[parent]; //修改
55、父目錄的控制信息</p><p> if(p->file_count>=2)</p><p><b> {</b></p><p> int top=p->file_count-1; </p><p> p->child_file[index]=p->child_f
56、ile[top];</p><p><b> }</b></p><p> p->file_count--;</p><p> dir_change_flag[parent]++;</p><p> return del_pos;</p><p><b> }</b
57、></p><p> int delfile(char *name) //刪除文件的主調(diào)函數(shù),前提是知道了刪除文件的名字</p><p><b> {</b></p><p> int parent,p=0;</p><p> parent=get_parent(name,p);<
58、/p><p> if(parent==-1)</p><p><b> {</b></p><p> printf("Path name error!\n");</p><p> return -1;</p><p><b> }</b></p
59、><p> return del_file(parent,name+p);</p><p><b> }</b></p><p><b> <4>刪除目錄</b></p><p> void del_dir(int pos) //刪除指定
60、的目錄節(jié)點,該目錄已經(jīng)為空 </p><p><b> {</b></p><p> dir_flag[pos]=0; </p><p> dirflag_flag[pos]++;</p><p> dir_change_flag[pos]=0;</p>&
61、lt;p><b> }</b></p><p> void del(int pos) //刪除一個指定目錄及它下面的所有文件及所有目錄 </p><p><b> {</b></p><p> for(int i=0;i&
62、lt;dir[pos].file_count;i++) //刪除當前目錄下的所有文件</p><p> del_file(dir[pos].child_file[i]);</p><p> for(i=0;i<dir[pos].dir_count;i++) //刪除子目錄</p><p> del(dir[pos
63、].child_dir[i]);</p><p> del_dir(pos); //刪除當前目錄</p><p><b> }</b></p><p> void del_dir(int parent,int del_pos,int index) //在一個指定的目錄下刪除
64、一個目錄及它下面的 </p><p> { //所有 文件及所有目錄</p><p> del(del_pos); //開始刪除目錄</p><p> if(dir[pa
65、rent].dir_count>=2) //修改父目錄的控制信息</p><p><b> {</b></p><p> int top=dir[parent].dir_count-1;</p><p> dir[parent].child_dir[index]=dir[parent].child
66、_dir[top];</p><p><b> }</b></p><p> dir[parent].dir_count--;</p><p> dir_change_flag[parent]++;</p><p><b> }</b></p><p><b&g
67、t; <5>保存文件</b></p><p> void savefile(int file_id) //顯式保存文件的核心函數(shù)</p><p><b> {</b></p><p> if(fileflag_flag[file_id]%2!=0)
68、 //如果創(chuàng)建或刪除,需要寫回磁盤{</p><p> write_bit(file_id,1);</p><p> fileflag_flag[file_id]=0;</p><p><b> }</b></p><p> if(file_change_flag[fil
69、e_id]>0) //如果控制信息被修改,需要寫回磁盤</p><p> {write_inode(file_id,1);</p><p> file_change_flag[file_id]=0;</p><p> for(int i=0;i<file[file_id].block_count;i++)&l
70、t;/p><p><b> {</b></p><p> int temp=file[file_id].block[i];</p><p> if(blockflag_flag[temp]%2!=0) //如果磁盤塊被釋放或被占用,需要寫回磁盤{</p><p> write_bit(t
71、emp,2);</p><p> blockflag_flag[temp]=0;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> int save_fi
72、le(int parent,char *file_name) //顯式保存文件</p><p><b> {</b></p><p> int pos,index;</p><p> if((pos=search(parent,file_name,1,index))==-1)</p><p>&l
73、t;b> {</b></p><p> printf("The file not exist in current directory!\n");</p><p> return -1;</p><p><b> }</b></p><p> savedir(parent)
74、; //保存父目錄</p><p> savefile(pos);</p><p> return pos;</p><p><b> }</b></p><p> int savefile(char *name) //保存文
75、件的主調(diào)函數(shù),前提知道了要保存的文件名 </p><p><b> {</b></p><p> int parent,p=0;</p><p> parent=get_parent(name,p);</p><p> if(parent==-1)</p>
76、<p><b> {</b></p><p> printf("Path name error!\n");</p><p> return -1;</p><p><b> }</b></p><p> return save_file(parent,na
77、me+p);</p><p><b> }</b></p><p><b> <6>保存目錄</b></p><p> void save_dir(int dir_id) //保存空目錄函數(shù)</p><p><b> {
78、</b></p><p> if(dirflag_flag[dir_id]%2!=0) //如果刪除或創(chuàng)建,需要寫回磁盤{</p><p> write_bit(dir_id,0);</p><p> dirflag_flag[dir_id]=0;</p><p>&l
79、t;b> }</b></p><p> if(dir_change_flag[dir_id]>0) //如果控制信息被修改,需要寫回磁盤{</p><p> write_inode(dir_id,0);</p><p> dir_change_flag[dir_id]=0;</p>&
80、lt;p><b> }</b></p><p><b> }</b></p><p> void savedir(int dir_id) //保存一個目錄,及它的所有父目錄,用了遞歸</p><p><b> {</b></p><
81、p> if(dir_id==-1)</p><p><b> return;</b></p><p> save_dir(dir_id);</p><p> savedir(dir[dir_id].parent);</p><p><b> }</b></p><
82、p> void save(int dir_id) //保存一個目錄及它下面的所有目錄及文件</p><p> { //用了遞歸</p><p> for(int i=0;i<dir[dir_id].dir_count;i++)<
83、;/p><p> save(dir[dir_id].child_dir[i]);</p><p> for(i=0;i<dir[dir_id].file_count;i++)</p><p> savefile(dir[dir_id].child_file[i]);</p><p> save_dir(dir_id);</p&
84、gt;<p><b> }</b></p><p> int save_dir(int parent,char *dir_name) //顯式保存目錄</p><p><b> {</b></p><p> int pos,index;</p><p>
85、 if((pos=search(parent,dir_name,0,index))==-1)</p><p><b> {</b></p><p> printf("The file not exist in current directory!\n");</p><p> return -1;</p>
86、<p><b> }</b></p><p> savedir(parent); //保存父目錄</p><p> save(pos); //保存自身及下面的所有文件及目錄</p><p> write
87、_bit(pos,0);</p><p> return pos;</p><p><b> }</b></p><p> int saved(char *name) //保存目錄的主調(diào)函數(shù),前提是知道了保存目錄的名字</p><p><b> {</b><
88、/p><p> int parent,p=0;</p><p> parent=get_parent(name,p);</p><p> if(parent==-1)</p><p><b> {</b></p><p> printf("Path name error!\n&qu
89、ot;);</p><p> return -1;</p><p><b> }</b></p><p> return save_dir(parent,name+p);</p><p><b> }</b></p><p><b> <7>改
90、變目錄</b></p><p> void paste(int dir_id) //用于設置當前路徑</p><p><b> {</b></p><p> if(dir_id==0)</p><p><b> return;</
91、b></p><p> paste(dir[dir_id].parent);</p><p> strcat(curr_path,dir[dir_id].dir_name);</p><p> strcat(curr_path,"/");</p><p><b> }</b></p
92、><p> int change_dir(char *name) //改變工作目錄,成功則返回該目</p><p> { //錄的索引號,否則返回-1</p><p> int parent,p=0,pos,index;
93、</p><p> if(strcmp(name,"/")==0)</p><p><b> pos=0;</b></p><p> else if(strcmp(name,"..")==0)</p><p> pos=curr_dir->parent;</p&
94、gt;<p><b> else</b></p><p><b> {</b></p><p> parent=get_parent(name,p);</p><p> if(parent==-1)</p><p> {printf("Path name e
95、rror!\n");</p><p> return -1;</p><p><b> }</b></p><p> pos=search(parent,name+p,0,index);</p><p><b> }</b></p><p> if(
96、pos==-1) //如果該目錄不存在,則失敗</p><p><b> {</b></p><p> printf("The dictory not exist!\n");</p><p> return -1;</p><p&
97、gt;<b> }</b></p><p> curr_path[3]='\0';</p><p> paste(pos);</p><p> curr=pos; //改變當前目錄及路徑</p><p> curr_dir
98、=&dir[curr]; </p><p> return curr; </p><p><b> }</b></p><p> <8>顯示當前目錄下的文件和子目錄
99、信息</p><p> void show_dir(int dir_id) //以下幾個函數(shù)用于顯示當前目錄下面的目錄和文件,</p><p> { //跟上面不同的是,它不能顯示目錄及文件之間的關系,</p><p> printf("%s",dir[dir
100、_id].dir_name); //但它可以顯示一些細節(jié),如創(chuàng)建時間,文件</p><p> for(int i=strlen(dir[dir_id].dir_name);i<20;i++)</p><p> printf(" ");</p><p> printf("<DIR>");</
101、p><p> for(i=25;i<30;i++)</p><p> printf(" ");</p><p> printf("%d-%.2d-%.2d%.2d:%.2d:%.2d\n",dir[dir_id].ctime.wYear,dir[dir_id].ctime.wMonth,dir[dir_id].ctim
102、e.wDay,dir[dir_id].ctime.wHour,dir[dir_id].ctime.wMinute,dir[dir_id].ctime.wSecond);</p><p><b> }</b></p><p> void show_file(int file_id) //顯示一個文件</p>&l
103、t;p> {printf("%s",file[file_id].file_name);</p><p> for(int i=strlen(file[file_id].file_name);i<20;i++)</p><p> printf(" ");</p><p> printf("<F
104、ILE>");</p><p> for(i=26;i<30;i++)</p><p> printf(" ");</p><p> printf("%d-%.2d-%.2d%.2d:%.2d:%.2d",file[file_id].ctime.wYear,file[file_id].ctime.w
105、Month,file[file_id].ctime.wDay,file[file_id].ctime.wHour,file[file_id].ctime.wMinute,file[file_id].ctime.wSecond);</p><p> for(i=0;i<8;i++)</p><p> printf(" ");</p><p&g
106、t; int length=file[file_id].file_length;</p><p> printf("len: %d bytes\n",length);</p><p><b> }</b></p><p> void show(int dir_id) //顯示
107、目錄及文件的核心函數(shù),用了遞歸思想 </p><p> {for(int i=0;i<dir[dir_id].file_count;i++)</p><p> show_file(dir[dir_id].child_file[i]);</p><p> for(i=0;i<dir[dir_id].di
108、r_count;i++)</p><p> show_dir(dir[dir_id].child_dir[i]);</p><p><b> }</b></p><p> void list() //顯示文件及目錄的主調(diào)函數(shù)</p><p&g
109、t;<b> { </b></p><p> show(curr); //該函數(shù)的參數(shù)表示根目錄的索引</p><p> printf("\n%d files.\n",curr_dir->file_count); //統(tǒng)計文件數(shù)</p><p&g
110、t; printf("\n%d dirs.\n",curr_dir->dir_count); //統(tǒng)計目錄數(shù)</p><p><b> }</b></p><p> <8>獲得系統(tǒng)的命令的幫助</p><p> void help() //打印命令及
111、解釋</p><p><b> {</b></p><p> printf("Commands: Explanation:\n\n");</p><p> printf(" exit -Exit!\n");</p>
112、;<p> printf(" dir -Show files and directories!\n");</p><p> printf(" create -Create a new file!\n");</p><p> printf(&quo
113、t; md -Create a new directory!\n");</p><p> printf(" delf -Delete a file!\n");</p><p> printf(" deld -De
114、lete a directory!\n");</p><p> printf(" cd -Change the current directory!\n");</p><p> printf(" help -Print commands!\n")
115、;</p><p> printf(" savef -Save a file!\n");</p><p> printf(" saved -Save a directory!\n");</p><p><b> }</b&
116、gt;</p><p> 六.運行結(jié)果及運行情況</p><p> 七.實驗總結(jié)和自我評價</p><p> 本系統(tǒng)基本上實現(xiàn)文件系統(tǒng)的部分命令。如cd、dir、create、md、delf、deld等。而且通過采用樹型數(shù)據(jù)結(jié)構,可以最多顯示64級目錄,建立512個文件節(jié)點。但仍存在很大不足:</p><p> (1)沒有按照面向?qū)ο?/p>
117、思想設計程序結(jié)構,仍以函數(shù)為主,而不是對象為主;</p><p> (2)使用太多全局變量,浪費太多有用空間,而且存在安全隱患;</p><p> (3)系統(tǒng)函數(shù)多,并且沒有完全按照匈牙利命名法命名函數(shù)名和變量名,程序的可讀性比較差,使得整個程序顯得清晰度不夠。</p><p> (4)文件系統(tǒng)的測試用例還不夠多,大量測試時還存在幾個bug,特別是刪除的文件和
118、目錄時有時候難以將控制信息和標志信息寫入硬盤。</p><p> 總的來說,這次的操作系統(tǒng)課程設計的工作量比較大,我投入了很多的時間和精力,通過和同學交流,獲得了很多的幫助和設計靈感,最終完成了系統(tǒng)的設計。不過這些付出都是值得的,因為我收獲了更多。首先,在開發(fā)系統(tǒng)的過程中,我對操作系統(tǒng)的功能實現(xiàn),特別是文件管理這一塊的內(nèi)容有了較深的理解,這個理解程度是看書所無法達到的。另外,這次開發(fā)要使用到文件存取的操作來實現(xiàn)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)課程設計---模擬文件系統(tǒng)
- 操作系統(tǒng)課程設計-模擬文件系統(tǒng)
- 《操作系統(tǒng)》課程設計-- 模擬文件管理系統(tǒng)
- 《操作系統(tǒng)》課程設計--模擬文件管理系統(tǒng)
- 操作系統(tǒng)課程設計報告--虛擬文件系統(tǒng)的實現(xiàn)
- 操作系統(tǒng)課程設計---文件系統(tǒng)的模擬
- 操作系統(tǒng)課程設計--基于linux的模擬文件系統(tǒng)的設計與實現(xiàn)
- 操作系統(tǒng)課程設計--樹形目錄文件系統(tǒng)
- 操作系統(tǒng)課程設計報告--多級文件系統(tǒng)
- 操作系統(tǒng)課程設計報告--多級文件系統(tǒng)
- 操作系統(tǒng)課程設計報告--多級文件系統(tǒng)
- 操作系統(tǒng)課程設計報告--多級文件系統(tǒng).doc
- 操作系統(tǒng)課程設計二級文件系統(tǒng)
- 操作系統(tǒng)課程設計簡單文件系統(tǒng)的實現(xiàn)
- 操作系統(tǒng)課程設計二級文件系統(tǒng)
- 操作系統(tǒng)課程設計(文件系統(tǒng)管理)
- 操作系統(tǒng)課程設計--簡單文件系統(tǒng)的實現(xiàn)
- 操作系統(tǒng)課程設計----二級文件系統(tǒng)
- 操作系統(tǒng)文件系統(tǒng)的設計與實現(xiàn)課程設計
- 操作系統(tǒng)課程設計--二級文件系統(tǒng)設計
評論
0/150
提交評論