第四章-----程式

飄過的小熊發表於2016-09-01

第四章—–程式

標籤(空格分隔): 作業系統之哲學原理



程式概論

程式管理。記憶體管理和檔案管理是作業系統的三大核心功能

什麼是程式
就是一個程式載入到記憶體後就變成程式,程式=程式+執行;
程式讓每一個使用者感覺到自己獨佔CPU,因此程式就是為了在CPU上實現多道程式設計而出現的概念


程式模型

  • 物理層:每一個程式佔用一片記憶體空間,因此這裡看來程式就是記憶體的某片空間。但是在任意時刻一個CPU只能執行一條指令,程式也就只能有一個,到底執行哪一個程式由物理程式計數器指定從物理層來說所有的程式共用一個程式計數器
  • 邏輯層:每個程式可以執行,也可以掛起讓別的程式執行,之後又接著執行。這樣,程式就需要記住自己每次掛起時所處的位置。這樣來說,在邏輯層來說每個程式都有自己的計數器,程式計數器可以有很多個
  • 時間層:每個程式都必須向前推進。執行一段事件後都有一定的工作量。不能返回。

注意:程式不一定必須終結,事實上,很多的系統程式是不會終結的,除非強制終止和關機

程式模型的實現(抽象整個程式的工作過程)

對於作業系統來說,程式是提供的一種抽象,目的是通過併發來提高系統利用率,同時還能縮短系統響應時間。
首先需要一個物理基礎。程式的物理基礎就是程式,程式執行在計算機上就需要解決程式的儲存:給程式分配記憶體,由於可以多個程式並行,考慮如何使他們共享一個實體記憶體不發生衝突,於是就需要記憶體管理。此外多個程式在CPU上的執行需要進行交接或者切換,就需要解決另一個問題:程式排程


多道程式設計的好處

以前是理解錯了,以為多個程式在同一時刻狀態是可以同時執行的,其實不是這樣的。假象是多個程式同時執行,但是是分時間輪流來的,同一時刻的CPU只能執行一個程式。多道程式設計的原理就是在一個程式使用完CPU後執行IO操作時就切換另一個程式,不會存在佔著茅坑不拉屎的狀態,於是就提高了CPU的利用率。當然道數的增加也是有限度的,叫做極限。超過這個極限之後,效果就會下降。

除了提高CPU的利用率外,更大的好處是改善了系統的響應時間,即使用者的等待時間


程式的產生與消亡

程式的產生有很多種情況,類比人類來說:

  • 系統初始化(神創造人)
  • 執行程式創立程式(人生子)
  • 使用者請求創立新程式(試管嬰兒)

程式的消亡事件可以分為四種情況:

  • 壽終:程式完成執行退出
  • 自殺:程式因為錯誤而自行退出
  • 他殺:程式被其他程式終止
  • 處決:程式因異常而被強行終結

一般程式設計時追求的前兩種。他殺:主要是父程式發出命令終止子程式。也可以一個使用者殺死自己的程式,但是不能殺死別人的程式,只有超級使用者才能殺死任何程式。處決:就是非法操作,例如除0或者訪問出界。作業系統捕獲到這種異常後終止造成異常的程式


程式的層次結構

父程式建立子程式,子子孫孫就是所謂的程式樹

程式的狀態

第一個肯定是執行。
下面來分析掛起,注意的是掛起!=阻塞
引起掛起的原因有兩種:

  • 由於某種原因執行了阻塞操作,由於阻塞操作需要等待結果才能繼續執行,於是這個程式就被作業系統掛起,讓其他程式運轉(自身原因)
  • 一個程式執行的時間太長,為了公平,作業系統將其掛起,讓其他程式也有機會執行。(作業系統原因)

因此將程式狀態分為三種:執行,阻塞,就緒

在三種狀態之間進行轉換有6種情況:

  • 執行—就緒
  • 執行—阻塞
  • 阻塞—就緒
  • 就緒—阻塞
  • 阻塞—執行(理論上可以,不過沒有實際的價值而被作業系統禁止)
  • 就緒—阻塞(不能)

程式與地址空間

程式空間又叫地址空間。地址空間就是程式要用的所有資源。地址空間沒有任何的動作。程式與地址空間的研究內容就是如何讓多個程式共享一個實體記憶體。


程式管理

作業系統要知道要管理的內容的所有資訊

程式管理所需要的手段

作業系統用於維護程式記錄的結構就是程式表或程式控制模組(Process Control Block)PCB,保持在作業系統所在的核心空間,這裡面存放的是有關程式的全部資料。一般來說:資訊包括暫存器,程式計數器,狀態字,棧指標,優先順序,程式ID,訊號,建立時間,所耗的CPU時間等等。採納的資料結構主要是線性表,連結串列和結構。當然也是可以使用樹或圖。

程式的建立過程(程式的產生過程)

  1. 分配程式控制塊
  2. 初始化機器暫存器
  3. 初始化頁表
  4. 將程式程式碼從磁碟讀進記憶體
  5. 將處理器狀態設定為“使用者態”
  6. 跳轉到程式的起始地址(設定程式計數器)

注意到:第五步是處理器狀態已經被設為使用者態,而第六步的跳轉指令是需要在核心態下進行的。於是就是需要硬體來幫忙了。硬體必須將5,6步作為一個步驟同時完成。

程式在不同的作業系統的建立方法是不盡相同的,Windows和UNIX就有很大的不同,各有優缺點

程式管理要處理的問題

  • 程式管理要處理的最大問題就是資源分配。希望所有的程式能夠高興的相處在一起。我們的本性還是追求公平的。
  • 還有一個問題要考慮,就是最優。效率問題。每個程式分配同樣的資源肯定不行。不如讓一部分人先富起來,給他們優先的資源使用權。

公平與效率就成了程式管理中的永恆主題,天平的不同傾斜將引出不同的程式管理模式


程式的缺陷

程式的好處:既提高了CPU的利用率,又縮短了系統的響應時間
程式的缺陷:只能在同一時間做一件事情。如果想同時做兩件事情,程式就不夠用了。
這裡要注意區分的是:同時做兩件事指的是在同一程式中,用兩個程式分別做。從外部的角度來看,同時做兩件事似乎事可以的。

相關文章