作業系統複習(程式、執行緒、死鎖)
作業系統複習
1.程式的定義
程式是程式的一次執行,是程式實體的執行過程,是一個可擁有資源的獨立單位,是系統進行資源分配和排程的一個基本單位(此時未引入執行緒)
什麼是程式實體:
由程式段、相關的資料段、PCB(程式控制塊,包含識別符號和程式排程和控制相關資訊)
PCB程式控制塊的作用:
使一個在多道程式環境下不能獨立執行的程式(含資料),成為一個能獨立執行的基本單位,一個能與其它程式併發執行的程式。或者說OS是根據PCB來對併發執行的程式進行控制和管理的。PCB是程式存在的唯一標誌。
2.程式的狀態
1.三種基本狀態:
①就緒狀態:當程式分配到出CPU以外的所有必要資源後,只要再獲得cpu,便可立即執行,這個狀態叫做~~
②執行狀態:程式已獲得CPU,其程式正在執行。
③阻塞狀態:正在執行的程式由於發生某事件而無法繼續執行時,便放棄處理機而處於暫停狀態,亦即程式的執行受到阻塞,這種暫停狀態稱為~
在不少系統中程式只有上述三種狀態,在另一些系統中,又增加了一些新的狀態,如下
2.掛起狀態:
引起掛起狀態的原因:
①終端使用者的請求:當終端使用者在自己程式執行期間發現有可疑問題時,希望暫時使自己的程式靜止下來。若此時使用者程式正處於就緒狀態而未執行,則該程式暫不接受排程,以便使用者研究其執行情況或對程式進行修改。我們把這種靜止狀態稱為掛起狀態
②父程式請求:有時候父程式希望掛起自己的某個子程式,以便考查和修改該子程式,或者協調各子程式間的活動。
③負荷調節的需要:當實時系統中的工作負荷較重,已可能影響到對實時任務的控制時,可由系統把一些不重要的程式掛起
④作業系統的需要:作業系統有時候希望掛起某些程式,以便檢查執行中的資源使用情況
3.建立狀態和終止狀態:
建立狀態:
建立一個程式一般要通過兩個步驟:為一個新程式建立PCB,並填寫必要的管理資訊;把該程式轉入就緒狀態並插入就緒佇列之中。
終止狀態:
首先等待作業系統進行善後處理,然後將其PCB清零,並將PCB空間返還給系統。
3.程式同步和非同步
1.程式同步:
間接制約:當兩個程式需要同一資源時,當A程式佔用資源時,B程式就不能使用資源,從而導致阻塞,當A程式使用完畢時,B程式才能從阻塞狀態轉為就緒狀態;
直接制約:A程式需要獲取寫入記憶體,B程式需要從此記憶體中讀出資料,這是當A程式沒有寫入時,B程式就處於阻塞狀態,當A程式寫入B程式才能轉為就緒執行
注:簡單來說程式同步就是兩個程式相互影響,相互制約的一種行為現象
2.程式非同步
當一個程式執行過程中不受另一個程式的影響
3.如何實現程式同步:
①訊號量:signal=1時 ,A程式可以佔用資源,佔用資源後signal-1;此時signal=0;B程式不可佔用此資源,當A程式釋放資源後,signal+1(即signal=1)時,B程式可使用
②互斥機制:你用我就不能用,一山不容二虎
③管程機制:代表共享資源的資料結構,以及由對該共享資料結構實施操作的一組過程所組成的資源管理程式,共同構成了一個作業系統的資源管理模組,我們稱之為管程。
管程可以根據資源的情況,或接受或阻塞程式的訪問,確保每次僅有一個程式使用共享資源,這樣就可以統一管理對共享資源的所有訪問,實現程式互斥。
4.同步機制應遵循的規則:
①空閒讓進
②忙則等待
③有限等待
④讓權等待
4.程式的通訊
1.訊號量:不能傳遞複雜訊息,只能用來同步
2.共享儲存器系統:
①基於共享資料結構的通訊方式。在這種通訊方式中,要求諸程式公用某些資料結構,比如生產消費者裡面的有界緩衝區這種資料結構來實現通訊。公用的資料機構的設定及程式間同步的處理都是程式設計師的責任,增加程式設計師的負擔,因此這種通訊方式是低效的,只適於傳遞相對少量的資料。
②基於共享儲存區的通訊方式:
為了傳輸大量資料,在儲存器中劃出了一塊共享儲存區,諸程式可通過對共享儲存中的資料讀或寫來實現通訊
3.訊息傳遞系統:
程式間的資料交換是以格式化的訊息(message)為單位的,在計算機網路中成為報文,程式設計師直接利用作業系統放入一組通訊命令(原語)進行通訊,根據實現的方式不同,分為兩種:
①直接通訊方式:
指傳送程式利用OS所提供的傳送命令直接把訊息傳送給目標程式,利用通訊命令(原語)
②間接通訊方式:
指程式間的通訊需要通過作為共享資料結構的實體。該實體用來暫存傳送程式傳送給目標程式的訊息;接收程式則從該實體中取出對方傳送給自己的訊息。這種中間實體稱為信箱。利用信箱通訊方式,即可實現實時通訊,又可實現非實時通訊
4.管道通訊:
所謂’管道‘,是指用於連線一個讀程式和一個寫程式以實現它們之間通訊的一個共享檔案,又名pipe檔案。向管道提供輸入的傳送過程,以字元流形式將大量的資料送入管道;而接受管道輸出的接收程式,則從管道中接收資料。
管道機制必須提供一下三方面的協調能力:
①互斥:即有一個程式對pipe進行讀/寫操作時,另一程式必須等待
②同步:當輸入程式把一定數量的資料寫入pipe,便去睡眠等待,直到輸出程式取走資料後,再把它喚醒。
③確定對方是否存在,只有確定了對方存在,才能進行通訊
5.程式和執行緒的關係和區別
1.首先為什麼要引入執行緒:
首先在未引入執行緒之前,程式有兩個基本屬性,第一個程式是一個可擁有資源的獨立單位,第二個是程式同時又是一個可以獨立排程和分派的基本單位。
換言之,由於程式是一個資源的擁有者,因此在建立、撤銷和切換中,系統必須為之付出交大的開銷。正因如此,在系統中所設定的程式,其數量不宜過多,程式切換的頻率也不宜過高,限制了併發程度的進一步提高。
如何能使多個程式更好地併發執行同時又儘量減少系統的開銷呢?—引入執行緒 把之前程式的兩個基本屬性分開,把獨立排程和分派的基本單位賦予給執行緒
2.執行緒和程式之間的關係和區別:
①排程:
程式是一個可擁有資源的獨立單位,執行緒是可以獨立排程和分派的基本單位。
是執行緒基本不擁有資源,這樣執行緒能輕裝前進,從而顯著的提高系統的併發程度。在同一程式中,執行緒的切換不會引起程式的切換,但從一個程式的執行緒切換到另一個程式的執行緒時,會引起程式的切換。
②併發性:
在引入執行緒的作業系統中,不僅程式間可以併發執行,執行緒之間也可以併發執行,使作業系統有更好的併發性,從而能更加有效地提高系統資源的利用率。例如在一個未引入執行緒的單CPU作業系統中,僅設定一個服務程式,當該程式阻塞時,沒有其他服務程式來提供服務。而在引入了執行緒的作業系統中,則可以在一個服務程式中設定多個執行緒,當第一個執行緒等待時,第二個執行緒可以繼續執行,以提供服務。
③擁有資源:
執行緒自己不擁有系統資源,但他可以訪問其隸屬的程式的資源,即一個程式的程式碼段、資料段及擁有的系統資源可以供該程式中的所有執行緒所共享
④系統開銷:
在建立和撤銷程式時,系統都要為之建立和回收PCB,分配或回收資源,如記憶體空間和I/O裝置等,作業系統所付出的開銷明顯大於執行緒建立或撤銷時的開銷。(執行緒建立需要利用一個執行緒建立函式和相應的引數)相應的在程式切換,需要保留當前程式的CPU環境,又要設定新選中的程式CPU環境,而執行緒的切換不涉及cpu方面的操作。
⑤影響性:一個程式崩潰後,在保護模式下不會對其他程式產生影響,但是一個執行緒崩潰整個程式都死掉。所以多程式要比多執行緒健壯。
6.處理機排程的層次
7.處理機排程演算法
1.先來先服務排程演算法(FCFS):
可用於作業排程和程式排程,有利於長作業程式不利於短作業程式
2.短作業優先演算法:
該排程演算法能有效地降低作業的平均等待時間
可用於作業排程和程式排程,對長作業不利,適用於短作業
3.高優先權優先排程演算法:
為了照顧緊迫形作業,提出了這個演算法
可用於作業排程和程式排程
分為非搶佔式和搶佔式
搶佔式就是來到優先順序更高的程式,就立即停止當前程式處理優先順序較高的程式 非搶佔式相反
4.基於時間片的輪轉排程演算法:
系統將所有就緒程式按先來先服務的原則排成一個佇列,每次排程時,把CPU分配給隊首程式,並令執行一個時間片。當執行的時間片用完時,由一個計時器發出中斷請求,排程程式便據此訊號來停止該程式的執行,並把它送往就緒佇列的末尾。依次類推。
系統能在給定的時間內響應所有使用者的請求。
8.死鎖的定義
所謂死鎖,是指多個程式在執行過程中因爭奪資源造成的一種僵局,當程式處於這種僵持狀態時,若無外力作用,它們都將無法再向前推進。
9.產生死鎖的原因:
1.競爭資源:當系統中供多個程式共享的資源如印表機,其數目不足以滿足諸程式的需要時,會引起諸程式對資源的競爭而產生死鎖。
2.程式間推進順序非法:程式在執行過程中,請求或釋放資源的順序不當,也同樣會導致產生程式死鎖。
10.產生死鎖的必要條件
1.互斥條件:在一段時間內某資源只由一個程式佔有,別的請求者只能等待
2.請求和保持條件:指程式已經至少保持了一個資源,但是又提出了一個新的資源請求。而該資源請求被其他程式佔有,請求程式堵塞,但又對自己獲得的其他資源不放
3.不剝奪條件:指程式已獲得資源,不能中途剝奪,只能使用完自己釋放
4.環路等待條件:
p0等待p1佔有的資源 p1等待p2佔有的資源
11.處理死鎖的基本方法
1.預防死鎖:破壞四個必要條件中的一個或多個
2.避免死鎖:屬於事先預防的策略
3.檢測死鎖:允許發生死鎖,但可以檢測到並清除死鎖
4.解除死鎖:與檢測死鎖配套的方案
---------------------------------------------------------------------------------
。。。。有其他的遇到的在更新
相關文章
- 前端備戰21秋招之作業系統,執行緒/程式/死鎖前端作業系統執行緒
- 【作業系統】程式與執行緒作業系統執行緒
- [作業系統]死鎖作業系統
- 作業系統-執行緒作業系統執行緒
- 作業系統:多執行緒作業系統執行緒
- 執行緒中的死鎖執行緒
- 作業系統——深入理解程式和執行緒作業系統執行緒
- 作業系統-執行緒和程式的區別作業系統執行緒
- 作業系統_程式和執行緒的區別作業系統執行緒
- 【作業系統】程式的描述與控制[執行緒](4)作業系統執行緒
- Java多執行緒(五):死鎖Java執行緒
- java多執行緒(5)死鎖Java執行緒
- 如何處理執行緒死鎖執行緒
- 作業系統知識回顧(2)--程式與執行緒作業系統執行緒
- LINUX作業系統知識:程式與執行緒詳解Linux作業系統執行緒
- 一文讀懂大廠面試的作業系統面試題目(超詳細整理,執行緒,程式,死鎖)作業系統面試題執行緒
- 程式,核心執行緒,使用者執行緒,協程,纖程......作業系統世界觀執行緒作業系統
- Java 執行緒和作業系統的執行緒有啥區別?Java執行緒作業系統
- 作業系統複習作業系統
- 作業系統中的執行緒種類作業系統執行緒
- 【作業系統】1.程序和執行緒作業系統執行緒
- 多執行緒-作業練習執行緒
- 作業系統知識回顧(4)-死鎖作業系統
- java 執行緒淺解03[執行緒同步以及經典死鎖]Java執行緒
- 【Java】【多執行緒】同步方法和同步程式碼塊、死鎖Java執行緒
- 完美,騰訊技術專家總結作業系統基礎+程式和執行緒+記憶體+檔案系統+I/O+死鎖+面試題作業系統執行緒記憶體面試題
- 多執行緒複習執行緒
- JavaSE_多執行緒入門 執行緒安全 死鎖 狀態 通訊 執行緒池Java執行緒
- 理解作業系統之程式和執行緒作業系統執行緒
- ucore作業系統學習(四) ucore lab4核心執行緒管理作業系統執行緒
- JAVA CPU100%與執行緒死鎖定位Java執行緒
- 【Java】多執行緒複習Java執行緒
- 作業系統4——處理機排程與死鎖作業系統
- 2.4.1 死鎖的基本概念——作業系統筆記作業系統筆記
- ucore作業系統學習(六) ucore lab6執行緒排程器作業系統執行緒
- 【作業系統】複習薈萃(三)作業系統
- Linux雜談:程式鎖核+實時執行緒導致的讀寫鎖死迴圈Linux執行緒
- java 執行作業系統命令Java作業系統