操作系统难点解析之进程和线程
為什么80%的碼農都做不了架構師?>>> ??
操作系統難點解析之進程和線程
關于操作系統,其中最為核心的概念就是進程和線程(輕量級進程)。在進程和線程的基礎之上,進而衍生出了并發和互斥的問題。本文著重介紹在并發和互斥中最為經典的幾個問題,同時會簡單介紹進程和線程的幾個模型。
進程模型
進程模型中主要涉及的是狀態的定義,以及各狀態之間的轉換問題。目前主要有兩狀態模型,五狀態模型和七狀態模型。很明顯,狀態越多的模型,對進程的描述更加精細,同時復雜度也就越高。
兩狀態模型
該模型中進程擁有運行態和非運行態兩種狀態。運行態和非運行態之間的轉換由調度程序完成。該模型一般僅僅只在簡單的操作系統中可以見到,目前很少在主流操作系統中使用。
五狀態模型
五狀態模型將菲運行態進行了細分,其中包含就緒態、阻塞態、新建態和退出態。各自含義如下表。
| 運行態 | 進程正在執行 |
| 就緒態 | 進程做好了執行的準備 |
| 阻塞態 | 進行在某些事情發生前不能執行 |
| 新建態 | 進程控制塊已經創建但還未加載到內存中的進程 |
| 退出態 | 操作系統從可執行進程組中釋放出的進程 |
七狀態進程模型
在講述七狀態模型之前,首先要說明下五狀態模型存在的一個問題。由于在計算機中I/O操作相對而言是較慢的,也就是說隨著操作系統持續運行,會存在某些情況下,所有進程都處于阻塞態,且都是在等待I/O事件。這顯然是對CPU的巨大浪費,為了解決這個問題,我們可以通過將部分進程換出內存,載入新的進程執行。即,我們可以加入掛起態來表示進程不在內存中。 相比較于五狀態模型,七狀態模型中新增了阻塞掛起態和就緒掛起態。
| 阻塞掛起態 | 進程已在外存中并等待某個事件 |
| 就緒掛起態 | 進程已在外存中,但只要載入內存中即可執行 |
線程模型
對于線程,并沒有像進程一樣存在復雜的各類模型,線程的狀態中最為重要的即是就緒態、運行態和阻塞態。線程擁有進程的資源和內存空間,即線程可以輕松的訪問進程的資源。線程從實現的思路可以分為三類,用戶級線程、內核級線程和組合型線程。
進程和線程的并發
對于現代操作系統來說,并發是一個最為重要的特性,并發在很大程度上提高了計算機資源的利用效率,但是并發也為計算機操作系統帶來了很多復雜性。在并發中,主要需要解決的就是線程和進程的同步及互斥的問題。 下表列出一些較為關鍵的術語,便于查看。
| 原子操作 | 一個函數或動作由一個或多個指令序列實現,且不存在其他進程可以中斷此操作。 |
| 臨界區 | 一段代碼,在這段代碼中進程將訪問共享資源,且同一時間只能有一個進程可以在臨界區中。 |
| 死鎖 | 兩個或兩個以上的進程因每個進程都在等待其他進程做完某些事情而不能繼續執行的情形。 |
| 活鎖 | 兩個或兩個以上的進程為響應其他進程中的變化而持續改變自己的狀態但不做有用的工作的情形。 |
| 互斥 | 當一個進程在臨界區訪問共享資源時,其他進程不能進入該臨界區訪問任何共享資源的情形。 |
| 競爭條件 | 多個進程在讀寫一個共享數據時,結果依賴于他們執行的相對時間的情形。 |
| 饑餓 | 一個可運行進程盡管能繼續執行,但被調度程序無限期地忽視,而不能被調度執行的情形。 |
下表列出常用的并發機制 機制名 |含義 | ------------|---------------| 信號量 |用于進程間傳遞信號的一個整數,在信號量上的操作都是原子的。遞減用于阻塞某進程,遞增用于解除某進程阻塞。 二元信號量 |只取0和1的信號量。 互斥量 |類似于二元信號量,區別在于為其加鎖和解鎖的進程必須相同。 條件變量 |一種數據類型,用于阻塞進程或線程,直到特定的條件為真。 管程 |一種編程語言結構,在數據結構中封裝了變量,訪問過程和初始化代碼。 事件標志 |用作同步機制的一個內存字。 消息 |兩個進程交換信息的一種方法,也可用于同步。 自旋鎖 |互斥機制,進程在一個無條件循環中執行,等待鎖變量的值可用。
轉載于:https://my.oschina.net/taodf/blog/1831473
總結
以上是生活随笔為你收集整理的操作系统难点解析之进程和线程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高三女孩热血发言燃爆全场 网友:只有拼搏
- 下一篇: 公积金绑定银行卡流程