CS-LogN思維導圖:記錄專業基礎 面試題
開源地址:https://github.com/FISHers6/CS-LogN
本章節 操作系統面試題導圖如下:
操作系統面試題
操作系統引論
面試題1:什么是操作系統
- 控制和管理整個計算機系統的硬件和軟件資源
- 為用戶和上層軟件,提供易用接口和環境的程序
- 是最基礎的系統軟件
面試題2:什么是系統調⽤
-
系統調用是:操作系統對應用程序提供的服務調用請求接口
-
引用目的
- 應用程序通過系統調用請求獲得操作系統內核的服務,保證系統穩定性和安全性(用戶非法操作)
進程管理
面試題1:進程和線程的區別
-
調度單位
- 線程是獨立調度單位,進程擁有資源的基本單位
-
資源
- 進程都是擁有資源的基本單位,線程不擁有系統資源(少) 但可以訪問共享其隸屬進程的系統資源
-
並發粒度
- 引入線程后並發度提升,吞吐量提升
-
系統開銷
- 1.進程創建開銷 2.進程切換開銷 3.進程間通信開銷
-
地址空間
- 進程地址空間獨立、線程共享同一進程資源的地址空間
-
通信方面
- 進程間通信:需要同步和互斥手段保證數據一致
- 線程間通信:可直接讀寫同一進程數據段(全局變量)
面試題2:進程有哪⼏種狀態,狀態如何轉換
-
5/3種狀態
-
運行態
- 進程在CPU上運行;單處理機最多1個運行態
-
就緒態
- 進程獲得了除CPU外的一切資源,存入就緒隊列
-
阻塞態
- 進程等待某一事件(等待資源)而暫停運行 如等IO
-
*創建態
- 進程正被創建,尚未轉到就緒態(詳見進程控制)
-
*結束態
- 進程正常結束或其他原因中斷運行,先置結束態
-
-
狀態轉換
-
就緒態->運行態
- 處於就緒態被調度,獲得處理機資源(時間片)
-
運行態->就緒態
- 1.時間片用完,調度程序讓進程換態(非主動)
2.或者被可剝奪系統中被優先級高的進程搶占
- 1.時間片用完,調度程序讓進程換態(非主動)
-
運行態->阻塞態
- 1.進程請求某一資源(如外設)的使用和分配
2.或者等待某一事件(如等待I/O執行中(阻塞))
- 1.進程請求某一資源(如外設)的使用和分配
-
阻塞態->就緒態
- 1.進程等待事件的發生(得到資源),如另一個進程的I/O操作結束,釋放IO資源,這個進程得到IO資源 2.或中斷結束 中斷處理程序來改變相應進程狀態
-
面試題3:進程間有哪些通信⽅式
-
進程通信的概念
-
目的和概念
- 進程之間信息交換
-
引入原因
- 各進程擁有獨立的內存地址空間,為了保證安全,一個進程不能直接訪問其它進程的地址空間
-
-
通信方式
-
1.共享存儲
- 設置一塊可直接訪問的內存共享空間,讀寫交換信息互斥訪問共享空間,讀/寫操作使用p/v
-
2.消息傳遞
- 進程間數據交換以格式化的消息為單位,系統提供“發送/接受原語”,如:消息隊列、信箱
-
3.管道通信
- 設置一個特殊的共享文件(管道),緩沖區,半雙工
-
面試題4:線程間有哪些同步的⽅式
-
同步的概念
- 由並發性帶來異步性問題,進/線程間需協調工作先后次序、傳遞信息(合作)所產生的直接制約關系,避免資源訪問沖突
-
同步的方式
-
互斥量(Mutex)
- synchronized 關鍵詞 和 各種 Lock
-
信號量(Semphares)
- 設置資源允許的數量,同⼀時刻多個線程可以訪問同⼀資源
-
管程/事件(Event) :Wait/Notify
- 通過通知操作的⽅式來保持多線程同步
-
面試題5:進程的調度算法有哪些
-
先來先服務FCFS
- 按照作業/進程的先后順序服務,但短作業需要等待前面的長作業執行完,對短作業不利
-
短作業優先SJF
- 改進FCFS,讓最短的作業/進程先得到服務,追求最少的平均等待時間(平均化整體考慮)
-
高響應比優先
- 響應比綜合考慮進程的“等待時間” 和 “要求服務的時間”
-
時間片輪轉調度算法(RR)
- 按時間片輪流服務進程,使用時鍾中斷來通知CPU,時間片已用完了可以去調度下一個進程
-
優先級調度算法
- 靜態優先級、動態優先級(動態調整)調度
-
多級反饋隊列調度算法
- 多種調度算法的折中權衡,最優
面試題6:說說進程/線程安全
- 多線程執行時不會出現數據不一致或者數據污染
- 線程安全問題都是由多個線程訪問臨界資源(全局變量及靜態變量)引起的,可以使用同步、互斥的方法保證線程安全
面試題7:什么是死鎖,死鎖的條件,如何解決死鎖
-
什么是死鎖
- 多個進程因競爭資源而等待對方手里的資源,互相等待,都無法向前推進
-
死鎖的條件
- 1.互斥
- 2.不可剝奪
- 3.請求和保持
- 4.循環等待鏈
-
如何解決死鎖
-
預防死鎖
- 破壞死鎖的四大條件之一
-
避免死鎖
- 安全序列來檢測死鎖、銀行家算法
-
死鎖的檢測及解除
- 資源請求分配圖、死鎖定理;(資源剝奪、進程回滾等)
-
內存管理
面試題1:操作系統的內存管理主要是做什么
-
1.內存空間的分配與回收
- 操作系統完成主存儲器空間的分配,無需程序員操作,提高編程效率
-
2.內存空間的擴充
- 利用虛擬存儲技術或自動覆蓋技術,從邏輯上擴充內存
-
3.地址轉換
- 程序的完整周期:編譯、鏈接、裝入,裝入時將邏輯地址轉換為物理地址
-
4.存儲保護
- 內存分配前,1.需要保護操作系統不受用戶進程的影響 2.保護用戶進程不受其它用戶進程的影響 3.防止地址越界
面試題2:操作系統的內存管理機制了解嗎?內存管理有哪⼏種⽅式?
-
連續分配方式
-
1.單一連續分配
- 內存分為系統區(供操作系統)和用戶區(供用戶)
-
2.固定分區分配
- 將用戶內存空間划分為若干固定大小的區域,每個分區只裝入一道作業
-
3.動態分區分配
- 在進程裝入內存時,根據進程的大小動態地建立分區
-
-
離散分配方式
- 1.基本分頁存儲管理
- 2.基本分段存儲管理
- 3.段頁式存儲管理
-
內部碎片與外部碎片
-
內部碎片
- 固定分區分配中,一塊分區只放一個進程,當這塊分區有剩余容量時存在空間浪費
- 如:分頁、段頁式存儲、固定分區
-
外部碎片
- 動態分區分配中,隨着進程的換入/換出分區外的存儲空間會變成越來越多的碎片
- 如:分段
-
面試題5:分⻚機制和分段機制的共同點和區別,段頁式各需要幾次訪存
-
相同點
- 都屬於內存離散存儲分配方式,都是為了改進連續內存分配而提⾼內存利⽤率
-
區別
- ⻚的⼤⼩是固定的,由操作系統決定;⽽段的⼤⼩不固定,取決於我們當前運⾏的程序
- 分⻚僅僅是為了滿⾜操作系統內存管理的需求,⽽段是邏輯信息的單位,在程序中可以體現為代碼段,數據段,能夠更好滿⾜⽤戶的需要。
- 分頁2次、分段2次、段頁式3次訪存
面試題3:快表是什么
-
引入目的和概念
- 快表,又稱聯想寄存器(TLB, translation lookaside buffer )是一種訪問速度比內存快很多的高速緩存,用來存放最近訪問的頁表項的副本,可以加速地址變換的速度(基本地址變換機構要訪存2次)
面試題6:什么是局部性原理
-
局部性原理
-
時間局部性
- 指令近期多次執行,數據近期多次訪問;如循環語句
-
空間局部性
- 存儲單元附近的也可能訪問,如連續的存儲單元數組
-
每訪問一個邏輯地址,都要查詢內存中的頁表,可能連續多次查同一表項
-
-
應用
- 快表、cache、虛擬存儲器
面試題4:為什么要用多級頁表
-
引入目的
-
單級頁表存在的問題:
- 頁表必須連續存放,因此當頁表很大時,需要占用很多個連續的頁框。
- 沒有必要讓整個頁表常駐內存,因為進程在一段時間內可能只需要訪問某幾個特定的頁面
-
建立多級頁表的目的在於建立索引,以便不用浪費主存空間去存儲無用的頁表項,也不用盲目順序式查找頁表項
-
-
兩級頁表方案邏輯地址結構
- 一級頁號、二級頁號、頁內偏移量
面試題7:虛擬內存管理如何實現,為什么引入虛擬內存
-
傳統存儲管理方式的缺點特征
-
一次性
-
作業必須一次性全部裝入內存后,才能開始運行
- 1.作業很大而不能全部裝入內存,無法運行
- 2.大量作業要求運行時,內存不足以容納所有作業,只能使少量作業線運行,導致多道程序度的並發度下降
-
-
駐留性
- 一旦作業被裝入內存,就會一直駐留在內存中,直至作業運行結束;而程序運行只需要一部分數據,浪費了寶貴的內存資源
-
-
虛擬內存的定義
- 基於局部性原理,在程序裝入時,可以將程序中很快會用到的部分裝入內存,暫時用不到的部分留在外存,就可以讓程序開始執行
-
虛擬內存的特征
-
多次性
- 無需在作業運行時一次性全部裝入內存,而是允許被分成多次調入內存
-
對換性
- 在作業運行時無需一直常駐內存,而是允許在作業運行過程中,將作業換入、換出
-
虛擬性
- 從邏輯上擴充了內存的容量,使用戶看到的內存容量,遠大於實際的容量
-
-
虛擬內存技術的實現
(離散分配的內存管理)- 請求分頁存儲管理
- 請求分段存儲管理
- 請求段頁式存儲管理
面試題8:虛擬內存管理的⻚⾯置換算法有哪些
- 最佳置換算法OPT
- 先進先出置換算法FIFO
- 最近最久未使用置換算法LRU
- 時鍾置換算法CLOCK(最近未用NRU)
面試題9:32位系統運行大於4G的程序,如何尋址(考察虛擬內存,虛擬地址空間)
-
使用虛擬內存,基於局部性原理,在程序裝入時,可以將程序中很快會用到的部分裝入內存,暫時用不到的部分留在外存,就可以讓程序開始執行
-
邏輯地址將經過MMU內存管理單元轉換為物理地址
- 轉換過程:查詢頁表,命中就計算出物理地址
不命中就出發缺頁中斷,讓os分配地址空間
- 轉換過程:查詢頁表,命中就計算出物理地址
面試題10:內存中進程駐留集如何選定
- 駐留集指請求分頁存儲管理中給進程分配的內存塊集合
- 可以根據工作集(在某段時間間隔里,進程實際訪問頁面的集合)來設置駐留集大小