480 likes | 592 Views
第八章. 系統軟體. 第八章 教學目的. 熟悉作業系統的功能 , 程式寫作工作 , 資料庫軟體 , 以及交易管理 . 了解每個軟體元件在維護電腦系統及其資料完整性所扮演的角色. 8.1 簡介. 如果一個世界上最大最快的電腦不能對使用者提供有效率的服務 , 那也是沒用的 . 使用者透過應用程式來感覺電腦 . 這些程式最後是由電腦的硬體來執行的 . 系統軟體 – 以作業系統和中介軟體的型式還看 - 是種將所有事情接合在一起的東西. 8.2 作業系統. 作業系統的演進和電腦硬體的演進是同時並行的 .
E N D
第八章 系統軟體
第八章 教學目的 • 熟悉作業系統的功能, 程式寫作工作, 資料庫軟體, 以及交易管理. • 了解每個軟體元件在維護電腦系統及其資料完整性所扮演的角色.
8.1 簡介 • 如果一個世界上最大最快的電腦不能對使用者提供有效率的服務, 那也是沒用的. • 使用者透過應用程式來感覺電腦. 這些程式最後是由電腦的硬體來執行的. • 系統軟體 – 以作業系統和中介軟體的型式還看- 是種將所有事情接合在一起的東西.
8.2 作業系統 • 作業系統的演進和電腦硬體的演進是同時並行的. • 隨著硬體越來越強大, 作業系統讓使用者能更輕易的駕御機器. • 在主記憶體還是以kilobytes計算, 而且只有磁帶的時代, 作業系統只是簡單的常駐監督程式而已(resident monitor programs). • 常駐監督程式只能載入和終止程式.
8.2 作業系統 • 在1960年代, 硬體已經足以提供多元程式(multiprogramming) 的執行概念, 也就是能同時執行多個工作. • 多元程式是將CPU的時間切成片段 (a timeslice) 分配給每個需要的行程 (process)來達成的. • 互動式多元程式系統稱為分時系統 (timesharing systems). • 當CPU由某個行程替換成另一個行程時, 我們稱之為環境切換 (context switch ).
8.2 作業系統 • 今日, 多處理器系統已經十分常見. • 它們給作業系統設計者很多的挑戰, 包括這些處理器怎麼同步, 還有之間如何才不會互相影響. • 緊密式耦合 (Tightlycoupled)多處理器系統共享一個記憶體和同一組I/O裝置. • 對稱式多處理器系統 (Symmetric multiprocessor systems) 是緊密式耦合且負載平衡式的.
8.2 作業系統 • 鬆散耦合多處理器系統的記憶體在實體上是分開的. • 我們通常稱為分散式系統(distributed systems). • 另一種分散式系統是網路系統, 它是由一些協同工作的工作站所連結而成的. • 即時 (Real time)作業系統是根據環境的變化來控制電腦的. • 嚴格即時 (Hard real time)系統 的時間性比較緊迫, 軟性即時(soft real time) 系統則比較沒那麼嚴僅.
8.2 作業系統 • 個人電腦的作業系統是為了使用方便而不是高效能考量. • 小型電腦作業系統最大的突破就是BIOS (basic input-output operating system)晶片, 它讓單一的作業系統能在不同的小系統上運行 • BIOS會處理不同週邊和協定的問題.
8.2 作業系統 • 在1980年代, 市場上出現了第一個圖型介面式作業系統. • 大家曾經一度認為這種作業系統只適用在桌上型電腦出版業系統和電腦遊戲. 現在, 他們似乎已然成為科技的入門和電腦基礎教育的一環. • 曾經只有伺服器作業系統, Linux 宣稱要將UNIX作業系統引入桌上型電腦中.
8.2 作業系統 • 作業系統有二個很重要的元件: 核心 (kernel) 和系統程式. • 作業系統的核心主要負責排程, 同步, 記憶體管理, 中斷處理, 並且提供安全性和保護. • 微核心 (Microkernel)系統只提供很少的功能, 大多數的服務都是由外部程式來進行的. • 單一式 (Monolithic) 系統的所有服務都是由單一個作業系統負責的.
8.2 作業系統 • 微核心系統的安全性較佳, 也較容易維護, 可移值性高, 但執行上慢. • 像是 Windows 2000, Mach, 和 QNX. • 對稱式多處理器電腦是最適合微核心系統的. • 單一式系統執行速度快, 但是很難在不同的架構上移植. • 像 Linux, MacOS, 和 DOS.
8.2 作業系統 • 行程管理是作業系統服務的核心部份. • 作業系統會建立行程, 排程存取資源的順序, 刪除行程, 並且在行程執行重新分配資源. • 作業系統會監控每個行程的行為以避免當共享資源時會發同步的問題. • 如果行程之間要互相溝通, 就要透過作業系統.
8.2 作業系統 • 作業系統會排列行程執行的順序. • 首先, 作業系統會決定那個行程可以使用. • 這是長程排程(long-term scheduling). • 在選擇了一些行程後, 作業系統會決定在某一時間點那一個可以使用. • 這是短程排程(short-term scheduling). • 當某個行程在CPU中要被另一個行程取代時, 稱為環境切換. • 有關該行程的狀態資訊在環境切換時要被保留起來.
8.2 作業系統 • 短程排程可以是可插隊或不可插隊的. • 在不可插隊排程中, 行程只有自己中止或是等待別的資源時才會釋放. • 在可插隊排程中, 每個程序分配一個時間片段. 當這個時間片斷用完了就會發生環境切換, 換入另一個行程. • 環境切換也可能發生在一個高優先權的行程需要使用到CPU時.
8.2 作業系統 • CPU的四種排程方法 : • 先來先服務 First-come, first-served:如果所有的工作都取得所需的資源, 就根據到達的順序來服務. • 最短工作優先 Shortest job first:最小的工作優先服務. (問題是要怎麼知道那一個是最小的!) • 循環式 Round robin:每個工作給定一段CPU時間. 當時間到時就進行環境切換. • 優先式 Priority: s當有較高優先權的工作需要CPU時, 就可以插隊使用CPU.
8.3 保護環境 • 很多作業系統所扮演的角色是資源管理者和保護者, 所以它們會提供保護環境, 它會將行程之間或一組行程互相隔離開來. • 虛擬機器, 子系統, 分割是三種最普遍的保護方式. • 這些環境簡化了系統管理和控制, 並且可以建構出可以執行該程式的模擬機器.
8.3 保護環境 • 虛擬機器保護還境會營造一個環境(image), 這個環境可能是一個完不全不同的架構, 讓某行程在此環境內執行. • 虛擬機器事實上是一部想像的電腦. • 虛擬機器之下的實體機器是由核心所控制. 核心會接收並管理所有從虛擬機器中行程發出的資源請求. 下一張投影片有清楚的圖示.
8.3 保護環境 • 子系統是另一種保護環境. • 子系統是一種邏輯上不同的環境, 這些環境可以個別控制和管理. 它們可以獨立的停止或開始而跟別人無關. • 子系統可以有特殊的用途, 像是控制I/O或是虛擬機器. 其它像是將大型應用系統分割使其更好管理. • 在很多情況下, 要讓行程使用的資源必需先讓子系統可預見才行. 下一張投影片有清楚的圖示.
8.3 保護環境 • 在超大型電腦中, 子系統對建立保護環境並沒有多大的幫助. • 邏輯分割 (Logical partitions (LPARs)) 提供了較高的屏障: 在某個邏輯分割內執行的行程是不能存取另一個邏輯分割內的行程的, 除非之間有建立連接 (即, FTP). • LPAR技術是近年來將數百台小型伺服器當成一單一大型系統的推手. 下一張投影片有清楚的圖示.
8.4 程式寫作工具 • 程式寫作工具在作業系統和硬體環境的範籌內實現了軟體創作的機制. • 所有程式寫作工具中, 最簡單的就是組譯器了. 它能將助憶指令翻譯為機器碼. • 大多數的組譯器都要讀原始碼二次才能完成轉換. • 第一次組譯部份程式並建立符號表 • 第二次利用存在符號表中的值來完成剩下的指令翻譯.
8.4 程式寫作工具 • 大多數組譯器的輸出是一串可重定位的二元碼. • 在可重定位碼中, 運算元的位址是相對於作業系統載入該程式的起始位址. • 絕對 (非重置) 碼比較適用在裝置和作業系統控制程式寫作. • 當可重置碼載入執行時, 要有一特殊的暫存器來當作基底定址. • 在程式中, 位址都是相對於基底位址的偏移量.
8.4 程式寫作工具 • 將實體位址指定給程式變數的過程稱作對應(binding). • 對應可以是在編譯時期 (compile time), 也可以是在執行時期(run time). • 編譯時期對應的是絕對碼. • 載入時期對應會在程式載入記憶體時才指定實體位址. • 在載入時期對應中, 程式是不能搬動的! • 執行時期對應需要一個基底暫存器來進行位址的對映.
8.4 程式寫作工具 • 在大多數系統中, 二元指令必需經過一個連結編輯器(或連結器)來產生可執行模組. • 連結編輯器會將一些二元常式結合成一個單一的可執行檔, 這些常式就像是程式的外部符號呼叫一樣. • 就像組譯器一樣,連結編輯器也要讀檔案二次: 第一次產生符號表, 第二次從表中找出參照的值. 下張投影片為這種過程的機制.
8.4 程式寫作工具 • 到載入時期或執行時期才進行連結編輯的稱為動態連結. • 外部模組從動態連結函式庫 (dynamic link libraries (DLLs))載入. • 載入時期動態連結會拖慢程式載入, 但是呼叫DLL會較快. • 在執行時期連結的方式中, 當第一次呼叫外部模組時才會連結到該模組, 會拖慢執行時間. • 動態聯結讓程式模組變得比較小, 但是程式寫作人元對DLL沒有主控權.
8.4 程式寫作工具 • 組合語言被視為第二代程式語言( “second generation” programming language (2GL)). • 編譯式程式語言, 像 C, C++, Pascal, 和 COBOL, 是第三代程式語言 (3GLs). • 每個語言世代的出現都顯示問題解決的工具越來越接近人類的思考方式, 同時也和機器解決的方式越離越遠.
8.4 程式寫作工具 要記住電腦只能了解1GL!
8.4 程式寫作工具 • 編譯器填補了高階語言和機器二元碼之間的語意隔閡. • 大多數的編譯器都是用六個階段來完成這個轉譯工作. 前三個是分析階段: 1. 語彙分析 (Lexical analysis)攫取 tokens, 即保留字或是變數. 2. 語法分析 (Syntax analysis (parsing)) 檢查敘述的結構是否正確. 3. 語意分析 (Semantic analysis)檢查資料型態和運算元的有效性.
8.4 程式寫作工具 • 最後三個是合成階段: 4. 中間碼產生器 (Intermediate code generation)會建立一個三個位址程式碼(three address code)用來幫助進行最佳化和轉譯的工作. 5. 最佳化 (Optimization)會產生組合語言程式同時會將架構的本身列入考量, 讓程式碼更有效率. 6. 程式碼產生器 (Code generation) 會從最佳化後的組合語言程式碼產生二元碼. • 雖然如此, 編譯器只要重寫最後的二個階段就可以移植到不同的平台上去. 下一張投影片有這些過程的圖示.
8.4 程式寫作工具 • 直譯器(Interpreter)即時一行一行的將原始碼轉換成可執行碼. • 這不只讓直譯式語言比編譯式語言來得慢, 也比較不容易進行錯誤檢查. • 然而直譯式語言在教導程式語言上非常有幫助, 因為它馬上就會有所回應, 這時效能並不是考量的重點.
8.5 Java: 綜合以上介紹 • Java程式語言為我們在這章討論的觀念提供了很多範例. • Java 程式 (classes) 在虛擬機器上執行, Java Virtual Machine (JVM). • 這讓Java可以在任何有Java虛擬機器環境的平台上執行. • Java 是編譯式也是直譯式語言. 編譯後的輸出有點像組語的中間程式碼 (bytecode), 再由JVM來解譯.
8.5 Java: 綜合以上介紹 • JVM 作業系統的縮影. • 它會載入程式, 連結, 開始執行線程, 管理程式資源, 當成程式中止時取回資源使用權. • 因為JVM在執行時期要做那麼多事, 它的效能不可能像傳統的編譯式語言那麼好.
8.6 資料庫軟體 • 資料庫系統內含有公司最重要的資產. 應用系統就是建立在這個基礎上.
8.6 資料庫軟體 • 資料庫為應用程式存取的資料元素提供了單一定義, 稱為資料庫綱要(database schema). • 實體綱要(physical schema)是以電腦角度來看的資料庫, 包含實體檔案的位置和索引. • 邏輯綱要 (logical schema)是以應用程式角度來看的資料庫, 它定義了欄位的大小和資料的型態. • 在邏輯綱要中, 某些資料欄位會被當成記錄的鍵(key), 它能更有效率的存取資料庫中的記錄.
8.6 資料庫軟體 • 鍵回儲存在實體的索引檔中, 該檔會包含一個指向該記錄實體位置的指標. • 很多索引管理的實作方式都是使用B+樹的變形, 因為B+樹可以考慮到I/O系統和應用的最佳化. • 在很多情況下, 樹中“較高”的節點會保留在快取記憶體中, 只有追蹤到較低層的索引才會去存取實體磁碟.
8.6 資料庫軟體 • 大多數資料庫系統也包含了交易管理部份, 以確保資料庫的一致性. • 交易管理有下列特性: • 單一性 Atomicity – 所有相關的更新不是全做就是沒做. • 一致性 Consistency – 所有的更新要符合定義資料的限制. • 獨立性 Isolation – 沒有任何交易可以影響其它交易. • 永久性 Durability – 交易成功後要盡快寫入永久性媒體. • 這就是交易管理的 ACID特性.
8.6 資料庫軟體 • 沒有 ACID 特性時, 會發生競改情況 (race conditions) :
8.6 資料庫軟體 • 記錄閘鎖機制可以確保獨立, 單一的資料庫更新:
8.7 交易管理程序 • 提升資料庫效能的方法之一就是將某些工作移給特殊的軟體來做. • 交易管理就是一個自核心資料庫系統分割出來的元件. • 當交易牽涉超過一個實體資料庫, 或多個應用系統時, 交易管理程序就變得非常重要. • 最廣泛使用的交易管理系統就是CICS, 我們將在下一張投影片中介紹.
軟體對電腦系統功能和效能的影響和硬體同樣重要.軟體對電腦系統功能和效能的影響和硬體同樣重要. 所有的軟體都是在作業系統上執行的. 作業系統控制行程的執行, 資源的管理, 保護, 以及安全. 子系統和分割提供了相容性和管理的簡單性. 結論
程式語言分成好幾代組合語言是第一代. 所有非機器層級語言都要轉譯成機器碼才能執行. 編譯器透過六個步驟來跨越語意隔閡. 連結編輯器解決了系統呼叫和外部常式的問題, 建立一致的可執行模組. 結論
Java 程式語言包含了虛擬機器, 編譯器, 還有直譯器的概念. 資料庫軟體透過ACID特性來控制資料檔的存取. 交易管理程序提供高效能和跨平台資料存取的功能. 結論