程序的同步與通訊

2021-07-02 22:16:20 字數 1957 閱讀 6092

[**於文章,表示十分古老的文章了] (

進入sleep過程後,核心首先儲存進入睡眠時的處理機執行級,再提高處理機的執行優先順序,來遮蔽所有的中斷,接著將該程序置為「睡眠」狀態,將睡眠位址儲存在程序表項中,並將該程序放入睡眠佇列中。如果程序的睡眠是不可中斷的,做了程序上下文的切換後,程序便可安穩地睡眠。當程序被喚醒並被排程執行時,將恢復處理機的執行級為進入睡眠時的值,此時允許中斷處理機。

該過程的主要功能,是喚醒在指定事件佇列上睡眠的所有程序,並將它們放入可被排程的程序佇列中。如果程序尚未被裝入記憶體,應喚醒對換程序; 如果被喚醒程序的優先順序高於當前程序的優先順序,則應重置排程標誌。最後,在恢復處理機的執行級後返回

訊號機制主要作為在同一使用者的諸個程序之間通訊的簡單工具,現在用來對程序進行控制。

訊號本身是乙個1 ~ 19中的某個整數,用來代表某一種事先約定好的簡單訊息。 訊號機制是對硬中斷的一種模擬。訊號機制與中斷機制之間的相似之處表現為:訊號和中斷都同樣採用非同步通訊方式,在檢測出有訊號或有中斷請求時,兩者都是暫停正在執行的程式而轉去執行相應的處理程式,處理完後都再返回到原來的斷點;再有是兩者對訊號或中斷都可加以遮蔽。訊號與中斷兩機制之間的差異是:中斷有優先順序,而訊號機制則沒有,即所有的訊號都是平等的;再者是訊號處理程式是在使用者態下執行的,而中斷處理程式則是在核心態下執行;還有,中斷響應是及時的,而對訊號的響應通常都有較長的時間延遲。

傳送訊號

設定對訊號的處理方式

2.1 遮蔽訊號

2.2 預設終止

2.3 設定訊號處理函式

對訊號的處理以及登出訊號

無名管道 (unnamed pipes)

有名管道 (named pipes)

對 pipe 檔案大小的限制

程序互斥

程序寫管道

程序讀管道

當乙個程序收到由其它多個程序發來的訊息時,可將這些訊息排成乙個訊息佇列,每個訊息佇列有乙個稱為關鍵字key的名稱,它是由使用者指定的。每個訊息佇列還有乙個訊息佇列描述符,其作用與使用者檔案描述符一樣,以方便使用者和系統對訊息佇列的訪問。在乙個系統中可能有若干個訊息佇列, 由所有的訊息佇列的頭標組成乙個頭標陣列

當程序要利用共享儲存區與另一程序進行通訊時,須先利用系統呼叫shmget()建立一塊共享儲存區,並提供該共享儲存區的名字key和共享儲存區以位元組為單位的長度size等引數。若系統中已經建立了指名的共享儲存區,則該系統呼叫將返回該共享儲存區的描述符shmid.若尚未建立,便為程序建立乙個指定大小的共享儲存區

如同訊息機制一樣,可以用hmctl()系統呼叫對共享儲存區的狀態資訊進行查詢,如其長度、所連線的程序數、建立者識別符號等;也可設定或修改其屬性,如共享儲存區的許可權、當前連線的程序計數等;還可用來對共享儲存區加鎖或解鎖,以及修改共享儲存區識別符號等

在程序已經建立了共享儲存區或已獲得了其描述符後,還須利用系統呼叫shmat()將該共享儲存區附接到使用者給定的某個程序的虛位址shmaddr 上,並指定該儲存區的訪問屬性即指明該區是唯讀,還是可讀可寫。此後,此共享儲存區便成為該程序虛位址空間的一部分。程序可採取與對其它虛位址空間一樣的訪問方法來訪問。當程序不再需要該共享儲存區時,再利用系統呼叫shmdt()把該區與程序斷開

在unix系統中規定,每個訊號量有乙個可用來表示某類資源數目的訊號量值和乙個操作值,該操作值可為正整數、零或負整數三種情況之一。傳統的訊號量機構是對訊號量施加wait及signal操作。而在unix系統中則並未採用wait及signal, 而是利用semop()系統呼叫對指定的訊號量施加操作。此外,還可利用semget()來建立訊號量及利用semctl()系統呼叫對訊號量進行操縱

在乙個訊號量集中,通常都包含有若干個訊號量。對這組訊號量的操作方式應當是原子操作方式, 此即,把對這組訊號量視為乙個整體,要麼全做,要麼全不做。如果核心不能完成對這組所有訊號量的操作,則核心應將已經操作過的訊號量恢復到操作前的狀態,這樣便可實現要麼全做、 要麼全不做的原子操作方式

訊號量表。

程序的同步與通訊

同步關係 直接制約 為了完成乙個共同任務,相互協作的幾個程序需要在某些確定點上協調他們的工作,等待來自其它程序的資訊,以調整它們的推進速度,方可順利執行完畢。互斥關係 間接制約 把併發程序間存在的因相互競爭使用獨佔資源 共享資源 而產生的制約關係。例如 印表機,共享記憶體 臨界資源 一次僅允許乙個程...

程序通訊與程序同步

多個程序可以共享系統中的各種資源,但其中許多資源一次只能為乙個程序使用,我們把一次僅允許乙個程序使用的資源稱為臨界資源。許多物理裝置都屬於臨界資源,如印表機等 對臨界資源的訪問必須互斥進行,在每個程序中,訪問臨界資源的那段 稱為臨界區。程序通訊與同步的目的主要有下面 1 資料傳輸 乙個程序需要將他的...

程序的同步與通訊2

二 讀者寫者問題 個資料檔案或記錄可被多個程序共享,我們把只要求讀該檔案的程序稱為 reader 程序 其他程序則稱為 writer程序 允許多個程序同時讀乙個共享物件,因為讀操 作不會使資料檔案混亂。但不允許乙個writer程序和其他reader程序或writer程序同時訪 問共享物件。因為這種訪...