面試筆試:linux作業系統
寫在前面:
最近秋招參加的面試,經常會被問到作業系統的問題,今天有空來整理一下。正好也是鞏固一下知識,並深入掌握一下面試的套路。如果對童鞋們有幫助,那將是我最大的欣慰了。最近的面試告訴我,不管對作業系統掌握的怎麼樣,都要提前熟悉一下問題,這樣才能有條理的答出自己滿意的答案。
一,理解一下作業系統?
定義:作業系統是一個大型的程式系統,它負責計算機軟體,硬體資源的分配和管理;控制和協調併發活動;提供使用者介面,使使用者獲得良好的工作環境。 功能:作業系統最主要的功能是資源分配,目的是提高系統資源的利用率。1,處理機分配(提出程序排程策略;給出程序排程演算法;進行處理機的分派);2,儲存管理(儲存分配和儲存無關性;儲存保護;儲存擴充);3,裝置管理(裝置無關性;裝置分配;裝置的傳輸控制);4,軟體資源管理(為使用者提供更好的服務) 特性:1,併發(簡單來說,就是處理多個同時性活動的能力);2,共享(指多個計算任務對資源的共同享用,為了避免資源浪費節約成本);3,不確定性(處理的事件是不確定的) 解決的問題:1,提出解決資源分配的策略;2,協調併發活動;3,保證資料的一致性;4,實現資料的存取控制
二, 程序和執行緒以及它們之間的區別?
根本區別:程序是對執行時程式的封裝,是作業系統進行資源排程和分配的的基本單位,實現了作業系統的併發; 執行緒是程序的子任務,是CPU排程和執行的基本單位,用於保證程式的實時性,實現程序內部的併發;
所處環境:一個程式至少有一個程序,一個程序至少有一個執行緒,執行緒依賴於程序而存在;
記憶體分配:系統在執行的時候會為每個程序分配不同的記憶體空間,所以程序在執行過程中擁有獨立的記憶體單元;而多個執行緒共享程序的記憶體資源,作業系統不會給其分配記憶體。
更多關於作業系統歷史及程序/執行緒由來,請參閱Java 併發:併發背景
三,什麼是死鎖?死鎖產生的條件?
死鎖的概念
在兩個或者多個併發程序中,如果每個程序持有某種資源而又等待其它程序釋放它或它們現在保持著的資源,在未改變這種狀態之前都不能向前推進,稱這一組程序產生了死鎖。通俗的講,就是兩個或多個程序無限期的阻塞、相互等待的一種狀態。
-
死鎖產生的四個必要條件
互斥:至少有一個資源必須屬於非共享模式,即一次只能被一個程序使用;若其他申請使用該資源,那麼申請程序必須等到該資源被釋放為止;
佔有並等待:一個程序必須佔有至少一個資源,並等待另一個資源,而該資源為其他程序所佔有;
非搶佔:程序不能被搶佔,即資源只能被程序在完成任務後自願釋放;
迴圈等待:若干程序之間形成一種頭尾相接的環形等待資源關係。 -
死鎖的處理基本策略和常用方法
解決死鎖的基本方法主要有 預防死鎖、避免死鎖、檢測死鎖、解除死鎖 、鴕鳥策略 等。
1). 死鎖預防
死鎖預防的基本思想是 只要確保死鎖發生的四個必要條件中至少有一個不成立,就能預防死鎖的發生,具體方法包括:
打破互斥條件:允許程序同時訪問某些資源。但是,有些資源是不能被多個程序所共享的,這是由資源本身屬性所決定的,因此,這種辦法通常並無實用價值。
打破佔有並等待條件:可以實行資源預先分配策略(程序在執行前一次性向系統申請它所需要的全部資源,若所需全部資源得不到滿足,則不分配任何資源,此程序暫不執行;只有當系統能滿足當前程序所需的全部資源時,才一次性將所申請資源全部分配給該執行緒)或者只允許程序在沒有佔用資源時才可以申請資源(一個程序可申請一些資源並使用它們,但是在當前程序申請更多資源之前,它必須全部釋放當前所佔有的資源)。但是這種策略也存在一些缺點:在很多情況下,無法預知一個程序執行前所需的全部資源,因為程序是動態執行的,不可預知的;同時,會降低資源利用率,導致降低了程序的併發性。
打破非搶佔條件:允許程序強行從佔有者哪裡奪取某些資源。也就是說,但一個程序佔有了一部分資源,在其申請新的資源且得不到滿足時,它必須釋放所有佔有的資源以便讓其它執行緒使用。這種預防死鎖的方式實現起來困難,會降低系統性能。
打破迴圈等待條件:實行資源有序分配策略。對所有資源排序編號,所有程序對資源的請求必須嚴格按資源序號遞增的順序提出,即只有佔用了小號資源才能申請大號資源,這樣就不回產生環路,預防死鎖的發生。
2). 死鎖避免的基本思想
死鎖避免的基本思想是動態地檢測資源分配狀態,以確保迴圈等待條件不成立,從而確保系統處於安全狀態。所謂安全狀態是指:如果系統能按某個順序為每個程序分配資源(不超過其最大值),那麼系統狀態是安全的,換句話說就是,如果存在一個安全序列,那麼系統處於安全狀態。資源分配圖演算法和銀行家演算法是兩種經典的死鎖避免的演算法,其可以確保系統始終處於安全狀態。其中,資源分配圖演算法應用場景為每種資源型別只有一個例項(申請邊,分配邊,需求邊,不形成環才允許分配),而銀行家演算法應用於每種資源型別可以有多個例項的場景。
3). 死鎖解除
死鎖解除的常用兩種方法為程序終止和資源搶佔。所謂程序終止是指簡單地終止一個或多個程序以打破迴圈等待,包括兩種方式:終止所有死鎖程序和一次只終止一個程序直到取消死鎖迴圈為止;所謂資源搶佔是指從一個或多個死鎖程序那裡搶佔一個或多個資源,此時必須考慮三個問題:
- 選擇一個犧牲品
- 回滾:回滾到安全狀態
- 飢餓(在代價因素中加上回滾次數,回滾的越多則越不可能繼續被作為犧牲品,避免一個程序總是被回滾)
3,怎麼理解程序同步?
概念:程序同步就是併發程式在一些關鍵點上可能需要相互等待與互通訊息,這種互相制約的等待與互通訊息稱為程序同步。
程序互斥可以理解為千軍萬馬過獨木橋,只有一個人能獲得資源過橋。而程序同步不是互斥的反語,同步是兩個人過河,A游過去,B從橋上過,但是要求同時到河對岸,所以B不能先到,B要在橋上等A,然後同時到。
是不是很無聊,那我們來個例子吧。病員就診就是一個很好的程序同步
在這裡插入圖片描述
醫生為某病員看病,認為需要化驗,於是就為病員開了化驗單。病員取樣送到化驗室,等待化驗完畢交回化驗結構,然後繼續看病。
病員就診就是程序同步的情況:化驗程序只有在接受到看病程序的化驗單後才開始工作;而看病程序只有獲得化驗結果後才能繼續為該病員看病,並根據化驗結果確定醫療方案。
4,程序的狀態及轉換
4.1 三態模型
在這裡插入圖片描述
執行:程序在處理機上執行,單處理機系統中處於執行狀態的程序只有一個
就緒:一個程序獲得了除處理機之外的一切資源,一旦分配CPU資源就可執行。萬事俱備,只欠東風。
阻塞:一個程序正在等待某一事件的發生而暫停執行,比如等待I/O。
4.2 五態模型
說明:後來人們發現三態模型不足以描述程序的切換。比如你在聽歌,突然有電話來了,此時不可能同時接電話和聽歌。那麼只有暫停聽歌(掛起事件),接完電話,再繼續聽歌(恢復事件)。
作者:古道西風_哥哥
來源:CSDN
原文:https://blog.csdn.net/m0_37293461/article/details/82829983
版權宣告:本文為博主原創文章,轉載請附上博文連結!