Linux中管道的運行原理,查看電腦管道的容量__Linux

來源:互聯網
上載者:User
什麼是管道

管道是Linux 支援的最初Unix IPC形式之一,具有以下特點:

管道是半雙工的,資料只能向一個方向流動; 需要雙方通訊時,需要建立起兩個管道; 只能用於父子進程或者兄弟進程之間(具有親緣關係的進程); 單獨構成一種獨立的檔案系統:管道對於管道兩端的進程而言,就是一個檔案,但它不是普通的檔案,它不屬於某種檔案系統,而是自立門戶,單獨構成一種檔案系統,並且只存在於記憶體中。 資料的讀出和寫入:一個進程向管道中寫的內容被管道另一端的進程讀出。寫入的內容每次都添加在管道緩衝區的末尾,並且每次都是從緩衝區的頭部讀出資料。

 

在Linux中,管道是一種使用非常頻繁的通訊機制。從本質上說,管道也是一種檔案,但它又和一般的檔案有所不同,管道可以克服使用檔案進行通訊的兩個問題,具體表現為:

限制管道的大小。實際上,管道是一個固定大小的緩衝區。在Linux中,該緩衝區的大小為1頁,即4K位元組,使得它的大小不象檔案那樣不加檢驗地增長。使用單個固定緩衝區也會帶來問題,比如在寫管道時可能變滿,當這種情況發生時,隨後對管道的write()調用將預設地被阻塞,等待某些資料被讀取,以便騰出足夠的空間供write()調用寫。

讀取進程也可能工作得比寫進程快。當所有當前進程資料已被讀取時,管道變空。當這種情況發生時,一個隨後的read()調用將預設地被阻塞,等待某些資料被寫入,這解決了read()調用返迴文件結束的問題。

注意:從管道讀資料是一次性操作,資料一旦被讀,它就從管道中被拋棄,釋放空間以便寫更多的資料。

 

實現機制:

管道是由核心管理的一個緩衝區,相當於我們放入記憶體中的一個紙條。管道的一端串連一個進程的輸出。這個進程會向管道中放入資訊。管道的另一端串連一個進程的輸入,這個進程取出被放入管道的資訊。一個緩衝區不需要很大,它被設計成為環形的資料結構,以便管道可以被迴圈利用。當管道中沒有資訊的話,從管道中讀取的進程會等待,直到另一端的進程放入資訊。當管道被放滿資訊的時候,嘗試放入資訊的進程會等待,直到另一端的進程取出資訊。當兩個進程都終結的時候,管道也自動消失。

 

從原理上,管道利用fork機制建立,從而讓兩個進程可以串連到同一個PIPE上。最開始的時候,上面的兩個箭頭都串連在同一個進程process1上(串連在process1上的兩個箭頭)。當fork複製進程的時候,會將這兩個串連也複製到新的進程(process2)。隨後,每個進程關閉自己不需要的一個串連 (兩個黃色的箭頭被關閉; process1關閉從PIPE來的輸入串連,process2關閉輸出到PIPE的串連),這樣,剩下的黑色串連就構成了如上圖的PIPE。

 

實現細節:

在 Linux 中,管道的實現並沒有使用專門的資料結構,而是藉助了檔案系統的file結構和VFS的索引節點inode。通過將兩個 file 結構指向同一個臨時的 VFS 索引節點,而這個 VFS 索引節點又指向一個物理頁面而實現的。如下圖

 

有兩個 file 資料結構,但它們定義檔案操作常式地址是不同的,其中一個是向管道中寫入資料的常式地址,而另一個是從管道中讀出資料的常式地址。這樣,使用者程式的系統調用仍然是通常的檔案操作,而核心卻利用這種抽象機制實現了管道這一特殊操作。

 

判斷當前電腦管道的容量

讀端不讀,寫端一直寫


 

 

 

https://www.ibm.com/developerworks/cn/linux/l-ipc/part1/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.