花了大概半年的時間不緊不慢的把《現代操作系統》讀了一遍,第一遍讀得感覺比較費勁,不過讀下來也得以對操作系統整體概念有了一個整體的認識。
下面,我講把我讀書之后一些知識進行一個梳理,作為自己對操作系統的知識儲備。其中缺陷錯誤之處請大家多多批評指正。
1. 進程與線程
在看這一章時,首先我不斷讓自己明確進程是程序的一次執行,是系統進行資源分配和調度的一個獨立單位,線程是進程的實體,是cpu調度和分配的基本單位。書中指出,每個進程有一個地址空間和一個控制線程。
進程包括三種狀態:運行態,就緒態,阻塞態。進程會由于等待資源或者獲得資源的原因在這三個狀態間切換。一個進程可以分為多個線程的運行,這些線程公用相同的地址空間和所有數據,線程比進程更輕量,可以做到更快的創建和撤銷,在需要大量的io和cpu計算時,多個線程可以做到多個線程的同時運行,加快執行速度,在多核計算機中,多個線程也可以同時運行。
進程與線程還有一個重點,即進程間通信。進程間通信需要解決三個問題:
- 一個進程如何給另一個進程傳遞信息
- 如何保證進程之間不相互干擾
- 當進程間出現相互依賴關系時該如何處理。
同樣的線程也存在這樣的問題,但是由于線程擁有相同的地址空間,因此第一個問題對于線程而言并不困難。但是另外兩個問題同樣困擾線程。那么我們就需要了解幾種概念。
競爭條件:兩個或多個進程讀寫某些共享數據,而最后的結果取決于程序運行的精確時序。
臨界區:對于這些競爭條件,就需要做到互斥。這里講共享內存進行訪問的程序片段稱為臨界區。因此需要進行