資源描述:
《進(jìn)程管理_進(jìn)程同步互斥與通信、死鎖》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、操作系統(tǒng)原理金海溶blue1879@163.com(msn)辦公室:JK329§3.6進(jìn)程同步與同步操作系統(tǒng)設(shè)計(jì)中的核心問題是關(guān)于進(jìn)程和線程的管理多道程序技術(shù)管理單處理器系統(tǒng)中的多個(gè)進(jìn)程多處理技術(shù)管理多處理器系統(tǒng)中的多個(gè)進(jìn)程分布處理技術(shù)管理多臺(tái)分布式計(jì)算機(jī)系統(tǒng)(集群)中多個(gè)進(jìn)程的執(zhí)行并發(fā)程序并發(fā)是所有問題的基礎(chǔ),也是操作系統(tǒng)設(shè)計(jì)的基礎(chǔ)。它包括很多設(shè)計(jì)問題分配給進(jìn)程的處理器時(shí)間等資源的共享與爭(zhēng)用進(jìn)程間的通信多個(gè)進(jìn)程活動(dòng)的同步并發(fā)程序程序并發(fā)可以通過創(chuàng)建進(jìn)程或線程實(shí)現(xiàn)Windows2000并發(fā)程序設(shè)計(jì)例子3-7.cppUnix下的并發(fā)程序設(shè)計(jì)通過fork()創(chuàng)建子進(jìn)程例:a+b
2、=cLinux下的并發(fā)程序設(shè)計(jì)實(shí)驗(yàn)4.3Voidmain(){……Pid=fork();Ifpid=0thenbeginread(b);exit(0);end;Elseread(a);Return_pid=wait(&status);c=a+b;Write(c);}§3.6進(jìn)程同步與同步進(jìn)程并發(fā)要解決的主要問題互斥:支持并發(fā)進(jìn)程的基本需求是實(shí)現(xiàn)互斥的能力,即,當(dāng)一個(gè)進(jìn)程被授予一資源時(shí),在其活動(dòng)期間,它具有排斥所有其他進(jìn)程使用該資源的能力——并發(fā)的基本需求實(shí)現(xiàn)互斥包括軟件方法(“忙等待”技術(shù))和支持互斥的硬件機(jī)制等同步:進(jìn)程間的活動(dòng)有相互依賴和合作的關(guān)系通信:信號(hào)量、管程、消
3、息-實(shí)現(xiàn)同步、互斥的三方法§3.6進(jìn)程同步與同步并發(fā)的例子及并發(fā)后的問題并發(fā)在同一時(shí)間段內(nèi),多個(gè)進(jìn)程同時(shí)運(yùn)行;宏觀上并發(fā),微觀上順序執(zhí)行。并發(fā)后產(chǎn)生了資源的競(jìng)爭(zhēng)和共享問題,而且進(jìn)程的執(zhí)行速度及進(jìn)程的執(zhí)行序列都是不可預(yù)測(cè)的一個(gè)例子§3.6進(jìn)程同步與同步考慮下面一個(gè)字符回顯的的過程voidecho(){chin=getchar();chout=chin;putchar(chout);}從鍵盤獲得輸入,每擊一下鍵,輸入字符就保存在變量chin中,然后傳送給變量chout,并回送顯示器任何程序可以重復(fù)地調(diào)用此過程,接收用戶輸入,并在用戶的屏幕上顯示§3.6進(jìn)程同步與同步考慮一個(gè)支
4、持單用戶單處理器、多道程序設(shè)計(jì)系統(tǒng)將其當(dāng)作一個(gè)共享過程,載入到所有應(yīng)用程序公用的全局存儲(chǔ)區(qū)中。這樣每個(gè)應(yīng)用程序都能使用這個(gè)過程,由于每個(gè)應(yīng)用程序只需使用echo過程的一個(gè)副本,從而節(jié)省空間進(jìn)程間共享主存是非常有用的,它允許進(jìn)程間有效而緊密的交互,有利于進(jìn)程的相互通信。但是,共享也可能會(huì)帶來(lái)一些問題voidecho(){chin=getchar();chout=chin;putchar(chout);}§3.6進(jìn)程同步與同步考慮下面的順序進(jìn)程P1調(diào)用echo過程,并在getchar函數(shù)結(jié)束后立即被中斷,此時(shí),最近輸入的字符x被保存在變量chin中進(jìn)程P2被激活并調(diào)用echo
5、過程,echo過程運(yùn)行得出結(jié)果,輸入然后在屏幕上顯示單個(gè)的字符y進(jìn)程P1被恢復(fù)。此時(shí)chin中值x被寫覆蓋,因此已丟失,而chin中的值y被傳送給chout并顯示出來(lái)第一個(gè)字符丟失,第2個(gè)字符被顯示了兩次voidecho(){chin=getchar();chout=chin;putchar(chout);}getchar()chinchoutputchar()P1P2getchar()XXgetchar()YYYputchar()YYY?echo§3.6進(jìn)程同步與同步解決方案:一次只允許一個(gè)進(jìn)程調(diào)用echo過程:進(jìn)程P1調(diào)用echo過程,并在getchar函數(shù)結(jié)束后立即
6、被中斷,此時(shí),最近輸入的字符x被保存在變量chin中進(jìn)程P2被激活并調(diào)用echo過程。但是,由于P1仍然在echo過程中,盡管當(dāng)前P1處于就緒狀態(tài),P2仍被阻塞,不能進(jìn)入這個(gè)過程。因此,P2被阻塞,等待echo過程可用一段時(shí)間后進(jìn)程P1被恢復(fù),完成echo的執(zhí)行,顯示出正確的字符xP1退出echo后,解除了P2的阻塞,P2被恢復(fù),成功地調(diào)用echo過程voidecho(){chin=getchar();chout=chin;putchar(chout);}P1voidecho(){chin=getchar();chout=chin;putchar(chout);}調(diào)用ec
7、ho超時(shí),就緒P2調(diào)用echo資源正忙阻塞狀態(tài)調(diào)度運(yùn)行釋放echo喚醒獲取資源就緒狀態(tài)調(diào)度運(yùn)行§3.6進(jìn)程同步與同步由此可見,解決共享資源的保護(hù),唯一的辦法是互斥的使用共享資源(如變量,代碼等)即:一次只允許一個(gè)進(jìn)程訪問共享資源臨界資源和臨界區(qū):臨界資源某些在一段時(shí)間內(nèi)只允許一個(gè)進(jìn)程使用的共享資源稱為臨界資源臨界區(qū)(段)訪問臨界資源的程序段稱為臨界區(qū)。即互斥執(zhí)行的程序段p53§3.6進(jìn)程同步與同步進(jìn)程P1和P2共享同一打印機(jī)資源,其操作流程如下:p1:entrycode?使用打印機(jī)?exitcodep2:entry