1. 程式人生 > >操作系統基礎知識總結(一)

操作系統基礎知識總結(一)

一個 快速 會有 處理死鎖 b2c fcm 死鎖 空間 存儲系統

1. 進程和線程的區別

進程

進程,即正在運行的程序,程序從硬盤載入到內存就變成進程。進程是資源的擁有者,每個進程都擁有著自己的內存空間與多個線程。

線程

線程是指令的執行者,是計算機執行指令的基本單元,一個進程可以擁有多個線程。線程的引入主要有如下原因:

  1. 響應:與進程相比,創建線程不涉及或較少涉及資源分配,因此速度較快
  2. 資源共享:線程間可以共享資源,同一個進程內兩個線程通信快
  3. 經濟:創建線程不涉及或較少涉及資源分配
  4. 適合計算機的多處理器架構

線程既有共享的資源,也有自己私有的資源,JVM中線程持有的資源一般如下:

  • PC(程序計數器):線程私有
  • 棧:線程私有
  • 堆:線程共享
  • 方法區:線程共享

在操作系統中,線程還會細分為用戶空間的用戶級線程與內核空間的內核級線程,兩種線程之間還有多種關系模型,在此不再贅述。

2. 死鎖的必要條件,怎麽處理死鎖

死鎖有四大必要條件,缺一不可:

  • 互斥:至少有一個資源同時只能被一個進程所擁有的
  • 占有且等待:一個進程必須持有至少一個資源去等待其他的資源
  • 非搶占時:資源不能被搶占,一個資源只有當進程執行完畢才會被釋放
  • 循環等待:多個進程循環等待其他進程釋放資源

對付死鎖我們大致可以從三個方面入手:

  1. 死鎖預防與避免:不允許程序死鎖
  2. 死鎖檢測與恢復:允許程序死鎖,死鎖後進行恢復工作
  3. 忽略死鎖:出現死鎖直接不管(大多數操作系統的做法)

3. 內存管理方式:段存儲,頁存儲,段頁存儲

段存儲示意圖如下:

技術分享

用戶程序通過邏輯內存的段號查找段表,獲取段的物理內存初始地址與長度,然後操作系統即可在物理內存上讀取相應的數據。

使用段存儲會出現外部碎片。

頁存儲示意圖如下:

技術分享

操作系統先把內存空間切分成大小相等的塊,用戶程序根據自身的大小占用一定的幀。

用戶程序通過邏輯內存的頁號去頁表查找對應的物理內存的塊號(幀號),然後操作系統在物理內存上讀取相應的數據。

使用頁存儲會出現內部碎片。

有些操作系統還會有TLB(頁表緩存),把一些常用的頁面放在TLB中方便快速查詢,要是TLB中查詢失敗再去頁表查詢。

段頁存儲即先分段再分頁的內存管理辦法,其示意圖如下:

技術分享

4. 進程的幾種狀態

進程有以下幾種狀態:

  • New(創建狀態):表示進程正在被創建
  • Running(運行狀態):表示進程正在執行
  • Waiting(等待狀態):表示進程正在等待事件的發生
  • Ready(就緒狀態):表示進程已經準備好,等待分配CPU處理器
  • Terminated(終止狀態);表示進程已經執行完畢,被終止

操作系統基礎知識總結(一)