国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

“操作系統(tǒng)”課程中進(jìn)程同步互斥教學(xué)研究

2009-08-28 09:09金海東徐云龍
計(jì)算機(jī)教育 2009年14期
關(guān)鍵詞:同步操作系統(tǒng)進(jìn)程

金海東 徐云龍

摘要:“操作系統(tǒng)”是計(jì)算機(jī)專(zhuān)業(yè)的核心課程之一。由于涉及的學(xué)科多、知識(shí)點(diǎn)多、課程內(nèi)容難理解等,該課程的教與學(xué)一直是學(xué)科難點(diǎn)。成人教育學(xué)生普遍起點(diǎn)較低,對(duì)純理論性知識(shí)不太樂(lè)于接受。本文以該課程的一個(gè)核心知識(shí)點(diǎn)——進(jìn)程同步與互斥為實(shí)例,探討如何從學(xué)習(xí)者的角度設(shè)計(jì)循序漸進(jìn)的教學(xué)內(nèi)容,并通過(guò)編寫(xiě)程序驗(yàn)證書(shū)本理論,提高成教學(xué)生的興趣和實(shí)踐能力。

關(guān)鍵詞:進(jìn)程;同步;互斥;信號(hào)量;多線程

中圖分類(lèi)號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:B

計(jì)算機(jī)專(zhuān)業(yè)中,“操作系統(tǒng)”課程非常重要。操作系統(tǒng)直接高效地管理著計(jì)算機(jī)的各種軟硬件資源,為用戶(hù)提供使用接口。操作系統(tǒng)是最復(fù)雜的系統(tǒng)軟件,涉及了程序設(shè)計(jì)語(yǔ)言、計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)/硬件、軟件設(shè)計(jì)、網(wǎng)絡(luò)、算法等。由于該課程內(nèi)容多而雜,普通高校學(xué)生特別是成人教育學(xué)生學(xué)習(xí)比較困難。傳統(tǒng)教學(xué)方式下,只給學(xué)生講解操作系統(tǒng)原理,學(xué)生感到抽象、難懂,近些年來(lái),很多高校加大實(shí)驗(yàn)(實(shí)踐)教學(xué)力度,在講授理論的同時(shí),加入操作系統(tǒng)內(nèi)核代碼分析,如一些學(xué)校讓學(xué)生分析Linux內(nèi)核。但這勢(shì)必加大教學(xué)工作量,教師無(wú)法在五六十學(xué)時(shí)內(nèi)完成課程教學(xué)。

為了既讓學(xué)生深入掌握理論知識(shí),又能通過(guò)編碼驗(yàn)證理論,本文根據(jù)實(shí)際教學(xué)經(jīng)驗(yàn),結(jié)合普通高校學(xué)生學(xué)習(xí)該課程的狀況,以進(jìn)程同步互斥為例,從以下四個(gè)方面討論如何循序漸進(jìn)地展開(kāi)教學(xué)。

1 “進(jìn)程同步與互斥”的引入

教學(xué)中,首先帶領(lǐng)學(xué)生回憶在DOS環(huán)境下的C語(yǔ)言編程,使學(xué)生明白什么是單道程序環(huán)境。然后就提高系統(tǒng)的利用率,提出了程序并發(fā)執(zhí)行的載體——進(jìn)程。程序并發(fā)執(zhí)行時(shí),涉及到相同資源會(huì)引起一些問(wèn)題,但抽象的理論并不利于學(xué)生的深入理解,筆者設(shè)計(jì)了一個(gè)銀行存取款問(wèn)題的案例:

某一銀行賬戶(hù)M,尚有存款100元;用戶(hù)P、Q同時(shí)對(duì)該賬戶(hù)進(jìn)行操作,可能會(huì)導(dǎo)致數(shù)據(jù)不一致,操作過(guò)程如圖1所示:

① 時(shí)間T2>T1>T0;

② T0時(shí)刻,p0操作讀出Mp0=100;

③ T0時(shí)刻,q0操作讀出Mq0=100;

④ T1時(shí)刻,p1操作寫(xiě)入數(shù)據(jù):存款100,M=Mp0+ 100=200;Q未能獲得更新后的數(shù)據(jù);

⑤ T2時(shí)刻,q1操作寫(xiě)入數(shù)據(jù):存款100,M=Mq0+ 100=200;

應(yīng)該是300元的賬戶(hù)余額,由于操作的并發(fā)執(zhí)行,造成只有200元余額。通過(guò)這一具體、直觀的例子,讓學(xué)生明白并發(fā)執(zhí)行與順序執(zhí)行有很多不一樣的地方,即并發(fā)環(huán)境中的共享資源,不能同時(shí)訪問(wèn),只可互斥訪問(wèn)。然后帶領(lǐng)學(xué)生學(xué)習(xí)并發(fā)操作的Bernstein條件、臨界資源等知識(shí)。

2信號(hào)量描述

怎樣才能做到在某一時(shí)刻,只有一個(gè)進(jìn)程訪問(wèn)該資源呢,這就是臨界資源的管理方法。在介紹了部分不成熟的管理方案后,引入Dijkstra提出的信號(hào)量和P、V操作機(jī)制。

(1) 信號(hào)量定義

信號(hào)量是進(jìn)程在某一特殊點(diǎn)上被迫停止執(zhí)行直到接收到一個(gè)對(duì)應(yīng)的特殊變量值。進(jìn)程使用P、V兩個(gè)原語(yǔ)操作發(fā)送和接受信號(hào),如信號(hào)沒(méi)有送到,進(jìn)程被掛起,直到信號(hào)到達(dá)。

信號(hào)量按其用途可分為:用于進(jìn)程互斥訪問(wèn)臨界資源的公用信號(hào)量;用于進(jìn)程同步時(shí)協(xié)調(diào)相互關(guān)系的私有信號(hào)量。

信號(hào)量按其取值可分為:整型信號(hào)量、可用資源數(shù)目的記錄型信號(hào)量。

(2)P、V操作定義描述

信號(hào)量結(jié)構(gòu)中需要一個(gè)整型計(jì)數(shù)和一個(gè)等待對(duì)象。

P操作表示現(xiàn)行進(jìn)程向系統(tǒng)申請(qǐng)資源,將信號(hào)量值減1,如結(jié)果小于0,則調(diào)用進(jìn)程被置成等待信號(hào)量的狀態(tài)。

V操作表示現(xiàn)行進(jìn)程釋放該類(lèi)資源,信號(hào)量值加1,系統(tǒng)可用資源數(shù)也增加一個(gè),如果s.value≤0,等待隊(duì)列中有等待進(jìn)程,則喚醒其中一個(gè)。

信號(hào)量定義,PV操作算法C語(yǔ)言描述如下:

typedef struct {

int value; //信號(hào)量值

QueueType waitQueue; //等待隊(duì)列

} semaphore;

void P(semaphore s){

--s.value;

if (s.value<0){

阻塞調(diào)用進(jìn)程;

進(jìn)程進(jìn)入等待隊(duì)列s. waitQueue;

}

}

void V(semaphores){

++s.value;

if(s.value<=0){

從等待隊(duì)列s. waitQueue中取出一個(gè)進(jìn)程;

將該進(jìn)程入就緒隊(duì)列;

}

}

(3) 關(guān)于信號(hào)量與PV操作的幾個(gè)結(jié)論

結(jié)論1:若信號(hào)量s為正值,則該值等于在封鎖進(jìn)程之前對(duì)信號(hào)量s可施行的P操作數(shù),亦等于s所代表的實(shí)際還可以使用的物理資源數(shù)。

結(jié)論2:若信號(hào)量s為負(fù)值,則其絕對(duì)值等于排列在該信號(hào)量s隊(duì)列中等待的進(jìn)程個(gè)數(shù),亦等于對(duì)信號(hào)量s實(shí)施P操作而被封鎖起來(lái)并進(jìn)入信號(hào)量s隊(duì)列的進(jìn)程數(shù)。

結(jié)論3:PV操作一定要成對(duì)使用。

(4) 進(jìn)程中信號(hào)量操作模型

通過(guò)對(duì)臨界區(qū)訪問(wèn)過(guò)程的分析,信號(hào)量機(jī)制中P原語(yǔ)相當(dāng)于進(jìn)入臨界區(qū)操作,V原語(yǔ)相當(dāng)于退出臨界區(qū)操作。用P、V原語(yǔ)實(shí)現(xiàn)進(jìn)程互斥就是將臨界區(qū)置于P和V兩個(gè)原語(yǔ)操作之間。

示例算法如下:

void ProcessExecute( 參數(shù)列表 ){

……

P(s);//進(jìn)入?yún)^(qū)

臨界區(qū);

V(s); //退出區(qū)

…… //剩余區(qū)

}

3進(jìn)程同步與互斥算法編寫(xiě)過(guò)程

初學(xué)者能夠看懂他人編寫(xiě)的進(jìn)程同步互斥算法,但是自己動(dòng)手編寫(xiě)很困難。學(xué)生在寫(xiě)該類(lèi)算法時(shí),總想一次完成,但是很多時(shí)候?qū)懖缓?或者不知道如何解決該類(lèi)問(wèn)題。針對(duì)這一現(xiàn)象,筆者分析了算法編寫(xiě)過(guò)程,給學(xué)生總結(jié)了分析問(wèn)題、解決問(wèn)題的步驟:

(1) 找出問(wèn)題中的執(zhí)行進(jìn)程,再描述其余各進(jìn)程的執(zhí)行過(guò)程。

以“多生產(chǎn)者——多消費(fèi)者——多緩沖”問(wèn)題為例,通過(guò)分析就會(huì)發(fā)現(xiàn),該問(wèn)題中生產(chǎn)者、消費(fèi)者各是一類(lèi)進(jìn)程。執(zhí)行過(guò)程為:

生產(chǎn)者的執(zhí)行過(guò)程:

請(qǐng)求生產(chǎn)指標(biāo);

請(qǐng)求緩沖區(qū)使用權(quán);

生產(chǎn);

歸還緩沖區(qū)使用權(quán);

消費(fèi)者過(guò)程:

請(qǐng)求消費(fèi)指標(biāo);

請(qǐng)求緩沖區(qū)使用權(quán);

消費(fèi);

歸還緩沖區(qū)使用權(quán);

(2) 分析進(jìn)程中的同步、互斥關(guān)系,設(shè)置信號(hào)量。

本問(wèn)題中緩沖區(qū)是臨界資源,需要互斥訪問(wèn)?!吧a(chǎn)指標(biāo)”就是空白緩沖區(qū)數(shù)目,每減少一個(gè),產(chǎn)品就增加一個(gè),“消費(fèi)指標(biāo)”就增加一個(gè)。每消費(fèi)一個(gè)產(chǎn)品,空白緩沖區(qū)就增加一個(gè),產(chǎn)品就減少一個(gè)。

用mutex信號(hào)量來(lái)保證對(duì)緩沖區(qū)的互斥訪問(wèn),emptyBufferCount記錄空白緩沖區(qū)數(shù)目,fullBufferCount記錄產(chǎn)品數(shù)目。

(3) 利用PV操作寫(xiě)出同步互斥關(guān)系。用算法替換前面描述的執(zhí)行過(guò)程。

生產(chǎn)者進(jìn)程Producer:

P(mutex);//申請(qǐng)使用緩沖區(qū), ①

P(emptyBufferCount); //生產(chǎn)許可申請(qǐng), ②

生產(chǎn)

V(mutex); //離開(kāi),釋放!PV操作成對(duì)使用

V(emptyBufferCount);//⑤

消費(fèi)者進(jìn)程Consumer:

P(mutex); //申請(qǐng)使用緩沖區(qū), ③

P(fullBufferCount); //消費(fèi)許可申請(qǐng),消費(fèi) ④

V(mutex); //離開(kāi),釋放

V(fullBufferCount); // ⑥

(4) 選擇并確定信號(hào)量的初值。

整型信號(hào)量mutex初值為1,記錄型信號(hào)量emptyBufferCount初值為緩沖區(qū)大小。

(5) 給出幾個(gè)進(jìn)程,人工模擬算法執(zhí)行,檢測(cè)算法并改正錯(cuò)誤。

用一個(gè)生產(chǎn)者、一個(gè)消費(fèi)者模擬進(jìn)程執(zhí)行,發(fā)現(xiàn)emptyBufferCount的PV操作②⑤,fullBufferCount的PV操作③⑥,在同一個(gè)進(jìn)程中,不能發(fā)揮同步作用,所以⑤⑥位置互換。

互換后,如果生產(chǎn)者進(jìn)程先一步執(zhí)行,算法沒(méi)有問(wèn)題。如果消費(fèi)者先一步執(zhí)行,就會(huì)被阻塞,由于生產(chǎn)者不能生產(chǎn),產(chǎn)生死鎖。因此生產(chǎn)者進(jìn)程中①②位置互換,消費(fèi)者進(jìn)程中③④互換,即一般情況同步信號(hào)量在前,互斥信號(hào)量在后。改正后再測(cè)試,算法無(wú)誤。

4生產(chǎn)者消費(fèi)者的多線程仿真

“操作系統(tǒng)”的課程實(shí)驗(yàn)旨在加深學(xué)生對(duì)理論的理解。很多高校“操作系統(tǒng)”實(shí)驗(yàn)基于Unix/Linux平臺(tái),學(xué)習(xí)該

系統(tǒng)會(huì)對(duì)學(xué)生來(lái)說(shuō)是很大負(fù)擔(dān)。筆者在課程實(shí)驗(yàn)中,選擇學(xué)生更為熟悉也更容易使用的Windows平臺(tái)和VC++6.0開(kāi)發(fā)環(huán)境,用線程模擬生產(chǎn)者消費(fèi)者問(wèn)題。這樣學(xué)生既容易上手編程,又能通過(guò)編程切實(shí)理解進(jìn)程的同步與互斥理論。學(xué)生以調(diào)試該程序入手,獨(dú)立完成哲學(xué)家進(jìn)餐問(wèn)題的模擬。生產(chǎn)者消費(fèi)者問(wèn)題的線程函數(shù)原型如下:

DWORD WINAPI ProducerThread(LPVOID lpvThreadParm) { //生產(chǎn)者線程函數(shù)

BOOL fHasDone=FALSE;

while(!fHasDone){

EnterCriticalSection

(&g_CriticalSection);

//進(jìn)入臨界區(qū)函數(shù)

if(producerRunTimes>=MAX_RUN_TIMES){

fHasDone=TRUE;

}else{

g_Buffer[in]=rand();

in=(in+1)%BUFFER_SIZE;

//循環(huán)隊(duì)列

producerRunTimes++;

//線程執(zhí)行次數(shù)計(jì)數(shù),防止死循環(huán)

}

LeaveCriticalSection

(&g_CriticalSection);

//退出臨界區(qū)函數(shù)

}

return 0;

}

DWORD WINAPI ConsumerThread(LPVOID lpvThreadParm)

{ //消費(fèi)者線程函數(shù)

BOOL fHasDone=FALSE;

while(!fHasDone){

EnterCriticalSection (&g_CriticalSection);

if(consumerRunTimes>= MAX_RUN_TIMES){

fHasDone=TRUE;

}else{

g_Buffer[out]=rand();

out=(out+1)% BUFFER_SIZE;

consumerRunTimes++;

}

LeaveCriticalSection

(&g_CriticalSection);

}

return 0;

}

在上述程序中除掉同步互斥部分,學(xué)生就能實(shí)際理解圖1中銀行賬戶(hù)存款例子。多線程仿真實(shí)驗(yàn)不但能讓學(xué)生深入理解進(jìn)程同步互斥的理論和實(shí)現(xiàn),還讓學(xué)生學(xué)會(huì)和理解了多線程的編程。

5結(jié)論

在“操作系統(tǒng)”課程中,筆者將知識(shí)點(diǎn)理清脈絡(luò),并圍繞操作系統(tǒng)的五大管理功能展開(kāi)教學(xué)。介紹操作系統(tǒng)的每個(gè)功能時(shí),以知識(shí)點(diǎn)的內(nèi)在特性為線索,連接看似不相關(guān)的知識(shí)。如在進(jìn)程管理時(shí),以單機(jī)環(huán)境下的程序執(zhí)行為切入點(diǎn),描述在多道程序中,每道程序模擬單機(jī)運(yùn)行環(huán)境,需要完成哪些工作;為了多道程序的協(xié)調(diào)工作,如何進(jìn)行同步和互斥;為了讓每個(gè)進(jìn)程都能有機(jī)會(huì)運(yùn)行,如何確定進(jìn)程調(diào)度原則。特別是在介紹進(jìn)程同步與互斥時(shí),實(shí)例結(jié)合理論,由淺入深,以“銀行賬戶(hù)操作”實(shí)例讓學(xué)生明白并發(fā)操作與順序執(zhí)行的不同之處,隨后提出操作系統(tǒng)中常用的并發(fā)處理方法——信號(hào)量機(jī)制。并就學(xué)生的學(xué)習(xí)難點(diǎn)——并發(fā)互斥操作的算法編寫(xiě),給出問(wèn)題的解決步驟。在實(shí)驗(yàn)中,用Windows多線程驗(yàn)證課堂所學(xué)知識(shí),學(xué)生既方便上手編程,又容易理解理論。

本教學(xué)方案充分照顧到了成教學(xué)生的實(shí)際基礎(chǔ),調(diào)動(dòng)了學(xué)生的積極性,設(shè)計(jì)的多線程實(shí)驗(yàn)也使學(xué)生有能力實(shí)際動(dòng)手參與。在本校教學(xué)中,筆者采用該方案后,學(xué)生對(duì)教學(xué)內(nèi)容非常感興趣,也很容易接受理論性的知識(shí)。筆者在實(shí)際教學(xué)中,也發(fā)現(xiàn)一些問(wèn)題,如該方案對(duì)學(xué)生的主動(dòng)性要求較高,并要求學(xué)生有一定的編程能力,這不在本文探討范圍。

參考文獻(xiàn):

[1] 湯小丹,梁紅兵,哲鳳屏,等. 計(jì)算機(jī)操作系統(tǒng)(修訂版)[M]. 西安:西安電子科技大學(xué)出版社,2003.

[2] 孫仲秀,費(fèi)翔林,駱斌. 操作系統(tǒng)教程[M]. 北京:高等教育出版社, 2008.

[3] William Stallings. 操作系統(tǒng)——精髓與設(shè)計(jì)原理[M]. 5版. 北京:電子工業(yè)出版社,2006.

[4] 陳向群,楊芙清. 操作系統(tǒng)教程[M]. 2版. 北京:北京大學(xué)出版社,2006.

[5] 孟靜. 操作系統(tǒng)教程-原理和實(shí)例分析[M]. 2版. 北京:高等教育出版社,2006.

[6] 楊燕. 操作系統(tǒng)課程雙語(yǔ)教學(xué)的探討[J]. 北京大學(xué)學(xué)報(bào):哲學(xué)社會(huì)科學(xué)版,2007(S2):174-175.

[7] 張坤.“操作系統(tǒng)”課程的教學(xué)方法研究[J]. 高等工程教育研究,2007(S1):151-152.

[8] 郝繼升. 計(jì)算機(jī)操作系統(tǒng)原理課程的教學(xué)探索[J]. 教育與職業(yè),2007(8):99-101.

[9] Jeffrey Richter. Windows高級(jí)編程指南[M]. 北京:清華大學(xué)出版社,1999.

猜你喜歡
同步操作系統(tǒng)進(jìn)程
Dalvik虛擬機(jī)進(jìn)程模型研究
快速殺掉頑固進(jìn)程
不留死角 全方位監(jiān)控系統(tǒng)
智能手機(jī)操作系統(tǒng)的分析與比較
國(guó)產(chǎn)桌面操作系統(tǒng)中虛擬化技術(shù)應(yīng)用研究
素質(zhì)教育理念下藝術(shù)教育改革的思路
政府職能的轉(zhuǎn)變與中國(guó)經(jīng)濟(jì)結(jié)構(gòu)調(diào)整的同步
公共藝術(shù)與城市設(shè)計(jì)的協(xié)調(diào)與同步
中外民主法制進(jìn)程專(zhuān)題復(fù)習(xí)