1. 程式人生 > 實用技巧 >作業系統基礎知識---進階篇

作業系統基礎知識---進階篇

互斥量(互斥鎖):互斥量是最簡單的執行緒同步的方法,處於兩態之一的變數:解鎖和加鎖,兩個狀態可以保證資源訪問的序列。

原子性:原子性指一系列操作不可被中斷的特性,這一系列操作要麼全部執行,要麼全部沒有執行,不存在部分執行部分未執行的情況。

自旋鎖:自旋鎖也是一種多執行緒同步的變數,使用自旋鎖的執行緒會反覆檢查鎖變數是否可用,自旋鎖不會讓出CPU,是一種忙等待狀態(死迴圈等待鎖被釋放)。
相比於互斥量,自旋鎖避免了程序或執行緒的上下文切換的開銷,作業系統內部很多地方使用的都是自旋鎖,但自旋鎖不適合在單核CPU使用。

互斥鎖和自旋鎖的區別:https://www.cnblogs.com/lztkdr/p/8377853.html

讀寫鎖是一種特殊的自旋鎖,它允許多個讀者同時訪問資源以提高讀效能,對於寫操作則是互斥的。

條件變數是一種相對複雜的執行緒同步方法,條件變數允許執行緒睡眠,直到滿足某種條件,當滿足條件時,可以向該執行緒傳送訊號,通知喚醒。
之前的生產者消費者模型有兩個條件需要進行約束:
  ①當緩衝區小於等於0時,不允許消費者消費,消費者必須等待;
  ②緩衝區滿時,不允許生產者往緩衝區生產,生產者必須等待;
當生產者生產一個產品時,喚醒可能等待的消費者,當消費者消費一個產品時,喚醒可能等待的生產者。

①fork系統呼叫是用於建立程序的;
②fork建立的程序初始化與父程序一樣;
③系統會為fork的程序分配新的資源;
④fork系統呼叫無引數;
⑤fork會返回兩次,分別返回子程序id和0
⑥返回子程序id的是父程序,但會0的是子程序

在某種程度上,多程序是共同使用實體記憶體的;由於作業系統的程序管理,程序空間的記憶體空間是獨立的;程序預設是不能訪問程序空間之外的記憶體空間的。
共享儲存允許不相關的程序訪問同一片實體記憶體;
共享記憶體是兩個程序之間共享和傳遞資料最快的方式;
共享記憶體未提供同步機制,需要藉助其他機制管理訪問。

域套接字是一種高階的程序間通訊的方法;
Unix域套接字可以用於同一機器程序間通訊。
套接字(socket)原是網路通訊中使用的術語;
Unix系統提供的域套接字提供了網路套接字類似的功能。

域套接字只提供了單機簡單的可靠的程序通訊同步服務,只能在單機使用,不同跨機器使用。