《Unix網絡編程》卷2 讀書筆記 第1章-簡介

1. 概述

2. 進程、線程與信息共享

Unix進程間的信息共享有多種方式:注意下圖中內核的位置
   web

  • 左邊的兩個進程共享存留於文件系統中某個文件上的某些信息。爲訪問這些信息,每一個進程都得穿越內核。
  • 中間的兩個進程共享存留於內核中的某些信息。管道、System V消息隊列和System V信號量都是這種共享類型。
  • 右邊的兩個進程有一個雙方都能訪問的共享內存區。每一個進程一旦設置好該共享內存區,就能根本不涉及內核而訪問其中的數據。
  • 注意:以上的IPC技術能夠做用於任意數目的進程

線程

  • 多個進程間的IPC、單個進程中多個線程的IPC
  • 從IPC角度來看,一個給定進程內的全部線程共享共享的全局變量(也就是說共享內存區的概念對這種模型來講是內置的)。
  • 然而咱們必須關注的是各個線程間對全局數據的同步訪問。
  • 同步儘管不是一種明確的IPC形式,但它確實伴隨許多形式的IPC使用,以控制對某些共享數據的訪問。

3. IPC對象的持續性

  • 下圖展現了三種類型的持續性:決定了IPC對象存在時間的長短
  • 一、隨進程持續的IPC對象一直存在到打開該對象的最後一個進程關閉該對象爲止。如管道、FIFO
  • 二、隨內核持續的IPC對象一直存在到內核從新自舉或顯式刪除該對象爲止。如System V的消息隊列、信號量和共享內存區。Posix的消息隊列、信號量和共享內存區則必須至少是隨內核持續的,但也能夠是隨文件系統持續的,取決於實現。
  • 三、隨文件系統持續的IPC對象一直存在到顯式刪除該對象爲止。即便內核從新自舉了,該對象仍是保持其值。Posix消息隊列、信號量和共享內存區若是是使用映射文件實現的,那麼它們就是隨文件系統持續的。

    多數形式的IPC並無在系統從新自舉後繼續存在的打算,由於進程不可能跨越從新自舉繼續存活。另外,要求它具有隨文件系統的持續性可能會下降其性能,而IPC的一個基本設計目標就是高性能。服務器

  

4. 名字空間

  • 當兩個或多個無親緣關係的進程使用某種類型的IPC對象來彼此交換信息時,該IPC對象必須有一個某種形式的名字或標識符。這樣,其中一個進程(每每是服務器)能夠建立該IPC對象,其餘進程則能夠指定同一個IPC對象。
  • 管道沒有名字(故不能用於無親緣關係的進程間)。
  • FIFO有一個在文件系統中的Unix路徑名做爲其標識符(故可用於無親緣關係的進程間)。
  • 對於一種給定的IPC類型,其可能的名字的集合稱爲它的名字空間。名字空間很是重要,對於除普通管道之外的全部形式的IPC來講,名字是客戶與服務器彼此鏈接以交換消息的手段。性能

  • 下圖彙總了不一樣形式的IPC所用的命名約定
    spa

5. fork、exec、exit對IPC對象的影響

  

  • 一、考慮到無名同步變量(互斥鎖、條件變量、讀寫鎖、Posix基於內存的信號量),從一個具備多個線程的進程中調用fork將變得混亂不堪。
  • 二、System V IPC的三種形式沒有打開或關閉的說法。訪問這三種形式的IPC對象只須要知道其標識符,所以知道該標識符的任何進程都能訪問它們。

6. 書中IPC例子索引表

  • 文件服務器:客服-服務器應用程序,客戶向服務器發送一個路徑名,服務器把該文件的內容返回給客戶
    線程

  • 生產者-消費者:一個或多個線程或進程(生產者)把數據放到一個共享緩衝區中,另有一個或多個線程或進程(消費者)對該共享緩衝區中的數據進行操做。
    設計

  • 序列號持續增1:一個或多個線程或進程給一個共享的序列號持續增1。該序列號有時在一個共享文件中,有時在共享內存中。

7. 小結

  • 4個主要領域:
    1. 消息傳遞:管道、FIFO、消息隊列
    2. 同步:互斥鎖、條件變量、讀寫鎖、信號量
    3. 共享內存區:匿名共享內存區、有名共享內存區
    4. 過程調用:Solaris門、Sun RPC
相關文章
相關標籤/搜索