《操作系統設計一個二級文件系統報告.doc》由會員分享,可在線閱讀,更多相關《操作系統設計一個二級文件系統報告.doc(15頁珍藏版)》請在裝配圖網上搜索。
操作系統(2014年秋季學期)
序號:8
實 驗 報 告
系別:計算機科學與技術
班級:信安12-1班
姓名:李勇
學號:07101020112
實驗名稱:進程調度
總成績:
評語:
日期:
《操作系統》實驗報告
實驗名稱
進程調度
實驗序號
1
實驗日期
2014.1.2
實驗人
李勇
一、實驗目的、要求與環(huán)境
1.目的:
編寫一個簡單的二級文件系統實現程序,加深對文件系統的內部功能和內部實現的理解。
2.要求:
(1)用C語言(或其它語言,如Java)實現一個簡單的二級文件系統設計,加深對文件系統的內部功能和內部實現的理解。要求模擬采用二級目錄結構的磁盤文件系統的文件操作, 實現用戶的創(chuàng)建、查詢、登錄、刪除,和文件的添加、刪除、打開、關閉、讀、寫等基本命令,用在屏幕上輸入命令來模擬用戶程序中調用的文件操作。
(2)為了清楚地觀察文件的管理過程,程序應將每個文件操作的結果顯示出來。
(3)分析程序運行的結果,談一下自己的收獲。
3.環(huán)境:
1. 硬件設備:PC機一臺
2. 軟件環(huán)境:安裝Windows操作系統或者Linux操作系統,并安裝相關的程序開發(fā)環(huán)境,如C \C++\Java 等編程語言環(huán)境。
二、相關背景知識
最基本的文件操作
(1)創(chuàng)建文件
在創(chuàng)建一個新文件時,系統首先要為新文件分配必要的外存空間,并在文件系統的目錄中,為之建立一個目錄項。目錄項中應該記錄新文件的文件名及其在外存的地址等屬性。
(2)刪除文件
當已不再需要某文件時,可將它從文件系統中刪除。在刪除時,系統應該先從目錄中找到要刪除的文件的目錄項,使之成為空項,然后回收該文件所占用的存儲空間。
(3)讀文件
在讀一個文件時,須在相應的系統調用中給出文件名和應該讀入的內存目標地址。此時,系統同樣要查找目錄,找到制定的目錄項,從中得到被讀文件在外存中的位置。在目錄項中,還有一個指針用于對文件的讀/寫。
(4)寫文件
在寫一個文件時,須在相應的系統調用中給出該文件名及該文件在內存中的(源)地址。為此,也同樣須先查找目錄,找到指定文件的目錄項,在利用目錄中的寫指針進行寫操作。
(5)截斷文件
如果一個文件的內容已經陳舊而需要全部更新文件的內容時,一種方法是將此文件刪除,再重新創(chuàng)建一個新文件。但如果文件名及其屬性均無改變時,則可采取另一種所謂的截斷文件的方法,此即將原有文件的長度設置為0,或說放棄原有的文件內容。
(6)設置文件的讀/寫位置
前述的文件讀/寫操作,都只提供了對文件順序存取的手段,即每次都是從文件的始端讀或寫。設置文件讀/寫位置的操作,用于設置文件讀/寫指針的位置,以便每次讀/寫文件時,不是從其始端而是從所設置的位置開始操作。也正因如此,才能改順序存取為隨機存取。
三、實驗設計說明
(寫你實驗相關的設計,別寫這么少,多寫點。。。。。。。)
本次實驗采用C語言模擬二級文件系統,可以在多用戶環(huán)境下實現用戶的創(chuàng)建、查詢、登錄、刪除,和文件的添加、刪除、打開、關閉、讀、寫等基本操作,很好地模擬了操作系統對文件的管理過程。
四、實驗設計的流程圖
(寫你實驗相關的設計流程圖,下面的流圖是有問題的。。。。。。。)
選擇操作命令及命令對象文件
實施該命令
輸出錯誤信息
顯示已經完成操作的信息
開始
進行該用戶的下個操做
直到退出該用戶權限
結束
有操作權限?
是否要創(chuàng)建新文件?
退出?
輸入文件名等信息;
顯示已經完成操作的信息
Y
N
Y
N
N
Y
選擇用戶
四、程序代碼
(換上你自己的程序代碼,下面的程序代碼是有問題的。)
#include "stdlib.h"
#include
#define NULL 0
int count=0;
struct file{
char name[10];
int code;//保護碼
int size;
char pwrite;//讀寫指針
};
struct user{
char name[10];
struct file *list;//目錄指針
};
/////////////////////////////////////////////////////////////
struct file one[10]={{"a1",0,10,0},{"a2",2,10,0},{"a3",1,10,0},
{"a4",2,10,0},{"a5",2,10,0},{"a6",2,10,0},{"a7",1,10,0},{"0",0,0,0},
{"0",0,0,0},{"0",0,0,0}};
struct file two[10]={{"b1",0,10,0},{"b2",2,10,0},{"b3",1,10,0},
{"b4",2,10,0},{"b5",2,10,0},{"b6",2,10,0},{"b7",2,10,0},{"0",0,0,0},
{"0",0,0,0},{"0",0,0,0}};
struct file three[10]={{"c1",0,10,0},{"c2",2,10,0},{"c3",1,10,0},
{"c4",2,10,0},{"c5",2,10,0},{"c6",2,10,0},{"c7",1,10,0},{"0",0,0,0},
{"0",0,0,0},{"0",0,0,0}};
struct file four[10]={{"d1",0,10,0},{"d2",2,10,0},{"d3",1,10,0},
{"d4",2,10,0},{"d5",2,10,0},{"d6",2,10,0},{"d7",1,10,0},{"0",0,0,0},
{"0",0,0,0},{"0",0,0,0}};
struct file fine[10]={{"e1",0,10,0},{"e2",2,10,0},{"e3",1,10,0},
{"e4",2,10,0},{"e5",2,10,0},{"e6",2,10,0},{"e7",1,10,0},{"0",0,0,0},
{"0",0,0,0},{"0",0,0,0}};
struct file six[10]={{"f1",0,10,0},{"f2",2,10,0},{"f3",1,10,0},
{"f4",2,10,0},{"f5",2,10,0},{"f6",2,10,0},{"f7",1,10,0},{"0",0,0,0},
{"0",0,0,0},{"0",0,0,0}};
struct file seven[10]={{"g1",0,10,0},{"g2",2,10,0},{"g3",1,10,0},
{"g4",2,10,0},{"g5",2,10,0},{"g6",2,10,0},{"g7",1,10,0},{"0",0,0,0},
{"0",0,0,0},{"0",0,0,0}};
struct file eight[10]={{"h1",0,10,0},{"h2",2,10,0},{"h3",1,10,0},
{"h4",2,10,0},{"h5",2,10,0},{"h6",2,10,0},{"h7",1,10,0},{"0",0,0,0},
{"0",0,0,0},{"0",0,0,0}};
struct file nine[10]={{"j1",0,10,0},{"j2",2,10,0},{"j3",1,10,0},
{"j4",2,10,0},{"j5",2,10,0},{"j6",2,10,0},{"j7",1,10,0},{"0",0,0,0},
{"0",0,0,0},{"0",0,0,0}};
struct file ten[10]={{"k1",0,10,0},{"k2",2,10,0},{"k3",1,10,0},
{"k4",2,10,0},{"k5",2,10,0},{"k6",2,10,0},{"k7",1,10,0},{"0",0,0,0},
{"0",0,0,0},{"0",0,0,0}};
struct file UFD[10];
struct file AFD[5]={{"0",0,0,0},{"0",0,0,0},{"0",0,0,0},{"0",0,0,0},{"0",0,0,0}};
///////////////////////////////////////////////////////////////
struct user use[10]={{"number1",one},{"number2",two},{"number3",three},{"number4",four},
{"number5",fine},{"number6",six},{"number7",seven},{"number8",eight},{"number9",nine},
{"number10",ten}};
struct user MFD[1]={{"0",0}};
///////////////////////////////////////////////////////////////////
void running();
void delet();
void write();;
void open();
void close();
void bye();
void read();
void create();
void input();
///////////////////////////////////////////////////////////////////
using namespace std;
void main()
{ input();
running();
cout<<"操作己結束"<>order;
switch(order)
{ case c : create();break;
case d : delet();break;
case o : open();break;
case s : close();break;
case r : read();break;
case w : write();break;
case b : bye();break;
case t : input();break;
default : cout<<"輸入命令出錯,請重輸"<>name;
flag=0;
for(i=0;i<10;i++)
{ if(strcmp(UFD[i].name,name))//如果沒有這個文件
{
flag=1;
//break;
}
else
{ flag=0;
strcpy(UFD[i].name,"0");//清空文件
UFD[i].code=0;
UFD[i].pwrite=0;
UFD[i].size=0;
cout<<"該文件己被刪除"<>name;
flag=0;
for(i=0;i<10;i++)
{ if(strcmp(UFD[i].name,name))//如果沒有這個文件
{
flag=1;
//break;
}
else
{ flag=0;
break;
}
}
if(flag==1)
cout<<"無此文件,請重新輸入"<>name;
flag=0;
for(j=0;j<5;j++)
{ if(strcmp(AFD[j].name,name))//如果沒有這個文件
{
flag=1;
//break;
}
else
{ flag=0;
strcpy(AFD[j].name,"0");//清空文件
AFD[j].code=0;
AFD[j].pwrite=0;
AFD[j].size=0;
cout<<"運行隊列中的該文件己被關閉"<>name;
for(j=0;j<5;j++)
{
if(!strcmp(AFD[j].name,name))//如果AFD有這個文件
{ flag=1; break;
}
}
if(flag==1)
if(AFD[j].code==0||AFD[j].code==2)
{ AFD[j].pwrite=R;
cout<<"文件的狀態(tài)是正在讀"<>name;
for(j=0;j<5;j++)
{
if(!strcmp(AFD[j].name,name))//如果AFD有這個文件
{ flag=1; break;
}
}
if(flag==1)
if(AFD[j].code==1||AFD[j].code==2)
{ AFD[j].pwrite=W;
cout<<"文件的狀態(tài)是正在寫"<9)
{ cout<<"文件夾己滿,請先刪除"<>name;
flag=0;
for(i=0;i<10;i++)
{ if(!strcmp(UFD[i].name,name))//如果有重名的文件
{ cout<<"文件名重復,請重新輸入"<>UFD[i].code;
if(UFD[i].code!=0&&UFD[i].code!=1&&UFD[i].code!=2)
cout<<"輸入錯誤,重新輸入保護碼"<>UFD[i].size;
cout<<"己建立文件"<>name;
switch(name)
{ case 1: for(i=0;i<10;i++)UFD[i]=one[i];MFD[0]=use[1];running();break;
case 2: for(i=0;i<10;i++)UFD[i]=two[i];MFD[0]=use[1];running();break;
case 3: for(i=0;i<10;i++)UFD[i]=three[i];MFD[0]=use[2];running();break;
case 4: for(i=0;i<10;i++)UFD[i]=four[i];MFD[0]=use[3];running();break;
case 5: for(i=0;i<10;i++)UFD[i]=fine[i];MFD[0]=use[4];running();break;
case 6: for(i=0;i<10;i++)UFD[i]=six[i];MFD[0]=use[5];running();break;
case 7: for(i=0;i<10;i++)UFD[i]=seven[i];MFD[0]=use[6];running();break;
case 8: for(i=0;i<10;i++)UFD[i]=eight[i];MFD[0]=use[7];running();break;
case 9: for(i=0;i<10;i++)UFD[i]=nine[i];MFD[0]=use[8];running();break;
case 0: for(i=0;i<10;i++)UFD[i]=ten[i];MFD[0]=use[9];running();break;
default : cout<<"輸入用戶名出錯"<
下載提示(請認真閱讀)
- 1.請仔細閱讀文檔,確保文檔完整性,對于不預覽、不比對內容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現我們的網址水印。
- 3、該文檔所得收入(下載+內容+預覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領!既往收益都歸您。
文檔包含非法信息?點此舉報后獲取現金獎勵!
下載文檔到電腦,查找使用更方便
9.9
積分
- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
-
操作系統
設計
一個
二級
文件系統
報告
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
裝配圖網所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
鏈接地址:http://m.zhongcaozhi.com.cn/p-7854849.html