作業系統常見面試題

2021-10-20 15:19:00 字數 4131 閱讀 7213

未更新完畢 僅用來個人學習

程序:程序是乙個有特定功能的程式在某個資料集合上的一次執行。

執行緒:執行緒是系統排程的最小單位,包含在程序之中。

聯絡

程序可以有多個執行緒,最少包含乙個執行緒,即主線程。乙個執行緒只能屬於乙個程序。

執行緒是程序執行的實體。

區別

1、程序是資源分配的最小單位。程序擁有資源,而執行緒不擁有資源,但是程序中的多個執行緒可以共享所屬程序中的資源。

2、執行緒是系統排程的最小單位。

3、程序的建立或撤銷,系統需要為它分配或者**資源,開銷遠大於執行緒的建立或撤銷。程序間的切換需要儲存當前cpu環境還需要配置新的cpu環境,而執行緒切換只需要儲存和設定少量暫存器,開銷很小。

4、程序的崩潰不會引起其他程序的崩潰,而執行緒的崩潰,會引起整個程序的崩潰。

執行緒占有的都是不共享的,其中包括:棧、暫存器、狀態、程式計數器

執行緒間共享的有:堆,全域性變數,靜態變數;

1.因為程序執行過程中會因為阻塞而導致整個程序掛起,比如等待輸入,即使程序中有些不依賴這個資源的工作,仍然不會執行。執行緒的引入能減少時空開銷,更好的實現併發。

2.執行緒的建立和銷毀,只需要保留執行緒自己的棧區和少量暫存器,而程序的建立和銷毀遠遠大於執行緒的開銷

使用者級執行緒

這些執行緒的管理的所有工作都由應用程式完成。執行乙個應用程式,作業系統會為該應用程式分配程序號、記憶體空間等資源。然後會在乙個執行緒上執行這個應用程式,這個執行緒就是主線程。

優點是非常高效,因為不需要進入核心空間,但是不能很好的實現併發

核心級執行緒

這類執行緒的管理的所有工作都由核心完成。應用程式不能夠進行執行緒管理,只能夠呼叫核心對外開放的該執行緒的介面。

優點是核心可以講不同執行緒分配給不同cpu,更好的實現併發,但是效率不高,因為需要在使用者態和系統態之間不斷切換。

併發是指在一段時間內,多個任務都在執行,也就是巨集觀上看是同時進行的,但是微觀上其實同一時刻只有乙個任務在執行。多個任務交替執行,交替時間非常快,所以巨集觀上看起來是同時的。

並行是真正的實現了物理上的同時執行。在同一時刻多個任務同時執行。

就緒、阻塞、執行

就緒->執行:在就緒佇列中等待進入執行狀態

執行->就緒:時間片用完了,進入就緒

執行->阻塞:因為一些資源等待阻塞了,比如等待io輸入

阻塞->就緒:等待的條件已經滿足

①先來先服務 fcfs

按照程序進入就緒佇列的順序,從佇列頭開始處理程序,利於長作業,不利於短作業。

短作業可能會因為前面長作業執行之間太長而餓死。

②短作業優先 sjf

按照執行時間最短排序,然後開始執行,是一種搶占式的排程演算法

利於短作業,長作業可能會被餓死

③最短剩餘時間優先演算法

當乙個新的程序滿足執行條件時候,和當前之前執行的程序,進行剩餘時間比較,剩餘時間較短的先執行。

④時間片輪轉

按照fcfs演算法排成乙個佇列,每個程序都統一執行乙個時間片,沒執行完的程序加入隊尾。

時間片如果太大,大到超過就緒佇列中程序的最大執行時間,就退化成fcfs

如果時間片太小,那麼需要不斷進行程序之間的切換,開銷非常大

⑤優先順序演算法

對程序進行優先順序編號,優先順序高的優先,對於一直等待的程序,可以適當提高優先順序,防止被餓死。

⑥多級反饋佇列

是對時間片輪轉演算法的一種改進,每個佇列維護乙個不同的時間片輪轉時間。1、2、4、8…

每次從當前佇列執行完時間片時間後,如果還沒執行後,就加入下乙個佇列中,就是提高了時間片。

如果乙個程序需要用時間片輪轉七次,用多級反饋佇列只需要三次,減少了程序切換的次數,減少開銷。

這是乙個超連結

上下文切換指核心在cpu上對程序或者執行緒進行切換。

上下文被儲存在系統核心

系統呼叫

程序的執行空間分為使用者空間核心空間

在使用者空間執行的程序叫做使用者態,在核心空間執行的叫做核心態(系統態)

從使用者態到核心態需要經過系統呼叫

系統呼叫會發生cpu上下文切換,先儲存使用者態狀態,然後載入核心態內容。系統呼叫結束後,在載入回使用者態狀態。一次系統呼叫,會有兩次cpu上下文切換

程序上下文切換

程序是由核心管理和排程的,程序的切換只能發生在核心態

程序的上下文不但包括虛擬記憶體、棧、全域性變數等使用者空間資源,還包括核心堆疊、暫存器等核心空間狀態。

執行緒上下文切換

執行緒上下文切換時,共享相同的虛擬記憶體和全域性變數等資源不需要修改。而執行緒自己的私有資料,如棧和暫存器等,上下文切換時需要儲存。

執行緒上下文切換為什麼比程序快

這是乙個超連結

每個程序都有自己的虛擬位址空間,程序內的所有執行緒共享程序的虛擬位址空間。程序切換涉及虛擬位址空間的切換而執行緒不會。

虛擬記憶體的目的是為了讓物理記憶體擴充成更大的邏輯記憶體,從而讓程式獲得更多的可用記憶體。虛擬記憶體使用部分載入的技術,讓乙個程序或者資源的某些頁面載入進記憶體,從而能夠載入更多的程序,甚至能載入比記憶體大的程序,這樣看起來好像記憶體變大了,這部分記憶體其實包含了磁碟或者硬碟,並且就叫做虛擬記憶體。

虛擬記憶體,頁表,快表,多級頁表,倒排頁表

這是乙個超連結

這是乙個超連結

先進先出演算法(first in first out,fifo) :將在記憶體中最久的的頁面淘汰

最近最久未使用演算法(least recently used,lru):將最久沒使用的淘汰

最不常用演算法(least frequently used,lfu):·將記憶體中頁面使用次數最少的給淘汰掉

死鎖

指乙個程序集合中的每個程序,都在等待該集合中的其他程序釋放資源所形成的僵局,若無外力推進將無法繼續執行。

根本原因

系統資源不足,導致資源不夠分配。

四個必要條件

1.占有和等待,程序占有資源,並且等待剩下所需要的資源

2.互斥,資源要麼被分配給了乙個程序,要麼未分配

3.不可搶占,不能進行搶占式的占有資源

4.環路等待,每個程序都在等待其他程序釋放資源為自己所用

解決方法

1.鴕鳥策略:忽略死鎖的發生,當死鎖發生的概率很低或者不會造成什麼影響的時候選擇忽略它。因為解決死鎖的成本可能很高。

2.死鎖預防:指破壞死鎖的必要條件

3.死鎖的避免:採用銀行家演算法:假設將資源分配給程序p1後,最後所有的程序都能夠得以釋放資源,那麼就分配給它

4.死鎖的檢測與修復

這是乙個超連結

上述部落格講的很好,推薦閱讀

1.先來先服務 fcfs

2.最短尋道時間優先演算法 sstf

3.掃瞄演算法(電梯演算法) scan

4.迴圈掃瞄演算法 c-scan

5.look調庫和c-look排程(其實就是掃瞄演算法和迴圈掃瞄演算法的優化,每次不需要到磁碟邊緣,而是到最遠的請求地方即可)

這是乙個超連結

無名管道、有名管道、訊息佇列、訊號量、訊號、共享記憶體、套接字

共享記憶體是最快的通訊方式、而套接字是最常用的通訊方式,它可以實現不同主機的程序通訊

這是乙個超連結

中斷是指cpu對系統發生的某個事件做出的一種反應,cpu暫停正在執行的程式,儲存現場後自動去執行相應的處理程式,處理完該事件後再返回中斷處繼續執行原來的程式。中斷一般三類,一種是由cpu外部引起的,如i/o中斷、時鐘中斷,一種是來自cpu內部事件或程式執行中引起的中斷,也叫異常,例如程式非法操作,位址越界、浮點溢位、缺頁中斷,最後一種是在程式中使用了系統呼叫引起的。而中斷處理一般分為中斷響應和中斷處理兩個步驟,中斷響應由硬體實施,中斷處理主要由軟體實施。

作業系統常見面試題

作業系統學習之一 程序及其狀態和資料描述 作業系統學習記錄之二 程序的管理及切換 作業系統學習記錄之三 多執行緒技術 作業系統學習記錄之四 核心級執行緒和使用者級執行緒 作業系統學習記錄之五 多執行緒實現的混合策略 作業系統學習記錄之六 併發程式 作業系統學習記錄之七 臨界區 作業系統學習記錄之八 ...

常見面試題整理(作業系統)

一 請分別簡單說一說程序和執行緒以及它們的區別。如果你對程序或者執行緒不太熟悉,建議閱讀 程序與執行緒的乙個簡單解釋 二 執行緒同步的方式有哪些?經兩位大大的指正,現已刪除臨界區。感謝 真姬醬 安陽如果你對執行緒同步的方式不太熟悉,建議閱讀 執行緒同步的幾種方式 三 程序的通訊方式有哪些?主要分為 ...

作業系統常見面試題整理

常用命令集錦 cat 由第一行開始顯示內容,並將所有內容輸出 tac 從最後一行倒序顯示內容,並將所有內容輸出 more 根據視窗大小,一頁一頁的現實檔案內容 less 和more類似,但其優點可以往前翻頁,而且進行可以搜尋字元 head 只顯示頭幾行 tail 只顯示最後幾行 nl 類似於cat ...