微機(jī)原理課程設(shè)計(jì)多級(jí)文件管理系統(tǒng)_第1頁(yè)
微機(jī)原理課程設(shè)計(jì)多級(jí)文件管理系統(tǒng)_第2頁(yè)
微機(jī)原理課程設(shè)計(jì)多級(jí)文件管理系統(tǒng)_第3頁(yè)
微機(jī)原理課程設(shè)計(jì)多級(jí)文件管理系統(tǒng)_第4頁(yè)
微機(jī)原理課程設(shè)計(jì)多級(jí)文件管理系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、山東理工大學(xué)計(jì)算機(jī)學(xué)院課 程 設(shè) 計(jì)(操作系統(tǒng))班 級(jí)計(jì)科0805姓 名學(xué) 號(hào)指導(dǎo)教師二一一 年 六 月二十四日課程設(shè)計(jì)任務(wù)書及成績(jī)?cè)u(píng)定課題名稱多級(jí)目錄文件管理系統(tǒng)、題目的目的和要求: 鞏固和加深對(duì)操作系統(tǒng)(os)原理的理解,初步掌握操作系統(tǒng)組成模塊和應(yīng)用接口的使用方法,提高進(jìn)行工程設(shè)計(jì)和系統(tǒng)分析的能力;通過選做上面的課題,實(shí)現(xiàn)os最基本模塊的管理功能,重點(diǎn)放在數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)、文檔規(guī)范化和程序設(shè)計(jì)風(fēng)格。、設(shè)計(jì)進(jìn)度及完成情況日 期內(nèi) 容6.13-6.15選取參考書,查閱有關(guān)文獻(xiàn)資料,完成課程設(shè)計(jì)說(shuō)明書內(nèi)容1部分。 完成課程設(shè)計(jì)說(shuō)明書內(nèi)容2-4部分6.166.20創(chuàng)建相關(guān)數(shù)據(jù)結(jié)構(gòu),錄入源程序6.21

2、6.22調(diào)試程序并記錄調(diào)試中的問題,完成課程設(shè)計(jì)說(shuō)明書第5部分。6.23系統(tǒng)測(cè)試,演示設(shè)計(jì)成果,考核成績(jī)。6.24整理課程設(shè)計(jì)說(shuō)明書,上午11時(shí),由學(xué)習(xí)委員交課程設(shè)計(jì)說(shuō)明書(計(jì)算機(jī)科學(xué)系9#213或直接交給指導(dǎo)教師)、主要參考文獻(xiàn)及資料1 湯子贏等.計(jì)算機(jī)操作系統(tǒng)(第二版).西安電子科技大學(xué)出版社,2006.82 馮耀霖等.操作系統(tǒng),西安電子科技大學(xué)出版社.19923 張堯?qū)W等.計(jì)算機(jī)操作系統(tǒng)教程(第2版).清華大學(xué)出版社,2001.44 譚耀銘.操作系統(tǒng).中國(guó)人民大學(xué)出版社,2003.45 abraham silberschatz,peter galvin & greg gagne,appl

3、ied operating system concepts,higher education press,2002、成績(jī)?cè)u(píng)定:設(shè)計(jì)成績(jī): (教師填寫)指導(dǎo)老師: (簽字)二一一 年 六 月二十四日目 錄第一章 概述1第二章 系統(tǒng)分析2第三章 系統(tǒng)設(shè)計(jì)3第四章 程序設(shè)計(jì)流程圖或n-s圖5第五章 調(diào)試過程中的問題及系統(tǒng)測(cè)試情況18第六章 結(jié)束語(yǔ)21第一章 概述本課程設(shè)計(jì)意義 課程設(shè)計(jì)是實(shí)踐性教學(xué)中的一個(gè)重要環(huán)節(jié),它以某一課程為基礎(chǔ),可以涉及和課程相關(guān)的各個(gè)方面,是一門獨(dú)立于課程之外的特殊課程。課程設(shè)計(jì)是讓同學(xué)們對(duì)所學(xué)的課程更全面的學(xué)習(xí)和應(yīng)用,理解和掌握課程的相關(guān)知識(shí)。計(jì)算機(jī)操作系統(tǒng)一門重要的專業(yè)課

4、,是開發(fā)操作系統(tǒng)和軟件系統(tǒng)的理論和應(yīng)用基礎(chǔ)。操作系統(tǒng)的課程設(shè)計(jì)非常又必要,可以使學(xué)生通過編程實(shí)驗(yàn),更加深入得理解和掌握操作系統(tǒng)的基本理論和功能技術(shù),將相對(duì)抽象的理論應(yīng)用于實(shí)踐,提高分析問題和解決問題的能力,提高編寫和開發(fā)系統(tǒng)程序的能力。第二章 系統(tǒng)分析1 在內(nèi)存中開辟一個(gè)虛擬磁盤空間作為文件存儲(chǔ)器,在其上實(shí)現(xiàn)一個(gè)多用戶多目錄的文件系統(tǒng)。2 文件物理結(jié)構(gòu)可采用顯式鏈接或其他方法。3 磁盤空閑空間的管理可選擇位示圖或其他方法。如果采用位示圖來(lái)管理文件存儲(chǔ)空間,并采用顯式鏈接分配方式,則可以將位示圖合并到fat中。4 文件目錄結(jié)構(gòu)采用多用戶多級(jí)目錄結(jié)構(gòu),每個(gè)目錄項(xiàng)包含文件名、物理地址、長(zhǎng)度等信息,還

5、可以通過目錄項(xiàng)實(shí)現(xiàn)對(duì)文件的讀和寫的保護(hù)。目錄組織方式可以不使用索引結(jié)點(diǎn)的方式,但使用索引結(jié)點(diǎn),則難度系數(shù)為1.2。5 設(shè)計(jì)一個(gè)較實(shí)用的用戶界面,方便用戶使用。要求提供以下相關(guān)文件操作:(1)具有l(wèi)ogin (用戶登錄)(2)系統(tǒng)初始化(建文件卷、提供登錄模塊)(3)文件的創(chuàng)建: create(4)文件的打開:open(5)文件的讀:read(6)文件的寫:write(7)文件關(guān)閉:close(8)刪除文件:delete (9)創(chuàng)建目錄(建立子目錄):mkdir(10)改變當(dāng)前目錄:cd(11)列出文件目錄:dir(12)退出:logout第三章 系統(tǒng)設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)1數(shù)據(jù)塊在內(nèi)存中的物理結(jié)構(gòu) ty

6、pedef struct fbunsigned fileblockid;/文件塊編號(hào)unsigned block_size; /文件塊的容量char *fileblockaddr; /文件塊地址struct fb *next; /下一個(gè)文件塊的地址 fileblock;2文件索引結(jié)構(gòu) typedef struct unsigned index;/文件元素索引編號(hào)char filenamename_len; /文件元素名char parentnamename_len; /父節(jié)點(diǎn)名unsigned fileblockid;/文件元素所在物理塊編號(hào)unsigned filelevel; /文件元素所

7、在層次,層文件元素名為一個(gè)文件元素邏輯位置unsigned effect; /是否有效,0-無(wú)效,1-有效 fileindexelement;3文件系統(tǒng)中文件元素的結(jié)構(gòu)(含文件夾和文件) typedef struct fsestruct fse *parent; /指向自己的父親節(jié)點(diǎn)unsigned filelevel; /文件元素所在層次,層文件元素名為一個(gè)文件元素的邏輯位置char filenamename_len; /文件元素名unsigned fileblockid;/文件元素所在物理塊編號(hào)unsigned fileelemlen;/文件元素的長(zhǎng)度f(wàn)iletype type;/文件元素

8、類型fileaccess access;/文件元素可供操作的權(quán)限user creator;/文件創(chuàng)建者char createtime18;/創(chuàng)建時(shí)間,日期格式:mm/dd/yy hh:mi:sschar lastmodtime18;/最后一次修改時(shí)間char *filedata;/一個(gè)文件的數(shù)據(jù)開始地址,文件夾時(shí)該值為nullfilestatus filestu;/如果是一個(gè)文件表示文件當(dāng)前的狀態(tài) fselement;4文件系統(tǒng)結(jié)構(gòu) typedef struct char *fsstart;/文件系統(tǒng)的起始地址unsigned superblocksize; /文件系統(tǒng)的容量bitmap bm

9、;/文件系統(tǒng)中的位示圖unsigned block_count;/文件系統(tǒng)中文件塊的數(shù)量fileblock *head;/文件系統(tǒng)中文件塊首地址fileindex fi;/文件系統(tǒng)中的文件索引 superblock;5文件系統(tǒng)的當(dāng)前運(yùn)行狀態(tài) typedef structuser currentuser;/當(dāng)前用戶unsigned filelevel;/用戶所在文件系統(tǒng)層fselement *currparent;/當(dāng)前層的父節(jié)點(diǎn)char *currentpath;/當(dāng)前路徑 currentstatus;6用戶結(jié)構(gòu) typedef struct char *username;/用戶名稱usert

10、ype ut;/用戶類型 user;第四章 程序設(shè)計(jì)流程圖4.1整體思路概述首先系統(tǒng)要完成初始化的任務(wù),建立一個(gè)系統(tǒng),并等待用戶登錄使用文件系統(tǒng),用戶登錄系統(tǒng)時(shí),系統(tǒng)對(duì)用戶的用戶名和密碼進(jìn)行驗(yàn)證(允許用戶用限次的嘗試,多最多嘗試五次),如果用戶登錄成功,則系統(tǒng)進(jìn)入命令提示符狀態(tài),等用戶輸入指令后,系統(tǒng)得用一個(gè)解釋程序按照指定方式處理用戶請(qǐng)求,用戶退出后,系統(tǒng)轉(zhuǎn)入登錄模塊,等待下一位用戶的登錄。4.1.1login (用戶登錄)內(nèi)置9個(gè)用戶名和密碼,用來(lái)驗(yàn)證登錄用戶的身份,用戶登錄成功后會(huì)初始化當(dāng)前用戶等一系列的系統(tǒng)當(dāng)前信息,默認(rèn)用戶的類型為普通用戶,如果用戶未能通過身份驗(yàn)證,提示用戶登錄失敗,

11、退出整個(gè)系統(tǒng)。用戶登錄流程圖4.1.2系統(tǒng)初始化系統(tǒng)的初始化要完成文件系統(tǒng)的建立,包括以下幾部分:請(qǐng)求內(nèi)存、設(shè)置位示圖、初始化文件索引、初始化文本塊鏈表、初始化系統(tǒng)的當(dāng)前狀態(tài)、創(chuàng)建一個(gè)根目錄做為系統(tǒng)的根。4.1.3文件的創(chuàng)建: create只支持在當(dāng)前目錄創(chuàng)建文件,根據(jù)位示圖找到一個(gè)未使用的文件塊用來(lái)存放用戶的文件信息,根據(jù)系統(tǒng)當(dāng)前狀態(tài)來(lái)構(gòu)建一個(gè)文件系統(tǒng)元素放入到找到的文件塊中,新創(chuàng)建的文件狀態(tài)為關(guān)閉,同時(shí)更新位示圖和文件索引。文件創(chuàng)建流程圖void create(char *filename)if (strcmp(filename, ) = 0)printf(對(duì)不起,文件名不能為空。n);e

12、lsecreatefileelement(protect, filename, file, null, cs.currparent);printf(%slocalhost %s$, cs.currentuser.username, cs.currentpath);4.1.4文件的打開:open只支持在當(dāng)前目錄進(jìn)行操作,通過用戶給定的文件名在文件索引中搜索到文件的物理文件塊id,找到該文件元素后,將文件當(dāng)前狀態(tài)置為打開。打開文件流程圖void open(char *path)char display100;for (unsigned i = 0; i filename) & fs.fi.fist

13、arti.filelevel = cs.filelevel & fs.fi.fistarti.effect = 1 & strcmp(fs.fi.fistarti.filename, path) = 0)fselement *fselem = (fselement *)findblankfileblock(fs.fi.fistarti.fileblockid);fselem-filestu = opened;strcpy(display, 文件已打開完畢。n);break;if (strcmp(display, ) = 0)strcpy(display, 當(dāng)前目錄下沒有您要打開的文件。n);p

14、rintf(%sn, display);printf(%slocalhost %s$, cs.currentuser.username, cs.currentpath);4.1.5文件的讀:read只支持在當(dāng)前目錄進(jìn)行操作,前提是用戶已執(zhí)行文件打開的命令,否則會(huì)提示用戶先打開文件。通過類似的查找方式,找到文件的數(shù)據(jù)部分,將數(shù)據(jù)顯示到界面。讀文件流程圖void read(char *path)char displayblock_size;for (unsigned i = 0; i filename) & fs.fi.fistarti.filelevel = cs.filelevel & fs.

15、fi.fistarti.effect = 1 &strcmp(fs.fi.fistarti.filename, path) = 0)fselement *fselem = (fselement *)findblankfileblock(fs.fi.fistarti.fileblockid);if (fselem-filestu = closed)strcpy(display, 文件尚未打開,請(qǐng)先打開文件。n);elseif (!fselem-filedata | !strcmp(fselem-filedata, )strcpy(display, 文件無(wú)內(nèi)容。n);elsestrcpy(disp

16、lay, fselem-filedata);fselem-filestu = reading;break;if (strcmp(display, ) = 0)strcpy(display, 當(dāng)前目錄下沒有您要打開的文件。n);printf(%sn, display);printf(%slocalhost %s$, cs.currentuser.username, cs.currentpath);4.1.6文件的寫:write只支持在當(dāng)前目錄進(jìn)行操作,前提是用戶已執(zhí)行文件打開的命令,否則會(huì)提示用戶先打開文件。命令成功后,會(huì)等待用戶的輸入,用戶輸入完畢,使用ctrl+d,結(jié)束輸入,系統(tǒng)會(huì)讀入用戶的

17、輸入內(nèi)容,保存到相應(yīng)的文件塊(注意,如果用戶的輸入太多,會(huì)出現(xiàn)越界或截取用戶輸入一部分的現(xiàn)象)。void write(char *path)char displayblock_size;memset(display, 0, block_size);for (unsigned i = 0; i filename) & fs.fi.fistarti.filelevel = cs.filelevel & fs.fi.fistarti.effect = 1 & strcmp(fs.fi.fistarti.filename, path) = 0)fselement *fselem = (fselemen

18、t *)findblankfileblock(fs.fi.fistarti.fileblockid);if (fselem-filestu = closed)strcpy(display, 文件尚未打開,請(qǐng)先打開文件。n);elseprintf(n注意:文件最大不可以超過 %d 字節(jié)!按ctrl+d結(jié)束編輯。n, block_size - sizeof(fselement);char c;int i = 0;while (c = getchar() != 0x04)displayi+ = c;getchar();/處理回車displayi = 0;strcpy(fselem-filedata,

19、 display);unsigned len=strlen(display)filedata, display, len);fselem-filestu = writing;strcpy(display, 文件寫入成功。n);break;printf(%sn, display);printf(%slocalhost %s$, cs.currentuser.username, cs.currentpath);4.1.7文件關(guān)閉:close只支持在當(dāng)前目錄進(jìn)行操作,通過用戶給定的文件名在文件索引中搜索到文件的物理文件塊id,找到該文件元素后,將文件當(dāng)前狀態(tài)置為關(guān)閉。void close(char

20、*path)char display100;for (unsigned i = 0; i filename) & fs.fi.fistarti.filelevel = cs.filelevel & fs.fi.fistarti.effect = 1 & strcmp(fs.fi.fistarti.filename, path) = 0)fselement *fselem = (fselement *)findblankfileblock(fs.fi.fistarti.fileblockid);fselem-filestu = opened;strcpy(display, 文件已關(guān)閉。n);br

21、eak;if (strcmp(display, ) = 0)strcpy(display, 當(dāng)前目錄下沒有您要關(guān)閉的文件。n);printf(%sn, display);printf(%slocalhost %s$, cs.currentuser.username, cs.currentpath);4.1.8刪除文件:delete刪除文件并不真正清理文件的物理存儲(chǔ)內(nèi)容,只是將文件的有效狀態(tài)更改為無(wú)效。刪除文件流程圖void delete(char *path)char display100 = ;for (unsigned i = 0; i filename) & fs.fi.fistarti

22、.filelevel = cs.filelevel & fs.fi.fistarti.effect = 1 &strcmp(fs.fi.fistarti.filename, path) = 0)fs.fi.fistarti.effect = 0;/刪除標(biāo)記strcpy(display, 文件已刪除。n);break;if (strcmp(display, ) = 0)strcpy(display, 當(dāng)前目錄下沒有您要?jiǎng)h除的文件。n);printf(%sn, display);printf(%slocalhost %s$, cs.currentuser.username, cs.currentp

23、ath);4.1.9創(chuàng)建目錄(建立子目錄):mkdir只支持在當(dāng)前目錄創(chuàng)建文件,與創(chuàng)建文件有點(diǎn)類似,只是文件夾在文件元素結(jié)構(gòu)中的數(shù)據(jù)部分為空。同樣會(huì)更新位示圖和文件索引。創(chuàng)建目錄流程圖void mkdir(char *filename)if (strcmp(filename, ) = 0)printf(對(duì)不起,文件夾名不能為空。n);elsecreatefileelement(protect, filename, dir, null, cs.currparent);printf(%slocalhost %s$, cs.currentuser.username, cs.currentpath);

24、4.1.10改變當(dāng)前目錄:cd只支持進(jìn)入下一層的一個(gè)文件夾和回到父目錄,實(shí)現(xiàn)方式為通過系統(tǒng)的當(dāng)前狀態(tài),獲取一個(gè)指向目標(biāo)文件夾的指針做為當(dāng)前的父節(jié)點(diǎn),改變當(dāng)前的路徑為目標(biāo)路徑,改變用戶當(dāng)前所在層。改變當(dāng)前目錄流程圖void cd(char *path)int splitdisplaycou = 0;/分割符出現(xiàn)的次數(shù)if(strcmp(path, .) = 0) /返回上一級(jí)目錄,即父目錄if (cs.filelevel 0)cs.filelevel-;cs.currparent = cs.currparent-parent;for (unsigned i = strlen(cs.current

25、path) - 1; i 0; i-)if (cs.currentpathi = /)splitdisplaycou+;if (splitdisplaycou = 2)/已過濾掉最后一個(gè)目錄名break;char temppath1000 ;strcpy(temppath, cs.currentpath);memset(cs.currentpath, 0, 1000);strncpy(cs.currentpath, temppath, i+1);elsechar display100 = ;for (unsigned i = 0; i filename) & fs.fi.fistarti.fi

26、lelevel = cs.filelevel & fs.fi.fistarti.effect = 1 & strcmp(fs.fi.fistarti.filename, path) = 0)strcpy(display, 文件存在。n);cs.currparent = (fselement *)findblankfileblock(fs.fi.fistarti.fileblockid);cs.filelevel+;strcat(cs.currentpath, path);strcat(cs.currentpath, /);break;if (strcmp(display, ) = 0)/文件夾

27、不存在,什么都不做printf(當(dāng)前目錄下沒有您要進(jìn)入的文件夾。n);printf(%slocalhost %s$, cs.currentuser.username, cs.currentpath);4.1.11列出文件目錄:dir只支持在當(dāng)前目錄進(jìn)行操作,根據(jù)文件元素的名稱文件元素所在層父節(jié)點(diǎn)可以唯一的標(biāo)識(shí)一個(gè)文件元素的關(guān)系在文件索引中搜索出當(dāng)前層的所有文件元素。void dir(char *path)char display1000;memset(display, 0, 1000);/查找顯示內(nèi)容for (unsigned i = 0; i filename) & fs.fi.fistar

28、ti.filelevel = cs.filelevel & fs.fi.fistarti.effect = 1)strcat(display, fs.fi.fistarti.filename);strcat(display, tt);printf(%sn, display);printf(%slocalhost %s$, cs.currentuser.username, cs.currentpath);4.1.12退出:logout用戶請(qǐng)求退出時(shí),跳出命令處理,提示用戶退出系統(tǒng),轉(zhuǎn)入到登錄模塊等待下一個(gè)用戶的登錄。4.2算法流程圖第五章 調(diào)試過程中的問題及系統(tǒng)測(cè)試情況5.1登錄內(nèi)置設(shè)了user

29、1到user8八個(gè)普通用戶和1個(gè)超級(jí)用戶root,密碼與用戶名相同。登錄時(shí)如果輸入用戶名和密碼錯(cuò)誤次數(shù)多于8次,則退出程序。輸入密碼時(shí)采用了一種不回顯的方式,雖然屏幕上沒有顯示輸入的密碼,其實(shí)密碼已經(jīng)輸入了系統(tǒng),這樣做可以提高系統(tǒng)的安全性。現(xiàn)在用超級(jí)用戶root登錄后出現(xiàn)如下界面:/表示根目錄,$后面可以輸入命令。圖5.15.2新建目錄和列出文件目錄由于第一次啟動(dòng)系統(tǒng),故根目錄下沒有任何東西,這點(diǎn)可以通過輸入命令dir來(lái)驗(yàn)證,故為了演示,先建立一個(gè)目錄hhh,在$后輸入命令,mkdir hhh,按回車,然后再用命令dir查看根目錄下信息,此時(shí)有一個(gè)文件hhh,如下:圖5.25.3改變當(dāng)前目錄系統(tǒng)啟動(dòng)后,默認(rèn)路徑為根目錄/,此時(shí)若要進(jìn)入剛才新建的目錄hhh,只需輸入命令cd hhh,結(jié)果如下:路徑已由原來(lái)的/變成了/hhh/圖5.35.4文件的創(chuàng)建在目錄hhh下新建一個(gè)名為h的文件,在$后輸入命令create h,再用命令dir列出文件:圖5.45.5文件的打開用命令open h打開文件h:圖5.55.6文件的寫先輸入

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論