程序狀態的切換
程序排程演算法
2.互動式系統
3.實時系統
程序同步
管程經典同步問題
程序通訊
不同的環境排程演算法不同,因此需要針對不同的環境來討論排程演算法。
批處理系統沒有太多的使用者操作,在該系統中,排程演算法目標是保證吞吐量和周轉時間(提交到終止)。
互動系統有大量的使用者互動操作,在該系統中排程演算法的目標時快速的響應。
//entry section
//critical section
//exit section
typedef int semaphore;
semaphore mutex = 1;
void p1()
void p2()
使用訊號量實現生產者-消費者問題
問題描述:使用乙個緩衝區來儲存物品,只有緩衝區沒有滿,生產者才可以放入物品;只有緩衝區不為空,消費者才可以拿走物品。
因為緩衝區屬於臨界資源,因此需要使用乙個互斥量 mutex 來控制對緩衝區的互斥訪問。
為了同步生產者和消費者的行為,需要記錄緩衝區中物品的數量。數量可以使用訊號量來進行統計,這裡需要使用兩個訊號量:empty 記錄空緩衝區的數量,full 記錄滿緩衝區的數量。其中,empty 訊號量是在生產者程序中使用,當 empty 不為 0 時,生產者才可以放入物品;full 訊號量是在消費者程序中使用,當 full 訊號量不為 0 時,消費者才可以取走物品。
注意,不能先對緩衝區進行加鎖,再測試訊號量。也就是說,不能先執行 down(mutex) 再執行 down(empty)。如果這麼做了,那麼可能會出現這種情況:生產者對緩衝區加鎖後,執行down(empty) 操作,發現 empty = 0,此時生產者睡眠。消費者不能進入臨界區,因為生產者對緩衝區加鎖了,消費者就無法執行 up(empty) 操作,empty 永遠都為 0,導致生產者永遠等下,不會釋放鎖,消費者因此也會永遠等待下去。
#define n 100
typedef int semaphore;
semaphore mutex = 1;
semaphore empty = n;
semaphore full = 0;
void producer()
}void consumer()
}
允許多個程序同時對資料進行讀操作,但是不允許讀和寫以及寫和寫操作同時發生。
乙個整型變數 count 記錄在對資料進行讀操作的程序數量,乙個互斥量 count_mutex 用於對 count 加鎖,乙個互斥量data_mutex 用於對讀寫的資料加鎖。
typedef int semaphore
semaphore count_mutex = 1;
semaphore data_mutex = 1;
int count = 0;
void reader()
}void writer()
}
程序同步與程序通訊很容易混淆,區別如下:
管道是通過呼叫pipe()函式建立的,fd[0]用於讀,fd[1]用於寫。
#includeint pipe(int fd[2]);
它有以下限制:
也稱命名管道,去除了管道只能在父子程序中使用的限制。
#include int mkfifo(const char *path, mode_t mode);
int mkfifoat(int fd, const char *path, mode_t mode);
fifo常用於客戶-伺服器應用程式中,fifo用作匯聚點,在客戶程序和伺服器程序之間傳遞資料。
相比於fifo,訊息佇列具有以下特點:
它是乙個計數器,用於多程序對共享資料物件的同步互斥訪問。
允許多個程序共享乙個給定的儲存區。因為資料不需要再程序之間複製,所以這是最快的一種ipc。
需要使用訊號量用來同步對共享儲存的訪問。
多個程序可以將同乙個檔案對映到它們的位址空間從而實現共享記憶體。另外xsi共享記憶體不是使用檔案,而是使用記憶體的匿名段。
與其他通訊機制不同的是,它可用於再不同機器之間的程序通訊。
計算機考研 作業系統之 計算機系統概述
1.作業系統的概念 基本特徵和功能,並行性與併發性。2.作業系統提供的介面,命令介面和程式介面。3.使用者態和核心態,中斷和異常,系統呼叫。1.作業系統的概念 作業系統是指控制和管理整個計算機軟體與硬體資源,合理地組織 排程計算機的工作與資源的分配,進而為使用者和其他軟體提供方便介面和環境的程式集合...
計算機與作業系統 程序
作業系統中最核心的概念是程序,程序是對正在進行的程式的抽象。因為有了程序這個概念的存在,才讓cpu有了 偽 併發操作的能力。在任何多道程式設計系統中,cpu在多個程序中不斷的切換,每個程序執行幾十至幾百毫秒。嚴格來說,在某乙個瞬間,cpu只能執行乙個程序,而在1秒內,它可能執行多個程序,這就給人了一...
計算機作業系統
為什麼要有作業系統 計算機系統是乙個複雜的系統,如果每位程式設計師在程式設計時都必須掌握計算機系統的所有細節,就會嚴重影響程式設計師的開發效率 作業系統可以對計算機硬體加以管理和優化使用,為使用者程式提供更好的執行環境。作業系統以及其位置 作業系統組成 作業系統功能 應用程式直接與作業系統及其抽象打...