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