當前位置:首頁 » 服務存儲 » 共享存儲區管道
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

共享存儲區管道

發布時間: 2022-08-20 04:57:47

Ⅰ 怎麼理解進程間的通信啊怎麼理解管道啊

進程協同工作時,需要互相交換信息,有些情況下進程間交換的少量信息,有些情況下進程間交換大批數據。進程通信即為兩個並行進程可以通過互相發送消息進行合作,消息是通過消息緩沖而在進程之間相互傳遞的。 如進程同步是一種進程通信,通過修改信號量,進程之間可建立起聯系,相互協調運行和協同工作;

進程間通信的方式有:信號通信機制; 共享存儲區通信機制;共享文件通信機制;消息傳遞通信機制.

管道是連接讀寫進程的一個特殊文件,允許進程按先進先出方式傳送數據,也能使進程同步執行操作。發送進程以字元流形式把大量數據送入管道,接收進程從管道中接收數據,所以叫管道通信.

管道的實質是一個共享文件,基本上可藉助於文件系統的機制實現,包括(管道)文件的創建、打開、關閉和讀寫.進程對通信機構的使用應該互斥,一個進程正在使用某個管道寫入或讀出數據時,另一個進程就必須等待.發送者和接收者雙方必須能夠知道對方是否存在,如果對方已經不存在,就沒有必要再發送信息.管道長度有限,發送信息和接收信息之間要實現正確的同步關系,當寫進程把一定數量的數據寫入管道,就去睡眠等待,直到讀進程取走數據後,把它喚醒。

Ⅱ 共享內存是什麼意思

共享內存也說顯卡顯存,指在多處理器的計算機系統中,可以被不同中央CPU訪問的大容量內存。由於多個CPU需要快速訪問存儲器,這樣就要對存儲器進行緩存。任何一個緩存的數據被更新後,由於其他處理器也可能要存取,共享內存就需要立即更新,否則不同的處理器可能用到不同的數據。共享內存是Unix下的多進程之間的通信方法,這種方法通常用於一個程序的多進程間通信,實際上多個程序間也可以通過共享內存來傳遞信息。

Ⅲ 分布式進程通信的概念

進程和進程通信是操作系統中的一個最基本的概念;
程序是一個在時間上按照嚴格次序的前後相繼的操作序列,是一個靜態的概念;
進程是一個動態的概念,它是一個程序對某個數據集的執行過程;
正在運行的進程叫做運行態;
等待分配CPU的進程叫做就緒態;
等待其它的條件的進程叫做等待態;
進程狀態反映出進程執行過程的變化;
要保證系統正常地工作,操作系統必須對進程的創建、撤消與狀態轉換進行控制;
從進程的觀點看,操作系統的核心則是控制和協調這些進程的運行,解決進程之間的通信。
在解決單機環境下操作系統的進程通信中:
BSD UNIX 引入了管道(pipe)、命名管道(named pipe)和軟中斷信號(signal)機制;
AT&T UNIX引入了消息(message)、共享存儲區(shared memory)和信號量(semaphore)等;
UNIX系統的消息、共享存儲區和信號量統稱為進程通信(inter process communication,IPC)機制;
IPC機制也不適應於網路環境中的進程通信。

Ⅳ 求教:管道通信、消息緩沖隊列和共享存儲區,這三種通信機制那些提供了發送進程和接收進程之間的同步功能

同學,你是郭衛斌的學生吧

Ⅳ UNXI作業

1. UNIX系統有哪些基本特徵?
a. 開放性; b. 多用戶,多任務環境; c. 功能強大,實現高效; d. 提供了豐富的網路功能.
2. UNIX系統核心分成哪兩大部分?各包含哪些功能?
a. UNIX系統核心分為進程式控制制子系統部分和文件子系統部分;
b. 進程式控制制子系統包含進程式控制制,進程通信,存貯器管理和進程調度功能;文件子系統包含文件管理,高速緩沖機制和設備驅動程序的功能.
3. UNIX系統中的PCB含哪幾部分?並用圖來說明它們之間的關系.
a. UNIX系統中的PCB含四部分:進程表項,U區,進程區表和系統區表項;
4. 進程映象含哪幾部分?其中系統級上下文的動態部分的作用是什麼?
a. 進程映象(Process Image)包含三部分:用戶級上下文,寄存器上下文和系統級上下文;
b. 系統級上下文的動態部分包含核心棧和若干層寄存器上下文,它的作用是當因中斷或系統調用而進入核心態時,核心把一個寄存器上下文壓入核心棧,退出系統調用時,核心又將彈出一個寄存器上下文,在進行上下文切換時,核心將壓入老進程的上下文層,而彈出新進程的上下文層.
5. 在UNIX系統中,用於進程式控制制的系統調用有哪些(主要的)?它們的主要功能是什麼?
a. fork,用於創建一個新進程;
b. exec,改變進程的原有代碼;
c. exit,實現進程的自我終止;
d. wait,將調用進程掛起,等待子進程終止;
e. getpid,獲取進程標志符;
f. nice,改變進程的優先順序.
6. 為創建一個新進程,需做哪些工作?
a. 為新進程分配一進程表項和進程標志符; b. 檢查同時運行的進程數目;
c. 拷貝進程表項中的數據; d. 子進程繼承父進程的所有文件;
e. 為子進程創建進程上下文; f. 子進程執行.
7. 為何要採取進程自我終止方式?如何實現exit?
a. 為了及時回收進程所佔用的資源,並減少父進程的干預,UNIX系統利用exit來實現進程的自我終止;
b. 實現exit,核心應該做的工作是:關閉軟中斷; 回收資源; 寫記帳信息; 置進程為"僵死狀態".
8. UNIX系統採用什麼樣的進程調度演算法?其優先順序是如何計算的?
a. UNIX系統採用的是多級反饋隊列輪轉調度演算法;
b. 每隔1秒,核心按如下公式重新計算用戶優先數:優先數=(最近使用CPU的時間/2)+基本用戶優先數.
9. 試說明信號與中斷兩種機制間的異同處?
a. 相似處:信號和中斷都採用了相同的非同步通信方式;
當檢測出有信號或中斷請求時,都是暫停正在執行的程序而轉去執行相應的處理程序;兩者都是在處理完畢後返回到原來的斷點;對信號或中斷都可進行屏蔽;
b. 差異處:中斷有優先順序,而信號沒有優先順序,即所有信號都是平等的;
信號處理程序是在用戶態下運行的,而中斷處理程序則是在核心態下運行的;
中斷響應是及時的,而信號響應通常都有較大的時間延遲.
10 扼要說明信號機制中信號的發送和對信號的處理功能?
a. 信號的發送是指由發送進程把信號送到指定進程的信號域的某一位上;
b. 對於對信號的處理功能:首先,-利用系統調用signal(sig,func)預置對信號的處理方式,func=1時,該類信號被屏蔽;-func=0時,進程收到信號後終止自己;-func為非0,非1類整數時,func的值即作為信號處理程序的指針.
然後,--如果進程收到的軟中斷是一個已決定要忽略的信號(func=1),進程不作任何處理返回,-進程收到軟中斷後便退出(func=0);-執行用於設置的軟中斷處理程序.
11 什麼是管道?無名管道和有名管道的主要差別是什麼?
a. 管道是指能夠連接一個寫進程和一個讀進程的,並允許它們以生產者-消費者方式進行通信的一個共享文件,又稱為pipe文件;
b. 無名管道是一個臨時文件,是利用系統調用pipe()建立起來的無名文件,沒有路徑名,只有調用pipe的進程及其子孫進程才能識別此文件描述符而利用該文件(管道)進行通信;有名管道是利用mknod系統調用建立的,是可以在文件系統中長期存在的,既有路徑名的文件,其它進程可以知道其存在,並利用該路徑名來訪問該文件.
12 讀,寫管道時應遵循哪些規則?
a. 對pipe文件大小的限制; b. 進程互斥;
c. 進程寫管道時,檢查是否有足夠的空間存放要寫的數據,若有,則寫入,若無,則由核心對該索引結點做出標志,然後讓寫進程睡眠等待,直到讀進程讀走數據後,再將寫等待進程喚醒;
d. 進程讀管道時,檢查是否有足夠的要讀的數據,若有,則進程從讀指針的初始值處去讀數據,每讀出一塊後,便增加地址項的大小,讀結束後由核心修改索引結點中的讀指針,並喚醒所有等待的寫進程,若無,則在讀完後,進程暫時進入睡眠等待,直到寫進程又將數據寫入管道後,再將讀進程喚醒.
13 在消息機制中,有哪些系統調用?並說明它們的用途.
在UNIX中,消息機制向用戶提供了四個系統調用:
a. msgget(),用來建立一消息隊列,或者獲取一消息隊列的描述符;
b. msgsnd(),用於向指定的消息隊列發送一個消息,並將該消息鏈接到該消息隊列的尾部;
c. msgrcv(),用於從指定的消息隊列中接收指定類型的消息;
d. msgctl(),用來讀取消息隊列的狀態信息並進行修改.
14 在共享存儲區機制中,有哪些系統調用?並扼要說明它們的用途.
a. shmget(),建立一共享存儲區;
b. shmat(),將共享存儲區附接到進程的虛地址空間上;
c. shmdt(),把共享存儲區與新進程斷開;
d. shmct(),對共享存儲區的狀態信息進行讀取和修改,也可以斷開進程與共享存儲區的連接.
15 核心在執行shmget系統調用時,需完成哪些工作?
a. 首先檢查共享存儲區表,若找到指定key的表項,表明該共享區已經建立,此時返回該表項的描述符shmid;
b. 若未找到指定的key表項,而flag標志又為IPC_CREAT,且參數size值在系統限制值內,則分配一系統空閑區作為共享區的頁表區,分配響應的內存塊,再將這些塊號填入頁表中;
c. 核心在共享存儲區和系統區表中,為新建立的共享區分配一空表項,並在共享存儲區表填上存儲區的關鍵字及其大小,共享區頁表的始址,指向系統區表項的指針等,最後返回共享存儲區的描述符---shmid.
16 在信號量集機制中,有哪些系統調用?並說明它們的用途.
a. semget(),建立信號量集; b. semop(),對信號量進行操作.
17 核心是如何對信號量進行操縱的?
a. 核心根據sem_op來改變信號量的值,可分為3種情況;
b. sem_op的值為正,則將其值加到信號量的值上,它相當於通常的V操作;
c. sem_op的值為負,相當於P操作,若信號量的值大於操作值的絕對值,則核心將一個負整數加到信號量值上,否則,核心將已經操作了的信號量,恢復到系統調用開始時的值;
d. 若(sem_flg&IPC_NOWAIT)為真,便立即返回,否則,讓進程睡眠等待.
18 為實現請求調頁管理,在UNIX系統中,配置了哪些數據結構?
a. 頁表; b. 磁碟塊描述表; c. 頁框數據表; d. 對換使用表.
19 在UNIX系統中,如何改變有效頁的年齡?並用實例說明之.
a. 一個頁可計數的最大年齡,取決於它的硬體設施;
b. 對於只設置兩位作為年齡域時,其有效頁的年齡只能取值為0,1,2,3,當該頁的年齡為0,1,2時,該頁處於不可換出狀態,而當其年齡達到3時,則可為換出狀態,每當內存中的空閑頁面數低於某規定的低限時,核心便喚醒換頁進程,又換頁進程取檢查內存中的每一個活動的,非上鎖的區,對所有有效區的
年齡欄位加1,對於那些年齡已增至3的頁便不再加1,而是將它們換出,如果這種頁已被進程訪問過,便將年齡域中的年齡降為0.
20 當需訪問的缺頁是在可執行文件上或在對換設備上時,應如何將它調入內存?
核心先為缺頁分配一內存頁,修改該頁表項,使之指向內存頁,並將頁面數據表項放入相應的散列隊列中,然後把該頁從對換設備上調入內存,當I/O操作完成時,核心把請求調入該頁的進程喚醒.
21 在將一頁換出時,可分為哪幾種情況?應如何處理這些情況?
a. 若在對換設備上已有被換出頁的拷貝,且被換出頁的內容未被修改,則此時核心不必將該頁重寫回對換設備上,而只需將該頁的頁表項中的有效位清零,並將頁框數據表項中的引用計數減1,最後將該頁表項放入空閑頁鏈表中;
b. 若在對換設備上沒有被換出的拷貝,則換出進程應將該頁寫到對換設備上,可採用頁面鏈集中寫入;
c. 在對換設備上已有換出頁的副本,但該頁內容已被修改過,此時核心將該頁在對換設備上的原有空間
釋放,再重新將該頁拷貝到對換設備上,使在對換設備上的拷貝內容總是最新的.

Ⅵ linux 管道原理

Linux原理的學習,我打算由淺入深,從上之下,也就是先了解個大概再逐個深入。先了解一下Linux的進程先。

一、Linux進程上下文

Linux進程上下文,我理解就是進程組成元素的集合。包括進程描述符tast_struct,正文段,數據段,棧,寄存器內容,頁表等。

1)tast_struct

它是一種數據結構,存儲著進程的描述信息,例如pid,uid,狀態,信號項,打開文件表等。是進程管理和調度的重要依據。

2)用戶棧和核心棧

顧名思義,用戶棧是進程運行在用戶態使用的棧,含有用戶態執行時候函數調用的參數,局部變數等;核心棧是該進程運行在核心態下用的棧,保存調用系統函數所用的參數和調用序列。這兩個棧的指針都保存在tast_struct結構中。

3)寄存器

保存程序計數器,狀態字,通用寄存器,棧指針。

4)頁表

線性地址到物理地址的映射

5)正文段,數據段。

二、Linux進程的狀態

Linux中進程共有5個狀態:就緒,可中斷睡眠,不可中斷睡眠,暫停,僵死。也就是說,linux不區分就緒和運行,它們統一叫做就緒態。進程所處的狀態記錄在tast_struct中。

三、進程的控制

1)進程樹的形成

計算機啟動後,BIOS從磁碟引導扇區載入系統引導程序,它將Linux系統裝入內存,並跳到內核處執行,Linux內核就執行初始化工作:初始化硬體、初始化內部數據結構、建立進程0。進程0創建進程1,進程1是以後所有創建的進程的祖先,它負責初始化所有的用戶進程。進程1創建shell進程,shell進程顯示提示符,等待命令的輸入。

2)進程的創建

任何一個用戶進程的創建都是由現有的一個進程完成的,進程的創建要經過fork和exec兩個過程。Fork是為新進程分配相應的數據結構,並將父進程的相應上下文信息復制過來。Exec是將可執行文件的正文和數據轉入內存覆蓋它原來的(從父進程復制過來的),並開始執行正文段。

3)進程的終止

系統調用exit()就可自我終結,exit釋放除了tast_struct以外的所有上下文,父進程收到子進程終結的消息後,釋放子進程的tast_struct。

4)進程的調度

進程的調度是由schele()完成的,一種情況是,當處理機從核心態向用戶態轉換之前,它會檢查調度標志是否為1,如果是1,則運行schele(),執行進程的調度。另一種情況是進程自動放棄處理機,時候進行進程調度。

進程的調度過程分為兩步,首先利用相關策略選擇要執行的進程,然後進行上下文的切換。

四、進程的通信

進程的通信策略主要有,消息,管道,消息隊列,共享存儲區和信號量。

1)信息

消息機制主要是用來傳遞進程間的軟中斷信號,通知對方發生了非同步事件。發送進程將信號(約定好的符號)發送到目標進程的tast_struct中的信號項,接收進程看到有消息後就調用相應的處理程序,注意,處理程序必須到進程執行時候才能執行,不能立即響應。

2)管道

我理解就是兩個進程使用告訴緩沖區中的一個隊列(每兩個進程一個),發送進程將數據發送到管道入口,接收進程從管道出口讀數據。

3) 消息隊列

消息隊列是操作系統維護的一個個消息鏈表,發送進程根據消息標識符將消息添加到制定隊列中,接收進程從中讀取消息。

4)共享存儲區

在內存中開辟一個區域,是個進程共享的,也就是說進程可以把它附加到自己的地址空間中,對此區域中的數據進行操作。

5)信號量

控制進程的同步。

Ⅶ 如何利用管道機制,共享存儲區機制進行進程間的通信

# 管道( pipe ):管道是一種半雙工的通信方式,數據只能單向流動,而且只能在具有親緣關系的進程間使用。進程的親緣關系通常是指父子進程關系。 # 有名管道 (named pipe) : 有名管道也是半雙工的通信方式,但是它允許無親緣關系進程間的通信。

Ⅷ 消息通信,共享存儲區,管道通信各有什麼特點

隊列通信中的消息有明顯的生命周期,消息有傳遞的過程,有通知的過程,消息有失效性,有先後關系。
而共享內存沒有上面這些特點。共享內存在使用時要解決互斥的問題。

Ⅸ 共享內存和消息隊列,FIFO,管道傳遞消息的區別

消息隊列:用於消息,不是簡單的數據信息傳遞,消息隊列還包括消息有優先順序、消息到達通知等豐富內容。

信號機制:進程間事件通知的場合使用,比如進程A完成了某業務,通知進程B去干什麼,達到了溝通的目的。當然僅僅傳遞了信號沒有豐富的信息傳遞,不過現在傳遞信號也可附帶數據了。

管道:低級的通信機制,消息隊列比管道高級多了,管道分PIPE和FIFO,PIPE是無名的,所以只能在進程內或父子進程間通信,FIFO可任何兩個進程間通信了。不過這兩個依然比較低級,完成高級的應用伺服器還需要消息隊列等。

擴充:
早期unix只有PIPE、FIFO、信號,後來開發了消息隊列、信號量、共享內存。

Ⅹ 共享存儲區通信有哪些優點使用上有哪些限制

共享存儲區通信的優點有:常用的集中式多處理機使用的通信機制兼容。

限制有:是針對其他通信機制運行效率較低而設計的。往往與其它通信機制,如信號量結合使用,來達到進程間的同步及互斥。

共享存儲是指兩個或多個處理機共用一個主存儲器的並行體系結構。每一個處理機都可以把信息存入主存儲器,或從中取出信息。處理機之間的通信通過訪問共享存儲器來實現。

系統結構

1、無高速緩沖存儲器的集中式

這種結構的處理機沒有高速緩沖存儲器,多個處理機通過交叉開關或多級互聯網路等直接訪問共享存儲器。由於任一存儲單元在系統中只有一個備份,這類系統不存在高速緩沖存儲器一致性問題,系統的可伸縮性受限於交叉開關或多級互聯網路的帶寬。

2、基於高速緩沖存儲器的集中式

在這種結構的系統中,每個處理機都有高速緩沖存儲器,多個處理機一般通過匯流排與存儲器相連。每個處理機的高速緩沖存儲器通過偵聽匯流排來維持數據一致性。

3、具有高速緩沖存儲器一致性的分布式

這種結構稱為高速緩沖存儲器一致的非均勻存儲訪問結構。這類系統的共享存儲器分布於符結點之間。結點之間通過可伸縮性好的互聯網路相連,每個處理機都能緩存共享單元,高速緩沖存儲器一致性的維護是這類系統的關鍵,決定著系統的可伸縮性。

4、唯高速緩沖存儲器的分布式

在這種結構中,每個結點的存儲器相當於一個大容量的高速緩沖存儲器,數據一致性也在這一級維護。這種系統的共享存儲器的地址是活動的。存儲單元與物理地址分離,數據可以根據訪存模式動態地在各結點的存儲器間移動和復制。

5、無高速緩沖存儲器一致性的分布式

這種結構稱為無高速緩沖存儲器一致性的非均勻存儲訪問結構。它的特點是雖然每個處理機都有高速緩沖存儲器,但硬體不負責維護高速緩沖存儲器一致性,而由編譯器或程序員來維護。