




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、操作系統(tǒng)進(jìn)程同步的教學(xué)實(shí)踐李志民1 趙一丁2 底恒3(中原工學(xué)院計(jì)算機(jī)學(xué)院,河南 鄭州 450007)摘要:針對(duì)操作系統(tǒng)課程中,存在進(jìn)程同步內(nèi)容抽象、難以理解的教學(xué)實(shí)際,本文在分析進(jìn)程相互制約關(guān)系的基礎(chǔ)上,歸納出利用信號(hào)量機(jī)制實(shí)現(xiàn)進(jìn)程同步、互斥的一般性解題思路,以“生產(chǎn)者-消費(fèi)者問(wèn)題”為例闡述了具體的解題步驟,在教學(xué)過(guò)程中結(jié)合基于java多線程的可編程操作代碼,通過(guò)真實(shí)的運(yùn)行結(jié)果把抽象知識(shí)變?yōu)橐桌斫獾闹R(shí),取得在理論教學(xué)方面提高學(xué)生學(xué)習(xí)興趣、在實(shí)踐教學(xué)方面提高學(xué)生實(shí)際動(dòng)手能力的效果。關(guān)鍵詞:進(jìn)程;同步;互斥;信號(hào)量;多線程中圖分類號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:A操作系統(tǒng)課程的進(jìn)程同步問(wèn)題是該課程的
2、核心知識(shí)點(diǎn),也是學(xué)習(xí)難點(diǎn)。解決同步和互斥問(wèn)題最常用的方法就是信號(hào)量機(jī)制,通過(guò)在程序算法中使用P、V 操作達(dá)到同步和互斥的目的1,信號(hào)量與P、V 操作是低級(jí)的同步機(jī)構(gòu),用它們很難表示復(fù)雜的并發(fā)性問(wèn)題,在并發(fā)程序中的出現(xiàn)P、V 操作,使得程序正確性證明更加困難2。在教學(xué)過(guò)程中,發(fā)現(xiàn)很多學(xué)生對(duì)上課所講的例子大部分都清楚它的算法,可是當(dāng)遇到一個(gè)新的同步與互斥問(wèn)題,很多學(xué)生覺(jué)得還是無(wú)從下手,感到困惑。下面以“生產(chǎn)者-消費(fèi)者問(wèn)題”為案例,從進(jìn)程的相互制約關(guān)系入手,歸納出進(jìn)程同步、互斥的解題思路和解題步驟,利用java代碼實(shí)現(xiàn)多線程同步,把抽象的知識(shí)變?yōu)榫唧w可理解知識(shí),提高教學(xué)效果。1 進(jìn)程同步、互斥的一般
3、性解題思路對(duì)于進(jìn)程的同步與互斥問(wèn)題,學(xué)會(huì)問(wèn)題解決的分析過(guò)程,理清解決此類問(wèn)題的解題思路,是很重要的。操作系統(tǒng)課程中利用信號(hào)量機(jī)制實(shí)現(xiàn)進(jìn)程的互斥和同步,以記錄型信號(hào)量為例,利用信號(hào)量的P、V操作解決進(jìn)程同步問(wèn)題的解題步驟,歸納如下:1.1 確定進(jìn)程數(shù)和進(jìn)程間的制約關(guān)系首先,分析待解決的實(shí)際問(wèn)題,提煉出實(shí)際問(wèn)題進(jìn)程的數(shù)量;然后,根據(jù)各進(jìn)程的活動(dòng)描述,判斷進(jìn)程間的相互制約關(guān)系:(1)如果共享某種臨界資源,進(jìn)程間屬于間接相互制約關(guān)系,稱進(jìn)程互斥;(2)如果進(jìn)程間的合作帶有前趨、后繼關(guān)系,進(jìn)程間屬于直接相互制約關(guān)系,稱進(jìn)程同步;(3)同時(shí)存在互斥和同步兩種制約關(guān)系。根據(jù)這三種制約關(guān)系,分別按1.2、1.
4、3、1.4進(jìn)行處理。1.2 進(jìn)程互斥的解題步驟(1)找出臨界資源、臨界區(qū);(2)為每個(gè)臨界資源設(shè)一個(gè)互斥信號(hào)量,如mutex,初始值為n;(n是臨界資源的個(gè)數(shù))(3)在臨界區(qū)前加入wait(mutex)原語(yǔ),作為進(jìn)入?yún)^(qū); 在臨界區(qū)后加入signal(mutex)原語(yǔ),作為退出區(qū);注意:wait(mutex)和signal(mutex)成對(duì)出現(xiàn)在同一個(gè)進(jìn)程中。1.3 進(jìn)程同步的解題步驟(1)確定進(jìn)程之間的前趨關(guān)系,畫出前趨線;(2)為每條前趨線設(shè)一個(gè)同步信號(hào)量,如empty; (3)在前趨線的箭頭前插入wait(empty)原語(yǔ),作為進(jìn)入?yún)^(qū);箭尾后插入signal(empty)原語(yǔ),作為退出區(qū);
5、(4)同步信號(hào)量empty的初始值為n或0;(n為正整數(shù),是申請(qǐng)資源的初始單位數(shù))同步信號(hào)量的初值則要根據(jù)進(jìn)程的初始狀態(tài)確定,具體設(shè)置相應(yīng)的值。一般情況下:不能率先執(zhí)行的wait()原語(yǔ),其信號(hào)量初值為0,否則為n; 注意:wait(empty)和signal(empty)成對(duì)出現(xiàn)在不同進(jìn)程中。1.4進(jìn)程互斥、同步同時(shí)存在時(shí)的解題步驟(1)如果進(jìn)程間存在互斥和同步兩種制約關(guān)系,分別按照2.2和2.3的解題步驟執(zhí)行;(2)在同一個(gè)進(jìn)程的進(jìn)入?yún)^(qū)中可能會(huì)出現(xiàn)兩個(gè)wait()原語(yǔ),一定要先寫同步信號(hào)量,后寫互斥信號(hào)量;否則,可能出現(xiàn)死鎖現(xiàn)象;(3)在同一個(gè)進(jìn)程的退出區(qū)中可能會(huì)出現(xiàn)兩個(gè)signal()原
6、語(yǔ),書寫順序沒(méi)有嚴(yán)格要求;規(guī)范的寫法是:先寫互斥信號(hào)量,后寫同步信號(hào)量;注意:(1)一定要檢查兩個(gè)wait()原語(yǔ)的順序,不能顛倒;(2)wait()和signal()必須成對(duì)出現(xiàn),否則會(huì)出現(xiàn)死鎖現(xiàn)象3,影響系統(tǒng)性能。1.5 用類Pacal 語(yǔ)言描述進(jìn)程同步或互斥算法根據(jù)上面幾個(gè)步驟分析的結(jié)果,就可以類Pacal 語(yǔ)言或其它語(yǔ)言實(shí)現(xiàn)同步與互斥的算法。初學(xué)者開(kāi)始時(shí)可以按上述步驟解決同步和互斥問(wèn)題,以上講述的只是一般的求解規(guī)則,有一定的可操作性,但在實(shí)際應(yīng)用中還是要針對(duì)具體情況,多做多想,領(lǐng)悟出其中的原理和竅門。2 基于信號(hào)量機(jī)制的“生產(chǎn)者-消費(fèi)者問(wèn)題”的同步算法以“多生產(chǎn)者-多消費(fèi)者-多緩沖”問(wèn)
7、題為例,給出進(jìn)程同步與互斥的解題步驟。2.1 確定進(jìn)程數(shù)和進(jìn)程間的制約關(guān)系通過(guò)分析就會(huì)發(fā)現(xiàn),該問(wèn)題中生產(chǎn)者、消費(fèi)者各是一類進(jìn)程。并發(fā)執(zhí)行過(guò)程如圖1所示:生產(chǎn)者的執(zhí)行過(guò)程: 消費(fèi)者的執(zhí)行過(guò)程:生產(chǎn)一個(gè)產(chǎn)品; 從緩沖區(qū)取產(chǎn)品;將產(chǎn)品放入緩沖區(qū); 緩沖區(qū)計(jì)數(shù)減1;緩沖區(qū)計(jì)數(shù)加1; 消費(fèi); 表示進(jìn)程之間的前趨關(guān)系 圖1 生產(chǎn)者-消費(fèi)者的制約關(guān)系兩類進(jìn)程既共享緩沖區(qū)計(jì)數(shù)這一臨界資源,又具有“先放再取、取后再放”的兩條前趨關(guān)系,進(jìn)程間同時(shí)存在互斥和同步兩種制約關(guān)系。2.2 解題步驟 進(jìn)程同步的解題步驟(1)找出臨界資源:共享緩沖區(qū)的計(jì)數(shù);(2)為臨界資源設(shè)一個(gè)互斥信號(hào)量,如mutex,初始值為1;(3)在
8、臨界區(qū)前加入wait(mutex)原語(yǔ)、signal(mutex)原語(yǔ);2.2.2 進(jìn)程同步的解題步驟(1)確定進(jìn)程之間“先放再取、取后再放”的兩條前趨關(guān)系,畫出前趨線;(2)為每條前趨線設(shè)一個(gè)同步信號(hào)量,分別是empty、full; (3)在前趨線的箭頭前分別插入wait(empty)、wait(full),箭尾后插入signal(empty)、signal(full);(4)同步信號(hào)量empty的初始值為n(緩沖區(qū)的大?。?,full的初始值為0;2.2.3 用類Pacal 語(yǔ)言描述進(jìn)程同步或互斥算法生產(chǎn)者進(jìn)程: 消費(fèi)者進(jìn)程:生產(chǎn)一個(gè)產(chǎn)品; wait(full);wait(empty); w
9、ait(mutex);wait(mutex); 從緩沖區(qū)取產(chǎn)品;將產(chǎn)品放入緩沖區(qū); 緩沖區(qū)計(jì)數(shù)減1;緩沖區(qū)計(jì)數(shù)加1; signal(mutex);signal(mutex); signal(empty)signal(full); 消費(fèi);注意:(1)wait(mutex)和signal(mutex)成對(duì)出現(xiàn)在同一個(gè)進(jìn)程中。(2)wait(mutex)和signal(mutex)成對(duì)出現(xiàn)在不同進(jìn)程中。(3)一定要檢查兩個(gè)wait()原語(yǔ)的順序,不能顛倒;否則會(huì)出現(xiàn)死鎖現(xiàn)象,影響系統(tǒng)性能。3 基于java多線程的“生產(chǎn)者-消費(fèi)者問(wèn)題”的同步實(shí)現(xiàn)操作系統(tǒng)的課程實(shí)驗(yàn)旨在加深學(xué)生對(duì)理論的理解。對(duì)于進(jìn)程同步
10、問(wèn)題,線程是輕型進(jìn)程, Java為同步線程提供了兩個(gè)方法:object類的wait()方法和notify()方法。當(dāng)線程請(qǐng)求資源而未能滿足時(shí),調(diào)用wait()方法使線程等待,并將它排在等待隊(duì)列上; 當(dāng)線程對(duì)資源訪問(wèn)完后,通過(guò)notify()方法喚醒等待隊(duì)列上的線程4。下面是實(shí)現(xiàn)生產(chǎn)者-消費(fèi)者同步的完整的java可運(yùn)行代碼:public class Store private final int MAX; private int count; public Store(int n) MAX=n; count=0; public synchronized void addData() throws
11、 Exception while(count=MAX)this.wait(); count+; System.out.println(Thread.currentThread().getName()+ add a data:+count); this.notifyAll();public synchronized void removeData() throws Exception while(count=0)this.wait(); System.out.println(Thread.currentThread().getName()+ remove a data:+count); coun
12、t-; this.notifyAll(); class Producer extends Thread private Store s; public Producer(Store s)this.s=s; public void run() while(true) try s.addData();Thread.sleep(100); catch (Exception e) class Consumer extends Threadprivate Store s; public Consumer(Store s) this.s=s; public void run() while(true) t
13、ry s.removeData();Thread.sleep(100); catch (Exception e) public class TestPC public static void main(String args) Store s=new Store(100);Producer p1=new Producer(s);Producer p2=new Producer(s);Producer p3=new Producer(s);Producer p4=new Producer(s); p1.setName(P01);p2.setName(p02);p3.setName(P03); p
14、4.setName(p04);p1.start();p2.start();p3.start(); p4.start();Consumer c1=new Consumer(s);Consumer c2=new Consumer(s);Consumer c3=new Consumer(s);Consumer c4=new Consumer(s);c1.setName(c01); c2.setName(c02);c3.setName(c03);c4.setName(c04);c1.start();c2.start();c3.start();c4.start();編寫測(cè)試類,同時(shí)調(diào)用多個(gè)生產(chǎn)者線程和消
15、費(fèi)者線程,由于多線程并發(fā)執(zhí)行,每次的執(zhí)行結(jié)果可能不盡相同,下面分別是4個(gè)生產(chǎn)者線程和4個(gè)消費(fèi)者線程兩次并發(fā)執(zhí)行的結(jié)果,如圖2所示: 圖2 P-C同步的兩次運(yùn)行結(jié)果通過(guò)多次執(zhí)行結(jié)果的比較,可以直觀地理解進(jìn)程并發(fā)的實(shí)質(zhì),通過(guò)案例教學(xué),可以清楚地觀察進(jìn)程互斥和同步的并發(fā)執(zhí)行過(guò)程。4 總結(jié)如何讓實(shí)驗(yàn)教學(xué)配合好理論教學(xué),讓枯燥無(wú)味的原理變成趣味十足的一門課程成為了教學(xué)改革的主要目標(biāo)3。在講解進(jìn)程的同步與互斥這一比較復(fù)雜、抽象的內(nèi)容時(shí),需要先對(duì)問(wèn)題進(jìn)行分解,由淺入深,給出進(jìn)程同步問(wèn)題的一般性的解題步驟;結(jié)合java多線程案例,通過(guò)實(shí)際的運(yùn)行結(jié)果,把抽象的知識(shí)變?yōu)榫唧w可理解知識(shí);可以在理論教學(xué)中調(diào)動(dòng)了學(xué)生的
16、積極性,在實(shí)踐教學(xué)中提高學(xué)生的實(shí)踐能力,培養(yǎng)學(xué)生分析問(wèn)題、解決問(wèn)題的綜合能力,對(duì)于提高計(jì)算機(jī)的教學(xué)質(zhì)量、全面提高學(xué)生的素質(zhì)有著重要的意義。參考文獻(xiàn):1 湯小丹,梁紅兵,等. 計(jì)算機(jī)操作系統(tǒng)(修訂版)M. 西安:西安電子科技大學(xué)出版社,2003.2 陳向群,楊芙清. 操作系統(tǒng)教程M.北京:北京大學(xué)出版社,2006.3 李瑛達(dá),謝雙杰.“操作系統(tǒng)”實(shí)例化教學(xué)的改革探討J.計(jì)算機(jī)教育,2009(7)27-30.4 鄭莉,王行言,馬素霞.Java語(yǔ)言程序設(shè)計(jì)M. 北京:清華大學(xué)出版社,2008.Teaching Practice of Operating System Process Synchron
17、ization LI Zhi-min1,ZHENG Qiu-sheng2,DU Jun-li3 (Zhongyuan University of Technology, Henan, Zhengzhou, 450007)Abstract: The content of the abstract process of synchronization in is difficult to understand in the Operating System teaching practice. The article start with analyzing the relationship be
18、tween the process of mutual restraint and summarize general problem-solving ideas of using semaphores mechanism to achieve synchronization and mutual exclusion.It Specifics general problem-solving ideas as the Producer - Consumer problem example. In the teaching process, Actual operating results can be obser
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 湖南省邵陽(yáng)市二中2024-2025年高一下入學(xué)考試語(yǔ)文試題含答案
- 2025年鋼材:一級(jí)鋼合作協(xié)議書
- 2025年春初中蘇科版八年級(jí)下冊(cè)物理8.3摩擦力說(shuō)課稿
- 二零二五年度服裝寄存與展會(huì)租賃服務(wù)合作協(xié)議
- 2025年度安全軟件開(kāi)發(fā)人工費(fèi)用支付合同
- 康養(yǎng)項(xiàng)目的可行性研究報(bào)告
- 中醫(yī)護(hù)理學(xué)(第5版)課件 第4章 病機(jī)
- 有機(jī)蔬菜種植技術(shù)大全
- 智能家居集成系統(tǒng)
- 政府機(jī)構(gòu)信息化建設(shè)規(guī)劃方案
- 建設(shè)工程安全生產(chǎn)管理習(xí)題庫(kù)及答案
- 項(xiàng)目1 多旋翼無(wú)人機(jī)的組裝與調(diào)試
- 供應(yīng)鏈管理:高成本、高庫(kù)存、重資產(chǎn)的解決方案 第2版
- 馬克筆建筑快速表現(xiàn)
- 橋臺(tái)錐坡工程量計(jì)算公式
- 日本夏日祭活動(dòng)鑒賞
- 中國(guó)教育史筆記全
- 某工業(yè)鍋爐安裝工程監(jiān)理作業(yè)指導(dǎo)書
- 名?!稄?qiáng)基計(jì)劃》初升高銜接數(shù)學(xué)講義(上)
- GB/T 41028-2021航空航天流體系統(tǒng)液壓軟管、管道和接頭組件的脈沖試驗(yàn)要求
- GB/T 41-2000六角螺母C級(jí)
評(píng)論
0/150
提交評(píng)論