作業系統 第三章 作業系統結構
第三章 作業系統結構 系統組成 行程管理 主記憶體管理 檔案管理 I/O系統管理 輔助記憶體管理 網路 保護系統 命令直譯程式系統 作業系統服務 系統呼叫 系統結構 虛擬機器 系統設計 摘要
系統組成 龐大的作業系統可分為幾個較小的模組。 有的作業系統可能只有實作出其中的幾個模組或部分模組 每個作業系統所應用的領域不盡相同。 系統設計師必須要以需求為導向來選擇適當的組成模組。
行程管理 程式與行程間的關係 行程是電腦系統中的基本工作單位。 程式被載入到記憶體中執行之後就稱為行程。 程式平常只是被動地存在儲存裝置中,並沒有權力去使用系統上的資源。 成為行程後,就有主動的控制權去執行程式碼、並使用各種資源來完成工作。 行程是電腦系統中的基本工作單位。
行程管理 (續) 作業系統對行程管理有下列幾項目標: 管理使用者和系統行程的建立與結束。 管理使用者和系統行程的暫停與再開始。 提供行程間同步的機制。 提供行程間通訊的機制。 提供處理死結的機制。
Linux 的 ps 指令
主記憶體管理 主記憶體是一塊很大的陣列 主記憶體也是 CPU 唯一能夠直接存取到的儲存裝置。 作業系統必須小心決定程式應該要被載入到主記憶體的哪一塊空間。 不同的系統會使用不同的記憶體管理方式 大型的工作站 嵌入式系統
主記憶體管理 (續) 主記憶體管理所需要管理的事項如下: 記錄哪一塊記憶體位址被哪一個程式使用 決定程式應該載入到哪一塊記憶體空間 分配和回收記憶體空間
檔案管理 每種儲存裝置都有不同的儲存方式和物理特性。 為了讓資料的存取不受實體裝置的差異所影響,作業系統定義了一個邏輯儲存單位,以及將檔案分類的抽象概念 檔案 目錄
檔案管理 (續) 作業系統對檔案管理有下列幾個項目: 檔案的建立與刪除 目錄的建立與刪除 提供管理檔案和目錄的能力,例如複製、移動、和更改檔名等
I/O系統管理 作業系統的任務之一就是建立使用者與週邊裝置之間的友善介面。 作業系統是透過驅動程式來將複雜的週邊設備隱藏起來,使用者只要合法地使用驅動程式介面,就可以驅動週邊設備。 另一個 I/O 重要的概念 裝置即檔案
I/O系統管理 (續) I/O 系統管理包括了: 記憶體管理部分,包含了緩衝、快取與週邊並行(spooling) 裝置驅動程式的介面 特定硬體裝置的驅動程式
輔助記憶體管理 電腦系統中提供了輔助記憶體來支援主記憶體 輔助記憶體的速度相當慢,要如何讓存取輔助記憶體的動作有效率便相當地重要。 因為主記憶體主要的缺點就是斷電後裡面的資料會全部消失。 輔助記憶體的速度相當慢,要如何讓存取輔助記憶體的動作有效率便相當地重要。
輔助記憶體管理 (續) 作業系統在輔助記憶體管理中負責下列幾個部分: 管理未使用的空間 分配空間給需要的檔案 磁碟排程
網路 網路將許多電腦連結成分散式系統 在分散式系統中有各式各樣的電腦 分散式系統的好處 電腦並不共享記憶體、週邊設備或是計時器 每一台電腦都有自己的記憶體及計時器,這些電腦之間用各種線路來聯繫 在分散式系統中有各式各樣的電腦 連接這些電腦的線路就通稱為通訊網路 分散式系統的好處 增加計算的速度 資料共享 提高系統可靠度
保護系統 作業系統必須提供一些保護機制以提高系統的可靠度 行程不能任意修改別人甚至是作業系統的記憶體空間。 作業系統必須防止同時存取一個檔案所會發生的問題。 使用計時器來避免一個行程佔用 CPU 的時間太長。 讓使用者無法直接存取週邊設備的控制暫存器,只能透過系統呼叫來取得使用權。
命令直譯程式系統 在電腦系統中,除了作業系統以外,還需要其他重要的系統程式幫忙才能執行使用者所下的命令。 命令直譯程式 圖型使用者介面
第三章 作業系統結構 系統組成 作業系統服務 系統呼叫 系統結構 虛擬機器 系統設計 摘要
作業系統服務 下列幾項服務是一般作業系統都會提供的: 還有一些服務是用來提高系統的效能 程式執行 I/O 操作 檔案管理 通訊 錯誤偵測 資源分配 統計 保護
第三章 作業系統結構 系統組成 作業系統服務 系統呼叫 系統結構 虛擬機器 系統設計 摘要 行程控制 記憶體管理 檔案操作 裝置管理 訊息維護 行程間通訊 系統結構 虛擬機器 系統設計 摘要
系統呼叫 系統呼叫是使用者行程與作業系統間的介面 系統呼叫發生時 讓使用者行程可以使用週邊設備 讓使用者行程得到較高的權限來處理工作 產生陷阱中斷進入系統模式 作業系統取得控制權 判斷使用者行程請求的是哪一種系統呼叫 執行使用者行程所需要的服務
行程控制 行程不正常結束的情況有兩種 透過系統呼叫,行程可以載入或是執行其他的程式。 對新行程作某些控制 有些情形會用到讓行程等待的系統呼叫 使用系統呼叫,讓正在執行的行程不正常地結束。 行程做出不恰當的行為,引發例外中斷而使行程不正常地結束。 透過系統呼叫,行程可以載入或是執行其他的程式。 對新行程作某些控制 像是設定優先權或是執行時間的最大值等 有些情形會用到讓行程等待的系統呼叫 產生新行程後,等待新行程執行完畢後再取得控制權 讓使用者行程等待一段指定的時間後,再繼續執行未完成的工作 讓使用者行程等待一個事件或是訊號的發生再繼續執行
行程控制 (續) 行程控制類基本的系統呼叫: 正常及不正常地結束行程的執行,如 exit(), abort()。 載入並執行一個新的行程,如 execve()。 建立新的行程及終止行程,如 fork(), exit()。 取得及設定行程屬性如 getpriority(), setpriority()。 等待一段時間,如 nanosleep()。 等待事件或是發出訊號,如 wait(), kill()。
記憶體管理 作業系統必須要提供系統呼叫,動態地將記憶體分配給行程使用。 系統呼叫要能將記憶體歸還給作業系統。 作業系統要有管理記憶體的系統呼叫 如鎖定部分分頁不作置換 重新對映虛擬記憶體位址 還需要提供共享記憶體的系統呼叫。
記憶體管理 (續) 以下是記憶體管理類基本的系統呼叫: 配置及釋放記憶體,如 mmap(), munmap()。 管理記憶體,如 mlock(), munlock()。 共享記憶體,如 shmat(), shmdt()。
檔案操作 使用者可以透過系統呼叫,以檔名來建立或刪除一個檔案。 可以透過系統呼叫打開檔案,並且對檔案做一連串的讀寫,或是修改檔案的屬性。 作業系統也要提供改變檔案讀寫位置的系統呼叫。 不再使用這個檔案時,系統呼叫也要能將檔案關閉。 作業系統還要提供一套類似的系統呼叫來管理目錄。
檔案操作 (續) 以下是檔案管理類基本的系統呼叫: 建立與刪除檔案,如 create(), unlink()。 開啟檔案與關閉檔案,如 open(), close()。 讀取檔案與寫入檔案,如 read(), write()。 改變檔案讀寫的位置,如 lseek()。 取得檔案屬性與設定檔案屬性,如 stat(), chmod()。
裝置管理 檔案與裝置有著十分相似的特性,因此處理檔案用的系統呼叫大部分也可以供裝置使用。 許多作業系統將檔案與裝置合成檔案裝置結構。 以下是裝置管理類基本的系統呼叫: 要求裝置與釋放裝置,如 open(), close()。 讀取裝置與寫入裝置,如 read(), write()。 改變讀寫位置,如 lseek()。 取得裝置屬性及設定裝置屬性,如 ioctl()。 加入與移除裝置,如 create(), unlink()。
訊息維護 作業系統會將所有在系統中執行的行程以及相關的資料都記錄下來。例如: 使用者可以透過系統呼叫將相關的訊息回報給使用者。 系統時間 上線人數 剩餘的記憶體空間 系統的硬體配備 作業系統的版本 使用者可以透過系統呼叫將相關的訊息回報給使用者。
訊息維護 (續) 以下是訊息維護類基本的系統呼叫: 取得時間日期與設定時間日期,如 gettimeofday(), settimeofday()。 取得系統資料與設定系統資料,如 sched_setparam(), sched_getparam()。 取得行程、檔案及裝置的屬性,如 getpid(), getppid(), ioctl()。 設定行程、檔案及裝置的屬性,如 setuid(), ioctl()。
行程間通訊 兩種常見的行程間通訊模式 訊息傳遞模式 共享記憶體模式 訊息傳遞模式每次傳遞訊息都需要經過作業系統,因此比較沒有效率。 行程間就不需要考慮同步的問題。 共享記憶體模式 存取速度會比訊息傳遞模式快。 必須視情況加入同步的機制。
行程間通訊 (續) 以下是行程間通訊類基本的系統呼叫: 建立通訊與停止通訊,如 open(), close()。 收送訊息,如 read(), write()。 收送狀態及資料,如 exit(), wait(), waitpid()。
行程間的兩種通訊模式 作業系統 行程A 行程B M 1 2 共享記憶體 (a) 訊息傳遞模式 (b) 共享記憶體模式
第三章 作業系統結構 系統組成 作業系統服務 系統呼叫 系統結構 簡單結構 分層方法 微核心 虛擬機器 系統設計 摘要
系統結構 維護與修改作業系統是一件龐大又複雜的工程,需要好好規劃。 常見的方法是 將作業系統模組化 每個模組都要經過周詳的定義 形成一個有組織的系統結構
簡單結構 MS-DOS 是以建立一個簡單的小系統為目標來實作。 MS-DOS 希望以最簡單的方法來提供使用者最多的功能。
MS-DOS 系統結構 應用程式 常駐程式 MS-DOS驅動程式 ROM BIOS 驅動程式
簡單結構 Unix 一些常用的技術來輔助作業系統的模組化 Unix 系統架構分為核心及系統程式兩個部份。 這種方式可以讓作業系統對電腦硬體與應用程式作較佳的控制。 一些常用的技術來輔助作業系統的模組化 由上而下的作法
Unix 系統結構 使用者 命令直譯程式 編譯器和直譯器 系統函式庫 核心的系統呼叫介面 訊號 終端機處理 終端機驅動程式 字元 I/O 系統 檔案系統 置換 區塊I/O系統 磁碟和磁帶驅動程式 CPU排程 分頁替換 需求分頁 虛擬記憶體 硬體的核心介面 終端機控制器 終端機 裝置控制器 磁碟、磁帶、光碟 記憶體控制器 記憶體
分層方法 分層方法是將作業系統模組化的方法之一。 分層方法最主要的好處就是模組化,這個方法讓除錯更加容易。 例如一個系統若是分為 N 層的話,最底層(第零層)是硬體,而最高層(第 N 層)是使用者介面,作業系統也是其中一層。 分層方法最主要的好處就是模組化,這個方法讓除錯更加容易。 分層方法的缺點是執行起來會比較沒有效率 在每一層往下尋求服務時,都會需要傳遞些資料或是參數,因此系統中的層次越多,對系統的額外負擔也會越大。
微核心 微核心就是很小的核心 微核心的優點是作業系統容易擴充與維護。 巨大核心內不必要的模組盡量移出,改由使用者層或是函式庫來處理這些服務。 核心內只剩最重要的服務。 微核心的優點是作業系統容易擴充與維護。
第三章 作業系統結構 系統組成 作業系統服務 系統呼叫 系統結構 虛擬機器 實作 優點 系統設計 摘要
虛擬機器 虛擬機器最主要的概念是希望每個在電腦系統中的使用者都認為自己擁有一整部電腦,而且這部電腦上的資源都由一個人獨享,甚至隨時可以重新開機。 虛擬機器是以分享電腦中的實體資源來達成每個使用者都擁有一部真實電腦的假象 利用排程讓行程分享 CPU 資源,使得行程以為自己擁有 CPU。 利用週邊並行和檔案系統的作法,提供虛擬的讀卡機和虛擬的印表機。 使用者的終端機則可以提供虛擬機器的控制台。 虛擬機器主要的困難是發生在磁碟系統中 可以在實體磁碟上切割出數個虛擬磁碟供給虛擬機器使用。
虛擬機器的系統層次 硬體 虛擬機器 核心 行程
實作 虛擬機器要能夠模擬出實體機器所提供的功能給使用者。 虛擬機器和實體機器主要的不同在於執行的時間差異: 虛擬機器在處理 I/O 時是用週邊並行的方式,所以可以節省一些時間。 虛擬機器必須要直譯每個指令,這又會浪費一些時間。
優點 系統資源可以得到完全的保護。 虛擬機器也是個很好的研究與發展作業系統的工具。 虛擬機器能讓不同架構的硬體能夠相互執行彼此的程式。
第三章 作業系統結構 系統組成 作業系統服務 系統呼叫 系統結構 虛擬機器 系統設計 設計目標 機制和策略 實作 摘要
系統設計 在設計一個系統之前,最重要的是先定義好系統的目標與規格。 系統的設計會與所選擇的硬體與系統的類型有關。 每種系統都有不同的特性以及需要支援的硬體。 設計的問題並沒有一個最佳解法。
設計目標 系統設計的需求基本上分為兩類 如何定義作業系統的要求並沒有一定的答案 有些一般性的原則可以提出來供作參考 使用者的需求 系統的需求 隨著應用的環境不同,作業系統的需求也會不同。 有些一般性的原則可以提出來供作參考 軟體工程
機制和策略 機制是指做一件事的目標或方向。 策略是指做這件事的具體方法。 機制與策略分開的例子 微核心 Linux 作業系統的排程 微核心系統的機制就是保留最少的核心功能 策略就是以核心模組或是使用者的程式提供系統服務。 Linux 作業系統的排程 它的機制是以優先權來排程。 策略是系統與使用者都可以對權重作調整。
實作 傳統的作業系統都是以組合語言寫成的。 現今的作業系統也可以用高階語言和組合語言混合來寫: 高階的程式碼來撰寫系統的好處 Linux, MicroSoft ? 高階的程式碼來撰寫系統的好處 減少程式開發的時間 程式碼更精簡 容易瞭解 方便除錯 編譯器可以最佳化 容易移植
實作 (續) 高階語言所實作出來的作業系統有下列缺點 其他影響速度因素 系統設計師要能找出系統效率的瓶頸並想辦法增進 執行速度較慢 需要較大的執行空間 其他影響速度因素 資料結構 演算法 系統設計師要能找出系統效率的瓶頸並想辦法增進 監督系統的運作情形 加入額外的程式來計算與偵測系統的行為 資料分析 統計出系統各部分的執行效率
摘要 (1) 系統組成 系統結構 虛擬機器 作業系統可以依照提供給使用者服務的功能性,將系統分為幾個部分。 尋求較好的系統結構,讓作業系統能夠簡單地被實作出來。 能夠有系統地除錯。 虛擬機器 行程擁有獨占整個電腦資源的錯覺。 虛擬機器非常適合用來進行作業系統的開發與除錯。
摘要 (2) 系統設計 實作作業系統 將機制與策略分開對於作業系統設計的彈性有相當大的影響 對硬體相關和瓶頸的部分使用組合語言來加強。 一點策略的改變可能都會影響到基本的機制運作。 如果採用一般性的機制並且與策略分開設計,只需要稍微修改就可以將系統換成新的策略。 實作作業系統 對硬體相關和瓶頸的部分使用組合語言來加強。 其餘的部分則使用高階語言配合正確的資料結構及演算法。