• <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)、低級(jí)通信:只能傳遞狀態(tài)和整數(shù)值(控制信息)
            信號(hào)量(semaphore
            信號(hào)(signal
            (2)、高級(jí)通信:能夠傳送任意數(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)存塊的句柄,并完成對(duì)該內(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ā)送消息。廣播通信的消息長(zhǎng)度不能超過400字節(jié),非廣播消息的長(zhǎng)度則受郵件槽服務(wù)器指定的最大消息長(zhǎng)度的限制。
              郵件槽與命名管道相似,不過它傳輸數(shù)據(jù)是通過不可靠的數(shù)據(jù)報(bào)(如TCP/IP協(xié)議中的UDP包)完成的,一旦網(wǎng)絡(luò)發(fā)生錯(cuò)誤則無法保證消息正確地接收,而命名管道傳輸數(shù)據(jù)則是建立在可靠連接基礎(chǔ)上的。不過郵件槽有簡(jiǎn)化的編程接口和給指定網(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)核級(jí)別的一種資源,共享內(nèi)存指在多處理器的計(jì)算機(jī)系統(tǒng)中,可以被不同中央處理器(CPU)訪問的大容量?jī)?nèi)存。由于多個(gè)CPU需要快速訪問存儲(chǔ)器,這樣就要對(duì)存儲(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)程對(duì)同一個(gè)共享內(nèi)存訪問,結(jié)果不能預(yù)測(cè)。在同一時(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)程競(jìng)爭(zhēng)lock時(shí),可能會(huì)出現(xiàn)問題。加鎖標(biāo)志位法的缺點(diǎn)在于可能出現(xiàn)針對(duì)共享變量 lock 的競(jìng)爭(zhēng)狀態(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)程號(hào)。



            小結(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í)進(jìn)程位于臨界區(qū)中,這時(shí)有一個(gè)高優(yōu)先級(jí)的進(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_ 閱讀(1385) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Windows程序設(shè)計(jì)
            怡红院日本一道日本久久| 欧美日韩成人精品久久久免费看| 久久久久亚洲av毛片大| 亚洲国产成人久久笫一页| 亚洲乱码中文字幕久久孕妇黑人| 亚洲中文久久精品无码ww16| 色综合久久最新中文字幕| 无码精品久久一区二区三区| 无码人妻久久一区二区三区免费丨| 久久99国内精品自在现线| 久久久久国产一级毛片高清板| 久久亚洲AV无码精品色午夜| 久久久中文字幕| 亚洲欧美伊人久久综合一区二区| 999久久久国产精品| 无码人妻少妇久久中文字幕蜜桃| 国产真实乱对白精彩久久| 久久天天躁狠狠躁夜夜网站| 亚洲人AV永久一区二区三区久久| 狠狠88综合久久久久综合网 | 欧美亚洲国产精品久久蜜芽| 亚洲国产精品综合久久一线| 国产亚洲精午夜久久久久久| 国内精品久久国产大陆| 久久人人爽人人爽人人片AV不| 一本色综合久久| 亚洲午夜精品久久久久久app| 99久久超碰中文字幕伊人| 香蕉久久夜色精品国产尤物| 国内精品久久久久久久久电影网| 久久超乳爆乳中文字幕| 亚洲午夜无码久久久久| 亚洲色欲久久久综合网东京热| 日韩AV毛片精品久久久| 午夜视频久久久久一区| 欧美麻豆久久久久久中文| 四虎久久影院| 久久精品三级视频| 久久播电影网| 香蕉久久夜色精品国产2020| 久久久久99这里有精品10|