王春梅 濱州學(xué)院信息工程學(xué)院
進(jìn)程同步問題既是操作系統(tǒng)課程的重點(diǎn)也是其難點(diǎn),進(jìn)程同步是由進(jìn)程之間的前趨關(guān)系造成的直接制約關(guān)系。在進(jìn)程同步問題中,既包含進(jìn)程的并發(fā)性、進(jìn)程間前趨關(guān)系,還包含如何利用記錄型信號(hào)量解決進(jìn)程間的制約關(guān)系,多個(gè)概念交織在一起,往往令學(xué)生望而生畏,理解和掌握的程度較低,打擊了學(xué)生的學(xué)習(xí)積極性。
啟發(fā)式教學(xué),是20世紀(jì)60年代中期創(chuàng)建的教學(xué)方法,根據(jù)課程教學(xué)目標(biāo)、知識(shí)內(nèi)容邏輯和學(xué)生知識(shí)水平,采用多種方式,以啟發(fā)學(xué)生的思維為核心,通過調(diào)動(dòng)學(xué)生的學(xué)習(xí)主動(dòng)性和積極性,從而促進(jìn)學(xué)生知識(shí)理解、能力培養(yǎng)和身心發(fā)展的一種教學(xué)方法。
(1)進(jìn)程同步
某些應(yīng)用程序,為了完成某任務(wù)而建立了兩個(gè)或多個(gè)進(jìn)程。這些進(jìn)程將為完成同一項(xiàng)任務(wù)而相互合作。進(jìn)程間的直接制約關(guān)系就是源于它們之間的相互合作。有向無循環(huán)圖(DAG,Directed Acyclic Graph)可以更好的描述進(jìn)程之間的執(zhí)行次序。圖中的結(jié)點(diǎn)用來表示一個(gè)進(jìn)程,結(jié)點(diǎn)間的有向邊表示兩個(gè)進(jìn)程之間的前趨關(guān)系。一般表示為PiPj,表示Pj開始執(zhí)行之前Pi必須完成。
(2)記錄型信號(hào)量機(jī)制
進(jìn)程同步機(jī)制的主要任務(wù)是對(duì)多個(gè)相關(guān)進(jìn)程在執(zhí)行次序上進(jìn)行協(xié)調(diào),使并發(fā)執(zhí)行的諸進(jìn)程之間能按照一定的規(guī)則共享系統(tǒng)資源,并能很好地相互合作,從而使程序的執(zhí)行具有可再現(xiàn)性。
記錄型信號(hào)量的定義及相應(yīng)的wait(S)和signal(S)操作如下:
在該信號(hào)量中,S.value的初值表示系統(tǒng)中某類資源數(shù)量,list鏈表用來指向由于申請(qǐng)資源不成功而阻塞的進(jìn)程。由以上wait(S)代碼可知,wait操作是指進(jìn)程申請(qǐng)一個(gè)資源,并且當(dāng)申請(qǐng)資源不成功時(shí),調(diào)用block原語主動(dòng)阻塞,并插入到S.list中,并且list中阻塞的進(jìn)程數(shù)為|S.value|。signal操作代表進(jìn)程釋放一個(gè)資源,若釋放一個(gè)資源后S.value=<0,則表示在list中仍有等待資源的進(jìn)程,所以應(yīng)該調(diào)用wakeup原語,喚醒S.list中的第一個(gè)進(jìn)程,所以記錄型號(hào)量機(jī)制遵循空閑讓進(jìn)、忙則等待、有限等待和讓權(quán)等待四條準(zhǔn)則,是比較完善的同步機(jī)制。
進(jìn)程同步的例子廣泛存在于現(xiàn)實(shí)生活中,例如將蓋一棟教學(xué)樓分為①設(shè)計(jì)圖紙,②打地基,③蓋樓,④裝修四個(gè)環(huán)節(jié),那么它們之間就存在①②③④的前趨關(guān)系,還有就是大家比較熟悉的4*100米接力賽如果派出A、B、C、D四名同學(xué)分別跑第一棒、第二棒、第三棒和第四棒,那么這四名同學(xué)之間就存在ABCD的前趨關(guān)系。
關(guān)于進(jìn)程同步問題,課程教學(xué)目標(biāo)是掌握利用記錄型信號(hào)量機(jī)制解決進(jìn)程的同步問題。選取大家都非常熟悉的4*100米接力賽為例,提出思考問題;然后引導(dǎo)學(xué)生對(duì)該問題進(jìn)行思考以及尋找解決問題的方案。之后啟發(fā)學(xué)生將現(xiàn)實(shí)中的問題解決方案應(yīng)用與進(jìn)程同步問題;最后進(jìn)行反饋和總結(jié)。
首先提出問題一:在4*100米接力賽中,班內(nèi)派出四名同學(xué)A、B、C、D分別跑第一棒、第二棒、第三棒及第四棒,那么四名同學(xué)在跑步的過程中能不能停下來?
大多數(shù)同學(xué)都會(huì)想到,同學(xué)在跑步過程中不會(huì)主動(dòng)停下來,但是如果摔倒的話,那么他們是必須要停下來的。
問題二:如果是A同學(xué)在跑步過程中摔倒停了下來,如果保證B不搶跑?
大多數(shù)同學(xué)都會(huì)想到,B同學(xué)沒有拿到接力棒就跑,那么就會(huì)被判為成績(jī)無效。以此類推,對(duì)于C、D同學(xué)也是需要拿到接力棒才可以起跑。
問題三:在4*100米接力賽中,接力棒起到了什么作用?
通過思考,大多數(shù)同學(xué)會(huì)想到,接力棒是為了保證四名同學(xué)按照4*100米接力賽規(guī)則完成比賽,防止出現(xiàn)搶跑等現(xiàn)象,也就是只有A跑完第一棒,B才可以起跑,以此類推。
以上利用一個(gè)用于表示資源數(shù)目的整型變量S以及wait(S)和signal(S)操作稱為整型信號(hào)量機(jī)制,很明顯,整型信號(hào)量機(jī)制比鎖機(jī)制更有效。
問題四:4*100米接力賽和進(jìn)程同步問題的對(duì)應(yīng)關(guān)系是什么?
引導(dǎo)思考:四名同學(xué)要執(zhí)行跑步這個(gè)任務(wù),所以對(duì)應(yīng)于操作系統(tǒng)中的進(jìn)程;四名同學(xué)在跑步過程中摔倒停下來,對(duì)應(yīng)于進(jìn)程的并發(fā)性。只有A同學(xué)跑完第一棒,將接力棒傳遞給B,B才可以起跑,所以A、B同學(xué)之間關(guān)系對(duì)應(yīng)于進(jìn)程之間的前趨關(guān)系A(chǔ)B。以此類推,四名同學(xué)之間存在ABCD的前趨關(guān)系。
問題五:怎樣利用記錄型信號(hào)量來實(shí)現(xiàn)接力棒的作用,也就是既要保證進(jìn)程的并發(fā)性(同學(xué)在跑步過程中摔倒停下來)還要保證進(jìn)程之間的前趨關(guān)系(既是A停下來,B也不能跑,除非A跑完第一棒)。
引導(dǎo)思考:接力棒可以看做是同學(xué)起跑的信號(hào)或者條件,對(duì)于B同學(xué)來說,只有A跑完第一棒,B同學(xué)起跑的條件才成立。所以在A、B同學(xué)之間可以設(shè)置一個(gè)信號(hào)量SAB表示A跑完第一棒,B起跑的條件,所以SAB初值為0,只有A跑完第一棒,才能將該條件釋放,對(duì)應(yīng)的B在起跑前要申請(qǐng)?jiān)摋l件,如果成立才能起跑。
通過啟發(fā)式教學(xué),同學(xué)們對(duì)進(jìn)程同步問題的掌握明顯提高,學(xué)習(xí)操作系統(tǒng)的信心也進(jìn)一步增強(qiáng),有效的提高了課程教學(xué)質(zhì)量,也培養(yǎng)了學(xué)生發(fā)現(xiàn)問題、思考問題以及解決問題的思維和能力。