二.程序同步與互斥關係
四.軟體和硬體同步方法
五.訊號量機制
六.linux中的訊號量
多個程序(執行緒)在執行次序上的協調關係的機制稱為程序同步機制。
由於作業系統中的程序是併發的,因此當協同程序對共享資料進行訪問時,可能會造成資料的不一致性問題。為了保證資料的一致性,那麼我們就需要一種有效地機制,這就是被我們稱之為的程序同步機制。
臨界資源是指一次僅允許乙個程序(執行緒)使用的資源,比如某個變數i(邏輯資源),印表機(物理資源)等等。
臨界區是指併發執行的程序中,訪問臨界資源必須互斥執行的程式段。
多個併發程序(執行緒)協同完成一項任務時,由於資料交換需要而在程序(執行緒)執行次序上的約束關係,交同步關係。比如「司機和售票員」問題描述的就是同步關係。
併發程序(執行緒)間為競爭統一資源而間接發生的相互制約關係,叫互斥關係。比如兩個程序同時需要完成列印任務,描述的就是互斥關係。
當沒有程序在臨界區時,它處於空閒狀態,任何請求臨界資源的程序都可以進入臨界區。
當已有程序正在訪問臨近區時,其他任何程序都必須等待,以保證互斥地訪問臨界資源。
程序必須在有限的時間內進入臨界區,避免長時間處在「飢餓」狀態。
當程序不能進入自己的臨界區時,應立即釋放cpu資源,以免程序陷入忙等狀態。
這種方法雖然會對臨界資源是否正在被訪問進行判斷,但是兩個程序有可能同時進入臨界區。
總結來說訊號量機制就是一種程序同步的工具。
整型訊號量被定義為乙個用於表示資源數目的整型量s,它只能被兩個標準的原語wait(s)和signal(s)來訪問,分別被稱為為「p」操作和「v「操作,它們中的操作都是原子操作。它的偽**如下:
void
wait
(s)void
signal
(s)
它的偽**如下:
void
wait
(semaphore s)
void
signal
(semaphore s)
typedef
struct
semaphore;
當乙個程序需要同時獲取多個資源時,就需要用到and型訊號量了
void
swait
(s1, s2,..
., sn)
void
ssignal
(s1, s2,..
., sn)
4.訊號量集
當一次需要n中資源且資源si申請di個資源,該類資源的可用數低於某個下限值ti時不予分配,這樣就需要對and型訊號量機制加以擴充,形成訊號量集機制:
linux中的訊號量使用時需要匯入semaphore.h標頭檔案
sem_t i;
int sem_init(sem_t *sem, int pshared, unsigned int value)
sem_wait(sem_t *sem);
sem_post(sem_t *sem);
sem_destroy(sem_t *sem);
作業系統 程序同步機制相關解釋
先介紹幾個概念 臨界資源 各程序採取互斥的方式,實現共享的資源稱作臨界資源。屬於臨界資源的硬體有印表機 磁帶機等,軟體有訊息緩衝佇列 變數 陣列 緩衝區等。諸程序間應採取互斥方式,實現對這種資源的共享。臨界區 不論是硬體臨界資源還是軟體臨界資源,多個程序必須互斥的對他進行訪問。人們把每個程序中訪問臨...
作業系統之程序間通訊與同步機制是什麼?
無名管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。高階管道 popen 將另乙個程式當做乙個新的程序在當前程式程序中啟動,則它算是當前程式的子程序,這種方式我們成為高階管道方式。命名管道 named pipe 有...
作業系統學習 同步機制(十)
訊號量 semaphore 是乙個整數,包含兩個操作p 和v 其中p 操作導致sem 1,如果sem 0執行緒等待,否則繼續。v 操作導致sem 1,如果sem 0,喚醒乙個等待的執行緒。訊號量是被保護的變數 訊號量的型別 訊號量的實現 可重複使用的資源 使用資源 死鎖產生的條件 死鎖可能出現如果四...