Linux課程學習總結報告

2022-09-12 22:03:28 字數 2256 閱讀 8134

程式設計師編寫的程式要想獲得執行,必須首先把靜態的程式變成乙個個動態的程序,程序因建立而產生,因排程而執行,因撤銷而消亡,這便是乙個程序的乙個生命週期。在電腦的記憶體中,有著成千上萬的程序,而cpu僅僅只有乙個,那該如何管理這些程序完成程序的排程呢?

首先從程序的管理談起,程序由三部分構成——程序控制塊pcb,資料段和**段,作業系統正是通過管理程序的pcb來實現管理程序的。程序的pcb本質上是乙個結構體陣列,包含有這個程序的所有資訊,作業系統可以對外提供相應的函式去改變程序pcb中相應的域。程序的排程和pcb中的很多域相關,比如關於時間片計數器counter,程序優先順序priority,程序排程策略policy以及指向可執行佇列的下乙個和前乙個pcb的指標*next_run和*prev_run.

linux程序的排程依賴於乙個資料結構——可執行佇列,本質上也是乙個結構體陣列,其組成結構如下圖所示:

先來解釋下這個可執行佇列,可執行佇列包含有活動程序可執行佇列active和過期可執行佇列expired,他們分別指向乙個prio_array_t結構體型別變數的位址,這個prio_array_t結構體包含有三部分,分別是代表佇列中pcb數量的nr_active,代表每乙個優先順序佇列中是否有pcb的bitmap,代表140個優先順序佇列的queue。

linux的程序排程演算法具有優先順序、時間片、可剝奪、先來先服務四大特點。下面依次來談。

實時程序和普通程序採取的linux排程演算法是不同的。

普通程序:

有了上面知識的鋪墊,接下來談談具體的linux程序排程過程:

檢視下可執行佇列active指向的活動程序可執行佇列的nr_active的值,如果為0,交換active和expired兩個指標,活動程序可執行佇列變為過期程序可執行佇列,過期程序可執行佇列變為活動程序可執行佇列,進行下一步。

檢視active指向的活動程序可執行佇列的bitmap,找到第乙個不為0相應的優先順序佇列是幾號。

找到相應的優先順序佇列開始按照先來先服務的原則排程該優先順序佇列。

如果有更高優先順序的程序到來,剝奪正在執行的程序的cpu

當乙個程序時間片用完後,把該程序放到相應的優先順序佇列中,參考實時程序和普通程序採取的linux排程演算法。

linux作業系統除了能夠正常的排程程序的執行外,還應該具備有響應中斷事件的能力。為了解決cpu的高速執行和i/o裝置的低速處理之間的矛盾,linux提供了中斷機制:當對外部裝置發出讀或者寫命令後,cpu不用等待外部裝置準備資料,而是繼續排程執行就緒程序,只有當外部裝置準備好資料後,才會向cpu發出中斷訊號,cpu此時就會改變程式流,立即去響應並處理中斷事件,過程如圖所示:

在linux中,每個中斷和異常由0~255之間的乙個數(8位)來標識,稱之為中斷向量。其中0~31號的中斷向量分配給了異常處理,128號中斷向量分配給了系統呼叫,剩下的中斷向量分配給了外部中斷。中斷和異常是廣義上中斷的兩個分類,此時狹義上的中斷指的是外部中斷,由硬體觸發的中斷,比如時鐘中斷,i/o中斷等。異常是由軟體觸發的中斷,比如缺頁異常,除0異常等。

linux處理外部中斷過程如下:

在每一條指令執行週期結束後cpu都會檢視cpu的intr引腳上是否有中斷訊號,如果電平發生變化,說明有中斷產生;

cpu讀取「中斷控制器」中資料埠中的「中斷向量」;

cpu讀取「idtr暫存器」,找到「中斷描述符表idt」,根據中斷向量號找到相應的表項;

根據表項中相關位上的資料進行安全檢查,檢視此次中斷是否合法;

檢查完後,若合法,進行硬體級別的保護現場工作。

進行軟體級別的保護現場工作

呼叫do_irq函式,執行中「斷處理程式」;

執行ret_from_intr函式,進行中斷返回和恢復現場。

linux處理異常的過程如下:

當發生異常時,進行硬體級別的保護現場

將出錯碼入棧和相應的c函式位址入棧

執行error_code函式,按照pt_regs結構進一步儲存現場

把堆疊位址中的do_handler_name()函式的位址裝入edi暫存器,並在這個位置寫入fs值

執行call *%edi指令

執行ret_from_exception函式,進行中斷返回和恢復現場。

在進行異常和中斷處理時,保護現場時的核心棧情況如下入所示:

課程學習總結報告

一 linux系統 作業系統主要完成兩個目標 與硬體互動,為應用程式提供執行環境 為了防止使用者程式直接和硬體互動,將cpu分為兩種執行模式,稱使用者態和核心態 linux是乙個多使用者多工的作業系統,一般主要有4個部分 使用者程序,系統呼叫介面,linux核心,硬體 本課程的重點主要是中斷和程序管...

課程學習總結報告

要求 請您根據本課程所學內容總結梳理出乙個精簡的linux系統概念模型,最大程度統攝整頓本課程及相關的知識資訊,模型應該是邏輯上可以運轉的 自洽的,並舉例某一兩個具體例子 比如讀寫檔案 分配記憶體 使用i o驅動某個硬體等 納入模型中驗證模型。談談您對課程的心得體會,改進建議等。linux系統的組成...

Python學習總結報告

python是一門物件導向的解釋性語言 指令碼語言 這一類語言的特點就是不用編譯,程式在執行的過程中由對應的直譯器向cpu進行編譯,一邊編譯一邊執行他屬於指令碼語言,不想編譯型語言那樣先將程式編譯成二進位制在執行。1 程式塊不是以 括起來來定義的,而是依據程式的縮進來表示程式的塊和 的層次 2 程式...