計算機操作系統知識梳理

1、進程和線程以及它們的區別

(1)進程是對運行時程序的封裝,是系統進行資源調度和分配的基本單位,實現操作系統併發。

(2)線程是進程的子任務,是CPU調度和分派的基本單位,用於保證程序的實時性,實現進程內部併發。

(3)一個程序至少有一個進程,一個進程至少有一個線程,線程依賴進程的存在。

(4)進程執行過程中擁有獨立的內存單元,而多個線程共享進程的內存。

2、進程間的通信的幾種方式

(1)管道(pipe)及命名管道(named pipe:管道可用於具有親緣關係的父子進程間通信,命名管道除了具有管道所具有功能外,還允許無親緣關係進程的通信。

(2)信號signal):是一種比較複雜的通信方式,用於通知接收進程某個事件已經發生。

(3)消息隊列:是消息的鏈接表,克服上兩種通信方式中信號量有限的缺點,具有寫權限的進程可以按照一定規則向消息隊列中添加新信息;對消息隊列有讀權限得進程則可以從消息隊列中讀取信息。

(4)共享內存:最有用的進程間通信方式。它使得多個進程可以訪問同一塊內存空間,不同進程可以及時看到對方進程中對共享內存中數據的更新。這種方式需要依靠某種同步操作,如互斥鎖和信號量等。

(5)信號量:主要作爲進程之間及同一種進程的不同線程之間的同步和互斥手段。

(6)套接字:這是一致性更爲一般進程間通信機制,它可用網絡中不同機器之間進程間通信,應用非常廣泛。

3、線程同步的方式

1互斥量Synchronized/lock:採用互斥對象機制,只有擁有互斥對象的線程纔有訪問公共資源的權限,因爲互斥對象只有一個,所以可以保證公共資源不會被多個線程同時訪問。

2)信號量Semaphore它允許同一時刻多個線程訪問同一資源,但需要控制同一時刻訪問此資源的最大線程數。

3)事件(信號),Wait/Notify:通過通知操作的方式來保存多線程同步,還可以方便的實現多線程優先級比較操作。

4、什麼是死鎖?死鎖產生的條件?

4.1死鎖的概念:

在兩個或者多個併發進程中,如果每個進程持有某種資源而又等待其它進程釋放它或它們現在保持着的資源,在未改變這種狀態之前都不能向前推進,稱這一組進程產生了死鎖。通俗講,就是兩個或者多個進程無限期的阻塞、相互等待的一種狀態。

4.2死鎖產生的四個必要條件

1)互斥:至少有一個資源必須屬於非共享模式,即一次只能被一個進程使用;若其他申請使用該資源,那麼申請進程必須等到該資源被釋放爲止;

2)佔用並等待:一個進程必須佔有至少一個資源,並等待另一個資源,而該資源爲其他進程所佔有;

3)非搶佔;進程不能被搶佔,即資源只能被進程在完成任務後資源釋放。

4)循環等待:若干進程之間形成一種頭尾相接的環形等待資源關係。

4.3死鎖處理的基本策略和常用方法

解決死鎖的基本方法主要有:預防死鎖,避免死鎖,檢測死鎖,解除死鎖等思想。

(1)死鎖預防

死鎖預防基本思想:只要確保死鎖發生的四個必要條件至少有一個不成立,就能預防死鎖。

①打破互斥條件:允許進程同時訪問某些資源。但是,有些資源是不能被多個進程所共享的,這是由資源本身屬性所決定的,因此,這種辦法通常並無實用價值。

②打破佔用並等待條件:可以實行資源預先分配策略(進程在運行前一次性向系統申請它所需要的全部資源,若所需全部資源得不到滿足,則不分配任何資源,此進程暫不運行;只有當系統能滿足當前進程所需的全部資源時,才一次性將所申請資源全部分配給該線程)或者只允許進程在沒有佔用資源時纔可以申請資源(一個進程可申請一些資源並使用它們,但是在當前進程申請更多資源之前,它必須全部釋放當前所佔有的資源)。但是這種策略也存在一些缺點:在很多情況下,無法預知一個進程執行前所需的全部資源,因爲進程是動態執行的,不可預知的;同時,會降低資源利用率,導致降低了進程的併發性。

③打破非槍佔條件:允許進程強行從佔有者哪裏奪取某些資源,也就是說,但一個進程佔有了一部分資源,在其申請新的資源且得不到滿足時,它必須釋放所有佔有的資源以便讓其它線程使用。這種預防死鎖的方式實現起來困難會降低系統性能。

④打破循環等待條件:實行資源有序分配策略。對所有資源排序編號,所有進程對資源的請求必須嚴格按資源序號遞增的順序提出,即只有佔用了小號資源才能申請大號資源,這樣就不回產生環路,預防死鎖的發生。

(2)死鎖避免

死鎖避免的基本思想是動態檢測資源分配狀態,以確保循環等待條件不成立,從而確保系統處於安全狀態。所謂安全狀態是指:如果系統能按某個順序爲每個進程分配資源(不超過其最大值),那麼系統狀態是安全的,換句話說就是,如果存在一個安全序列,那麼系統處於安全狀態。資源分配圖算法和銀行家算法是兩種經典的死鎖避免的算法,其可以確保系統始終處於安全狀態。其中,資源分配圖算法應用場景爲每種資源類型只有一個實例(申請邊,分配邊,需求邊,不形成環才允許分配),而銀行家算法應用於每種資源類型可以有多個實例的場景。

(3)死鎖解除

死鎖解除的兩種常用方法爲進程終止和資源搶佔。所謂進程終止是指簡單地終止一個或多個進程以打破循環等待,分終止所有死鎖進程、一次只終止一個進程直到取消死鎖循環爲止。所謂資源搶佔就是指從一個或多個死鎖進程哪裏搶佔一個或多個資源,此時需考慮三問題

①選擇一個犧牲品。

②回滾到安全狀態

③飢餓(在代價因素中加上回滾次數,迴歸的越多則越不可能作爲犧牲品,避免一個進程總是被回滾)。

5、進程有哪幾種狀態?

1)就緒狀態:進程已獲得除處理機以外的所需資源,等待分配處理機資源;

2)運行狀態:佔用處理機資源運行,處於此狀態的進程數小於等於CPU數;

3)阻塞狀態:進程等待某種條件,在條件滿足之前無法執行;

 

6、線程有幾種狀態?

Java虛擬機 中,線程從最初的創建到最終的消亡,要經歷若干個狀態:創建(new)、就緒(runnable/start)、運行(running)、阻塞(blocked)、等待(waiting)、時間等待(time waiting) 和 消亡(dead/terminated)。

 

 


7、分頁和分段有什麼區別(內存管理)?

段式存儲管理是一種符合用戶視角的內存分配管理方案。在段式存儲管理中,將程序的地址空間劃分爲若干段(segment),如代碼段,數據段,堆棧段;這樣每個進程有一個二維地址空間,相互獨立,互不干擾。段式管理的優點是:沒有內碎片(因爲段大小可變,改變段大小來消除內碎片)。但段換入換出時,會產生外碎片(比如4k的段換5k的段,會產生1k的外碎片)。

頁式存儲管理方案是一種用戶視角內存與物理內存相分離的內存分配管理方案。在頁式存儲管理中,將程序的邏輯地址劃分爲固定大小的頁(page),而物理內存劃分爲同樣大小的幀,程序加載時,可以將任意一頁放入內存中任意一個幀,這些幀不必連續,從而實現了離散分離。頁式存儲管理的優點是:沒有外碎片(因爲頁的大小固定),但會產生內碎片(一個頁可能填充不滿)。

兩者不同:

(1)目的不同:分頁是由於系統管理的需要而不是用戶的需要,它是信息的物理單位;分段的目的是爲了能更好地滿足用戶的需要,它是信息的邏輯單位,它含有一組其意義相對完整的信息;

(2)大小不同:頁的大小固定且由系統決定,而段的長度卻不固定,由其所完成的功能決定

(3)地址空間不同:段向用戶提供二維地址空間;頁向用戶提供的是一維地址空間;

(4)信息共享:段是信息的邏輯單位,便於存儲保護和信息的共享,頁的保護和共享受到限制;

(5)內存碎片:頁式存儲管理的優點是沒有外碎片(因爲頁的大小固定),但會產生內碎片(一個頁可能填充不滿);而段式管理的優點是沒有內碎片(因爲段大小可變,改變段大小來消除內碎片)。但段換入換出時,會產生外碎片(比如4k的段換5k的段,會產生1k的外碎片)。

8、操作系統中進程調度策略有哪幾種?

(1)FCFS(先來先服務,隊列實現,非搶佔的):先請求CPU的進程先分配到CPU

(2)SJF(最短作業優先調度算法):平均等待時間最短,但難以知道下一個CPU區間長度

(3)優先級調度算法:優先級越高越先分配到CPU,相同優先級先到先服務,存在的主要問題是:低優先級進程無窮等待CPU,會導致無窮阻塞或飢餓;解決方案:老化

(4)時間片輪轉調度算法(可搶佔的):隊列中沒有進程被分配超過一個時間片的CPU時間,除非它是唯一可運行的進程。如果進程的CPU區間超過了一個時間片,那麼該進程就被搶佔並放回就緒隊列。

(5)多級隊列調度算法:將就緒隊列分成多個獨立的隊列,每個隊列都有自己的調度算法,隊列之間採用固定優先級搶佔調度。其中,一個進程根據自身屬性被永久地分配到一個隊列中。

(6)多級反饋隊列調度算法:與多級隊列調度算法相比,其允許進程在隊列之間移動:若進程使用過多CPU時間,那麼它會被轉移到更低的優先級隊列;在較低優先級隊列等待時間過長的進程會被轉移到更高優先級隊列,以防止飢餓發生。

9、說一說進程同步有哪幾種機制

原子操作、信號量機制、自旋鎖管程、會合、分佈式系統

10、什麼是虛擬內存?

10.1內存發展歷程

沒有內存抽象(單進程,除去操作系統所用的內存之外,全部給用戶程序使用) —>有內存抽象(多進程,進程獨立的地址空間,交換技術(內存大小不可能容納下所有併發執行的進程)—> 連續內存分配(固定大小分區(多道程序的程度受限),可變分區(首次適應,最佳適應,最差適應),碎片)—> 不連續內存分配(分段,分頁,段頁式,虛擬內存)

10.2虛擬內存

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

 

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

10.3頁面置換算法

1)FIFO先進先出算法:在操作系統中經常被用到,比如作業調度(主要實現簡單,很容易想到);

2)LRU(Least recently use)最近最少使用算法:根據使用時間到現在的長短來判斷;

3)LFU(Least frequently use)最少使用次數算法:根據使用次數來判斷;

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

10.4虛擬內存應用及優點

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

好處:

(1)在內存中可以保留多個進程,系統併發度提高

(2)解除了用戶與內存之間的緊密約束,進程可以比內存的全部空間還大

11、顛簸

顛簸本質上是指頻繁的頁調度行爲,具體來講,進程發生缺頁中斷,這時,必須置換某一頁。然而,其他所有的頁都在使用,它置換一個頁,但又立刻再次需要這個頁。因此,會不斷產生缺頁中斷,導致整個系統的效率急劇下降,這種現象稱爲顛簸(抖動)。

解決策略包括:

(1)如果是因爲頁面替換策略失誤,可以修改替換算法來解決這個問題;

(2)如果是因爲運行的程序太多,造成程序無法同時將所有頻繁訪問的頁面調入內存,則要降低多道程序的數量;

(3)否則,還剩下兩個辦法:終止該進程或增加物理內存容量。

12、局部性原理

1時間上的局部性:最近被訪問的頁在不久的將來還會被訪問;

2空間上的局部性:內存中被訪問的頁周圍的頁也很可能被訪問。

參考博客:https://blog.csdn.net/justloveyou_/article/details/78304294

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