




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
刖s
計算機技術(shù)的飛速發(fā)展正在引發(fā)新一輪世界性技術(shù)革命。在經(jīng)濟發(fā)展越來越全球化、科
技創(chuàng)新越來越國際化、知識經(jīng)濟已初見端倪的今天,任何一門技術(shù)或任何一個領(lǐng)域離開了計
算機恐怕都是不可想象的。然而計算機技術(shù)發(fā)展之迅速、計算機及其相關(guān)IT產(chǎn)品市場競爭
之激烈、計算機產(chǎn)業(yè)讓人致富之迅猛也同樣是人們始料不及的。在新世紀(jì),任何想在技術(shù)領(lǐng)
域有一番作為的人,恐怕都不得不面對計算機技術(shù)的挑戰(zhàn)。
學(xué)習(xí)計算機軟件技術(shù),特別是計算機操作系統(tǒng)技術(shù),除了需要刻苦努力外,還需要掌握
軟件和操作系統(tǒng)的原理與設(shè)計技巧。這些原理與技巧可以說是計算機前輩們一代接?代不停
努力的結(jié)晶,學(xué)習(xí)和掌握它們對于激發(fā)自己的創(chuàng)造力和想象力是很有幫助的。
如何學(xué)習(xí)和掌握操作系統(tǒng)技術(shù)的原理與實際技巧呢?除了聽課和讀書之外,最好的辦法
恐怕就是在實踐。例如,自己設(shè)計一個小型操作系統(tǒng),多使用操作系統(tǒng),多閱讀和分析操作
源代碼等。當(dāng)前非常流行的Linux操作系統(tǒng)的原始版就是一位大學(xué)生的練習(xí)之作。除了上
述練習(xí)方法之外,習(xí)題和實驗是很重要的實踐環(huán)節(jié)。
本書是一本配合《操作系統(tǒng)》課程的實驗指導(dǎo)書,共收集了供廣大同學(xué)實踐的七個實驗
(其中最后一個可以用作課程設(shè)計),包括處理器調(diào)度、虛擬存儲器、進程同步、驅(qū)動調(diào)度、
進程通信以及UNIX實踐。除了給出題目外,還附帶了大量的有效提示,在不降低實驗難度
的基礎(chǔ)上,給讀者最大的啟發(fā)性提示。當(dāng)然,這些提示只是一種參考,里面完全可能存在錯
誤和不妥之處,有待于各路高手的指教,讀者可以不局限于這些提示。
本書的編寫得到了本學(xué)院科學(xué)系詹永照老師的大力幫助和支持,他對本書內(nèi)容的安排組
織上提供了寶貴意見,綜合他多年的教學(xué)經(jīng)驗給我們作了醍醐灌頂,發(fā)聾振瞧的指導(dǎo)。在此,
編者對他表示衷心的感謝!
衷心希望本書能對學(xué)習(xí)計算機操作系統(tǒng)和計算機軟件的人有所幫助。
編者
2004年4月于鎮(zhèn)江
1
實驗要求4
實驗一處理器調(diào)度5
一、實驗內(nèi)容5
二、實驗?zāi)康?
三、實驗題目5
四、實驗報告8
實驗二虛擬存儲器9
一、實驗內(nèi)容9
二、實驗?zāi)康?
三、實驗題目9
四、實驗報告15
實驗三驅(qū)動調(diào)度16
一、實驗內(nèi)容16
二、實驗?zāi)康?6
三、實驗題目16
四、實驗報告20
實驗四同步機構(gòu)21
一、實驗內(nèi)容21
二、實驗?zāi)康?1
三、實驗題目21
四、實驗報告27
實驗五UNIX系統(tǒng)28
一、實驗內(nèi)容28
二、實驗?zāi)康?8
三、實驗題目28
四、實驗報告31
實驗六進程間通信32
一、實驗內(nèi)容32
二、實驗?zāi)康?2
三、實驗題目32
四、實驗報告37
課程設(shè)計38
-課程設(shè)計的內(nèi)容38
二、課程設(shè)計的要求38
三、課程設(shè)計的目的38
四、課程設(shè)計具體內(nèi)容39
第一部分認識LINUX39
第二部分LINUX安裝40
第三部分進入LINUX41
第四部分深入了解LINUX42
第五部分LINUX代碼分析48
第六部分檢查方法65
附錄1UNIX輔導(dǎo)66
第一章UNIX常用操作66
1.1啟動終端66
1.2登錄66
1.3UNIX命令67
1.4注銷(退出UNIX系統(tǒng))70
第二章UNIX文件系統(tǒng)72
2.1UNIX文件系統(tǒng)分類72
2.2UNIX文件類型72
2.3UNIX樹型目錄結(jié)構(gòu)73
2.4UNIX文件名稱73
2.5UNIX文件存取權(quán)限74
2.6UNIX重定向與管道75
2.7UNIX文件系統(tǒng)常用命令76
第三章UNIX文件系統(tǒng)常用工具和實用程序78
3.1VI編輯器的最基本用法78
3.2利用FIND命令查找文件79
3.3GREP命令基本用法79
3.4利用CMP命令比較文件80
3.5文件的備份和恢復(fù)實用程序80
3.6文件壓縮和解壓程序82
附錄2如何閱讀源程序邏輯83
實驗要求
1,每位同學(xué)準(zhǔn)備實驗本,上機前作好充分的準(zhǔn)備工作,預(yù)習(xí)本次實驗的內(nèi)容,
事先熟悉與實驗有關(guān)的軟硬件環(huán)境。
2,實驗時遵守實驗室的規(guī)章制度,愛護實驗設(shè)備,不得私自將使用的計算機
加密碼,影響其他同學(xué)的上機。原則上每人固定實驗設(shè)備,由始而終地進
行實驗,對于實驗設(shè)備出現(xiàn)的問題,要及時向指導(dǎo)老師匯報。
3,統(tǒng)一以以下格式命名本人的實驗文件:
[班級][學(xué)號]」實驗題號M擴展名]
例:計021班學(xué)號為03的學(xué)生第四個實驗的文件名為:j02103_4.c
4,最終的實驗報告按照要求書寫(或打?。磿r上交,仔細記錄實驗中的
數(shù)據(jù)、源程序、實驗結(jié)果,對于實驗過程中出現(xiàn)的問題或疑惑要一并書寫,
并作為重點加以思考。
實驗一處理器調(diào)度
一、實驗內(nèi)容
選擇一個調(diào)度算法,實現(xiàn)處理器調(diào)度。
二、實驗?zāi)康?/p>
在采用多道程序設(shè)計的系統(tǒng)中,往往有若干個進程同時處于就緒狀態(tài)。當(dāng)就緒狀態(tài)進程
個數(shù)大于處理器數(shù)時,就必須依照某種策略來決定哪些進程優(yōu)先占用處理器。本實驗?zāi)M在
單處理器情況下處理器調(diào)度,幫助學(xué)生加深了解處理器調(diào)度的工作。
三、實驗題目
本實驗有兩個題目,學(xué)生可選擇其中的一題。
第一題:設(shè)計一個按優(yōu)先數(shù)調(diào)度算法實現(xiàn)處理器調(diào)度的進程。
[提示]:
(1)假定系統(tǒng)有五個進程,每個進程用一個進程控制塊PCB來代表。進程控制塊的格
式為:
進程名
指針
要求求運行時而
優(yōu)先數(shù)一
其中,進程名--作為進程的標(biāo)識,假設(shè)五個進程的進程名分別是P”P2,P.VP4,P5。
指針--按優(yōu)先數(shù)的大小把五個進程連成隊列,用指針指出下一個進程的進程控制塊
首地址,最后一個進程中的指針為“0”。
要求運行時間一假設(shè)進程需要運行的單位時間數(shù)。
優(yōu)先數(shù)-一賦予進程的優(yōu)先數(shù),調(diào)度時總是選取優(yōu)先數(shù)大的進程先執(zhí)行。
狀態(tài)一一可假設(shè)有兩種狀態(tài),“就緒”狀態(tài)和“結(jié)束”狀態(tài),五個進程的初始狀態(tài)都為
“就緒”狀態(tài),用“R”表示,當(dāng)一個進程運行結(jié)束后,它的狀態(tài)變?yōu)椤敖Y(jié)束”,
用“E”表示。
(2)在每次運行你所設(shè)計的處理器調(diào)度程序之前,為每個進程任意確定它的“優(yōu)先數(shù)”
和“要求運行時間”。
(3)為了調(diào)度方便,把五個進程按給定的優(yōu)先數(shù)從大到小連成隊列,用一單元指出隊首
進程,用指針指出隊列的連接情況。例:
隊首標(biāo)志
k2
卜
k]2k3k5
P3P5
P.P2P4
0k4k3
k5ki
23124
15342
RRRRR
PCB1PCB2PCB3PCB4PCB5
(4)處理器調(diào)度總是選隊首進程運行。采用動態(tài)改變優(yōu)先數(shù)的辦法,進程每運行一次優(yōu)
先數(shù)就減“1”。由于本實驗是模擬處理器調(diào)度,所以,對被選中的進程并不實際的
啟動運行,而是執(zhí)行:
優(yōu)先數(shù)一1
要求運行時間一1
來模擬進程的一次運行。
提醒注意的是:在實際的系統(tǒng)中,當(dāng)一個進程被選中運行時,必須恢復(fù)進程的現(xiàn)場,
它占有處理器運行,直到出現(xiàn)等待事件或運行結(jié)束。在這里省去了這些工作。
(5)進程運行一次后,若要求運行時間W0,則再將它加入隊列(按優(yōu)先數(shù)大小插入,且
置隊首標(biāo)志);若要求運行時間=0,則把它的狀態(tài)修改為“結(jié)束”(),且退出隊列。
(6)若“就緒”狀態(tài)的進程隊列不為空,則重復(fù)上面(4)和(5)的步驟,直到所有進
程都成為“結(jié)束”狀態(tài)。
(7)在所設(shè)計的稱序中應(yīng)有顯示或打印語句,能顯示或打印每次被選中進程的進程名以
及運行?次后進稱對列的變化。
(8)為五個進程任意確定一組“優(yōu)先數(shù)”和“要求運行時間”,啟動所設(shè)計的處理器調(diào)度
程序,顯示或打印逐次被選中進程的進程名以及進程控制塊的動態(tài)變化過程。
第二題:設(shè)計一個按時間片輪轉(zhuǎn)法實現(xiàn)處理器調(diào)度的程序。
[提示]
(1)假定系統(tǒng)有五個進程,每一個進程用一個進程控制塊PCB來代表。進程控制塊的格
式為:
進程名
時間一
要求求運行時而
優(yōu)先數(shù)
狀態(tài)
其中,進程名-一作為進程的標(biāo)識,假設(shè)五個進程的進程名分別是Qi,Q2,Q3,Q4.QS。
指針一進程按順序排成循環(huán)隊列,用指針指出下一個進程的進程控制塊首地址,最
后一個進程中的指針指出第?個進程的進程控制塊首地址。
要求運行時間--假設(shè)進程需要運行的單位時間數(shù)。
已運行時間-一假設(shè)進程已經(jīng)運行的單位時間數(shù),初始值為“0”。
狀態(tài)一有兩種狀態(tài),“就緒”狀態(tài)和“結(jié)束”狀態(tài),初始狀態(tài)都為“就緒“,用“R”
表示,當(dāng)一個進程運行結(jié)束后,它的狀態(tài)變?yōu)椤敖Y(jié)束”,用“E”表示。
(2)每次運行你所設(shè)計的處理器調(diào)度程序之前,為每個進程任意確定它的“要求運行時
問”。
(3)把五個進程按順序排成循環(huán)隊列,用指針指出隊列連接情況。另用一標(biāo)志單元記錄
輪到運行的進程。例如,當(dāng)前輪到Q2執(zhí)行,則有:
標(biāo)志單元
k2
k3k5
PiP2P3P4P5
0
k4k5k3ki
23124
15342
RRRRR
PCB1PCB2PCB3PCB4PCB5
(4)處理器調(diào)度總是選擇標(biāo)志單元指示的進程運行。由于本實驗是模擬處理器調(diào)度的功
能,所以,對被選中的進程并不實際啟動運行,而是執(zhí)行:
已運行時間一1
來模擬進程的一次運行,表示進程已經(jīng)運行過一個單位的時間。
請同學(xué)們注意:在實際的系統(tǒng)中,當(dāng)一個進程被選中運行時,必須置上該進程可以
運行的時間片值,以及恢復(fù)進程的現(xiàn)場,讓它占有處理器運行,直到出現(xiàn)等待事件
或運行滿一個時間片。在這里省去了這些工作,僅用“已運行時間+1”來表示進程
已經(jīng)運行滿一個時間片。
(5)進程運行一次后,應(yīng)把該進程的進程控制塊中的指針值送到標(biāo)志單元,以指示下一
個輪到運行的進程。同時,應(yīng)判斷該進程的要求運行時間與已運行時間,若該進程
要求運行時間W已運行時間,則表示它尚未執(zhí)行結(jié)束,應(yīng)待到下一輪時再運行。若
該進程的要求運行時間=已運行時間,則表示它已經(jīng)執(zhí)行結(jié)束,應(yīng)把它的狀態(tài)修改為
“結(jié)束”(E)且退出隊列。此時,應(yīng)把該進程的進程控制塊中的指針值送到前面一
個進程的指針位置。
(6)若“就緒”狀態(tài)的進程隊列不為空,則重復(fù)上面(4)和(5)的步驟,直到所有進
程都成為“結(jié)束”狀態(tài)。
(7)在所設(shè)計的稱序中應(yīng)有顯示或打印語句,能顯示或打印每次被選中進程的進程名以
及運行一次后進稱對列的變化。
(8)為五個進程任意確定一組“要求運行時間”,啟動所設(shè)計的處理器調(diào)度程序,顯示或
打印逐次被選中進程的進程名以及進程控制塊的動態(tài)變化過程。
四、實驗報告
(1)實驗題目。
(2)程序中使用的數(shù)據(jù)結(jié)構(gòu)及符號說明。
(3)流程圖。
(4)打印一份源程序并附上注釋。
(5)打印程序運行時的初值和運行結(jié)果,要求如下:
i進程控制塊的初始狀態(tài)
□□□□□
ii.選中運行的進程名以及選中進程運行后的各進程控制塊狀態(tài)。
□□□□□
對于ii要求每選中一個進程運行后都要打印。
實驗二虛擬存儲器
一、實驗內(nèi)容
模擬分頁式虛擬存儲管理中硬件的地址轉(zhuǎn)換和缺頁中斷,以及選擇頁面調(diào)度算法處理缺
頁中斷。
二、實驗?zāi)康?/p>
在計算機系統(tǒng)中,為了提高主存利用率,往往把輔助存儲器(如磁盤)作為主存儲器的
擴充,使多道運行的作業(yè)的全部邏輯地址空間總和可以超出主存的絕對地址空間。用這種辦
法擴充的主存儲器稱為虛擬存儲器。通過本實驗幫助同學(xué)理解在分頁式存儲管理中怎樣實現(xiàn)
虛擬存儲器。
三、實驗題目
本實驗有三道題目,其中第一題必做,第二,三題中可任選一個。
第一題:模擬分頁式存儲管理中硬件的地址轉(zhuǎn)換和產(chǎn)生缺頁中斷。
[提示]
(1)分頁式虛擬存儲系統(tǒng)是把作業(yè)信息的副本存放在磁盤上,當(dāng)作業(yè)被選中時,可把作
業(yè)的開始幾頁先裝入主存且啟動執(zhí)行。為此,在為作業(yè)建立頁表時,應(yīng)說明哪些頁
已在主存,哪些頁尚未裝入主存,頁表的格式為:
頁號志主存塊號在磁盤上的位置
其中,標(biāo)志一用來表示對應(yīng)頁是否已經(jīng)裝入主存,標(biāo)志位=1,則表示該頁已經(jīng)在主存,標(biāo)
志位=0,則表示該頁尚未裝入主存。
主存塊號--用來表示已經(jīng)裝入主存的頁所占的塊號。
在磁盤上的位置--用來指出作業(yè)副本的每一頁被存放在磁盤上的位置。
(2)作業(yè)執(zhí)行時,指令中的邏輯地址指出了參加運算的操作存放的頁號和單元號,硬件
的地址轉(zhuǎn)換機構(gòu)按頁號查頁表,若該頁對應(yīng)標(biāo)志為“1”,則表示該頁已在主存,這
時根據(jù)關(guān)系式:
絕對地址=塊號X塊長+單元號
計算出欲訪問的主存單元地址。如果塊長為2的事次,則可把塊號作為高地址部分,
把單元號作為低地址部分,兩者拼接而成絕對地址。若訪問的頁對應(yīng)標(biāo)志為“0”,
則表示該頁不在主存,這時硬件發(fā)“缺頁中斷”信號,有操作系統(tǒng)按該頁在磁盤上
的位置,把該頁信息從磁盤讀出裝入主存后再重新執(zhí)行這條指令。
(3)設(shè)計一個“地址轉(zhuǎn)換”程序來模擬硬件的地址轉(zhuǎn)換工作。當(dāng)訪問的頁在主存時,則
形成絕對地址,但不去模擬指令的執(zhí)行,而用輸出轉(zhuǎn)換后的地址來代替一條指令的
執(zhí)行。當(dāng)訪問的頁不在主存時,則輸出“*該頁頁號”,表示產(chǎn)生了一次缺頁中斷。
該模擬程序的算法如圖2-1。
圖2-1地址轉(zhuǎn)換模擬算法
(4)假定主存的每塊長度為128個字節(jié);現(xiàn)有一個共七頁的作業(yè),其中第0頁至第3頁
已經(jīng)裝入主存,其余三頁尚未裝入主存;該作業(yè)的頁表為:
015011
118012
219013
311021
40022
50023
60121
如果作業(yè)依次執(zhí)行的指令序列為:
操作頁號單元號操作頁號單元號
+070移位4053
4-150+5023
X215存1037
存321以2078
取056+4001
—640存6084
(5)運行設(shè)計的地址轉(zhuǎn)換程序,顯示或打印運行結(jié)果。因僅模擬地址轉(zhuǎn)換,并不模擬指
令的執(zhí)行,故可不考慮上一述指令序列中的操作。
第二題:用先進先出(FIFO)頁面調(diào)度算法處理缺頁中斷。
[提示]:
(1)在分頁式虛擬存儲系統(tǒng)中,當(dāng)硬件發(fā)出“缺頁中斷”后,引出操作系統(tǒng)來處理這個
中斷事件。如果主存中已經(jīng)沒有空閑塊,則可用FIFO頁面調(diào)度算法把該作業(yè)中最
先進入主存的一頁調(diào)出,存放到磁盤上,然后再把當(dāng)前要訪問的頁裝入該塊。調(diào)出
和裝入后都要修改頁表頁表中對應(yīng)頁的標(biāo)志。
(2)FIFO頁面調(diào)度算法總是淘汰該作業(yè)中最先進入主存的那一頁,因此可以用一個數(shù)組
來表示該作業(yè)已在主存的頁面。假定作業(yè)被選中時,把開始的m個頁面裝入主存,
則數(shù)組的元素可定為m個。例如:
P[0],P[l].P[m-1]
其中每一個P[i](i=0,1,m-1)表示一個在主存中的頁面號。它們的初值為:
P⑼:=0,P[l]:=lPlm-IJ:=m-l
用一指針k指示當(dāng)要裝入新頁時,應(yīng)淘汰的頁在數(shù)組中的位置,k的初值為“0”。
當(dāng)產(chǎn)生缺頁中斷后,操作系統(tǒng)選擇P[k]所指出的頁面調(diào)出,然后執(zhí)行:
P[k]:=要裝入頁的頁號
k:=(k+1)modm
再由裝入程序把要訪問的一頁信息裝入到主存中。重新啟動剛才那條指令執(zhí)行。
(3)編制一個FIFO頁面調(diào)度程序,為了提高系統(tǒng)效率,如果應(yīng)淘汰的頁在執(zhí)行中沒有
修改過,則可不必把該頁調(diào)出(因在磁盤上已有副本)而直接裝入?個新頁將其覆
蓋。因此在頁表中增加是否修改過的標(biāo)志,為“1”表示修改過,為“0”表示未修
改過,格式為:
頁號標(biāo)志主存塊號修改標(biāo)志再磁盤上的位置
由于是模擬調(diào)度算法,所以,不實際啟動輸出一頁和裝入一頁的程序,而用輸出調(diào)
出的頁號和裝入的頁號來代替一次調(diào)出和裝入的過程。
把第一題中程序稍作修改,與本題結(jié)合起來,F(xiàn)IFO頁面調(diào)度模擬算法如圖2-2。
圖2-2FIFO頁面調(diào)度模擬算法
(4)磁盤上,在磁盤上的存放地址以及已裝入主存的頁和作業(yè)依次執(zhí)行的指令序列都同
第一題中(4)所示。于是增加了“修改標(biāo)志”后的初始頁表為:
頁號標(biāo)志主存塊號修改標(biāo)志在磁盤上的位置
0150011
1180012
2190013
3110021
400022
500023
600121
按依次執(zhí)行的指令序列,運行你所設(shè)計的程序,顯示或打印每次調(diào)出和裝入的頁號,
以及執(zhí)行了最后一條指令后的數(shù)組P的值。
(5)為了檢查程序的正確性,可再任意確定一組指令序列,運行設(shè)計的程序,核對執(zhí)行
的結(jié)果。
第三題:用最近最少用(LRU)頁面調(diào)度算法處理缺頁中斷。
[提示]
(1)在分頁式虛擬存儲系統(tǒng)中,當(dāng)硬件發(fā)出“缺頁中斷”后,引出操作系統(tǒng)來處理這個中斷
事件。如果主存中已經(jīng)沒有空閑塊,則可用LRU頁面調(diào)度算法把該作業(yè)中最先進入主
存的一頁調(diào)出,存放到磁盤上,然后再把當(dāng)前要訪問的頁裝入該塊。調(diào)出和裝入后都要
修改頁表頁表中對應(yīng)頁的標(biāo)志。
(2)LRU頁面調(diào)度算法總是淘汰該作業(yè)中距現(xiàn)在最久沒有訪問過的那一頁,因此可以用一個
數(shù)組來表示該作業(yè)已在主存的頁面。數(shù)組中的第一個元素總是指出當(dāng)前剛訪問的頁號,
因此最久沒被訪問的頁總是由最后一個元素指出。如果主存中只有四塊空閑塊且執(zhí)行第
一題提示(4)假設(shè)的指令序列,采用LRU頁面調(diào)度算法,那麼在主存中的頁面變化情
況如下:
306451246
230645124
123064512
012306451
(3)編制個LRU頁面調(diào)度程序,為了提高系統(tǒng)效率,如果應(yīng)淘汰的頁在執(zhí)行中沒有修改
過,則可不必把該頁調(diào)出。參看第二題中提示(3)。模擬調(diào)度算法不實際啟動輸出一頁
和裝入一頁的程序,而用輸出調(diào)出的頁號和裝入的頁號來代替。把第一題中的程序稍作
改動,與本題集合起來,LRU頁面調(diào)度模擬算法如圖2-3。
圖2-3LRU頁面調(diào)度算
(4)按第一題中提示(4)的要求,建立一張初始頁表,表中為每一頁增加“修改標(biāo)志”位(參
考第二題中提示(4))。然后按依次執(zhí)行的指令序列,運行你所設(shè)計的程序,顯示或打
印每次調(diào)出和裝入的頁號,以及執(zhí)行了最后一條指令后的數(shù)組中的值。
(5)為了檢查程序的正確性,可再任意確定一組指令序列,運行設(shè)計的程序,核對執(zhí)行的結(jié)
果。
四、實驗報告
(1)實驗題目(第二題或第三題)。
(2)程序中使用的數(shù)據(jù)結(jié)構(gòu)及符號說明。
(3)打印一份源程序并附上注釋。
(4)打印初始頁表,每次調(diào)出(要調(diào)出一頁時)和裝入的頁號,執(zhí)行最后一條指令
后在主存中的頁面號(即數(shù)組的值)。
—.思考題
如果你有興趣的話,可把兩種頁面調(diào)度算法都做一下,比較兩種調(diào)度算法的效率(哪種
調(diào)度算法產(chǎn)生缺頁中斷的次數(shù)少);分析在什麼情況下采用哪種調(diào)度算法更有利?
實驗三驅(qū)動調(diào)度
一、實驗內(nèi)容
模擬電梯調(diào)度算法,實現(xiàn)對磁盤的驅(qū)動調(diào)度。
二、實驗?zāi)康?/p>
磁盤是?種高速、大容量、旋轉(zhuǎn)型、可直接存取的存儲設(shè)備。它作為計算機系統(tǒng)的輔
助存儲器,擔(dān)負著繁重的輸入輸出任務(wù)、在多道程序設(shè)計系統(tǒng)中,往往同時會有若干個要求
訪問磁盤的輸入輸出請求等待處理。系統(tǒng)可采用種策略,盡可能按最佳次序執(zhí)行要求訪問
磁盤的諸輸入輸出請求。這就叫驅(qū)動調(diào)度,使用的算法稱為驅(qū)動調(diào)度算法。驅(qū)動調(diào)度能降低
為若干個輸入輸出請求服務(wù)所需的總時間,從而提高系統(tǒng)效率。本實驗要求學(xué)生模擬設(shè)計一
個驅(qū)動調(diào)度程序,觀察驅(qū)動調(diào)度程序的動態(tài)運行過程。通過實驗使學(xué)生理解和掌握驅(qū)動調(diào)度
的職能。
三、實驗題目
模擬電梯調(diào)度算法,對磁盤進行移臂和旋轉(zhuǎn)調(diào)度。
[提示]:
(1)磁盤是可供多個進程共享的存儲設(shè)備,但一個磁盤每時刻只能為一個進程服務(wù)。
當(dāng)有進程在訪問某個磁盤時,其他想訪問該磁盤的進程必須等待,直到磁盤一次工作結(jié)束。
當(dāng)有多個進程提出輸入輸出要求而處于等待狀態(tài)時,可用電梯調(diào)度算法從若干個等待訪問者
中選擇一個進程,讓它訪問磁盤。選擇訪問者的工作由“驅(qū)動調(diào)度”進程來完成。
由于磁盤與處理器是可以并行工作的、所以當(dāng)磁盤在作為一個進程服務(wù)時,占有處理
器的另一進程可以提出使用磁盤的要求,也就是說,系統(tǒng)能動態(tài)地接收新的輸入輸出請求。
為了模擬這種情況,在本實驗中設(shè)置了一個“接收請求”進程。
“驅(qū)動調(diào)度”進程和“接收請求”進程能否占有處理器運行,取決于磁盤的結(jié)束中斷信
號和處理器調(diào)度策略。在實驗中可用隨機數(shù)來模擬確定這兩個進程的運行順序,以代替中斷
處理和處理器調(diào)度選擇的過程。因而,程序的結(jié)構(gòu)可參考圖3—1
開始
(2)“接收請求”進程建立一張“請求I/O”表,指出訪問磁盤的進程要求訪問的物理
地址,表的格式為:
進程名柱面號磁道號物理記錄號
假定某個磁盤組共有200個柱面,山外向里順序編號(0—199),每個柱面上有20個
磁道,編號為0—19,每個磁道分成8個物理記錄,編號0—7。進程訪問磁盤的物理地址
可以用鍵盤輸入的方法模擬得到。圖3—2是“接收請求”進程的模擬算法。
圖3-2“接收請求”模擬算法
在實際的系統(tǒng)中必須把等待訪問磁盤的進程排入等待列隊,由于本實驗?zāi)M驅(qū)動調(diào)
度,為簡單起見,在實驗中可免去隊列管理部分,故設(shè)計程序時可不考慮“進程排入等待隊
列”的工作。
(3)“驅(qū)動調(diào)度”進程的功能是查“請求I/O”表,當(dāng)有等待訪問磁盤的進程時,按
電梯調(diào)度算法從中選擇一個等待訪問者,按該進程指定的磁盤物理地址啟動磁盤為其服務(wù)。
對移動臂磁盤來說,驅(qū)動調(diào)度分移臂調(diào)度和旋轉(zhuǎn)調(diào)度。電梯調(diào)度算法的調(diào)度策略是與
移動臂的移動方向和移動臂的當(dāng)前位子有關(guān)的,所以每次啟動磁盤時都應(yīng)登記移動臂方向和
當(dāng)前位子。電梯調(diào)度算法是一種簡單而實用的驅(qū)動調(diào)度方法,這種調(diào)度策略總是優(yōu)先選擇與
當(dāng)前柱面號相同的訪問請求,從這些請求中再選擇一個能使旋轉(zhuǎn)距離最短的等待訪問者。如
果沒有與當(dāng)前柱面號相同的訪問請求,則根據(jù)移臂方向來選擇,每次總是沿臂移動方向選擇
一個與當(dāng)前柱面號最近的訪問請求,若沿這個方向沒有訪問請求時,就改變臂的移動方向。
這種調(diào)度策略能使移動臂的移動頻率極小,從而提高系統(tǒng)效率?用電梯調(diào)度算法實現(xiàn)驅(qū)動調(diào)
度的模擬算法如圖3—3。
(4)圖3—1中的初始化工作包括,初始化“請求I/O”表,置當(dāng)前移臂方向為里移;
置當(dāng)前位置為0號柱面,0號物理記錄。程序運行前可假定“請求I/O”表中已經(jīng)有如干個
進程等待訪問磁盤。
在模擬實驗中,當(dāng)選中一個進程可以訪問磁盤時,并不實際地啟動磁盤,而用顯示:''請
求I/O”表;當(dāng)前移臂方向;當(dāng)前柱面號,物理記錄號來代替圖3—3中的“啟動磁盤”這
項工作。
圖3-3電梯調(diào)度模擬算法
四、實驗報告
(1)實驗題目。
(2)程序中使用的數(shù)據(jù)結(jié)構(gòu)及其說明。
(3)打印一份源程序并附上注釋。
(4)打印驅(qū)動調(diào)度進程每次選擇訪問請求前的“請求I/O”表以及每次選中的進程名、
訪問的柱面號、物理記錄號和當(dāng)前移臂方向(用up代表里移,down代表外移。打印格式為:
“請求I/O”表
進程名柱面號物理記錄號方向
實驗四同步機構(gòu)
一、實驗內(nèi)容
模擬實現(xiàn)用同步機構(gòu)避免并發(fā)進程執(zhí)行時可能出現(xiàn)的與時間有關(guān)的錯誤。
二、實驗?zāi)康?/p>
進程是程序在一個數(shù)據(jù)集合上運行的過程,進程是并發(fā)執(zhí)行的,也即系統(tǒng)中的多個進
程輪流地占用處理器運行。
我們把如干個進程都能進行訪問和修改地那些變量成為公共變量。由于進程是并發(fā)執(zhí)
行的,所以,如果對進程訪問公共變量不加限制,那么就會產(chǎn)生“與時間有關(guān)”的錯誤,即
進程執(zhí)行后,所得到的結(jié)果與訪問公共變量的時間有關(guān)。為了防止這類錯誤,系統(tǒng)必須要用
同步機構(gòu)來控制進程對公共變量的訪問。一般說,同步機構(gòu)是由若干條原語——同步原語一
一所組成。本實驗要求學(xué)生模擬PV操作同步機構(gòu)的實現(xiàn),模擬進程的并發(fā)執(zhí)行,了解進程
并發(fā)執(zhí)行時同步機構(gòu)的作用。
三、實驗題目
模擬PV操作同步機構(gòu),且用PV操作解決生產(chǎn)者——消費者問題。
[提示]:
(I)PV操作同步機構(gòu),由p操作原語和V操作原語組成,它們的定義如下:
P操作原語P(s):將信號量s減去1,若結(jié)果小于0,則執(zhí)行原語的進程被置成等待信
號量s的狀態(tài)。
V操作原語V(s):將信號量s加1,若結(jié)果不大于0,則釋放一個等待信號量s的進程。
這兩條原語是如下的兩個過程:
procedurep(vars:semaphore);
begins:=s-l;
ifs<0thenW(s)
end{p}
procedurev(vars:semaphore);
begins:=s+l;
ifs<=0thenR(s)
end{V}
其中W(s)表示將調(diào)用過程的進程置為等待信號量s的狀態(tài);R(s)表示釋放一個等待信號量s
的進程。
在系統(tǒng)初始化時應(yīng)把semaphore定義為某個類型,為簡單起見,在模擬實驗中可把上
述的semaphore直接改成integer。
(2)生產(chǎn)者——消費者問題。
假定有一個生產(chǎn)者和消費者,生產(chǎn)者每次生產(chǎn)一件產(chǎn)品,并把生產(chǎn)的產(chǎn)品存入共享緩
沖器以供消費者取走使用。消費者每次從緩沖器內(nèi)取出一件產(chǎn)品去消費。禁止生產(chǎn)者將產(chǎn)品
放入已滿的緩沖器內(nèi),禁止消費者從空緩沖器內(nèi)取產(chǎn)品。假定緩沖器內(nèi)可同時存放10件產(chǎn)
品。那么,用PV操作來實現(xiàn)生產(chǎn)者和消費者之間的同步,生產(chǎn)者和消費者兩個進程的程序
如下:
B:array[0..9]ofproducts;
si,s2:semaphore;
IN,out;integer;
IN:=0;out:=0;
cobegin
procedureproducer;
c:products;
begin
Li:
produce(c);
p(s[);
B[IN]:=C;
IN:=(IN+l)mod10;
v(s2);
gotoLi
end;
procedureconsumer;
x:products;
begin
L2:P(S2);
x:=B[out];
out:=(out+l)mod10;
V(Si);
consume(x);
gotoL2
end;
coend
其中的semaphore和products是預(yù)先定義的兩個類型,在模擬實現(xiàn)中semaphore用integer
或char等代替。
(3)進程控制塊PCB。
為了紀(jì)錄進程執(zhí)行時的情況,以及進程讓出處理器后的狀態(tài),斷點等信息,每個進程
都有一個進程控制塊PCB。在模擬實驗中,假設(shè)進程控制塊的結(jié)構(gòu)如圖4-1。其中進程的狀
態(tài)有:運行態(tài)、就緒態(tài)、等待態(tài)和完成態(tài)。當(dāng)進程處于等待態(tài)時,在進程控制塊PCB中要說
明進程等待原因(在模擬實驗中進程等待原因為等待信號量Si或S2):當(dāng)進程處于等待態(tài)或
就緒態(tài)時,PCB中保留了斷點信息,一旦進程再度占有處理器則就從斷點位置繼續(xù)運行;當(dāng)
進程處于完成狀態(tài),表示進程執(zhí)行結(jié)束。
進程名
狀態(tài)
等待原因
斷點
圖4-1進程控制塊結(jié)構(gòu)
(4)處理器的模擬。
計算機硬件提供了一組機器指令,處理器的主要職責(zé)是解釋執(zhí)行機器指令。為了模擬
生產(chǎn)者和消費者進程的并發(fā)執(zhí)行,我們必須模擬一組指令和處理器職能。
模擬的一組指令見圖4-2,其中每條指令的功能山一個過程來實現(xiàn)。用變量PC來模擬
“指令計數(shù)器”,假設(shè)模擬的指令長度為1,每執(zhí)行一條模擬指令后,PC加1,指出下一條
指令地址。使用模擬的指令,可把生產(chǎn)者和消費者進程的程序表示為圖4-3的形式。
定義兩個一維數(shù)組PA[O..4]和SA[O..4],每一個PA[i]存放生產(chǎn)者程序中的一條模擬
指令執(zhí)行的入口地址;每個SA[i]存放消費者程序中的一條模擬指令執(zhí)行的入U地址。于是
模擬處理器執(zhí)行?條指令的過程為:取出PC之值,按PA[PC]或SA[PC]得模擬指令執(zhí)行的
入口地址,將PC之值加1,轉(zhuǎn)向由入口地址確定的相應(yīng)的過程執(zhí)行。
(5)程序設(shè)計
本實驗中的程序由三部分組成:初始化程序、處理器調(diào)度程序、模擬處理器指令執(zhí)行程
序。各部分程序的功能及相互間的關(guān)系由圖4-4至圖4-7指出。
模擬的指令功能
p(s)執(zhí)行p操作原語
V(s)執(zhí)行V操作原語
putB[IN]:=product;IN:=(IN+1)mod10
GETX:=B[out];out:=(out+l)mod10
produce輸入一個字符放入c中
consume打印或顯示X中的字符
GOTOLPC:L
NOP空操作
圖4-2模擬的處理器指令
序號生產(chǎn)者程序消費者程序
0producePG)
1PG)GET
2PUTV(S1)
3V(S2)consume
4goto0goto0
圖4-3生產(chǎn)者和消費者程序
初始化程序:模擬實驗的程序從初始化程序入口啟動,初始化工作包括對信號量S1、
S2賦初值,對生產(chǎn)者、消費者進程的PCB初始化。初始化后轉(zhuǎn)向處理器調(diào)度程序,其流程
如圖4-4
圖4-4初始化流程
處理器調(diào)度程序:在計算機系統(tǒng)中,進程并發(fā)執(zhí)行時,任一進程占用處理器執(zhí)行完一條
指令后就有可能被打斷而讓出處理器山其他進程運行。故在模擬系統(tǒng)中也類似處理,每當(dāng)執(zhí)
行一條模擬的指令后,保護當(dāng)前進程的現(xiàn)場,讓它成為非運行狀態(tài),由處理器調(diào)度程序按隨
機數(shù)再選擇個就緒進程占用處理器運行。處理器調(diào)度程序流程見圖4-5。
模擬處理器指令執(zhí)行程序:按“指令計數(shù)器"PC之值執(zhí)行指定的質(zhì)量,且PC加1指向
下一條指令。模擬處理器指令執(zhí)行的程序流程見圖4-6和4-7。
圖4-6模擬處理器指令執(zhí)行
(1)模擬P(S)(2)模擬V(S)
圖4-7模擬PV操作的執(zhí)行
另外,為了使得模擬程序有一個結(jié)束條件,在圖4-6中附加了“生產(chǎn)者運行結(jié)束”的條
件判斷,模擬時可以采取人工選擇的方法實現(xiàn)。圖4-7給出了P(S)和V(S)模擬指令執(zhí)
行過程的流程。其他模擬指令的執(zhí)行過程己在圖4-2中指出。
四、實驗報告
(1)實驗題目。
(2)打印源程序并附上注釋。
(3)從鍵盤上輸入?組字符,由生產(chǎn)者每次讀入一個字符供消費者輸;H。運行模擬
程序,打印依次讀入的字符和消費者輸出的字符。
(4)把生產(chǎn)者和消費者進程中的P操作、V操作都改成空操作指令,觀察在兩者不
同步的情況下可能出現(xiàn)的與時間有關(guān)的錯誤。打印依次讀入的字符和消費者輸
出的字符。
實驗五UNIX系統(tǒng)
一、實驗內(nèi)容
熟悉UNIX操作系統(tǒng),在UNIX中使用C語言進行文本處理。
二、實驗?zāi)康?/p>
UNIX操作系統(tǒng)是一個通用的多用戶分時操作系統(tǒng),現(xiàn)已成為高檔微機、工作站及若干
小型機系統(tǒng)上的主要操作系統(tǒng),并在許多領(lǐng)域中獲得了廣泛的應(yīng)用。UNIX系統(tǒng)具有簡單、
高效、易懂等特點,同時具有良好的可移植性,它代表著多用戶操作系統(tǒng)發(fā)展的方向。C語
言最初是為開發(fā)UNIX操作系統(tǒng)而設(shè)計,UNIX核心和所有的用戶程序幾乎都是用C語言編
寫,是UNIX的標(biāo)準(zhǔn)語言。本實驗要求學(xué)生在熟悉UNIX系統(tǒng)的基礎(chǔ)上,使用vi編輯器,
了解用C語言編寫文本處理程序的具體過程。
三、實驗題目
(1)使用自己的注冊號注冊UNIX系統(tǒng),學(xué)習(xí)如何增加用戶、設(shè)置用戶缺省信息與
修改用戶口令、修改用戶和用戶組屬性、刪除用戶注冊號和用戶組、目錄操作、
文件操作。
(2)參考附錄內(nèi)容學(xué)習(xí)使用vi編輯器。
(3)使用C語言編寫一個詞頻統(tǒng)計程序,使之能夠給出各個單詞在輸入文件中的出
現(xiàn)次數(shù)。
(4)使用C語言編寫一個反向打印程序,使之能夠按與輸入文件中文本行相反的次
序來打印(即后出現(xiàn)的文本行先打印)。
[提示]:
1、從root注冊進系統(tǒng),可以通過OA&M菜單創(chuàng)建用戶組并為用戶分配注冊號,也可
以通過shell命令創(chuàng)建用戶組,創(chuàng)建用戶組的shell命令格式如下:
groupadd-ggroup_IDgroup_name
為用戶分配注冊號的shell命令格式如下:
useradd-uuser_number-gprimary_group_ID
-Gsupplementary_group_ID-ccomments
-dhome-directory-sprogram-mlogin」D
其中-u選項用來表示用戶ID號,-g選項用來表示主用戶組名,-G選項用來表示可由“,”
隔開的多個supplementary_group_ID,-c選項用來表示注釋信息,-d選項用來表示主目錄名,
-s選項用來表示注冊shell程序,-m選項不帶參數(shù),它用來將/etc/skel目錄中的內(nèi)容
(如.profile文件和標(biāo)準(zhǔn)目錄文件)拷入新的注冊號下,login」D是該命令必需的用戶注冊號。
例:groupadd-g51newuser
useradd-u203-gnewuser-c"newuser"-d/user/liu-s/bin/sh-mliu
如果采用缺省設(shè)置,也可以只使用如下shell命令:
useraddliu
分配完注冊號后,也可以為用戶設(shè)置口令。用來設(shè)置口令的shell命令格式如下:
passwordoptionslogin_ID
其中任選項options可為如下內(nèi)容:
-ndays表示口令的有限時間
-xdays表示口令從設(shè)置到修改的時間。
例:password-n7-x6liu
或者:
passwordliu
系統(tǒng)在提示輸入和重新輸入后,確認口令設(shè)置成功。
修改用戶屬性的shell命令格式如下:
usermodoptionslogin_ID
其中,任選項options可以為如下內(nèi)容:
-ccomment表示注釋信息
-dpathname表示當(dāng)前目錄
-ggroup_ID表示主用戶組名
-Gsupplemenlary_group」D表示主用戶組的增補組名
-1login表示用戶注冊號
-m表示將/etc/skel目錄中的內(nèi)容拷入新的注冊號下
-sprogram表示注冊用shell程序
-uuser_ID_number表示用戶ID號
-edays表示口令從設(shè)置到修改的天數(shù)
-fdays表示注冊起作用的天數(shù)
作為?個例子,我們修改注冊shell程序,這時可使用如下shell命令:
usermod-s/bin/cshliu
修改用戶組屬性的shell命令格式如下:
groupmodoptions
其中,任選項options可為如下內(nèi)容:
-ggroup」D表示為用戶組分配一個新的組ID號
-ogroupJD表示為用戶組分配一個重復(fù)的組ID號
-ngroup_name表示為用戶組分配一個新名字
作為一個例子,我們修改用戶組名,這時可使用如下shell命令:
groupmod-nadmin
只刪除用戶注冊號的shell命令格式如下:
userdellogin_ID
實例如下:
userdelliu
刪除用戶注冊號及其所在目錄和文件的shell命令格式如下:
userdel-rlogin」D
實例如下:
userdel-rliu
刪除用戶組的shell命令格式如下:
groupdelgroup_ID
實例如下:
groupdelnewuser
2,從新的子目錄中開始工作
使用mkdir命令創(chuàng)建新的子目錄c_progso
$mkdirc_progs
$
使用cd命令進入到新創(chuàng)建的子目錄中。
$cdc_progs
$
3,輸入C程序
輸入C程序可以用vi命令來完成。下面就使用vi命令來輸入C程序cowpact.c。
/*Removenewlines*/
#include<stdio.h>
main()
(
intc,n=0?max=l;
while((c=getchar())!=EOF)
(
if(c==V)
n++;
else
n=0;
if(cn<=max)
putchar(c);
)
)
上述程序是用來刪除空行的,連續(xù)兩個以上的空行只保留一個空行。
4,編譯C程序
由于C語言是
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024桂林生命與健康職業(yè)技術(shù)學(xué)院輔導(dǎo)員招聘筆試真題
- 2024曹妃甸職業(yè)技術(shù)學(xué)院輔導(dǎo)員招聘筆試真題
- 閥門生產(chǎn)工藝員考試試卷及答案
- 2025年政府引導(dǎo)基金項目建議書
- 2025年湖南邵陽北塔區(qū)招聘教師考試筆試試題【答案】
- 2024年合肥市屯溪路小學(xué)教育集團教師招聘真題
- 2025年河北省市場監(jiān)督管理局下屬事業(yè)單位招聘考試筆試試題【答案】
- 領(lǐng)導(dǎo)干部進2025年終述職報告范文
- 項目風(fēng)險管理考試試題
- 湘藝版音樂六年級上冊《搖太陽》教案03
- 垃圾處理焚燒培訓(xùn)課件
- 國家中小學(xué)智慧教育平臺培訓(xùn)專題講座
- GMP附錄-細胞治療產(chǎn)品
- 2025年中國烘焙食品行業(yè)發(fā)展深度分析及行業(yè)發(fā)展趨勢報告
- 專業(yè)燒烤店管理制度
- GB/T 45668-2025地下空間信息系統(tǒng)建設(shè)技術(shù)要求
- DB32-T 4001-2025 公共機構(gòu)能耗定額及計算方法
- 中醫(yī)護理技術(shù)創(chuàng)新思維
- CJ/T 189-2007鋼絲網(wǎng)骨架塑料(聚乙烯)復(fù)合管材及管件
- 外派干部考核管理制度
- 公司網(wǎng)絡(luò)規(guī)劃設(shè)計方案
評論
0/150
提交評論