1. 程式人生 > >linux的進程間通信概述

linux的進程間通信概述

父子進程 bsp 互斥 註意 lose 半雙工 隊列 使用方法 mkfifo

一 進程間通信

  1.1. linux內核提供多種進程間通信機制

    a. 無名管道和有名管道

    b. SystemV IPC:信號量、消息隊列、共享內存

    c. Socket域套接字

    d. 信號

  1.2. 無名管道和有名管道

    1.2.1. 管道(無名管道)

      a. 管道通信的原理:內核維護的一塊內存,有讀端和寫端(管道是單向通信的)
      b. 管道通信的方法:父進程創建管理後fork子進程,子進程繼承父進程的管道fd
      c. 管道通信的限制:只能在父子進程間通信、半雙工
      d. 管道通信的函數:pipe、write、read、close

    1.2.2. 有名管道(fifo)
      a. 有名管道的原理:實質也是內核維護的一塊內存,表現形式為一個有名字的文件
      b. 有名管道的使用方法:固定一個文件名,2個進程分別使用mkfifo創建fifo文件,然後分別open打開獲取到fd,然後一個讀一個寫
      c. 管道通信限制:半雙工(註意不限父子進程,任意2個進程都可)
      d. 管道通信的函數:mkfifo、open、write、read、close

  1.3. SystemV IPC介紹

    1.3.1. SystemV IPC的基本特點

      a. 系統通過一些專用API來提供SystemV IPC功能

      b. 分為:信號量、消息隊列、共享內存

      c. 其實質也是內核提供的公共內存

    1.3.2. 消息隊列

      a. 本質上是一個隊列,隊列可以理解為(內核維護的一個)FIFO

    1.3.3. 信號量

      a. 實質就是個計數器(其實就是一個可以用來計數的變量,可以理解為int a)
      b. 通過計數值來提供互斥和同步

    1.3.4. 共享內存

      a. 大片內存直接映射
      b. 類似於LCD顯示時的顯存用法

  

linux的進程間通信概述