作業系統複習
第一章 引論
1、什麼是作業系統?定義,特點,功能
定義:作業系統其實是一個軟體,是底層複雜多樣的硬體和軟體操作的抽象,同時也是資源的管理者,管理與合理利用計算機資源。即作業系統是一個控制和管理計算機硬體與軟體資源,合理地組織計算機進行工作以及方便使用者使用的大型程式。
特點:
①併發:指的是多個應用程式在單核CPU上執行,一段時間交替執行多個程式。
②共享:系統的計算機硬體和軟體資源可以給多個程式共同使用。
③虛擬,將一個物理的實體變成多個邏輯的對應物。
④非同步:也稱為不確定性,即在多道環境下(現代的作業系統基本都是多道環境),每個程式執行的時間,執行的順序是不確定的。
功能:①程式與執行緒、②記憶體管理、③檔案系統、④輸入/輸出管理
2、計算機的兩種執行狀態及特點
①核心態(也稱管態):核心態可使用所有CPU指令(類似root使用者的角色)
②使用者態(也稱目態):使用者態執行指令有範圍,即只能執行部分安全指令。通常使用者程式就是工作在使用者態,使用者程式要使用特權指令時需要向作業系統提出申請。
從使用者態切換到核心態的情況
觸發條件:系統功能呼叫(即作業系統提供給應用程式的介面)、外部中斷、異常。三者滿足其一就會發生狀態切換,其中系統功能呼叫結束後會從核心態切換回使用者態。
目態到管態這一過程的切換是由硬體來完成的,中間會產生中斷,這個中斷叫作“訪管中斷”。
中斷系統一般由硬體和軟體構成
3、系統功能呼叫的概念
系統功能呼叫就是使用者在程式中使用“訪管指令”訪問作業系統提供的子功能集合,是作業系統提供給使用者程式的介面。
4、各類作業系統的特點
批處理作業系統:和使用者無互動,允許多個使用者把多個作業提交給計算機集中處理。
分時作業系統:和使用者有互動,每個處於就緒佇列的程式都會被分配一個時間片(時間片=使用者所能忍耐的時間/最大使用者數),分時作業系統的特點:多路性、互動性、獨立性、及時性。現常用於桌面系統。
實時作業系統:具有“及時性”和“可靠性”,要求作業系統能及時響應外部事件的請求,並能在規定時間內完成對事件的處理,常用於導彈系統這種。
分散式作業系統:多臺電腦通過網路連線來共同處理一件任務。
分時與多工處理的區別:分時指的是多個使用者同時訪問一臺機器,而多工處理指的是一個使用者處理多個任務。
第二章 程式與執行緒
1、併發與並行概念
併發:指的是多個事件在同一時間間隔內交替執行
並行:指的是多個事件在同一時刻發生
2、程式的5個狀態及轉換條件
3、建立程式和fork函式
在windows系統下,建立程式使用的是系統呼叫CreateProcess()函式,若建立成功則返回true,否則返回false;在linux系統下,建立程式使用的是系統呼叫fork()函式,若子程式建立失敗則返回-1,若建立成功則返回2個值,一個是子程式返回0,一個是子程式返回pid(程式id)。
fork()函式:是一個系統呼叫,程式中使用fork()函式可以建立和父程式一模一樣的子程式出來,子程式使用父程式的棧,資料段,堆以及執行文字段的拷貝。雖然虛擬空間和父程式不一樣,但是物理空間是一樣的。(是暫時的,因為剛開始建立沒什麼區別,但當父程式發生改變了,就給子程式建立一個新的物理空間)
程式控制塊PCB(Process Control Block)是程式存在的唯一標誌。一個程式由程式、資料集合、PCB構成。
引入程式:是為了處理併發;引入執行緒:是為了提高併發性
4、程式與程式的關係和區別
關係:程式是程式的執行,而程式是程式的基礎。
區別:①程式是動態的,而程式是靜態的。②程式有生命週期,而程式只是指令的集合,不具有生命週期。③一個程式可以對應多個程式,而一個程式只能對應一個程式。
5、建立執行緒
在windows系統下,建立執行緒使用的是系統呼叫CreateThread()函式,而linux系統下,建立執行緒使用的是系統呼叫pthread_create()函式。
6、程式與執行緒的關係和區別
關係:一個程式包含多個執行緒,程式就相當於一個容器,執行緒無法脫離程式獨立存在。
區別:程式是計算機資源分配的基本單位,而執行緒是CPU排程的基本單位。
7、多道程式設計概念以及CPU利用率
多道程式支援一段時間內多個程式交替執行,即併發。多道程式設計提高了CPU的利用率。
8、臨界區及競爭條件
臨界區:對共享資源進行訪問的程式碼程式片段。
競爭條件:多個程式同時讀寫某些共享資源,而最後的結果取決於精確時序。
互斥:指的是程式之間的間接制約關係,當一個程式進入臨界區使用臨界資源時,另一個程式必須等待。只有當使用臨界資源的程式退出臨界區後,這個程式才會解除阻塞狀態。(比如程式B需要訪問印表機,但此時程式A佔有了印表機,程式B會被阻塞,直到程式A釋放了印表機資源,程式B才可以繼續執行)
9、互斥的解決方案
有忙等待、睡眠與喚醒(訊號量Semaphore)、互斥量(Mutex)、生產者與消費者問題 這幾類解決方案
忙等待
①鎖變數:首先設定一個全域性變數用於所有執行緒共享(int turn=0),在進入臨界區之前用while(turn)不斷測試turn的值,當turn=0時表示此時沒有執行緒使用臨界區,所以把turn設定為1,之後進入臨界區。對於其他程式而言,此時while(turn)這一行是成立的,所以其他執行緒會一直卡在這裡忙等待直到測試到turn=0的時候才可以進入臨界區。當處於臨界區的執行緒完成臨界區的資源訪問時就把turn設定為0,表示當前臨界區沒有執行緒訪問了,此時while(turn)這個條件不成立,其他執行緒當中就可以任意一個進入臨界區,之後再進行同樣的操作驗證全域性變數turn。 不過這個方法並不能完全解決臨界區訪問的問題(比如第一個執行緒在turn的值為0時跳過了while(turn)的驗證進入臨界區,當訪問完臨界區資源後,此時在把turn設定為1之前,執行緒切換為第二個執行緒,而這時turn的值還沒修改過來(仍然為0),於是第二個執行緒會跳過while(turn)的驗證進入臨界區,這個時候就達不到對臨界區的訪問控制了。這個turn也變成了競爭條件,但凡是共享的資料都可能成為競爭條件。)
②嚴格輪換法(也稱為自旋鎖):同樣需要設定一個變數用來識別當前該哪個執行緒執行了,我們假設有3個執行緒,他們的執行緒id我們用tid = 0;和tid = 1;和tid = 2;表示,並設定一個排隊號turn(可以這樣想,現在有一個浴室(臨界區),一次只能進一個人(一個人即一個執行緒),當浴室中有人在使用的時候其他人需要在外面排隊,每個人都有一個排隊序號(共享變數)),一開始turn為0,表示執行緒0可以先進入臨界區,其他兩個執行緒只能卡在while迴圈那裡,當執行緒0完成臨界區的訪問之後就把turn改成下一個排隊號(理解為執行緒0已經用完浴室了,他出來之後就該輪到執行緒1進入浴室),而此時執行緒2依然卡在while迴圈那裡,因為執行緒1要進入臨界區了。嚴格輪換法按字面意思理解就是嚴格按順序輪著來,執行緒0執行完就輪到執行緒1,然後執行緒2,執行緒3,…… 這種演算法也有一個問題,那就是如果執行緒0訪問完臨界區之後把turn改成1,這時候臨界區只有執行緒1有資格訪問,而執行緒2只能卡在while迴圈那裡,但是執行緒1目前還不打算進入臨界區,他還在執行其他的程式碼,那麼執行緒2就只能在那裡一直等待了,這樣就造成了一個效率的問題。(或者說演算法的效能問題)
③Peterson演算法:這個演算法就很巧妙地解決了互斥問題,它設定了一個鎖turn,當turn==process時表示程式process對訪問臨界區感興趣,同時把陣列元素interested[process]設定為true,具體的過程看下圖程式碼。巧妙在於while的判斷上(while(turn==process && interested[other]=TURE);),比如程式0先執行到while前一行程式碼,程式0切換到程式1,此時程式1在執行過程中會把turn修改為1,而當前process還是0,於是while(turn==process)就不成立了,則直接讓程式0訪問臨界區,反觀程式1的while判斷,目前turn==process是成立了,而此時程式0仍在訪問臨界區資源,則iinterested0]為TRUE也是成立的,於是程式1就一直被卡在while這裡忙等待了,知道程式0完成臨界區的訪問把interested[1]設定為FALSE,程式1才能臨界區。
睡眠與喚醒(訊號量Semaphore):睡眠與喚醒可以使用系統呼叫來做,系統為我們開發者提供了互斥問題的解決方案,也就是P、V操作。P、V操作之間的就是臨界區程式碼。
P操作:也稱為down操作,執行P操作則訊號量-1,如果此時訊號量>=0時,則繼續往下執行,否則就一直卡在P操作等待一個V操作來喚醒。
V操作:也稱為up操作,執行V操作則訊號量+1,如果此時訊號量>0時,則繼續往下執行,否則就一直卡在V操作;若<0則喚醒被訊號量阻塞的程式。
注意:執行P操作後如果訊號量>=0不成立,則會卡在P操作。當有V操作喚醒的時候就不會在P操作再做判斷了,而是直接往下執行。
在Windows中訊號量初始化semaphore = CreateSemaphore(0,1,1,0);【第二個參數列示訊號量初值,第三個引數比表示訊號量的最大值】,P操作使用WaitForSingleObject(semaphore,-1);,而V操作使用ReleaseSemaphore(semaphore,1,0);。在Linux中訊號量初始化sem_init(&semaphore,0,1);【第三個參數列示訊號量初值】,P操作使用sem_wait(&semphore);,而V操作使用sem_post(&semphore);。
訊號量使用的三要素:初值、P操作、V操作。
互斥量(Mutex):互斥量是專門用來控制互斥事件的,與上面訊號量的流程是完全一樣的,因為mutex就是訊號量的一種特殊情況。比如有2個執行緒要進入臨界區,這時候我們需要控制一次只能有一個執行緒訪問臨界區,使用mutex,當有一個執行緒先訪問到mutex的P操作之後,另一個執行緒會被卡在P操作那裡,因此只有臨界區的執行緒結束對臨界區的訪問並執行了V操作,卡在P操作的另一個執行緒才會有機會進入臨界區。
mutex是專門用來做互斥事件控制的,雖然semaphore也可以做互斥,但未免有點小題大做,semaphore一般做同步控制比較多。
在Windows中互斥量的初始化mutex = createMutex(0,0,0);,P操作使用WaitForSingleObject(mutex,-1);,而V操作使用ReleaseMutex(mutex);。在Linux中互斥量的初始化pthread_mutex_init(&mutex,0);,P操作使用pthread_mutex_lock(&mutex);,V操作使用pthread_mutex_unlock(&mutex);。
生產者與消費者問題:生產者與消費者有一個共同的緩衝區,生產者負責往裡面放資料,消費者負責往裡面取資料。生產者一旦生產了資料就可以讓消費者取,當緩衝區滿了,生產者就不能往裡面放東西了,就睡眠(sleep()),直到消費者從緩衝區中取出資料才喚醒生產者(只要緩衝區沒有滿生產者就可以往裡面放)。同樣的當緩衝區中空了,消費者就不能取資料了,就睡眠(sleep()),直到生產者往緩衝區中放了資料才喚醒消費者(只要緩衝區有東西就可以在裡面取)。
10、程式排程演算法(只考慮非搶佔式)、週轉時間、平均週轉時間
先來先服務:先到達的程式優先執行。
短作業優先:在某時刻若有多個程式都已經到達了,則讓服務時間最短的優先執行。
高響應比優先:在某時刻若有多個程式都已經到達了,則計算這些程式的響應比【響應比 = (等待時間 + 服務時間)/服務時間】,響應比大的先執行。
計算週轉時間、平均週轉時間上。(週轉時間=結束時間-到達時間。平均週轉時間=所有程式的週轉時間/所有程式個數。)
相關文章
- 【作業系統】複習薈萃(三)作業系統
- 作業系統概念知識點複習作業系統
- 作業系統複習第一章作業系統
- 作業系統複習(程式、執行緒、死鎖)作業系統執行緒
- 作業系統(考研,面試,期末複習)- 持續更新作業系統面試
- 作業系統期末複習——四大演算法作業系統演算法
- 作業系統學習作業系統
- 作業系統複習第五章2018-06-27作業系統
- 計算機作業系統第一章複習計算機作業系統
- 計算機作業系統複習知識點大集合計算機作業系統
- 【計題02組專業03號】作業系統知識點複習作業系統
- 工作學習中如何選擇作業系統?如何學習linux作業系統作業系統Linux
- 作業系統習題以及答案作業系統
- 小白如何學習作業系統?作業系統
- 國產作業系統學習作業系統
- 作業系統學習(1)-概述作業系統
- 作業系統(1)——作業系統概述作業系統
- 作業系統(一):作業系統概述作業系統
- 作業系統(二):作業系統結構作業系統
- 作業系統 作業5作業系統
- 作業系統--精髓與設計原理(第八版)複習題答案作業系統
- 作業系統2—作業系統概論(下)作業系統
- 作業系統1—作業系統概論(上)作業系統
- 《作業系統》作業系統
- [作業系統]作業系統
- 作業系統作業系統
- 學習作業系統的三本書作業系統
- 計算機作業系統|作業系統引論計算機作業系統
- 作業系統: Unix作業系統演進簡史作業系統
- 作業系統-1.1_2作業系統四個特徵作業系統特徵
- Linux系統有什麼優點?linux作業系統學習Linux作業系統
- 有人想學習作業系統原始碼嗎作業系統原始碼
- 作業系統學習筆記:裝置管理作業系統筆記
- 作業系統原理作業系統
- Linux 作業系統Linux作業系統
- 作業系統概念作業系統
- NodeOS作業系統作業系統
- Linux作業系統Linux作業系統