• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 34,comments - 2,trackbacks - 0
            討論三個(gè)問題:
            1、進(jìn)程間如何通信呢,如何來相互傳遞信息呢?
            (1)、低級通信:只能傳遞狀態(tài)和整數(shù)值(控制信息)
            信號量(semaphore
            信號(signal
            (2)、高級通信:能夠傳送任意數(shù)量的數(shù)據(jù)
            共享內(nèi)存(shared memory
            消息傳遞(message passing
            管道(pipe
            剪貼板:

            基本機(jī)制是:系統(tǒng)預(yù)留的一塊全局共享內(nèi)存,可用于被各進(jìn)程暫時(shí)存儲(chǔ)數(shù)據(jù)。寫入進(jìn)程首先創(chuàng)建一個(gè)全局內(nèi)存塊,并將數(shù)據(jù)寫到該內(nèi)存塊;接受數(shù)據(jù)的進(jìn)程通過剪貼板機(jī)制獲取此內(nèi)存塊的句柄,并完成對該內(nèi)存塊數(shù)據(jù)的讀取。

            管道包括三種:
            管道(Pipe)實(shí)際是用于進(jìn)程間通信的一段共享內(nèi)存,創(chuàng)建管道的進(jìn)程稱為管道服務(wù)器,連接到一個(gè)管道的進(jìn)程為管道客戶機(jī)。一個(gè)進(jìn)程在向管道寫入數(shù)據(jù)后,另一進(jìn)程就可以從管道的另一端將其讀取出來。匿名管道(Anonymous Pipes)是在父進(jìn)程和子進(jìn)程間單向傳輸數(shù)據(jù)的一種未命名的管道,只能在本地計(jì)算機(jī)中使用,而不可用于網(wǎng)絡(luò)間的通信。
                  1)普通管道PIPE, 通常有種限制,一是半雙工,只能單向傳輸;  二是只能在父子或者兄弟進(jìn)程間使用
                  2)流管道s_pipe: 去除了第一種限制,可以雙向傳輸
                  3)管道:name_pipe, 去除了第二種限制,可以在許多并不相關(guān)的進(jìn)程之間進(jìn)行通訊.

            郵件槽:
              郵件槽(Mailslots)提供進(jìn)程間單向通信能力,任何進(jìn)程都能建立郵件槽成為郵件槽服務(wù)器。其它進(jìn)程,稱為郵件槽客戶,可以通過郵件槽的名字給郵件槽服務(wù)器進(jìn)程發(fā)送消息。進(jìn)來的消息一直放在郵件槽中,直到服務(wù)器進(jìn)程讀取它為止。一個(gè)進(jìn)程既可以是郵件槽服務(wù)器也可以是郵件槽客戶,因此可建立多個(gè)郵件槽實(shí)現(xiàn)進(jìn)程間的雙向通信。
              通過郵件槽可以給本地計(jì)算機(jī)上的郵件槽、其它計(jì)算機(jī)上的郵件槽或指定網(wǎng)絡(luò)區(qū)域中所有計(jì)算機(jī)上有同樣名字的郵件槽發(fā)送消息。廣播通信的消息長度不能超過400字節(jié),非廣播消息的長度則受郵件槽服務(wù)器指定的最大消息長度的限制。
              郵件槽與命名管道相似,不過它傳輸數(shù)據(jù)是通過不可靠的數(shù)據(jù)報(bào)(如TCP/IP協(xié)議中的UDP包)完成的,一旦網(wǎng)絡(luò)發(fā)生錯(cuò)誤則無法保證消息正確地接收,而命名管道傳輸數(shù)據(jù)則是建立在可靠連接基礎(chǔ)上的。不過郵件槽有簡化的編程接口和給指定網(wǎng)絡(luò)區(qū)域內(nèi)的所有計(jì)算機(jī)廣播消息的能力,所以郵件槽不失為應(yīng)用程序發(fā)送和接收消息的另一種選擇。

            優(yōu)缺點(diǎn):
            郵槽最大的一個(gè)缺點(diǎn)便是只允許從客戶機(jī)到服務(wù)器,建立一種不可靠的單向數(shù)據(jù)通信。
            而另一方面,郵槽最大的一個(gè)優(yōu)點(diǎn)在于,它們使客戶機(jī)應(yīng)用能夠非常容易地將廣播消息發(fā)送給一個(gè)或多個(gè)服務(wù)器應(yīng)用。

            共享內(nèi)存:

            存在于內(nèi)核級別的一種資源,共享內(nèi)存指在多處理器的計(jì)算機(jī)系統(tǒng)中,可以被不同中央處理器(CPU)訪問的大容量內(nèi)存。由于多個(gè)CPU需要快速訪問存儲(chǔ)器,這樣就要對存儲(chǔ)器進(jìn)行緩存(Cache)。任何一個(gè)緩存的數(shù)據(jù)被更新后,由于其他處理器也可能要存取,共享內(nèi)存就需要立即更新,否則不同的處理器可能用到不同的數(shù)據(jù)。共享內(nèi)存 (shared memory)是 Unix下的多進(jìn)程之間的通信方法 ,這種方法通常用于一個(gè)程序的多進(jìn)程間通信,實(shí)際上多個(gè)程序間也可以通過共享內(nèi)存來傳遞信息。



            2、當(dāng)兩個(gè)或者多個(gè)進(jìn)程訪問共享資源時(shí),如何確保他們不會(huì)相互妨礙-----進(jìn)程互斥問題。

            原因:進(jìn)程宏觀上并發(fā)執(zhí)行,依靠時(shí)鐘中斷來實(shí)現(xiàn)微觀上輪流執(zhí)行。當(dāng)兩個(gè)或者多個(gè)進(jìn)程對同一個(gè)共享內(nèi)存訪問,結(jié)果不能預(yù)測。在同一時(shí)刻,只允許一個(gè)進(jìn)程訪問該共享數(shù)據(jù),即如果當(dāng)前已有一個(gè)進(jìn)程正在使用該數(shù)據(jù),那么其他進(jìn)程暫時(shí)不能訪問。這就是互斥的概念。
            實(shí)現(xiàn)互斥訪問的四個(gè)條件: 
            (1)、任何兩個(gè)進(jìn)程都不能同時(shí)進(jìn)入臨界區(qū);
            (2)、不能事先假定CPU的個(gè)數(shù)和運(yùn)行速度;
             (3)、當(dāng)一個(gè)進(jìn)程運(yùn)行在它的臨界區(qū)外面時(shí),不能妨礙其他的進(jìn)程進(jìn)入臨界區(qū);
            (4)、任何一個(gè)進(jìn)程進(jìn)入臨界區(qū)的要求應(yīng)該在有限時(shí)間內(nèi)得到滿足。

            (解決辦法)
            (1)、用標(biāo)志位加鎖。

            lock的初始值為0,當(dāng)一個(gè)進(jìn)程想進(jìn)入臨界區(qū)時(shí),先查看lock的值,若為1,說明已有進(jìn)程在臨界區(qū)內(nèi),只好循環(huán)等待。等它變成了0,才可進(jìn)入。


            缺點(diǎn)是:lock也是一個(gè)共享資源,當(dāng)進(jìn)程競爭lock時(shí),可能會(huì)出現(xiàn)問題。加鎖標(biāo)志位法的缺點(diǎn)在于可能出現(xiàn)針對共享變量 lock 的競爭狀態(tài)。例如,當(dāng)進(jìn)程 0 執(zhí)行完循環(huán)判斷語句后,被時(shí)鐘中斷打斷,從而可能使多個(gè)進(jìn)程同時(shí)進(jìn)入臨界區(qū)。
            是一種不安全的做法、
            (2)、強(qiáng)制輪流法

            基本思想:每個(gè)進(jìn)程嚴(yán)格地按照輪流的順序來進(jìn)入臨界區(qū)。

            優(yōu)點(diǎn):保證在任何時(shí)刻最多只有一個(gè)進(jìn)程在臨界區(qū)
            缺點(diǎn):違反了互斥訪問四條件中的第三個(gè)條件,當(dāng)一個(gè)進(jìn)程運(yùn)行在它的臨界區(qū)外面時(shí),不能妨礙其他的進(jìn)程進(jìn)入臨界區(qū)



            (3)、Peterson方法。

            當(dāng)一個(gè)進(jìn)程想進(jìn)入臨界區(qū)時(shí),先調(diào)用enter_region函數(shù),判斷是否能安全進(jìn)入,不能的話等待;當(dāng)它從臨界區(qū)退出后,需調(diào)用leave_region函數(shù),允許其它進(jìn)程進(jìn)入臨界區(qū)。兩個(gè)函數(shù)的參數(shù)均為進(jìn)程號。



            小結(jié):

            當(dāng)一個(gè)進(jìn)程想要進(jìn)入它的臨界區(qū)時(shí),首先檢查一下是否允許它進(jìn)入,若允許,就直接進(jìn)入了;若不允許,就在那里循環(huán)地等待,一直等到允許它進(jìn)入。

            缺點(diǎn):
                1)浪費(fèi)CPU時(shí)間;
                2)可能導(dǎo)致預(yù)料之外的結(jié)果(如:一個(gè)低優(yōu)先級進(jìn)程位于臨界區(qū)中,這時(shí)有一個(gè)高優(yōu)先級的進(jìn)程也試圖進(jìn)入臨界區(qū))

            3、當(dāng)進(jìn)程間存在某種依存關(guān)系時(shí),如何來調(diào)整他們運(yùn)行的先后次序-----進(jìn)程同步問題。
            用P,V原語操作實(shí)現(xiàn)同步(略)
            另外:上述的問題也適合線程嗎?? 

            posted on 2011-10-07 15:44 Yu_ 閱讀(1396) 評論(0)  編輯 收藏 引用 所屬分類: Windows程序設(shè)計(jì)
            久久99国产精品久久久| 一本大道加勒比久久综合| 精品久久久无码21p发布| 欧美日韩中文字幕久久久不卡| 久久笫一福利免费导航 | 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 久久99热这里只有精品国产| 色8激情欧美成人久久综合电| 99久久99久久精品免费看蜜桃| 久久一区二区免费播放| 91久久九九无码成人网站| 久久综合88熟人妻| 久久伊人五月丁香狠狠色| 久久99热国产这有精品| 伊人久久大香线蕉综合5g | 久久ww精品w免费人成| 精品久久久久久无码国产| 亚洲狠狠婷婷综合久久蜜芽| 久久亚洲精品视频| 伊人久久大香线蕉综合Av| 亚洲欧美伊人久久综合一区二区| 亚洲欧洲精品成人久久曰影片 | 亚洲v国产v天堂a无码久久| 久久免费高清视频| 国产99久久久国产精免费| 国产日韩久久久精品影院首页 | 久久无码人妻一区二区三区| 久久国产精品免费| 午夜精品久久久久久影视777| 无码精品久久一区二区三区| 精品久久久一二三区| 久久久免费精品re6| 久久午夜福利电影| 日韩av无码久久精品免费| 996久久国产精品线观看| 久久久高清免费视频| 国产精品视频久久| 久久久99精品成人片中文字幕| 影音先锋女人AV鲁色资源网久久| 国产精品无码久久综合| 99久久精品国产麻豆|