當前位置:首頁 > 公眾號精選 > C語言與CPP編程
[導讀]1 ? ? 解釋一下什么是操作系統(tǒng) 操作系統(tǒng)是運行在計算機上最重要的一種軟件,它管理計算機的資源和進程以及所有的硬件和軟件。它為計算機硬件和軟件提供了一種中間層 通常情況下,計算機上會運行著許多應用程序,它們都需要對內(nèi)存和 CPU 進行交互,操作系統(tǒng)的


1


   

解釋一下什么是操作系統(tǒng)

操作系統(tǒng)是運行在計算機上最重要的一種軟件,它管理計算機的資源和進程以及所有的硬件和軟件。它為計算機硬件和軟件提供了一種中間層

通常情況下,計算機上會運行著許多應用程序,它們都需要對內(nèi)存和 CPU 進行交互,操作系統(tǒng)的目的就是為了保證這些訪問和交互能夠準確無誤的進行。

2


   

解釋一下操作系統(tǒng)的主要目的是什么

操作系統(tǒng)是一種軟件,它的主要目的有三種

  • 管理計算機資源,這些資源包括 CPU、內(nèi)存、磁盤驅(qū)動器、打印機等。

  • 提供一種圖形界面,就像我們前面描述的那樣,它提供了用戶和計算機之間的橋梁。

  • 為其他軟件提供服務,操作系統(tǒng)與軟件進行交互,以便為其分配運行所需的任何必要資源。

3


   

操作系統(tǒng)的種類有哪些

操作系統(tǒng)通常預裝在你購買計算機之前。大部分用戶都會使用默認的操作系統(tǒng),但是你也可以升級甚至更改操作系統(tǒng)。但是一般常見的操作系統(tǒng)只有三種:Windows、macOS 和 Linux。

4


   

操作系統(tǒng)結(jié)構(gòu)

4.1


   

單體系統(tǒng)

在大多數(shù)系統(tǒng)中,整個系統(tǒng)在內(nèi)核態(tài)以單一程序的方式運行。整個操作系統(tǒng)是以程序集合來編寫的,鏈接在一塊形成一個大的二進制可執(zhí)行程序,這種系統(tǒng)稱為單體系統(tǒng)。

在單體系統(tǒng)中構(gòu)造實際目標程序時,會首先編譯所有單個過程(或包含這些過程的文件),然后使用系統(tǒng)鏈接器將它們?nèi)拷壎ǖ揭粋€可執(zhí)行文件中

在單體系統(tǒng)中,對于每個系統(tǒng)調(diào)用都會有一個服務程序來保障和運行。需要一組實用程序來彌補服務程序需要的功能,例如從用戶程序中獲取數(shù)據(jù)??蓪⒏鞣N過程劃分為一個三層模型

除了在計算機初啟動時所裝載的核心操作系統(tǒng)外,許多操作系統(tǒng)還支持額外的擴展。比如 I/O 設備驅(qū)動和文件系統(tǒng)。這些部件可以按需裝載。在 UNIX 中把它們叫做 共享庫(shared library),在 Windows 中則被稱為 動態(tài)鏈接庫(Dynamic Link Library,DLL)。他們的擴展名為 .dll,在 C:\Windows\system32 目錄下存在 1000 多個 DLL 文件,所以不要輕易刪除 C 盤文件,否則可能就炸了哦。

4.2


   

分層系統(tǒng)

分層系統(tǒng)使用層來分隔不同的功能單元。每一層只與該層的上層和下層通信。每一層都使用下面的層來執(zhí)行其功能。層之間的通信通過預定義的固定接口通信。

4.3


   

微內(nèi)核

為了實現(xiàn)高可靠性,將操作系統(tǒng)劃分成小的、層級之間能夠更好定義的模塊是很有必要的,只有一個模塊 --- 微內(nèi)核 --- 運行在內(nèi)核態(tài),其余模塊可以作為普通用戶進程運行。由于把每個設備驅(qū)動和文件系統(tǒng)分別作為普通用戶進程,這些模塊中的錯誤雖然會使這些模塊崩潰,但是不會使整個系統(tǒng)死機。

MINIX 3 是微內(nèi)核的代表作,它的具體結(jié)構(gòu)如下

在內(nèi)核的外部,系統(tǒng)的構(gòu)造有三層,它們都在用戶態(tài)下運行,最底層是設備驅(qū)動器。由于它們都在用戶態(tài)下運行,所以不能物理的訪問 I/O 端口空間,也不能直接發(fā)出 I/O 命令。相反,為了能夠?qū)?I/O 設備編程,驅(qū)動器構(gòu)建一個結(jié)構(gòu),指明哪個參數(shù)值寫到哪個 I/O 端口,并聲稱一個內(nèi)核調(diào)用,這樣就完成了一次調(diào)用過程。

4.4


   

客戶-服務器模式

微內(nèi)核思想的策略是把進程劃分為兩類:服務器,每個服務器用來提供服務;客戶端,使用這些服務。這個模式就是所謂的 客戶-服務器模式。

客戶-服務器模式會有兩種載體,一種情況是一臺計算機既是客戶又是服務器,在這種方式下,操作系統(tǒng)會有某種優(yōu)化;但是普遍情況下是客戶端和服務器在不同的機器上,它們通過局域網(wǎng)或廣域網(wǎng)連接。

客戶通過發(fā)送消息與服務器通信,客戶端并不需要知道這些消息是在本地機器上處理,還是通過網(wǎng)絡被送到遠程機器上處理。對于客戶端而言,這兩種情形是一樣的:都是發(fā)送請求并得到回應。

5


   

什么是按需分頁

在操作系統(tǒng)中,進程是以頁為單位加載到內(nèi)存中的,按需分頁是一種虛擬內(nèi)存的管理方式。在使用請求分頁的系統(tǒng)中,只有在嘗試訪問頁面所在的磁盤并且該頁面尚未在內(nèi)存中時,也就發(fā)生了缺頁異常,操作系統(tǒng)才會將磁盤頁面復制到內(nèi)存中。

6


   

多處理系統(tǒng)的優(yōu)勢

隨著處理器的不斷增加,我們的計算機系統(tǒng)由單機系統(tǒng)變?yōu)榱硕嗵幚硐到y(tǒng),多處理系統(tǒng)的吞吐量比較高,多處理系統(tǒng)擁有多個并行的處理器,這些處理器共享時鐘、內(nèi)存、總線、外圍設備等。

多處理系統(tǒng)由于可以共享資源,因此可以開源節(jié)流,省錢。整個系統(tǒng)的可靠性也隨之提高。

7


   

什么是內(nèi)核

在計算機中,內(nèi)核是一個計算機程序,它是操作系統(tǒng)的核心,可以控制操作系統(tǒng)中所有的內(nèi)容。內(nèi)核通常是在 boot loader 裝載程序之前加載的第一個程序。

這里還需要了解一下什么是 boot loader。

boot loader 又被稱為引導加載程序,它是一個程序,能夠?qū)⒂嬎銠C的操作系統(tǒng)放入內(nèi)存中。在電源通電或者計算機重啟時,BIOS 會執(zhí)行一些初始測試,然后將控制權(quán)轉(zhuǎn)移到引導加載程序所在的主引導記錄(MBR) 。


8


   

什么是實時系統(tǒng)

實時操作系統(tǒng)對時間做出了嚴格的要求,實時操作系統(tǒng)分為兩種:硬實時和軟實時

硬實時操作系統(tǒng)規(guī)定某個動作必須在規(guī)定的時刻內(nèi)完成或發(fā)生,比如汽車生產(chǎn)車間,焊接機器必須在某一時刻內(nèi)完成焊接,焊接的太早或者太晚都會對汽車造成永久性傷害。

軟實時操作系統(tǒng)雖然不希望偶爾違反最終的時限要求,但是仍然可以接受。并且不會引起任何永久性傷害。比如數(shù)字音頻、多媒體、手機都是屬于軟實時操作系統(tǒng)。

你可以簡單理解硬實時和軟實時的兩個指標:是否在時刻內(nèi)必須完成以及是否造成嚴重損害

9


   

什么是虛擬內(nèi)存

虛擬內(nèi)存是一種內(nèi)存分配方案,是一項可以用來輔助內(nèi)存分配的機制。我們知道,應用程序是按頁裝載進內(nèi)存中的。但并不是所有的頁都會裝載到內(nèi)存中,計算機中的硬件和軟件會將數(shù)據(jù)從 RAM 臨時傳輸?shù)酱疟P中來彌補內(nèi)存的不足。如果沒有虛擬內(nèi)存的話,一旦你將計算機內(nèi)存填滿后,計算機會對你說

呃,不,對不起,您無法再加載任何應用程序,請關(guān)閉另一個應用程序以加載新的應用程序。對于虛擬內(nèi)存,計算機可以執(zhí)行操作是查看內(nèi)存中最近未使用過的區(qū)域,然后將其復制到硬盤上。虛擬內(nèi)存通過復制技術(shù)實現(xiàn)了 妹子,你快來看哥哥能裝這么多程序 的資本。復制是自動進行的,你無法感知到它的存在。

10


   

什么是進程和進程表

進程就是正在執(zhí)行程序的實例,比如說 Web 程序就是一個進程,shell 也是一個進程,文章編輯器 typora 也是一個進程。

操作系統(tǒng)負責管理所有正在運行的進程,操作系統(tǒng)會為每個進程分配特定的時間來占用 CPU,操作系統(tǒng)還會為每個進程分配特定的資源。

操作系統(tǒng)為了跟蹤每個進程的活動狀態(tài),維護了一個進程表。在進程表的內(nèi)部,列出了每個進程的狀態(tài)以及每個進程使用的資源等。

http://courses.cs.vt.edu/csonline/OS/Lessons/Processes/index.html ( http://courses.cs.vt.edu/csonline/OS/Lessons/Processes/index.html ) 這個網(wǎng)站上面有一個關(guān)于進程狀態(tài)輪轉(zhuǎn)的動畫,做的真是太好了。

11


   

什么是線程,線程和進程的區(qū)別

這又是一道老生常談的問題了,從操作系統(tǒng)的角度來回答一下吧。

我們上面說到進程是正在運行的程序的實例,而線程其實就是進程中的單條流向,因為線程具有進程中的某些屬性,所以線程又被稱為輕量級的進程。瀏覽器如果是一個進程的話,那么瀏覽器下面的每個 tab 頁可以看作是一個個的線程。

下面是線程和進程持有資源的區(qū)別

線程不像進程那樣具有很強的獨立性,線程之間會共享數(shù)據(jù)

創(chuàng)建線程的開銷要比進程小很多,因為創(chuàng)建線程僅僅需要堆棧指針程序計數(shù)器就可以了,而創(chuàng)建進程需要操作系統(tǒng)分配新的地址空間,數(shù)據(jù)資源等,這個開銷比較大。

12


   

使用多線程的好處是什么

多線程是程序員不得不知的基本素養(yǎng)之一,所以,下面我們給出一些多線程編程的好處

  • 能夠提高對用戶的響應順序

  • 在流程中的資源共享

  • 比較經(jīng)濟適用

  • 能夠?qū)Χ嗑€程架構(gòu)有深入的理解

13


   

什么是 RR 調(diào)度算法

RR(round-robin) 調(diào)度算法主要針對分時系統(tǒng),RR 的調(diào)度算法會把時間片以相同的部分并循環(huán)的分配給每個進程,RR 調(diào)度算法沒有優(yōu)先級的概念。這種算法的實現(xiàn)比較簡單,而且每個線程都會占有時間片,并不存在線程饑餓的問題。

14


   

導致系統(tǒng)出現(xiàn)死鎖的情況

死鎖的出現(xiàn)需要同時滿足下面四個條件

  • 互斥(Mutual Exclusion):一次只能有一個進程使用資源。如果另一個進程請求該資源,則必須延遲請求進程,直到釋放該資源為止。

  • 保持并等待(Hold and Wait):必須存在一個進程,該進程至少持有一個資源,并且正在等待獲取其他進程當前所持有的資源。

  • 無搶占(No Preemption):資源不能被搶占,也就是說,在進程完成其任務之后,只能由擁有它的進程自動釋放資源。

  • 循環(huán)等待(Circular Wait) :必須存在一組 {p0,p1,..... pn} 的等待進程,使 p0 等待 p1 持有的資源,p1 等待由 p2 持有的資源, pn-1 正在等待由 pn 持有的資源,而 pn 正在等待由 p0 持有的資源。

15


   

RAID 的不同級別

RAID 稱為 磁盤冗余陣列,簡稱 磁盤陣列。利用虛擬化技術(shù)把多個硬盤結(jié)合在一起,成為一個或多個磁盤陣列組,目的是提升性能或數(shù)據(jù)冗余。

RAID 有不同的級別

  • RAID 0 - 無容錯的條帶化磁盤陣列

  • RAID 1 - 鏡像和雙工

  • RAID 2 - 內(nèi)存式糾錯碼

  • RAID 3 - 比特交錯奇偶校驗

  • RAID 4 - 塊交錯奇偶校驗

  • RAID 5 - 塊交錯分布式奇偶校驗

  • RAID 6 - P + Q 冗余

16


   

什么是 DMA

DMA 的中文名稱是直接內(nèi)存訪問,它意味著 CPU 授予 I/O 模塊權(quán)限在不涉及 CPU 的情況下讀取或?qū)懭雰?nèi)存。也就是 DMA 可以不需要 CPU 的參與。這個過程由稱為 DMA 控制器(DMAC)的芯片管理。由于 DMA 設備可以直接在內(nèi)存之間傳輸數(shù)據(jù),而不是使用 CPU 作為中介,因此可以緩解總線上的擁塞。DMA 通過允許 CPU 執(zhí)行任務,同時 DMA 系統(tǒng)通過系統(tǒng)和內(nèi)存總線傳輸數(shù)據(jù)來提高系統(tǒng)并發(fā)性。

17


   

多線程編程的好處是什么

對不起,我忍不住想偷笑

說直白點,為什么單線程能夠處理的卻要用多線程來處理?當然是為了提高程序的裝逼并行能力了。多線程在某些情況下能夠使你程序運行的更快,這也是為什么多核 CPU 會出現(xiàn),但是多核 CPU 的出現(xiàn)會導致數(shù)據(jù)的一致性問題,不過這些問題程序員就能解決。另一個角度來說,多線程編程能夠提高程序員的編程能力和編程思維。同時也能提高程序員的管理能力,你如果把每條線程流當作羅老師時間管理的女主一樣,能夠及時協(xié)調(diào)好所有 P 友的關(guān)系,那你也是超神程序員了,所以,是誰說程序員不會做管理的?Doug Lea 大佬牛逼?。?!

ps:Doug Lea 大佬開發(fā)的 JUC 工具包,此處不加狗頭。


18


   

什么是設備驅(qū)動程序

在計算機中,設備驅(qū)動程序是一種計算機程序,它能夠控制或者操作連接到計算機的特定設備。驅(qū)動程序提供了與硬件進行交互的軟件接口,使操作系統(tǒng)和其他計算機程序能夠訪問特定設備,不用需要了解其硬件的具體構(gòu)造。

19


   

進程間的通信方式

19.1


   

通信概念

進程間的通信方式比較多,首先你需要理解下面這幾個概念

競態(tài)條件:即兩個或多個線程同時對一共享數(shù)據(jù)進行修改,從而影響程序運行的正確性時,這種就被稱為競態(tài)條件(race condition)。

臨界區(qū):不僅共享資源會造成競態(tài)條件,事實上共享文件、共享內(nèi)存也會造成競態(tài)條件、那么該如何避免呢?或許一句話可以概括說明:禁止一個或多個進程在同一時刻對共享資源(包括共享內(nèi)存、共享文件等)進行讀寫。換句話說,我們需要一種 互斥(mutual exclusion) 條件,這也就是說,如果一個進程在某種方式下使用共享變量和文件的話,除該進程之外的其他進程就禁止做這種事(訪問統(tǒng)一資源)。

一個好的解決方案,應該包含下面四種條件

    1. 任何時候兩個進程不能同時處于臨界區(qū)

    2. 不應對 CPU 的速度和數(shù)量做任何假設

    3. 位于臨界區(qū)外的進程不得阻塞其他進程

    4. 不能使任何進程無限等待進入臨界區(qū)

    忙等互斥:當一個進程在對資源進行修改時,其他進程必須進行等待,進程之間要具有互斥性,我們討論的解決方案其實都是基于忙等互斥提出的。

    19.2


       

    解決方案

    進程間的通信用專業(yè)一點的術(shù)語來表示就是 Inter Process Communication,IPC,它主要有下面幾種通信方式

    • 消息傳遞:消息傳遞是進程間實現(xiàn)通信和同步等待的機制,使用消息傳遞,進程間的交流不需要共享變量,直接就可以進行通信;消息傳遞分為發(fā)送方和接收方

    • 先進先出隊列:先進先出隊列指的是兩個不相關(guān)聯(lián)進程間的通信,兩個進程之間可以彼此相互進程通信,這是一種全雙工通信方式

    • 管道:管道用于兩個相關(guān)進程之間的通信,這是一種半雙工的通信方式,如果需要全雙工,需要另外一個管道。

    • 直接通信:在這種進程通信的方式中,進程與進程之間只存在一條鏈接,進程間要明確通信雙方的命名。

    • 間接通信:間接通信是通信雙方不會直接建立連接,而是找到一個中介者,這個中介者可能是個對象等等,進程可以在其中放置消息,并且可以從中刪除消息,以此達到進程間通信的目的。

    • 消息隊列:消息隊列是內(nèi)核中存儲消息的鏈表,它由消息隊列標識符進行標識,這種方式能夠在不同的進程之間提供全雙工的通信連接。

    • 共享內(nèi)存:共享內(nèi)存是使用所有進程之間的內(nèi)存來建立連接,這種類型需要同步進程訪問來相互保護。

    20


       

    進程間狀態(tài)模型


    cat chapter1 chapter2 chapter3 | grep tree


    第一個進程是 cat,將三個文件級聯(lián)并輸出。第二個進程是 grep,它從輸入中選擇具有包含關(guān)鍵字 tree 的內(nèi)容,根據(jù)這兩個進程的相對速度(這取決于兩個程序的相對復雜度和各自所分配到的 CPU 時間片),可能會發(fā)生下面這種情況,grep 準備就緒開始運行,但是輸入進程還沒有完成,于是必須阻塞 grep 進程,直到輸入完畢。

    當一個進程開始運行時,它可能會經(jīng)歷下面這幾種狀態(tài)


    圖中會涉及三種狀態(tài)

    1. 運行態(tài),運行態(tài)指的就是進程實際占用 CPU 時間片運行時

    2. 就緒態(tài),就緒態(tài)指的是可運行,但因為其他進程正在運行而處于就緒狀態(tài)

    3. 阻塞態(tài),除非某種外部事件發(fā)生,否則進程不能運行

    邏輯上來說,運行態(tài)和就緒態(tài)是很相似的。這兩種情況下都表示進程可運行,但是第二種情況沒有獲得 CPU 時間分片。第三種狀態(tài)與前兩種狀態(tài)不同的原因是這個進程不能運行,CPU 空閑時也不能運行。

    三種狀態(tài)會涉及四種狀態(tài)間的切換,在操作系統(tǒng)發(fā)現(xiàn)進程不能繼續(xù)執(zhí)行時會發(fā)生狀態(tài) 1的輪轉(zhuǎn),在某些系統(tǒng)中進程執(zhí)行系統(tǒng)調(diào)用,例如 pause,來獲取一個阻塞的狀態(tài)。在其他系統(tǒng)中包括 UNIX,當進程從管道或特殊文件(例如終端)中讀取沒有可用的輸入時,該進程會被自動終止。

    轉(zhuǎn)換 2 和轉(zhuǎn)換 3 都是由進程調(diào)度程序(操作系統(tǒng)的一部分)引起的,進程本身不知道調(diào)度程序的存在。轉(zhuǎn)換 2 的出現(xiàn)說明進程調(diào)度器認定當前進程已經(jīng)運行了足夠長的時間,是時候讓其他進程運行 CPU 時間片了。當所有其他進程都運行過后,這時候該是讓第一個進程重新獲得 CPU 時間片的時候了,就會發(fā)生轉(zhuǎn)換 3。

    程序調(diào)度指的是,決定哪個進程優(yōu)先被運行和運行多久,這是很重要的一點。已經(jīng)設計出許多算法來嘗試平衡系統(tǒng)整體效率與各個流程之間的競爭需求。


    當進程等待的一個外部事件發(fā)生時(如從外部輸入一些數(shù)據(jù)后),則發(fā)生轉(zhuǎn)換 4。如果此時沒有其他進程在運行,則立刻觸發(fā)轉(zhuǎn)換 3,該進程便開始運行,否則該進程會處于就緒階段,等待 CPU 空閑后再輪到它運行。

    21


       

    調(diào)度算法都有哪些

    調(diào)度算法分為三大類:批處理中的調(diào)度、交互系統(tǒng)中的調(diào)度、實時系統(tǒng)中的調(diào)度

    21.1


       

    批處理中的調(diào)度

    先來先服務

    很像是先到先得。。。可能最簡單的非搶占式調(diào)度算法的設計就是 先來先服務(first-come,first-serverd)。使用此算法,將按照請求順序為進程分配 CPU。最基本的,會有一個就緒進程的等待隊列。當?shù)谝粋€任務從外部進入系統(tǒng)時,將會立即啟動并允許運行任意長的時間。它不會因為運行時間太長而中斷。當其他作業(yè)進入時,它們排到就緒隊列尾部。當正在運行的進程阻塞,處于等待隊列的第一個進程就開始運行。當一個阻塞的進程重新處于就緒態(tài)時,它會像一個新到達的任務,會排在隊列的末尾,即排在所有進程最后。

    這個算法的強大之處在于易于理解和編程,在這個算法中,一個單鏈表記錄了所有就緒進程。要選取一個進程運行,只要從該隊列的頭部移走一個進程即可;要添加一個新的作業(yè)或者阻塞一個進程,只要把這個作業(yè)或進程附加在隊列的末尾即可。這是很簡單的一種實現(xiàn)。

    不過,先來先服務也是有缺點的,那就是沒有優(yōu)先級的關(guān)系,試想一下,如果有 100 個 I/O 進程正在排隊,第 101 個是一個 CPU 密集型進程,那豈不是需要等 100 個 I/O 進程運行完畢才會等到一個 CPU 密集型進程運行,這在實際情況下根本不可能,所以需要優(yōu)先級或者搶占式進程的出現(xiàn)來優(yōu)先選擇重要的進程運行。

    最短作業(yè)優(yōu)先

    批處理中,第二種調(diào)度算法是 最短作業(yè)優(yōu)先(Shortest Job First),我們假設運行時間已知。例如,一家保險公司,因為每天要做類似的工作,所以人們可以相當精確地預測處理 1000 個索賠的一批作業(yè)需要多長時間。當輸入隊列中有若干個同等重要的作業(yè)被啟動時,調(diào)度程序應使用最短優(yōu)先作業(yè)算法

    如上圖 a 所示,這里有 4 個作業(yè) A、B、C、D ,運行時間分別為 8、4、4、4 分鐘。若按圖中的次序運行,則 A 的周轉(zhuǎn)時間為 8 分鐘,B 為 12 分鐘,C 為 16 分鐘,D 為 20 分鐘,平均時間內(nèi)為 14 分鐘。

    現(xiàn)在考慮使用最短作業(yè)優(yōu)先算法運行 4 個作業(yè),如上圖 b 所示,目前的周轉(zhuǎn)時間分別為 4、8、12、20,平均為 11 分鐘,可以證明最短作業(yè)優(yōu)先是最優(yōu)的??紤]有 4 個作業(yè)的情況,其運行時間分別為 a、b、c、d。第一個作業(yè)在時間 a 結(jié)束,第二個在時間 a + b 結(jié)束,以此類推。平均周轉(zhuǎn)時間為 (4a + 3b + 2c + d) / 4 。顯然 a 對平均值的影響最大,所以 a 應該是最短優(yōu)先作業(yè),其次是 b,然后是 c ,最后是 d 它就只能影響自己的周轉(zhuǎn)時間了。

    需要注意的是,在所有的進程都可以運行的情況下,最短作業(yè)優(yōu)先的算法才是最優(yōu)的。


    最短剩余時間優(yōu)先

    最短作業(yè)優(yōu)先的搶占式版本被稱作為 最短剩余時間優(yōu)先(Shortest Remaining Time Next) 算法。使用這個算法,調(diào)度程序總是選擇剩余運行時間最短的那個進程運行。當一個新作業(yè)到達時,其整個時間同當前進程的剩余時間做比較。如果新的進程比當前運行進程需要更少的時間,當前進程就被掛起,而運行新的進程。這種方式能夠使短期作業(yè)獲得良好的服務。

    21.2


       

    交互式系統(tǒng)中的調(diào)度

    交互式系統(tǒng)中在個人計算機、服務器和其他系統(tǒng)中都是很常用的,所以有必要來探討一下交互式調(diào)度

    輪循調(diào)度

    一種最古老、最簡單、最公平并且最廣泛使用的算法就是 算法(round-robin)。每個進程都會被分配一個時間段,稱為時間片(quantum),在這個時間片內(nèi)允許進程運行。如果時間片結(jié)束時進程還在運行的話,則搶占一個 CPU 并將其分配給另一個進程。如果進程在時間片結(jié)束前阻塞或結(jié)束,則 CPU 立即進行切換。輪循算法比較容易實現(xiàn)。調(diào)度程序所做的就是維護一個可運行進程的列表,就像下圖中的 a,當一個進程用完時間片后就被移到隊列的末尾,就像下圖的 b。

    優(yōu)先級調(diào)度

    事實情況是不是所有的進程都是優(yōu)先級相等的。例如,在一所大學中的等級制度,首先是院長,然后是教授、秘書、后勤人員,最后是學生。這種將外部情況考慮在內(nèi)就實現(xiàn)了優(yōu)先級調(diào)度(priority scheduling)

    它的基本思想很明確,每個進程都被賦予一個優(yōu)先級,優(yōu)先級高的進程優(yōu)先運行。

    但是也不意味著高優(yōu)先級的進程能夠永遠一直運行下去,調(diào)度程序會在每個時鐘中斷期間降低當前運行進程的優(yōu)先級。如果此操作導致其優(yōu)先級降低到下一個最高進程的優(yōu)先級以下,則會發(fā)生進程切換?;蛘?,可以為每個進程分配允許運行的最大時間間隔。當時間間隔用完后,下一個高優(yōu)先級的進程會得到運行的機會。

    最短進程優(yōu)先

    對于批處理系統(tǒng)而言,由于最短作業(yè)優(yōu)先常常伴隨著最短響應時間,一種方式是根據(jù)進程過去的行為進行推測,并執(zhí)行估計運行時間最短的那一個。假設每個終端上每條命令的預估運行時間為 T0,現(xiàn)在假設測量到其下一次運行時間為 T1,可以用兩個值的加權(quán)來改進估計時間,即aT0+ (1- 1)T1。通過選擇 a 的值,可以決定是盡快忘掉老的運行時間,還是在一段長時間內(nèi)始終記住它們。當 a = 1/2 時,可以得到下面這個序列

    可以看到,在三輪過后,T0 在新的估計值中所占比重下降至 1/8。

    有時把這種通過當前測量值和先前估計值進行加權(quán)平均從而得到下一個估計值的技術(shù)稱作 老化(aging)。這種方法會使用很多預測值基于當前值的情況。

    彩票調(diào)度

    有一種既可以給出預測結(jié)果而又有一種比較簡單的實現(xiàn)方式的算法,就是 彩票調(diào)度(lottery scheduling)算法。他的基本思想為進程提供各種系統(tǒng)資源的彩票。當做出一個調(diào)度決策的時候,就隨機抽出一張彩票,擁有彩票的進程將獲得資源。比如在 CPU 進行調(diào)度時,系統(tǒng)可以每秒持有 50 次抽獎,每個中獎進程會獲得額外運行時間的獎勵。

    可以把彩票理解為 buff,這個 buff 有 15% 的幾率能讓你產(chǎn)生 速度之靴 的效果。


    公平分享調(diào)度

    如果用戶 1 啟動了 9 個進程,而用戶 2 啟動了一個進程,使用輪轉(zhuǎn)或相同優(yōu)先級調(diào)度算法,那么用戶 1 將得到 90 % 的 CPU 時間,而用戶 2 將之得到 10 % 的 CPU 時間。

    為了阻止這種情況的出現(xiàn),一些系統(tǒng)在調(diào)度前會把進程的擁有者考慮在內(nèi)。在這種模型下,每個用戶都會分配一些 CPU 時間,而調(diào)度程序會選擇進程并強制執(zhí)行。因此如果兩個用戶每個都會有 50% 的 CPU 時間片保證,那么無論一個用戶有多少個進程,都將獲得相同的 CPU 份額。

    22


       

    頁面置換算法都有哪些

    算法 注釋
    最優(yōu)算法 不可實現(xiàn),但可以用作基準
    NRU(最近未使用) 算法 和 LRU 算法很相似
    FIFO(先進先出) 算法 有可能會拋棄重要的頁面
    第二次機會算法 比 FIFO 有較大的改善
    時鐘算法 實際使用
    LRU(最近最少)算法 比較優(yōu)秀,但是很難實現(xiàn)
    NFU(最不經(jīng)常使用)算法 和 LRU 很類似
    老化算法 近似 LRU 的高效算法
    工作集算法 實施起來開銷很大
    工作集時鐘算法 比較有效的算法
    • 最優(yōu)算法在當前頁面中置換最后要訪問的頁面。不幸的是,沒有辦法來判定哪個頁面是最后一個要訪問的,因此實際上該算法不能使用。然而,它可以作為衡量其他算法的標準。

    • NRU 算法根據(jù) R 位和 M 位的狀態(tài)將頁面分為四類。從編號最小的類別中隨機選擇一個頁面。NRU 算法易于實現(xiàn),但是性能不是很好。存在更好的算法。

    • FIFO 會跟蹤頁面加載進入內(nèi)存中的順序,并把頁面放入一個鏈表中。有可能刪除存在時間最長但是還在使用的頁面,因此這個算法也不是一個很好的選擇。

    • 第二次機會算法是對 FIFO 的一個修改,它會在刪除頁面之前檢查這個頁面是否仍在使用。如果頁面正在使用,就會進行保留。這個改進大大提高了性能。

    • 時鐘 算法是第二次機會算法的另外一種實現(xiàn)形式,時鐘算法和第二次算法的性能差不多,但是會花費更少的時間來執(zhí)行算法。

    • LRU 算法是一個非常優(yōu)秀的算法,但是沒有特殊的硬件(TLB)很難實現(xiàn)。如果沒有硬件,就不能使用 LRU 算法。

    • NFU 算法是一種近似于 LRU 的算法,它的性能不是非常好。

    • 老化 算法是一種更接近 LRU 算法的實現(xiàn),并且可以更好的實現(xiàn),因此是一個很好的選擇

    • 最后兩種算法都使用了工作集算法。工作集算法提供了合理的性能開銷,但是它的實現(xiàn)比較復雜。WSClock 是另外一種變體,它不僅能夠提供良好的性能,而且可以高效地實現(xiàn)。

    最好的算法是老化算法和 WSClock 算法。他們分別是基于 LRU 和工作集算法。他們都具有良好的性能并且能夠被有效的實現(xiàn)。還存在其他一些好的算法,但實際上這兩個可能是最重要的。

    23


       

    影響調(diào)度程序的指標是什么

    會有下面幾個因素決定調(diào)度程序的好壞

    • CPU 使用率:

    CPU 正在執(zhí)行任務(即不處于空閑狀態(tài))的時間百分比。

    • 等待時間

    這是進程輪流執(zhí)行的時間,也就是進程切換的時間

    • 吞吐量

    單位時間內(nèi)完成進程的數(shù)量

    • 響應時間

    這是從提交流程到獲得有用輸出所經(jīng)過的時間。

    • 周轉(zhuǎn)時間

    從提交流程到完成流程所經(jīng)過的時間。

    24


       

    什么是僵尸進程

    僵尸進程是已完成且處于終止狀態(tài),但在進程表中卻仍然存在的進程。僵尸進程通常發(fā)生在父子關(guān)系的進程中,由于父進程仍需要讀取其子進程的退出狀態(tài)所造成的。


    免責聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

    本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
    換一批
    延伸閱讀

    9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

    關(guān)鍵字: 阿維塔 塞力斯 華為

    加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

    關(guān)鍵字: AWS AN BSP 數(shù)字化

    倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

    關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

    北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

    關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

    8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

    關(guān)鍵字: 騰訊 編碼器 CPU

    8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

    關(guān)鍵字: 華為 12nm EDA 半導體

    8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

    關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

    要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

    關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

    北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

    關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

    北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

    關(guān)鍵字: BSP 信息技術(shù)
    關(guān)閉
    關(guān)閉