操作系統常見面試題及解析

  1. 線程和進程的區別

    A :(1)進程有自己的獨立地址空間,線程沒有

    (2)進程是系統進行資源分配和調度的最小單位; 線程是CPU調度和分派的最小單位,線程自身不擁有資源,主要是共享使用氣所在進程的資源,獨享一點在運行中必不可少的資源(程序計數器,一組寄存器和棧)。

    (3)一個線程可以創建和撤銷另一個線程;同一個進程中的多個線程之間可以併發執行。

    (4) 系統開銷:進程的創建,撤銷,切換開銷都很大,線程因爲值保存少量寄存器內容,所以開銷小。

  2. 爲什麼進程上下文切換比線程上下文切換代價高?

    進程切換分爲兩步:

    (1) 切換頁目錄以使用新的地址空間

    (2) 切換內核棧和硬件上下文

    線程切換:

    線程的內存空間是共享的,所以不需要切換,而且線程能讓內核的緩存依然有效。

  3. 併發和並行的區別

    併發是一段時間內多個進程同時訪問;

    並行是某個時刻多個進程同時訪問。

  4. 創建進程的過程。

    1,申請空白PCB(進程控制塊);
    2,爲新進程分派資源;
    3,初始化PCB;
    4,將新進程插入就緒隊列;

  5. 中斷和輪詢的區別.

    輪詢:CPU按照一定週期挨個讀取設備寄存器,看它是否有數據輸入或輸出的要求,若有,則進行相應的I/O服務;若無,或I/O處理完畢,CPU就接着查詢下一個外設。

    中斷:CPU與設備並行處理自己的數據,當外圍設備操作完成時,給中斷請求線發送一個信號,因爲CPU執行完每條指令後,都會檢測中斷請求線,所以能很快檢測到中斷請求,接着CPU執行狀態保存並且跳到內存固定位置的中斷處理程序。終端處理程序確定中斷原因,執行必要處理,執行狀態恢復,並且執行返回終端指令以便CPU回到中斷前的執行狀態。

    區別:輪詢對CPU浪費較嚴重,而中斷相對來說更爲合適一些.

  6. 什麼是臨界區,如何解決衝突?

    ​ 每個進程中訪問臨界資源的那段程序稱爲臨界區,每次只准許一個進程進入臨界區,進入後不允許其他進程進入。如果有若干個進程要求進入空閒的臨界區,一次僅允許一個進程進入。

    ​ 任何時候,處於臨界區的進程不可多於一個。如已有進程進入自己的臨界區,則其他試圖進入臨界區的進程必須等待。

    ​ 進入臨界區的進程要在有限時間內退出,以便其他進程能及時進入自己的臨界區。如果不能進入自己的臨界區,就應該讓出CPU,避免進程出現忙等等現象。

  7. 分頁和分段的區別

    ​ 頁是信息的物理單位,分頁是爲了實現離散分配方式,以減少內存的外零頭,提高內存的利用率。分頁僅僅是由於系統管理的需要,而不是用戶的需要。段是信息的邏輯單位,它含有一組其意義相對完整的信息。

    ​ 分段的目的是爲了能更好的滿足用戶的需要。頁的大小固定且由系統確定,把邏輯地址分爲頁號和頁內地址兩部分,由機器硬件實現的。因此一個系統只能有一種大小的頁面。段的長度卻不固定,決定於用戶所編寫的程序,通常由編寫程序在對源代碼進行編輯時,根據信息的性質來劃分。

  8. 進程間通信有哪些方式?它們的區別?

    IPC方式:7種

    管道:

    1.管道(pipe):管道是一種半雙工的通信方式,數據只能單向流動,而且只能在有血緣關係的進程間使用,進程的血緣關係通常是指父子進程關係。
    2.命名管道(named pipe):也是半雙工的通信方式,但是它允許無親緣關係關係進程間通信。

    消息傳遞:

    3.信號(signal):是一種比較複雜的通信方式,用於通知接收進程某一事件已經發生。
    4.套接字(socket):套接口也是進程間的通信機制,與其他通信機制不同的是它可用於不同及其間的進程通信。

    6.共享內存(shared memory):就是映射一段能被其他進程所訪問的內存,這段共享內存由一個進程創建,但多個進程都可以訪問,共享內存是最快的IPC方式,它是針對其他進程間的通信方式運行效率低而專門設計的。它往往與其他通信機制,如信號量等配合使用,來實現進程間的同步和通信。

    4.信號量(semophere):信號量是一個計數器,可用來控制多個進程對共享資源的訪問。它通常作爲一種鎖機制,防止某進程正在訪問共享資源時,其他進程也訪問該資源。因此,主要作爲進程間以及同一進程內不同線程之間的同步手段。

    5.消息隊列(message queue):消息隊列是由消息組成的鏈表,存放在內核中,並由消息隊列標識符標識。消息隊列克服了信號傳遞消息少,管道只能承載無格式字節流以及緩衝區大小受限等缺點。
    幾種方式的比較:

    管道:速度慢、容量有限
    消息隊列:容量收到系統限制,且要注意第一次讀的時候,要考慮上一次沒有讀完數據的問題。
    信號量:不能傳遞複雜信息,只能用來同步。

    共享內存:能夠很容易控制容量,速度快,但要保持同步,比如一個進程在寫的時候,另一個進程要注意讀寫的問題,相當於線程中的線程安全。

  9. 線程間的通信機制

    ​ 1.鎖機制:互斥鎖、條件變量、讀寫鎖
      互斥鎖提供了以排他方式防止數據結構被併發修改的方法。
      讀寫鎖允許多個線程同時讀共享數據,而對寫操作是互斥的。
    ​  條件變量可以以原子的方式進行阻塞進程,直到某個特定條件爲真爲止。對條件的測試是在互斥鎖的保護下進行的。條件變量始終與互斥鎖一起使用。
    ​ 2.信號量機制:包括無名信號量和命名線程信號量;允許同一時刻多個線程訪問同一資源,但是需要控制同一時刻訪問此資源的最大線程數量
    ​ 3.信號機制:類似進程間的信號處理
    線程間的通信目的主要是用於線程同步,所以線程沒有像進程通信中的用於數據交換的通信機制。

  10. 進程間同步與互斥的區別?

    ​ 互斥:指某一個資源同時只允許一個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的
    同步:是指在互斥的基礎上(大多數情況下),通過其它機制實現訪問者對資源的有序訪問。大多數情況下,同步已經實現了互斥,特別是所有寫入資源的情況必定是互斥的。少數情況是指可以允許多個訪問者同時訪問資源。
    同步:體現的是一種協作性。互斥:體現的是排它性。
    進程同步的主要任務:是對多個相關進程在執行次序上進行協調,以使併發執行的諸進程之間能有效地共享資源和相互合作。從而使程序的執行具有可再現性。
    同步機制遵循的原則:
     1.空閒讓進;
     2.忙則等待;
     3.有限等待(有限代表有限的時間,避免死等);
     4.讓權等待(當進程不能進入自己的臨界區時,應該釋放處理機,以免陷入忙等狀態);

  11. 進程的調度算法有哪些?

    1.先來先服務(FCFS):此算法的原則是按照作業到達後備作業隊列(或進程進入就緒隊列)的先後次序選擇作業(或進程)
      2.短作業優先(SJF:Shortest Process First):這種算法主要用於作業調度,它從作業後備序列中挑選所需運行時間最短的作業進入主存運行。
      3.時間片輪轉調度算法:當某個進程執行的時間片用完時,調度程序便終止該進程的執行,並將它送到就緒隊列的末尾,等待分配下一時間片再執行。然後把處理機分配給就緒隊列中新的隊首進程,同時也讓它執行一個時間片。這樣就可以保證隊列中的所有進程,在已給定的時間內,均能獲得一時間片處理機執行時間。
      4.高響應比優先:按照高響應比(已等待時間+要求運行時間)/要求運行時間 優先的原則,在每次選擇作業投入運行時,先計算此時後備作業隊列中每個作業的響應比RP。選擇最大的作業投入運行。
      5.優先權調度算法:按照進程的優先權大小來調度。使高優先權進程得到優先處理的調度策略稱爲優先權調度算法。注意:優先數越多,優先權越小。

    ​ 6.多級隊列調度算法:多隊列調度是根據作業的性質和類型的不同,將就緒隊列再分爲若干個隊列,所有的作業(進程)按其性質排入相應的隊列中,而不同的就緒隊列採用不同的調度算法。

  12. 進程有哪幾種狀態?

    • 就緒狀態:進程已獲得除處理機以外的所需資源,等待分配處理機資源;
    • 運行狀態:佔用處理機資源運行,處於此狀態的進程數小於等於CPU數;
    • 阻塞狀態: 進程等待某種條件,在條件滿足之前無法執行;

進程的三種狀態.jpg-14.1kB

  1. 什麼是虛擬內存?

    虛擬內存

    虛擬內存允許執行進程不必完全在內存中。虛擬內存的基本思想是:每個進程擁有獨立的地址空間,這個空間被分爲大小相等的多個塊,稱爲頁(Page),每個頁都是一段連續的地址。這些頁被映射到物理內存,但並不是所有的頁都必須在內存中才能運行程序。當程序引用到一部分在物理內存中的地址空間時,由硬件立刻進行必要的映射;當程序引用到一部分不在物理內存中的地址空間時,由操作系統負責將缺失的部分裝入物理內存並重新執行失敗的命令。這樣,對於進程而言,邏輯上似乎有很大的內存空間,實際上其中一部分對應物理內存上的一塊(稱爲幀,通常頁和幀大小相等),還有一些沒加載在內存中的對應在硬盤上,如圖5所示。
    注意,請求分頁系統、請求分段系統和請求段頁式系統都是針對虛擬內存的,通過請求實現內存與外存的信息置換。

    這裏寫圖片描述

由圖可以看出,虛擬內存實際上可以比物理內存大。當訪問虛擬內存時,會訪問MMU(內存管理單元)去匹配對應的物理地址(比如圖5的0,1,2)。如果虛擬內存的頁並不存在於物理內存中(如圖5的3,4),會產生缺頁中斷,從磁盤中取得缺的頁放入內存,如果內存已滿,還會根據某種算法將磁盤中的頁換出。

應用與優點

虛擬內存很適合在多道程序設計系統中使用,許多程序的片段同時保存在內存中。當一個程序等待它的一部分讀入內存時,可以把CPU交給另一個進程使用。虛擬內存的使用可以帶來以下好處:

​ 在內存中可以保留多個進程,系統併發度提高,解除了用戶與內存之間的緊密約束,進程可以比內存的全部空間還大.

  1. 頁面置換算法

    ​ FIFO先進先出算法;

    ​ LRU(Least recently use)最近最少使用算法;

    ​ LFU(Least frequently use)最少使用次數算法;

    ​ OPT(Optimal replacement)最優置換算法:理論的最優,理論;就是要保證置換出去的是不再被使用的頁,或者是在實際內存中最晚使用的算法。

  2. 什麼是線程安全?

    在多線程下運行程序的結果是可預期的:與單線程的程序運行結果相同,那麼就是線程安全的。

  3. 同步和異步的區別。

    同步和異步:以前是人排隊,現在是行李箱排隊。

    同步特點:阻塞模式,按順序執行,需要等待,協調運行。

    異步特點:非阻塞模式,無需等待。並且彼此獨立,線程就是異步實現的一個方式。

    區別:同步可以避免出現死鎖,讀髒數據的發生。但,同步需要等待資源訪問結束,浪費時間,效率低。

    異步可以提高效率,但是安全性較低。

  4. 線程共享資源和獨佔資源問題

    一個進程中的所有線程共享該進程的地址空間,但它們有各自獨立的(/私有的)棧(stack),Windows線程的缺省堆棧大小爲1M。堆(heap)的分配與棧有所不同,一般是一個進程有一個C運行時堆,這個堆爲本進程中所有線程共享,windows進程還有所謂進程默認堆,用戶也可以創建自己的堆。
    用操作系統術語,線程切換的時候實際上切換的是一個可以稱之爲線程控制塊的結構(TCB),裏面保存所有將來用於恢復線程環境必須的信息,包括所有必須保存的寄存器集,線程的狀態等。

    堆: 是大家共有的空間,分全局堆和局部堆。全局堆就是所有沒有分配的空間,局部堆就是用戶分配的空間。堆在操作系統對進程初始化的時候分配,運行過程中也可以向系統要額外的堆,但是記得用完了要還給操作系統,要不然就是內存泄漏。

    **棧:**是個線程獨有的,保存其運行狀態和局部自動變量的。棧在線程開始的時候初始化,每個線程的棧互相獨立,因此,棧是 thread safe的。操作系統在切換線程的時候會自動的切換棧,就是切換 SS/ESP寄存器。棧空間不需要在高級語言裏面顯式的分配和釋放。

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-w4fDKIBW-1585464555640)(C:\Users\10146\Pictures\技術\操作系統\3. 進程\線程的共享資源和獨享資源區別.png)]

  5. 什麼是單工、半雙工和雙工通信?有哪些實際應用的例子

    1)單工通信:數據信息在通信線上始終向一個方向傳輸。廣播電視,收音機,電視機。

    2)半雙工通信 : 數據信息可以雙向傳輸,但必須交替進行,同一時刻一個信道只允許單向傳送。對講機

    3)全雙工通信: 全雙工通信同時進行二個方向的通信,既二個信道,可同時進行雙向的數據傳輸。它相當於把二個相反方向的單工通信方式組合起來。普通電話.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章