陸億紅 李波
摘要:本文闡述了圖示法在“模擬UNIX文件系統(tǒng)”大型實(shí)驗(yàn)的設(shè)計(jì)思路及具體操作中的應(yīng)用,以期能夠鞏固和補(bǔ)充操作系統(tǒng)的原理教學(xué),從而提高學(xué)生對(duì)操作系統(tǒng)的認(rèn)識(shí),使學(xué)生能將操作系統(tǒng)中文件系統(tǒng)部分的概念具體化。
關(guān)鍵詞:UNIX文件系統(tǒng);圖示法;實(shí)驗(yàn);操作系統(tǒng)
中圖分類號(hào):G720 文獻(xiàn)標(biāo)識(shí)碼:A 論文編號(hào):1674-2117(2016)08-0092-03
由于大部分學(xué)生平時(shí)接觸的是Windows操作系統(tǒng),對(duì)UNIX操作系統(tǒng)不熟悉,所以為了幫助學(xué)生更好地理解UNIX文件系統(tǒng),教師在實(shí)驗(yàn)教學(xué)中,采用圖形解釋知識(shí)點(diǎn),展示實(shí)驗(yàn)過程,從而使學(xué)生輕松地理解文件系統(tǒng)結(jié)構(gòu),更快地進(jìn)入實(shí)驗(yàn)設(shè)計(jì)階段。這種用圖形闡述知識(shí)點(diǎn)的方法,被稱之為圖示法。[1-5]
“模擬UNIX文件系統(tǒng)”實(shí)驗(yàn)概述
“模擬UNIX文件系統(tǒng)”實(shí)驗(yàn)實(shí)質(zhì)上是用一個(gè)文件模擬UNIX文件系統(tǒng)的存儲(chǔ)系統(tǒng)。
在UNIX系統(tǒng)中,把每個(gè)磁盤或磁帶看作是一個(gè)文件卷,在每個(gè)文件卷上可存放一個(gè)文件系統(tǒng)。每個(gè)文件系統(tǒng),由一系列的邏輯塊組成,簡(jiǎn)稱盤塊。每個(gè)盤塊可為512、1024、2048字節(jié)或是512字節(jié)的整數(shù)倍,這些值可以在生成系統(tǒng)時(shí)直接指定。假定一個(gè)盤塊512字節(jié),盤塊從0開始直到最大容量并按順序加以編號(hào)就成了一個(gè)文件卷,也叫文件系統(tǒng)。
一個(gè)文件卷的空間圖示如圖1,文件卷的空間通常被劃分為若干用途各不相同的部分:引導(dǎo)區(qū)、管理區(qū)、索引節(jié)點(diǎn)區(qū)和文件存儲(chǔ)區(qū)。
其中0#塊一般用于系統(tǒng)引導(dǎo),1#塊為超級(jí)塊,2#塊到K#塊存放索引節(jié)點(diǎn),即iNode,K+1#塊到N#塊存放文件。讀入并啟動(dòng)操作系統(tǒng)由引導(dǎo)塊完成。[6]超級(jí)塊用于記錄文件系統(tǒng)中盤塊和磁盤索引結(jié)點(diǎn)的使用情況,主要包括文件系統(tǒng)的盤塊數(shù)目、空閑盤塊號(hào)棧、空閑盤塊號(hào)數(shù)目、空閑磁盤索引結(jié)點(diǎn)號(hào)棧、空閑磁盤索引結(jié)點(diǎn)數(shù)目、超級(jí)塊修改標(biāo)志和修改時(shí)間等。
模擬UNIX文件系統(tǒng)實(shí)驗(yàn)完成一個(gè)UNIX文件系統(tǒng)的子集的模擬實(shí)現(xiàn),設(shè)計(jì)時(shí)可以忽略引導(dǎo)塊。
實(shí)驗(yàn)設(shè)計(jì)思路
1.基本原理
為了加快目錄查詢速度,UNIX目錄項(xiàng)只保留文件名和索引節(jié)點(diǎn)號(hào),索引節(jié)點(diǎn)則保存除文件名外的有關(guān)信息。[7]UNIX文件系統(tǒng)的超級(jí)塊含有文件系統(tǒng)各個(gè)數(shù)據(jù)結(jié)構(gòu)的大小,索引節(jié)點(diǎn)的位置可據(jù)此得到。而UNIX文件系統(tǒng)創(chuàng)建時(shí)生成的第一個(gè)索引節(jié)點(diǎn)則對(duì)應(yīng)根目錄,找到根目錄后,就可以對(duì)目錄樹進(jìn)行搜索,查找所需要的目錄項(xiàng),從而找到所需要的文件,進(jìn)而對(duì)文件進(jìn)行各種操作。
而UNIX把普通文件與目錄文件都存放在磁盤或磁帶上,一個(gè)磁盤就是一個(gè)文件系統(tǒng)。例如,一個(gè)磁盤有200塊,那么就先生成一個(gè)200×512B的文本文件,512B就是一個(gè)磁盤塊,然后建立根目錄root,根目錄在文件區(qū),假設(shè)存放索引節(jié)點(diǎn)的盤塊數(shù)是12塊,再加上引導(dǎo)塊,那么從13#盤塊開始存放文件,根的目錄文件就放在13#盤塊,每個(gè)目錄至少有兩個(gè)目錄項(xiàng),即父目錄和當(dāng)前目錄。假設(shè)一個(gè)索引節(jié)點(diǎn)占32個(gè)字節(jié),根目錄的索引節(jié)點(diǎn)就是第1個(gè)索引節(jié)點(diǎn),放在第1塊的前32個(gè)字節(jié)中,把索引節(jié)點(diǎn)內(nèi)容填寫好,還可以再初始化一些目錄。目錄文件放在文件區(qū),填寫好相應(yīng)索引節(jié)點(diǎn)內(nèi)容,然后根據(jù)初始化的結(jié)果,把空閑數(shù)據(jù)盤塊分組,按照成組鏈接法鏈接,設(shè)置好空閑盤塊號(hào)棧。同理,設(shè)置好空閑索引節(jié)點(diǎn)號(hào)棧,對(duì)超級(jí)塊進(jìn)行初始化,超級(jí)塊內(nèi)容放在0#塊。然后,開始一系列的操作。
2.文件卷的組織
假設(shè)文件卷總共有200個(gè)盤塊。用棧和成組鏈接法來管理空閑索引節(jié)點(diǎn)和空閑盤塊;盤塊的大小設(shè)計(jì)為512字節(jié),其中0#塊為超級(jí)塊(引導(dǎo)塊忽略),用于管理盤塊的信息以及管理空閑盤塊。1#~12#塊共12塊用于存放索引節(jié)點(diǎn),由于每個(gè)索引節(jié)點(diǎn)大小為32字節(jié),一個(gè)塊可以存放16個(gè)索引節(jié)點(diǎn),13#~199#塊用于存放數(shù)據(jù)塊。文件卷結(jié)構(gòu)[8]圖示如圖2。
3.超級(jí)塊
超級(jí)塊[9]用于管理索引節(jié)點(diǎn)和盤塊的使用情況及分配信息,存放文件系統(tǒng)的盤塊數(shù)目、索引節(jié)點(diǎn)號(hào)棧的指針、索引節(jié)點(diǎn)號(hào)棧中元素個(gè)數(shù)、成組鏈接法管理的空閑盤塊號(hào)棧的指針和空閑盤塊號(hào)棧中元素的個(gè)數(shù),以及對(duì)于整個(gè)文件系統(tǒng)的盤塊地址等。
4.空閑盤塊
空閑盤塊采用成組鏈接法[10]管理(如圖3),每組10塊,13#~99#分為9組,每組的最后一個(gè)盤塊存放下一組的盤塊號(hào)信息。最后一組只有7塊,加上0作為結(jié)束標(biāo)志。在超級(jí)塊中用一個(gè)一維數(shù)組(10個(gè)元素)作為空閑磁盤塊棧,放入第一組盤塊。
5.索引節(jié)點(diǎn)
索引節(jié)點(diǎn)[11]主要包括文件的字節(jié)數(shù),文件擁有者的User ID,文件的Group ID,文件的讀、寫、執(zhí)行權(quán)限,文件的時(shí)間戳,鏈接數(shù)(即有多少文件名指向這個(gè)索引節(jié)點(diǎn)),文件物理地址等。
文件物理地址為7項(xiàng):4個(gè)直接地址、1個(gè)一次間址、1個(gè)兩次間址、1個(gè)三次間址。
每個(gè)索引節(jié)點(diǎn)大小為32B,一個(gè)塊可以存放16個(gè)索引節(jié)點(diǎn),1#~12#塊共12塊用于存放索引節(jié)點(diǎn),總共有192個(gè)索引節(jié)點(diǎn)。空閑索引節(jié)點(diǎn)采用成組鏈接法管理,每組20個(gè),分為10組,最后一組12個(gè)。在超級(jí)塊中用一維數(shù)組(20個(gè)元素)作為空閑索引節(jié)點(diǎn)號(hào)棧。
6.目錄
每個(gè)目錄是一個(gè)文件,每個(gè)目錄包含若干個(gè)目錄項(xiàng)。一個(gè)目錄項(xiàng)包括索引節(jié)點(diǎn)編號(hào)和文件名。[12]
實(shí)驗(yàn)過程說明
下面以下頁圖4為例,說明如何構(gòu)建文本文件模擬UNIX文件系統(tǒng)(圖中“i”表示索引節(jié)點(diǎn),“13#”表示索引節(jié)點(diǎn)中的物理地址項(xiàng)內(nèi)容為13#盤塊)。
根據(jù)圖4,根目錄文件有目錄項(xiàng)五個(gè),名字分別為“.”“..” “bin”“usr”“dev”,它們的索引節(jié)點(diǎn)編號(hào)分別為1、1、2、3、4,其中
“.”表示當(dāng)前目錄,“..”表示父目錄。而根目錄的當(dāng)前目錄和父目錄都為其自身,因此它們的索引節(jié)點(diǎn)編號(hào)皆為1。根目錄的索引節(jié)點(diǎn)編號(hào)為1,寫在磁盤1#盤塊的第一個(gè)32字節(jié)處,假設(shè)根目錄文件寫在磁盤13#盤塊,1#索引節(jié)點(diǎn)的文件物理地址處寫13#。同理,假設(shè)bin目錄文件、usr目錄文件、dev目錄文件分別寫在14#、15#、16#盤塊,其索引節(jié)點(diǎn)編號(hào)為2、3、4的文件物理地址處分別寫14#、15#、16#,依此類推。
初始化后的文本文件如圖5所示,圖中每一行代表一個(gè)磁盤塊。
參考文獻(xiàn):
[1]郭巧莉,杜靜然.圖示法在《財(cái)務(wù)管理》課程中的直觀運(yùn)用[J].內(nèi)蒙古財(cái)經(jīng)學(xué)院學(xué)報(bào)(綜合版),2010,8(4):111-114.
[2]陸濤.用于《數(shù)據(jù)結(jié)構(gòu)》課程教學(xué)的圖示法探究[J].華章,2011(21):141.
[3]王瑩,陳豫浩,范一青.“消費(fèi)者均衡”理論的圖示法解析[J].渭南師范學(xué)院學(xué)報(bào),2013,28(8):68-71.
[4]折楠,徐曉光,陳曉磊,等.基于位圖示法的NSFS文件系統(tǒng)設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2013,36(14):89-92,95.
[5]周麗.圖示法與要素組合方式在法學(xué)教學(xué)中的應(yīng)用分析[J].欽州學(xué)院學(xué)報(bào),2013,28(11):62-66.
[6]邵雄凱,李晶.Unix文件系統(tǒng)技術(shù)分析[J].微機(jī)發(fā)展,2001(4):69-71.
[7](英)Keith Haviland,Dina Gray,Ben Salama.UNIX系統(tǒng)編程(第二版)[M].舒明,熊戰(zhàn)波,等.譯.北京:電子工業(yè)出版社,2003.
[8](美)Andrew S.Tanenbaum,Albert S.Woodhull.操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)(第三版)[M].陳瑜,諶衛(wèi)軍,譯.北京:電子工業(yè)出版社,2007.
[9]邢國(guó)慶,陳智建.UNIX從入門到精通[M].北京:電子工業(yè)出版社,2010.
[10]湯小丹,梁紅兵,哲鳳屏,等.計(jì)算機(jī)操作系統(tǒng)(第四版)[M].西安:西安電子科技大學(xué)出版社,2014.
[11](美)William Stallings.操作系統(tǒng)原理——精髓與設(shè)計(jì)原理[M].陳向群,陳瑜,譯.北京:電子工業(yè)出版社,2012.
[12]Abraham Siberschatz,Peter Baer Galvin,Greg Gagne.操作系統(tǒng)概念(第七版)[M].鄭扣根,譯.北京:高等教育出版社,2007.
作者簡(jiǎn)介:陸億紅(1968-),女,浙江東陽,碩士,副教授,碩士研究生導(dǎo)師,研究方向?yàn)閿?shù)據(jù)庫應(yīng)用;李波(1979-),男,河南新縣,博士,講師,研究方向?yàn)椴⑿杏?jì)算,高性能計(jì)算。