操作系統常見面試問題


三年前學的東西差不多都忘了,復試臨時准備一下,不看底層實現(最后還是老老實實滾去看電路板了)只看邏輯

1.進程(process)和線程(thread)

進程是系統中擁有資源和獨立調度的基本單位,一個進程可以包括多個線程。

進程有自己的內存空間,其線程可以共享內存。進程間通信則需要IPC(進程間通信)。

此外同一進程內的線程切換比進程切換的開銷小很多。

2.核心態(Kernel Mode 堅果仁態)和用戶態(User Mode)

在CPU中運行的操作系統程序和用戶程序對應的機器指令集是不同的。操作系統程序使用所有指令,但用戶程序只能使用部分指令。

從資源管理和程序控制執行的角度出發,將指令系統分為兩大部分:特權指令和非特權指令。在程序執行時,根據執行程序對資源和機器指令的使用權限,把機器設置為兩個狀態:核心態和用戶態
也就是說,當系統處於核心態時,就可以使用所有指令、資源,並具備改變CPU狀態的能力;而當CPU在用戶態時,只能使用非特權指令。
如果CPU執行用戶程序時(用戶態)出現了中斷,系統將自行轉到中斷處理程序,CPU就由用戶態轉換到核心態;中斷處理結束后,返回繼續執行用戶程序,此時CPU又由核心態轉到用戶態。

那么用戶態和核心態之間的區別是什么呢?(以下區別摘至《UNIX操作系統設計》)

  1. 用戶態的進程能存取它們自己的指令和數據,但不能存取內核指令和數據(或其他進程的指令和數據)。然而,核心態下的進程能夠存取內核和用戶地址
  2. 某些機器指令是特權指令,在用戶態下執行特權指令會引起錯誤

此處牽引出另外一個概念:用戶級線程和內核級線程

在傳統的操作系統中,是不支持內核級線程的(只有內核進程,出於安全沒有把線程這個新生事物放入到內核中),每次都是一個進程去到一個CPU核心(但是多核CPU仍然可以處理多個進程),因此用戶級線程是對內核透明的,也做不到進程那樣的時間片輪轉調度(時間一到直接停你進程,線程都得一塊停),此時的線程管理全部交給用戶態做,且可以用jacket進行優化效率

在如今的多核CPU/多CPU支持內核級線程的情況下(實際上的意思是線程對於內核可見了,內核可以接手線程管理),那就可以多個內核級線程並行運行了。不會再出現同一個進程下的線程一損俱損的情況了。缺點是:讓內核來調度線程的話會出現切換線程得經歷用戶態到核心態的切換,代價更大

然而在今天的操作系統中,常見的操作是   n個用戶態線程----映射到---->1個內核態線程   算是一個折中方案

 

3.中斷

①內部異常中斷

計算機硬件異常或故障引起的中斷

②軟(件)中斷(指令中斷)

程序中執行了引起中斷的指令而造成的中斷,比如用戶態到內核態的系統調用就是使用了訪管指令

③外中斷(強迫中斷)

外設請求的中斷

4.並發---進程調度的幾種策略


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM