




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、西安郵電大學(xué)操作系統(tǒng)課程設(shè)計報 告 書院系名稱:計算機(jī)學(xué)院學(xué)生姓名:*專業(yè)名稱:軟件工程班 級:*班學(xué)號:*時間:2016 年5月 9 日 至 2016 年 5月 20 日 1 實驗?zāi)康牟僮飨到y(tǒng)是控制和管理計算機(jī)硬件和軟件資源的虛擬機(jī),其中的文件系統(tǒng)是對軟件和設(shè)備進(jìn)行管理的系統(tǒng),文件系統(tǒng)是操作系統(tǒng)中非常重要的一個模塊,它的實現(xiàn)占用了操作系統(tǒng)源碼的最大編碼量,其好壞也直接影響著用戶對操作系統(tǒng)的感受程度。通過對操作系統(tǒng)課程設(shè)計的實踐,進(jìn)一步加深對文件系統(tǒng)的認(rèn)識和理解,并在此基礎(chǔ)上培養(yǎng)學(xué)生的工程應(yīng)用能力。實驗分別從用戶態(tài)和內(nèi)核態(tài)兩個層次實踐文件系統(tǒng)的部分功能。2 實驗任務(wù)2.1 ls實現(xiàn)在linux
2、下編程實現(xiàn)帶參數(shù)的shell命令 ls,ls命令必須支持如下功能。1.基本要求(1) 支持 -l 參數(shù);(2) 輸出結(jié)果按字典排序;(3) 列出“.”文件,支持-a參數(shù),在沒有-a時候不顯示隱藏文件;(4) 顯示記錄總數(shù)。2.高級要求(1) 支持對給定的目錄進(jìn)行操作,如 ls /tmp;(2) 輸出結(jié)果分欄排序,每欄的寬度由這一欄最長的文件名決定,顯示的欄數(shù)還受終端顯示器的寬度影響,每一列盡可能的等寬;(3) 正確顯示文件特殊屬性suid、sgid和sticky,參見聯(lián)機(jī)幫助確保程序能處理各種情況;(4) 支持標(biāo)準(zhǔn)的ls支持選項-R,它的功能是遞歸地列出目錄中所有的文件包含子目錄中的文件;(5
3、) 支持標(biāo)準(zhǔn)的ls支持選項-u,它會顯示出文件的最后訪問時間,如果用了-u而不用-l,會有什么結(jié)果?;(6) 當(dāng)關(guān)掉一個文件的讀權(quán)限,就不能打開這個文件來讀。如果從一個終端登錄,打開一個文件,保持文件的打開狀態(tài),然后從另外的終端登錄,去掉文件的讀權(quán)限,這時有什么事情會發(fā)生?編寫一個程序,先用open()打開一個文件,用read()讀一些內(nèi)容,調(diào)用sleep()等待20s以后,再讀一些內(nèi)容,從另外的終端,再等待的20s內(nèi)去掉文件的讀權(quán)限,這樣會有什么結(jié)果?。2.2編寫內(nèi)核模塊顯示目錄或文件的信息。(1) 使用內(nèi)核模塊編程;(2) 調(diào)試Linux操作系統(tǒng)原理與應(yīng)用第8章文件系統(tǒng)P215 的例子;(
4、3) 練習(xí)給內(nèi)核模塊傳入?yún)?shù),參考關(guān)于帶參數(shù)的模塊編程 (4) 給內(nèi)核模塊傳入?yún)?shù)path,其中path為絕對路徑;1) 當(dāng)path為目錄時,顯示目錄對應(yīng)的dentrey結(jié)構(gòu)中的相關(guān)信息(可打印的信息);2) 當(dāng)path為文件時,顯示文件對應(yīng)的indoe結(jié)構(gòu)中的相關(guān)信息(可打印的信息);3) 當(dāng)路徑錯誤時,有錯誤提示信息。3 開發(fā)環(huán)境 設(shè)備名稱設(shè)備類型配置類型參數(shù)LenovoG480 PC機(jī)硬件配置RAM 4G 軟件配置Ubuntu 32位 4 測試環(huán)境設(shè)備名稱設(shè)備類型配置類型參數(shù)LenovoG480 PC機(jī)硬件配置RAM 4G 軟件配置Ubuntu 32位 5 總體設(shè)計5.1功能組織圖ls
5、功能圖:運(yùn)行命令Ls-uLs-RLs-aLsLs-l輸出所有文件輸出所有文件屬性輸出隱藏文件輸出文件屬性按字典順序排序文件權(quán)限:運(yùn)行命令chmod修改權(quán)限讀文件,ls顯示權(quán)限信息內(nèi)核模塊:super_blocks:運(yùn)行命令加載模塊加鎖遍歷系統(tǒng)中的超級塊打印文件設(shè)備號打印文件系統(tǒng)名打印索引結(jié)點號統(tǒng)計索引結(jié)點計數(shù)卸載模塊path:運(yùn)行命令路徑錯誤Path=文件Path=目錄顯示目錄信息顯示錯誤信息顯示文件信息5.2原理linux文件系統(tǒng):linux下有普通文件、目錄文件、鏈接文件、設(shè)備文件、管道文件這幾種類型。但鏈接文件、設(shè)備文件、管道文件都可以當(dāng)做普通文件看待,那實際也就只要區(qū)分普通文件和目錄文
6、件這兩種了。而目錄文件的內(nèi)容就是它所包含所有文件和子目錄的一個列表,所以只要打開目錄文件并讀取對應(yīng)目錄塊里的那個列表數(shù)據(jù),就可以得到些目錄下所有文件和子目錄的名稱了。其實這個流程簡單,就是:打開目錄-讀取內(nèi)容-顯示文件名稱-關(guān)閉打開的目錄。Linux系統(tǒng)中會有很多目錄。每個目錄中又會有很多文件。如果要列出一個非當(dāng)前目錄的內(nèi)容或者是一個特定文件的信息,則需要在參數(shù)中給出目錄名或文件名。如:ls/tmp/列出/tmp目錄中各文件的文件名lsdocs/列出docs目錄中各文件的屬性ls*.c/列出當(dāng)前目錄下與*.c匹配的文件,即當(dāng)前目錄下所有以.c為后綴的經(jīng)常用到的命令行選項ls-l在前面已經(jīng)提到過
7、,-l就是輸出文件詳細(xì)的信息ls-a列出的內(nèi)容包含以“.“開頭的文件,即所謂有隱藏文件Linux的文件訪問權(quán)限:Linux是一個安全的操作系統(tǒng),說他安全,最重要的一個原因是對用戶訪問權(quán)限的控制。在shell下我們可以通過命令ls-l filename 來查看一文件的屬性。其中第一項文件屬性總共由10位構(gòu)成,第一位是文件類型,剩下9位都是表示文件的訪問權(quán)限,每3個一組,第一組:文件所有者對該文件的操作權(quán)限,第二組表示與文件所有者同組的用戶對該文件的操作權(quán)限,第三組表示其他用戶對該文件的操作權(quán)限,權(quán)限由三種字母組成:r:可讀w:可寫x:可執(zhí)行。編寫內(nèi)核模塊 寫內(nèi)核模塊,打印super_block結(jié)
8、構(gòu)中一些域的值。(課本上的例子)遍歷系統(tǒng)中的超級塊:list_head結(jié)構(gòu)類型的字段名稱為s_list。list_entry宏通過指向list_head節(jié)點的地址來得到外部超級塊的首地址。獲取系統(tǒng)中個超級塊的地址,獲得某個子進(jìn)程的地址,打印文件系統(tǒng)所在的主設(shè)備號和次設(shè)備號和文件系統(tǒng)名。遍歷打印每個超級塊中的所有索引節(jié)點號,打印索引結(jié)點。 內(nèi)核模塊傳入?yún)?shù)path,其中path為絕對路徑path=路徑時,顯示如下信息:目錄項標(biāo)志、哈希表、短目錄名、目錄項長度、目錄項名、目錄項計數(shù)器的引用path=文件時,顯示如下信息:文件索引節(jié)點的數(shù)量、文件類型和權(quán)限、用戶ID、用戶組ID、指定文件系統(tǒng)的讀寫訪
9、問標(biāo)志、文件大小、索引節(jié)點的狀態(tài)、硬鏈接數(shù)、引用記數(shù)、文件的塊、版本號、以位為單位的塊大小6 詳細(xì)設(shè)計6.1 模塊一ls1.功能(1)ls支持 -l 參數(shù);(2)輸出結(jié)果按字典排序;(3)列出“.”文件,支持-a參數(shù),在沒有-a時候不顯示隱藏文件支持 u參數(shù)。支持 R參數(shù);(4)顯示記錄總數(shù)。(5)支持對給定的目錄進(jìn)行操作,如 ls /tmp;(6)輸出結(jié)果分欄排序,每欄的寬度由這一欄最長的文件名決定,顯示的欄數(shù)還受終端顯示器的寬度影響,每一列盡可能的等寬;(7)修改文件權(quán)限 2.算法/流程圖ls算法描述:根據(jù)輸入命令所帶的參數(shù)判斷并調(diào)用函數(shù)do_ls(); 把隱藏文件屬性寫入結(jié)構(gòu)體數(shù)組Out
10、putpoint中并統(tǒng)計文件數(shù)。 非隱藏文件屬性寫入結(jié)構(gòu)體數(shù)組Output中并統(tǒng)計文件數(shù)。 按參數(shù)要求對文件名進(jìn)行排序。 根據(jù)要求輸出。流程圖:main()函數(shù):開始 判斷輸入的命令調(diào)用do_ls()判斷是否是/tmp -l 是打開當(dāng)前目錄把隱藏文件記錄在數(shù)組Outputpoint,非隱藏文件記錄在數(shù)組Output命令名字后加.否判斷命令是否是 -t是否調(diào)用qsort();按最后訪問時間排序調(diào)用qsort();按最后修改時間排序 否 判斷命令是否是ls 否是判斷命令是否是-R display_Ls( cntOutput );調(diào)用qsort();按最后修改時間排序是判斷命令是否是ls 判斷命令是
11、否是ls 調(diào)用qsort();按最后修改時間排序調(diào)用qsort();按最后修改時間排序調(diào)用qsort();按最后修改時間排序調(diào)用qsort();按最后修改時間排序調(diào)用qsort();按最后修改時間排序調(diào)用qsort();按最后修改時間排序否display_ls_R(cntOutp);判斷命令是否是ls-l 是結(jié) 束循環(huán)調(diào)用dostat( Output i .FileName );3.運(yùn)行結(jié)果4.模塊使用的主要函數(shù)、數(shù)據(jù)類型和宏(1)主要函數(shù)說明1)函數(shù)一 do_ls();原型: void do_ls( int myJudge,char myOrder )功能:根據(jù)命令輸出對應(yīng)的文件屬性參數(shù):m
12、yJudge,myOrder返回值:void2)函數(shù)二 recursion原型: void recursion(char *name)功能:遞歸輸出文件名參數(shù): name返回值:void3)函數(shù)三display_ls_a原型: void display_Ls_a( int cntPoint,int cnt )功能:ls a的功能,輸出非隱藏文件參數(shù):cntPoint,cnt返回值:void4)函數(shù)四show_file_info原型: void show_file_info( char *filename,struct stat * info_p )功能:ls l文件屬性分欄輸出 參數(shù):file
13、name,info_p返回值:void(2)數(shù)據(jù)類型1)數(shù)據(jù)類型1名稱:OutputmaxN 類型:struct Outfile *含義:非隱藏文件的保存2)數(shù)據(jù)類型2名稱:,OutputPointmaxM;類型:struct Outfile *含義:隱藏文件的保存(3)宏1名稱:#define LS 0 /ls含義:命令行無參數(shù)宏2名稱:#define LS_A 1 /ls -a含義:命令行參數(shù)只有-a宏3名稱: #define LS_L 2 /ls -l含義:命令行參數(shù)只有-l宏4名稱:#define LS_TMP 3 /ls /tmp含義:命令行參數(shù)有/tmp宏5名稱:#define L
14、S_R 7 /ls -R含義:命令行參數(shù)有-R 6.2 模塊二super_block1.功能通過加載內(nèi)核的方式,打印出超級塊super_blocks數(shù)據(jù)結(jié)構(gòu)中文件系統(tǒng)所在的主設(shè)備號和次設(shè)備號以及文件系統(tǒng)名2.算法/流程圖開始加載模塊加鎖遍歷系統(tǒng)中的超級塊打印文件設(shè)備號打印文件系統(tǒng)名打印索引結(jié)點號索引結(jié)點計數(shù)卸載模塊結(jié)束3.運(yùn)行結(jié)果4.模塊使用的主要函數(shù)、數(shù)據(jù)類型和宏(1)主要函數(shù)說明1)函數(shù)一原型: static int _init my_init(void)功能:模塊加載參數(shù):無返回值:int2)函數(shù)二原型:static void _exit my_exit(void)功能:模塊卸載參數(shù):v
15、oid返回值:void(2)數(shù)據(jù)類型1)數(shù)據(jù)類型1名稱:sb類型:struct super_block *含義:定義一個超級塊2)數(shù)據(jù)類型2名稱:pos類型:struct list_head *含義:定義一個鏈表3)數(shù)據(jù)類型3名稱:linode類型:struct list_head *含義:定義一個鏈表4)數(shù)據(jù)類型4名稱:pinode類型:struct inode *含義:定義一個索引結(jié)點5)數(shù)據(jù)類型5名稱:count類型:int含義:存儲總數(shù)(3)宏一名稱:#define SUPER_BLOCKS_ADDRESS 0xc1778bc0含義:超級塊的變量地址宏二名稱:#define SB_LO
16、CK_ADDRESS0xc1932aa0含義: sb_lock超級塊對應(yīng)的自旋鎖7 測試方法與測試結(jié)果7.1測試方法 編號 輸入用例 期望結(jié)果 1 ./a.out按字典排序,輸出當(dāng)前目錄下的所有文件名(不含隱藏文件) 2 ./a.out -l顯示當(dāng)前目錄下的非隱藏文件詳細(xì)信息按字典排序 3 ./a.out -a 顯示上級目錄下目錄的所有文件名,含有隱藏文件。 4 ./a.out -t按照最后修改時間排序 5 ./a.out -R顯示上層文件夾下所有文件文件 6 ./a.out linux顯示liunx:當(dāng)前文件夾下沒有文件7.2測試結(jié)果 1. ./a.out2. ./a.out -a3. /a.out-l4. ./a.out linux5. ./a.out -u6. ./a.out -R8 調(diào)試情況,設(shè)計技巧及體會通過這次課程設(shè)計,使我對liunx理解更加深了一步。通過編寫程序中錯誤,對ls功能基本以達(dá)到掌握并熟練運(yùn)用的程度。對錯誤的調(diào)試,對程序的掌握運(yùn)行有的一定的掌控。這次課程
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 宣傳推廣部管理制度
- 家具廠車輛管理制度
- 庫房配料員管理制度
- 張作霖家庭管理制度
- 彩票店臺賬管理制度
- 律師會見室管理制度
- 德克士崗位管理制度
- 快時尚門店管理制度
- 急救培訓(xùn)證管理制度
- 總監(jiān)級薪酬管理制度
- 蔬菜栽培學(xué)智慧樹知到期末考試答案章節(jié)答案2024年浙江大學(xué)
- JB-T 14320-2022 氧氣用止回閥
- 專題強(qiáng)化三 異面直線、線面角和二面角技巧-2021-2022學(xué)年高一數(shù)學(xué)【考題透析】滿分計劃系列(人教A版2019必修第二冊)
- 產(chǎn)品封樣管理制度
- 2024年湖北襄陽市檢察機(jī)關(guān)襄陽市城郊地區(qū)檢察院招聘筆試參考題庫附帶答案詳解
- 人工智能專業(yè)發(fā)展規(guī)劃方案
- 2024年湖北省知名中小學(xué)教聯(lián)體聯(lián)盟生物結(jié)業(yè)考試模擬試題
- AQ-T 1009-2021礦山救護(hù)隊標(biāo)準(zhǔn)化考核規(guī)范
- 高新技術(shù)企業(yè)人才流失問題研究-以H公司為例
- 2024年江蘇無錫市江陰信聯(lián)擔(dān)保有限公司招聘筆試參考題庫含答案解析
- 2024國機(jī)集團(tuán)財務(wù)資產(chǎn)紀(jì)檢監(jiān)察中心公開招聘2人高頻考題難、易錯點模擬試題(共500題)附帶答案詳解
評論
0/150
提交評論