《現代作業系統》讀書筆記之程序一

2021-07-16 15:29:16 字數 2098 閱讀 8234

工作幾年,越來越感覺到作業系統的重要性,記得在上課時老師說過一句話。工作幾年後,必須得返回來看看作業系統,會有與學生時代不一樣的理解。看到別人都在寫寫部落格,自己也手癢想嘗試下。僅僅代表自己的理解,如有錯誤之處,敬請指出。

1:程序

在該書中對程序的定義:在程序模型中,計算機上所有可以執行的軟體,通常也包括作業系統,被組織成若干順序程序,簡稱為程序。乙個程序就是乙個正在執行程式的例項,包括程式計數器,暫存器和變數的當前值。

程序模型的核心思想就是:乙個程序是某種型別的乙個活動,它有程式,輸入,輸出以及狀態。單個處理器可以被若干程序共享,它使用某種排程演算法決定何時停止乙個程序的工作,並轉而為另乙個程序提供服務。

乙個cpu在同一時間只能真正一次執行乙個程序,所以在單核時代多程序其實就是每個程序擁有乙個虛擬cpu,並不是嚴格上的多程序,只有擁有兩個核或者以上,才能真正實現多程序。

每個程序負責管理自己的資源,比如程式計數器,記憶體等資訊,而實際上在物理上只有乙個。

2:建立程序

在我做實際專案中,有些在應用系統中其實只執行乙個應用程序(比如華為s系列交換機,其實內在只是啟動了乙個vos.o,從而避免了複雜的程序互動,較少程序切換,增加實時性),將程序的建立放在系統啟動。

該書指出一般程序的建立主要有四種方法:

1:系統初始化

2:執行了正在執行的程序所呼叫的程序建立系統呼叫(syscall)

3:使用者請求建立乙個新程序

4:乙個批處理作業的初始化。

其中在系統啟動時,建立程序,一般都是稱之為守護進行(daemon).

新的程序也可以後建立。乙個正在執行的程序實際上會經常發出系統呼叫,以建立乙個或多個新程序進行協助其工作。在所要從事的工作可以容易地劃分成若干相關的但沒有相互作用的程序,建立新的程序就特別效果。在參加的乙個交換機多核專案中,就利用了該書的這種方法,為了提高交換機上處理協議的能力,專門在乙個cpu的進行資料的收發,然後交給其他cpu進行業務上的處理。

在有些互動式系統中,輸入乙個命令或者雙擊也可以啟動乙個程序。

最後一種,一般在大型機上用到。

從上面可以看出,新程序一般都是由於乙個已存在的進行執行了建立程序的系統呼叫而建立。在linux系統中一般都是呼叫fork(後面將會開專題並結合實驗來講)。它會將所有父程序的資源做乙個相同的副本,儲存映像。檔案描述符等完全一樣。通常,子程序接著執行execue等,以修改其其儲存映像並執行乙個新的程序。

3:程序終止

在該書中指出,程序終止主要由以下幾種情況:

1:正常退出(自願的)

2:出錯退出(自願的)

3:嚴重錯誤(非自願的)

4:被其他程序殺死(非自願的)

正常退出:程序正常完成其工作而終止。

出錯退出:比如使用者輸入命令行時,輸入乙個錯誤引數等。

嚴重錯誤:程式記憶體時, 出現非法指令,引用不存在的記憶體,除數為零時,段錯誤(page fault)等等。

被其他程序殺死:其讓他程序通過呼叫系統呼叫,kill掉程序。

4:程序狀態

每個程序在任意時刻都有自己的狀態。

一般在作業系統中,程序主要有三種狀態:就緒,執行,堵塞。

在該書中,狀態1, 2, 3 ,4標註的不是很好。我將按照自己的理解,從程序建立開始來講。

當新的程序被建立完成時,就會處於就緒狀態,等待系統排程器 被調到。如果該程序被作業系統排程到將會處於執行狀態,即就是圖中的3轉換過程。

當程序處於執行狀態時,如果在程序中呼叫了堵塞函式,比如乙個程序可以執行諸如pause的系統呼叫來程序堵塞狀態, 或者從乙個裝置檔案中讀取資料時,沒有資料輸入,都會進入堵塞狀態。就是狀態1.

在程式處於執行狀態時,作業系統認為乙個執行程序占用處理器的實際過長(時間輪轉片演算法),就會有排程器決定,讓出cpu使用權,使其他程序執行。這時程序將會從執行態進入到就緒態。就是狀態2. 如果系統時按照優先順序搶占式的,該程序將會被乙個高優先順序的進行搶占,從而進入到就緒態。

處於堵塞態的進行,如果所等待的外部事件發生,比如使用者輸入資料,該程序將會進入就緒態,即是4,等待排程器對該程序的排程。

下一節將會講敘fork,以及做些小實驗對其程序理解。

讀書筆記 現代作業系統

ch1.1.作業系統中,抽象非常重要,乙個複雜的任務可以抽象成多個簡單的子任務,將複雜的硬體抽象成簡單的介面,書中針對向上層應用提供的介面做詳細的講解,但是對於使用者 終端使用者 介面不會做研究.2.作業系統中的資源有時間資源和空間資源,以及硬碟的空間資源,時間資源是時間復用的 如cpu的輪轉 空間...

《現代作業系統》讀書筆記 執行緒

執行緒是最小的任務排程單位,是依賴於程序而存在的迷你程序。和程序一樣,執行緒也有三種狀態 執行 就緒 阻塞。我認為,執行緒是程序中任務真正的執行者,而程序提供了記憶體空間 cpu 程式計數器以及暫存器讓執行緒使用。對於程序來說,多個程序之間無法分享記憶體空間,對於一些應用而言,共享記憶體空間的能力是...

現代作業系統 什麼是作業系統?(讀書筆記)

1 抽象是管理複雜性的乙個關鍵。好的抽象可以把乙個幾乎不可能管理的任務劃分為兩個可管理的部分。第一部分是有關抽象的定義和實現,第二部分是用這些抽象解決問題。畫外 上家公司的老闆前一段時間還發了一條類似朋友圈。講抽象和解決問題的。2 程式設計師直接和作業系統及其抽象打交道 終端使用者和使用者介面提供的...