作業系統思考 第八章 多工

2021-07-15 01:10:20 字數 2313 閱讀 9281

原文:chapter 8 multitasking

譯者:飛龍

協議:cc by-nc-sa 4.0

在當前的許多系統上,cpu包含多個核心,也就是說它可以同時執行多個程序。而且,每個核心都具有「多工」的能力,也就是說它可以從乙個程序快速切換到另乙個程序,創造出同時執行許多程序的幻象。

作業系統中,實現多工的這部分叫做「核心」。在堅果或者種子中,核心是最內層的部分,由外殼所包圍。在作業系統各種,核心是軟體的最底層,由一些其它層包圍,包括稱為「shell」的介面。計算機科學家喜歡引喻。

究其本質,核心的工作就是處理中斷。「中斷」是乙個事件,它會停止通常的指令週期,並且使執行流跳到稱為「中斷處理器」的特殊**區域內。

當乙個裝置向cpu傳送訊號時,會發生硬體中斷。例如,網路裝置可能在資料報到達時會產生中斷,或者磁碟驅動器會在資料傳送完成時產生中斷。多數系統也帶有以固定週期產生中斷的計時器。

軟體中斷由執行中的程式所產生。例如,如果一條指令由於某種原因沒有完成,可能就會觸發中斷,便於這種情況可被作業系統處理。一些浮點數的錯誤,例如除零錯誤,會由中斷處理。

當程式需要訪問硬體裝置時,會進行「系統呼叫」,它就像函式呼叫,除了並非跳到函式的起始位置,而是執行一條特殊的指令來觸發中斷,使執行流跳到核心中。核心讀取系統呼叫的引數,執行所請求的操作,之後使被中斷程序恢復執行。

中斷的處理需要硬體和軟體的配合。當中斷發生時,cpu上可能正在執行多條指令,暫存器中也儲存著資料。

通常硬體負責將cpu設為一致狀態。例如,每條指令應該執行完畢,或者完全沒有執行,不應該出現執行到一半的指令。而且,硬體也負責儲存程式計數器(pc),便於核心了解從**恢復執行。

之後,中斷處理器通常負責儲存暫存器的上下文。為了完成工作,核心需要執行指令,這會修改資料暫存器和位暫存器。所以這個「硬體狀態」需要在修改之前儲存,並在被中斷的程序恢復執行後復原。

下面是這一系列事件的大致過程:

當中斷發生時,硬體將程式計數器儲存到乙個特殊的暫存器中,並且跳到合適的中斷處理器。

中斷處理器將程式計數器和位暫存器,以及任何打算使用的資料暫存器的內容儲存到記憶體中。

中斷處理器執行處理中斷所需的**。

之後它復原所儲存暫存器的內容。最後,復原被中斷程序的程式計數器,這會跳回到被中斷的程序。

如果這一機制正常工作,被中斷程序通常沒有辦法知道這是乙個中斷,除非它檢測到了指令間的小變化。

中斷處理器非常快,因為它們不需要儲存整個硬體狀態。它們只需要儲存打算使用的暫存器。

但是當中斷發生時,核心並不總會恢復被中斷的程序。它可以選擇切換到其它程序,這種機制叫做「上下文切換」。

通常,核心並不知道乙個程序會用到哪個暫存器,所以需要全部儲存。而且,當它切換到新的程序時,它可能需要清除儲存在記憶體管理單元(mmu)中的資料。以及在上下文切換之後,它可能要花費一些時間,為新的程序將資料載入到快取中。 出於這些因素,上下文切換相對較慢,大約是幾千個週期或幾毫秒。

在多工的系統中,每個程序都允許執行一小段時間,叫做「時間片」或「quantum」。在上下文切換的過程中,核心會設定一些硬體計數器,它們會在時間片的末尾產生中斷。當中斷發生時,核心可以切換到另乙個程序,或者允許被中斷的程序繼續執行。作業系統中做決策的這一部分叫做「排程器」。

當程序被建立時,作業系統會為程序分配包含程序資訊的資料結構,稱為「程序控制塊」(pcb)。在其它方面,pcb跟蹤程序的狀態,這包括:

下面是一些可導致程序狀態轉換的事件:

就像我們在2.3節中看到的那樣,一台計算機上可能執行著成百上千條程序,但是通常大多數程序都是阻塞的。大多數情況下,只有一小部分程序是就緒或者執行的。當中斷發生時,排程器會決定那個程序應啟動或恢復。

在工作站或筆記本上,排程器的首要目標就是最小化響應時間,也就是說,計算機應該快速響應使用者的操作。響應時間在伺服器上也很重要,但是排程器同時也可能嘗試最大化吞吐量,它是單位時間內所完成的請求。

排程器通常不需要關於程序所做事情的大量資訊,所以它基於一些啟發來做決策:

大多數排程器使用一些基於優先順序的排程形式,其中每個程序都有可以調上或調下的優先順序。當排程器執行時,它會選擇最高優先順序的就緒程序。

下面是決定程序優先順序的一些因素:

對於執行普通工作負載的多數系統,排程演算法對效能並沒有顯著的影響。簡單的排程策略就足夠好了。

但是,對於與真實世界互動的程式,排程非常重要。例如,從感測器和控制馬達讀取資料的程式,可能需要以最小的頻率完成重複的任務,並且以最大的響應時間對外界事件做出反應。這些需求通常表述為必須在「截止期限」之前完成的「任務」。

排程滿足截止期限的任務叫做「實時排程」。對於一些應用,類似於linux的通用作業系統可以被修改來處理實時排程。這些修改可能包括:

對於更苛刻的應用,尤其是實時響應是生死攸關的領域,「實時作業系統」提供了專用能力,通常比通用作業系統擁有更簡單的設計。

作業系統第八章

檔案級安全管理 檔案級安全管理,是通過系統管理員或檔案主對檔案屬性的設定,來控制使用者對檔案的訪問。有以下屬性 1 只執行 eo 只允許使用者執行該檔案。2 隱含 h 指示檔案是隱含檔案。3 索引 i 指示檔案是索引檔案。4 修改 m 指示檔案自上次備份後是否已被修改。5 唯讀 ro 只允許使用者讀...

作業系統 第八章 作業

k是千 m是兆 g是吉咖 t是太拉 8 bit 位 1 byte 位元組 1024 byte 位元組 1 kb 1024 kb 1 mb 1024 mb 1 gb 1024 gb 1 tb 時鐘演算法 書p228 乙個32位位址的計算機使用兩級頁表。虛擬位址被分成9位的頂級頁表域,11位的二級頁表域...

作業系統導論第八章筆記

title 作業系統導論第八章筆記 date 2019 10 14 13 01 03 tags 作業系統導論 第八章 categories 作業系統導論 規則1 如果a的優先順序 b的優先順序,那麼執行a 規則2 如果a的優先順序 b的優先順序,那麼輪轉a和b 規則3 工作進入系統時,放在最高優先順...