「offer来了」进程线程有啥关系?10个知识点带你巩固操作系统基础知识
「面試專欄」前端面試之操作系統篇
- 🎹序言
- 🎸一、思維導圖
- 🎺二、常見面試題
- 1、進程和線程以及它們的區別
- 2、進程間通信的幾種方式
- (1)管道(pipe)及命名管道(named pipe)
- (2)信號(signal)
- (3)消息隊列
- (4)共享內存
- (5)信號量
- (6)套接字
- 3、線程同步的方式
- (1)互斥量 Synchronized/Lock
- (2)信號量 Semphare
- (3)事件(信號)Wait/Notify
- 4、什么是死鎖?死鎖產生的條件?
- (1)死鎖的概念
- (2)死鎖產生的四個必要條件
- (3)處理死鎖的基本策略和常用方法
- 5、進程有哪幾種狀態?
- 6、線程有幾種狀態?
- 7、段式存儲管理
- (1)段式存儲管理是什么?
- (2)段式管理的優缺點
- (3)頁式存儲管理方案
- (4)頁式存儲管理的優缺點
- 8、進程調度策略
- (1)FCFS(先來先服務,隊列實現,非搶占的)
- (2)SJF(最短作業優先調度算法)
- (3)優先級調度算法(可以是搶占的,也可以是非搶占的)
- (4)時間片輪轉調度算法(可搶占的)
- (5)多級隊列調度算法
- (6)多級反饋隊列調度算法
- 9、頁面調度算法
- 10、局部性原理
- 🎻三、結束語
- 🐣彩蛋 One More Thing
- 🏷?pdf內容獲取
- 🏷?更新地址
- 🏷?番外篇
🎹序言
操作系統對于前端來說考察的內容并不多,所以在今天的文章中將依據比較常考的知識點進行歸納總結。
下面開始本文的講解~
🎸一、思維導圖
我們先用一張思維導圖來梳理操作系統相關的面試題。具體如下👇
下面開始歸納操作系統常見的面試題。
🎺二、常見面試題
1、進程和線程以及它們的區別
- 進程是對程序運行時的封裝,是系統進行資源調度和分配的的基本單位,實現了操作系統的并發;
- 線程是進程的子任務,是CPU調度和分配的基本單位,用于保證程序的實時性,實現進程內部的并發;
- 一個程序至少有一個進程,一個進程至少有一個線程,線程依賴于進程而存在;
- 進程在執行過程中擁有獨立的內存單元,而多個線程共享進程的內存。
2、進程間通信的幾種方式
(1)管道(pipe)及命名管道(named pipe)
- 管道可用于具有親緣關系的父子進程間的通信。
- 命名管道除了具有管道所具有的功能外,它還允許無親緣關系進程間的通信。
(2)信號(signal)
- 信號是一種比較復雜的通信方式,用于通知和接收某個已經發生的進程事件。
(3)消息隊列
- 消息隊列是消息的鏈接表,它克服了以上兩種通信方式中信號量有限的缺點。
- 具有寫權限的進程可以按照一定的規則向消息隊列中添加新信息。
- 對消息隊列有讀權限的進程則可以從消息隊列中讀取信息。
(4)共享內存
- 可以說這是最有用的進程間通信方式。
- 它使得多個進程可以訪問同一塊內存空間,不同進程可以及時看到對方進程中對共享內存中數據的更新。
- 這種方式需要依靠某種同步操作,如互斥鎖和信號量等。
(5)信號量
- 主要作為進程之間及同一種進程的不同線程之間的同步和互斥手段;
(6)套接字
- 這是一種更為一般的進程間通信機制,它可用于網絡中不同機器之間的進程間通信,應用非常廣泛。
3、線程同步的方式
(1)互斥量 Synchronized/Lock
- 采用互斥對象機制,只有擁有互斥對象的線程才有訪問公共資源的權限。
- 因為互斥對象只有一個,所以可以保證公共資源不會被多個線程同時訪問。
(2)信號量 Semphare
- 它允許同一時刻多個線程訪問同一資源,但是需要控制同一時刻訪問此資源的最大線程數量。
(3)事件(信號)Wait/Notify
- 通過通知操作的方式來保持多線程同步,還可以方便的實現多線程優先級的比較操作。
4、什么是死鎖?死鎖產生的條件?
(1)死鎖的概念
- 在兩個或者多個并發進程中,如果每個進程持有某種資源而又等待其它進程釋放它或它們現在保持著的資源,在未改變這種狀態之前都不能向前推進,稱這一組進程產生了死鎖。
- 通俗的講,就是兩個或多個進程無限期的阻塞、相互等待的一種狀態。
(2)死鎖產生的四個必要條件
- 互斥:至少有一個資源必須屬于非共享模式,即一次只能被一個進程使用;若其他申請使用該資源,那么申請進程必須等到該資源被釋放為止。
- 占有并等待:一個進程必須占有至少一個資源,并等待另一個資源,而該資源為其他進程所占有。
- 非搶占:進程不能被搶占,即資源只能被進程在完成任務后自愿釋放。
- 循環等待:若干進程之間形成一種頭尾相接的環形等待資源關系。
(3)處理死鎖的基本策略和常用方法
- 解決死鎖的基本方法主要有預防死鎖、避免死鎖、檢測死鎖、解除死鎖 、鴕鳥策略等。
5、進程有哪幾種狀態?
**(1)就緒狀態:**進程已獲得除處理機以外的所需資源,等待分配處理機資源。
**(2)運行狀態:**占用處理機資源運行,處于此狀態的進程數小于等于CPU數。
(3)阻塞狀態: 進程等待某種條件,在條件未滿足之前無法執行。
6、線程有幾種狀態?
在 Java虛擬機 中,線程從最初的創建到最終的消亡,要經歷若干個狀態:
- 創建 (new) 、就緒 (runnable/start) 、運行 (running) 、阻塞 (blocked) 、等待 (waiting) 、時間等待 (time waiting) 和 消亡 (dead/terminated) 。
- 在給定的時間點上,一個線程只能處于一種狀態。
7、段式存儲管理
(1)段式存儲管理是什么?
段式存儲管理是一種符合用戶視角的內存分配管理方案。
在段式存儲管理中,將程序的地址空間劃分為若干段(segment),如代碼段、數據段、堆棧段;
這樣每個進程有一個二維地址空間,相互獨立,互不干擾。
(2)段式管理的優缺點
- 優點:沒有內碎片(因為段大小可變,可通過改變段大小來消除內碎片)。
- 缺點:但段換入換出時,會產生外碎片(比如 4k 的段換 5k 的段,會產生 1k 的外碎片)。
(3)頁式存儲管理方案
頁式存儲管理方案是一種用戶視角下內存與物理內存相分離的內存分配管理方案。
在頁式存儲管理中,將程序的邏輯地址劃分為固定大小的頁 (page) ,而物理內存劃分為同樣大小的幀,程序加載時,可以將任意一頁放入內存中任意一個幀,這些幀不必連續,從而實現了離散分離。
(4)頁式存儲管理的優缺點
- 優點:沒有外碎片(因為頁的大小固定)。
- 缺點:但會產生內碎片(一個頁可能填充不滿)。
8、進程調度策略
(1)FCFS(先來先服務,隊列實現,非搶占的)
先請求 CPU 的進程先分配到 CPU 。
(2)SJF(最短作業優先調度算法)
平均等待時間最短,但難以知道下一個 CPU 區間長度。
(3)優先級調度算法(可以是搶占的,也可以是非搶占的)
優先級越高越先分配到 CPU ,相同優先級先到先服務。
存在的主要問題是:低優先級進程無窮等待 CPU ,會導致無窮阻塞或饑餓。
解決方案:老化(即對超過一定時間還未使用的進程進行刪除)。
(4)時間片輪轉調度算法(可搶占的)
隊列中沒有進程被分配超過一個時間片的 CPU 時間,除非它是唯一可運行的進程。
如果進程的 CPU 區間超過了一個時間片,那么該進程就被搶占并放回就緒隊列。
(5)多級隊列調度算法
將就緒隊列分成多個獨立的隊列,每個隊列都有自己的調度算法,隊列之間采用固定優先級搶占調度。
其中,一個進程根據自身屬性被永久地分配到一個隊列中。
(6)多級反饋隊列調度算法
與多級隊列調度算法相比,其允許進程在隊列之間移動:若進程使用過多 CPU 時間,那么它會被轉移到更低的優先級隊列。
在較低優先級隊列等待時間過長的進程會被轉移到更高優先級隊列,以防止饑餓發生。
9、頁面調度算法
FIFO先進先出算法:在操作系統中經常被用到,比如作業調度(主要實現簡單,很容易想到)。
LRU(Least recently use)最近最少使用算法:根據開始使用時間到現在為止的時間長短來判斷。
LFU(Least frequently use)最少使用次數算法:根據使用次數來判斷。
OPT(Optimal replacement)最優置換算法:理論的最優,所謂理論,就是要保證置換出去的是不再被使用的頁,或者是在實際內存中最晚使用的頁。
10、局部性原理
(1) 時間上的局部性:最近被訪問的頁在不久的將來還會被訪問。
(2)空間上的局部性:內存中被訪問的頁周圍的頁也很可能被訪問。
🎻三、結束語
大家可以看到,對于操作系統的面試來說,基本上都在圍繞著進程和線程這兩個概念交談。所以在學習的過程中,可以以這兩個點來作為主線來對知識點進行擴充和歸納。
關于操作系統的面經歸納到這里就結束啦!希望對大家有幫助~
🐣彩蛋 One More Thing
🏷?pdf內容獲取
👉 微信關注公眾號 星期一研究室 ,回復關鍵字 操作系統面試pdf 即可獲取相關 pdf 內容~
👉 回復 面試大全pdf 可獲取全專欄內容📂
🏷?更新地址
👉 offer來了面試專欄
🏷?番外篇
- 如果您覺得這篇文章有幫助到您的的話不妨點贊支持一下喲~~😉
- 以上就是本文的全部內容!我們下期見!👋👋👋
總結
以上是生活随笔為你收集整理的「offer来了」进程线程有啥关系?10个知识点带你巩固操作系统基础知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓打游戏用什么手机好(安卓打游戏)
- 下一篇: 7-26 Windows消息队列 (25