欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>嵌入式開發(fā)>linux操作系統(tǒng)下的進(jìn)程通信

linux操作系統(tǒng)下的進(jìn)程通信

2017-10-31 | rar | 0.4 MB | 次下載 | 1積分

資料介紹

linux下的進(jìn)程通信手段基本上是從Unix平臺上的進(jìn)程通信手段繼承而來的。而對Unix發(fā)展做出重大貢獻(xiàn)的兩大主力AT&T的貝爾實驗室及BSD(加州大學(xué)伯克利分校的伯克利軟件發(fā)布中心)在進(jìn)程間通信方面的側(cè)重點有所不同。前者對Unix早期的進(jìn)程間通信手段進(jìn)行了系統(tǒng)的改進(jìn)和擴充,形成了“system V IPC”,通信進(jìn)程局限在單個計算機內(nèi);后者則跳過了該限制,形成了基于套接口(socket)的進(jìn)程間通信機制。Linux則把兩者繼承了下來,如圖示:
  其中,最初Unix IPC包括:管道、FIFO、信號;System V IPC包括:System V消息隊列、System V信號燈、System V共享內(nèi)存區(qū);Posix IPC包括:Posix消息隊列、Posix信號燈、Posix共享內(nèi)存區(qū)。有兩點需要簡單說明一下:
  1)由于Unix版本的多樣性,電子電氣工程協(xié)會(IEEE)開發(fā)了一個獨立的Unix標(biāo)準(zhǔn),這個新的ANSI Unix標(biāo)準(zhǔn)被稱為計算肪車目梢浦殘圓僮饗低辰緱媯≒SOIX)。現(xiàn)有大部分Unix和流行版本都是遵循POSIX標(biāo)準(zhǔn)的,而Linux從一開始就遵循POSIX標(biāo)準(zhǔn);
  2)BSD并不是沒有涉足單機內(nèi)的進(jìn)程間通信(socket本身就可以用于單機內(nèi)的進(jìn)程間通信)。事實上,很多Unix版本的單機IPC留有BSD的痕跡,如4.4BSD支持的匿名內(nèi)存映射、4.3+BSD對可靠信號語義的實現(xiàn)等等。
  linux下進(jìn)程間通信的幾種主要手段簡介:
  1.管道
  管道是進(jìn)程間通信中最古老的方式,它包括無名管道和有名管道兩種,前者可用于具有親緣關(guān)系進(jìn)程間的通信,即可用于父進(jìn)程和子進(jìn)程間的通信,后者額克服了管道沒有名字的限制,因此,除具有前者所具有的功能外,它還允許無親緣關(guān)系進(jìn)程間的通信,即可用于運行于同一臺機器上的任意兩個進(jìn)程間的通信。
  無名管道由pipe()函數(shù)創(chuàng)建:
  #include 《unistd.h》
  int pipe(int fiLEDis);
  參數(shù)filedis返回兩個文件描述符:filedes[0]為讀而打開,filedes為寫而打開。filedes的輸出是filedes[0]的輸入。
  在Linux系統(tǒng)下,有名管道可由兩種方式創(chuàng)建:命令行方式mknod系統(tǒng)調(diào)用和函數(shù)mkfifo。下面的兩種途徑都在當(dāng)前目錄下生成了一個名為myfifo的有名管道:
  方式一:mkfifo(“myfifo”,“rw”);
  方式二:mknod myfifo p
  生成了有名管道后,就可以使用一般的文件I/O函數(shù)如open、close、read、write等來對它進(jìn)行操作。
  2.消息隊列
  消息隊列是消息的鏈接表,包括Posix消息隊列system V消息隊列。消息隊列用于運行于同一臺機器上的進(jìn)程間通信,它和管道很相似,有足夠權(quán)限的進(jìn)程可以向隊列中添加消息,被賦予讀權(quán)限的進(jìn)程則可以讀走隊列中的消息。消息隊列克服了信號承載信息量少,管道只能承載無格式字節(jié)流以及緩沖區(qū)大小受限等缺點。
  我們可以用流管道或者套接口的方式來取代它。
  3.共享內(nèi)存
  共享內(nèi)存是運行在同一臺機器上的進(jìn)程間通信最快的方式,因為數(shù)據(jù)不需要在不同的進(jìn)程間復(fù)制。通常由一個進(jìn)程創(chuàng)建一塊共享內(nèi)存區(qū),其余進(jìn)程對這塊內(nèi)存區(qū)進(jìn)行讀寫。共享內(nèi)存往往與其它通信機制,如信號量結(jié)合使用,來達(dá)到進(jìn)程間的同步及互斥。
  首先要用的函數(shù)是shmget,它獲得一個共享存儲標(biāo)識符。
  #include 《sys/types.h》
  #include 《sys/ipc.h》
  #include 《sys/shm.h》
  int shmget(key_t key, int size, int flag);
  這個函數(shù)有點類似大家熟悉的malloc函數(shù),系統(tǒng)按照請求分配size大小的內(nèi)存用作共享內(nèi)存。linux系統(tǒng)內(nèi)核中每個IPC結(jié)構(gòu)都有的一個非負(fù)整數(shù)的標(biāo)識符,這樣對一個消息隊列發(fā)送消息時只要引用標(biāo)識符就可以了。這個標(biāo)識符是內(nèi)核由IPC結(jié)構(gòu)的關(guān)鍵字得到的,這個關(guān)鍵字,就是上面第一個函數(shù)的key。數(shù)據(jù)類型key_t是在頭文件sys/types.h中定義的,它是一個長整形的數(shù)據(jù)。在我們后面的章節(jié)中,還會碰到這個關(guān)鍵字。
  當(dāng)共享內(nèi)存創(chuàng)建后,其余進(jìn)程可以調(diào)用shmat()將其連接到自身的地址空間中。
  void *shmat(int shmid, void *addr, int flag);
  shmid為shmget函數(shù)返回的共享存儲標(biāo)識符,addr和flag參數(shù)決定了以什么方式來確定連接的地址,函數(shù)的返回值即是該進(jìn)程數(shù)據(jù)段所連接的實際地址,進(jìn)程可以對此進(jìn)程進(jìn)行讀寫操作。
  使用共享存儲來實現(xiàn)進(jìn)程間通信的注意點是對數(shù)據(jù)存取的同步,必須確保當(dāng)一個進(jìn)程去讀取數(shù)據(jù)時,它所想要的數(shù)據(jù)已經(jīng)寫好了。通常,信號量被要來實現(xiàn)對共享存儲數(shù)據(jù)存取的同步,另外,可以通過使用shmctl函數(shù)設(shè)置共享存儲內(nèi)存的某些標(biāo)志位如SHM_LOCK、SHM_UNLOCK等來實現(xiàn)。
  4. 信號量
  信號量又稱為信號燈,它是用來協(xié)調(diào)不同進(jìn)程間的數(shù)據(jù)對象的,而最主要的應(yīng)用是前一節(jié)的共享內(nèi)存方式的進(jìn)程間通信。本質(zhì)上,信號量是一個計數(shù)器,它用來記錄對某個資源(如共享內(nèi)存)的存取狀況。一般說來,為了獲得共享資源,進(jìn)程需要執(zhí)行下列操作:
 ?。?) 測試控制該資源的信號量。
  (2) 若此信號量的值為正,則允許進(jìn)行使用該資源。進(jìn)程將進(jìn)號量減1。
 ?。?) 若此信號量為0,則該資源目前不可用,進(jìn)程進(jìn)入睡眠狀態(tài),直至信號量值大于0,進(jìn)程被喚醒,轉(zhuǎn)入步驟(1)。
 ?。?) 當(dāng)進(jìn)程不再使用一個信號量控制的資源時,信號量值加1。如果此時有進(jìn)程正在睡眠等待此信號量,則喚醒此進(jìn)程。
  維護信號量狀態(tài)的是Linux內(nèi)核操作系統(tǒng)而不是用戶進(jìn)程。我們可以從頭文件/usr/src/linux/include/linux/sem.h中看到內(nèi)核用來維護信號量狀態(tài)的各個結(jié)構(gòu)的定義。信號量是一個數(shù)據(jù)集合,用戶可以單獨使用這一集合的每個元素。要調(diào)用的第一個函數(shù)是semget,用以獲得一個信號量ID。
  #include 《sys/types.h》
  #include 《sys/ipc.h》
  #include 《sys/sem.h》
  int semget(key_t key, int nsems, int flag);
  key是前面講過的IPC結(jié)構(gòu)的關(guān)鍵字,它將來決定是創(chuàng)建新的信號量集合,還是引用一個現(xiàn)有的信號量集合。nsems是該集合中的信號量數(shù)。如果是創(chuàng)建新集合(一般在服務(wù)器中),則必須指定nsems;如果是引用一個現(xiàn)有的信號量集合(一般在客戶機中)則將nsems指定為0。
  semctl函數(shù)用來對信號量進(jìn)行操作。
  int semctl(int semid, int semnum, int cmd, union semun arg);
  不同的操作是通過cmd參數(shù)來實現(xiàn)的,在頭文件sem.h中定義了7種不同的操作,實際編程時可以參照使用。
下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1IP6823 支持 qi 認(rèn)證的無線充電發(fā)射控制 SOC
  2. 1.01 MB  |  1次下載  |  免費
  3. 2IP6824? 全集成QI?無線充電發(fā)射控制SOC
  4. 1.22 MB  |  1次下載  |  免費
  5. 3GD32G5x3 FFT模塊用戶指南
  6. 920.15KB   |  次下載  |  免費
  7. 4GD32H73x/H75x的器件限制
  8. 774.05KB   |  次下載  |  免費
  9. 5PDTA115EU配備PNP電阻的晶體管規(guī)格書
  10. 189.74KB   |  次下載  |  免費
  11. 6帶注入電流控制的1.8V通用SP8T-Z和2個SP4T-Z模擬開關(guān)
  12. 847.62KB   |  次下載  |  免費
  13. 7PESD18VY1BBIF保護二極管規(guī)格書
  14. 4.56MB   |  次下載  |  免費
  15. 8視頻處理器晶振應(yīng)用方案
  16. 515.02 KB  |  次下載  |  免費

本月

  1. 1A7159和A7139射頻芯片的資料免費下載
  2. 0.20 MB   |  55次下載  |  5 積分
  3. 2零死角玩轉(zhuǎn)STM32F103—指南者
  4. 26.78 MB   |  41次下載  |  1 積分
  5. 3PIC12F629/675 數(shù)據(jù)手冊免費下載
  6. 2.38 MB   |  36次下載  |  5 積分
  7. 4PIC16F716 數(shù)據(jù)手冊免費下載
  8. 2.35 MB   |  18次下載  |  5 積分
  9. 5dsPIC33EDV64MC205電機控制開發(fā)板用戶指南
  10. 5.78MB   |  8次下載  |  免費
  11. 6STC15系列常用寄存器匯總免費下載
  12. 1.60 MB   |  7次下載  |  5 積分
  13. 7AN-1267: 使用ADSP-CM408F ADC控制器的電機控制反饋采樣時序
  14. 1.41MB   |  5次下載  |  免費
  15. 8LP9962集成 PFC 和 和的 高壓半橋驅(qū)動的 LLC 諧振
  16. 3.30 MB  |  4次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935124次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計
  4. 1.48MB  |  420063次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233088次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費下載
  8. 340992  |  191367次下載  |  10 積分
  9. 5十天學(xué)會AVR單片機與C語言視頻教程 下載
  10. 158M  |  183335次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81581次下載  |  10 積分
  13. 7Keil工具M(jìn)DK-Arm免費下載
  14. 0.02 MB  |  73813次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65988次下載  |  10 積分