620 likes | 907 Views
第七章 作業系統(一). 每一套電腦系統都必備的軟體就是作業系統,作業系統負責控制與協調電腦系統的資源,為了達到這個目的,因此發展出許多的策略,在本章中,我們將介紹這些策略,包含作業系統如何管理 CPU 、主記憶體以及磁碟。. 第七章作業系統(一). 作業系統是最基本的軟體,所有的應用程式都必須透過它來分配電腦的硬體資源 早期的作業系統只提供了命令列式的操作介面 目前則流行圖形化的視窗作業系統 對於使用者而言,視窗作業系統讓一般使用者不再對電腦產生恐懼感,也帶動了個人電腦的流行。 作業系統的設計原理其實是一門大學問 它牽扯到 CPU 、記憶體、磁碟等等的管理
E N D
第七章作業系統(一) 每一套電腦系統都必備的軟體就是作業系統,作業系統負責控制與協調電腦系統的資源,為了達到這個目的,因此發展出許多的策略,在本章中,我們將介紹這些策略,包含作業系統如何管理CPU、主記憶體以及磁碟。
第七章作業系統(一) • 作業系統是最基本的軟體,所有的應用程式都必須透過它來分配電腦的硬體資源 • 早期的作業系統只提供了命令列式的操作介面 • 目前則流行圖形化的視窗作業系統 • 對於使用者而言,視窗作業系統讓一般使用者不再對電腦產生恐懼感,也帶動了個人電腦的流行。 • 作業系統的設計原理其實是一門大學問 • 它牽扯到CPU、記憶體、磁碟等等的管理 • 在本章中,我們將分別就這幾項技術加以介紹。
大綱 • 7.1 作業系統簡介 • 7.2 作業系統的演進 • 7.2.1 真空管時代的電腦作業系統 • 7.2.2 電晶體時代的電腦作業系統 • 7.2.3 積體電路時代的電腦作業系統 • 7.2.4 超大型積體電路時代的電腦作業系統 • 7.2.5 現代化作業系統 • 7.3 程序與CPU管理 • 7.3.1 排程 • 7.3.2 排程演算法 • 7.4 記憶體管理 • 7.4.1 傳統記憶體管理 • 7.4.2 多重程式處理(Multiprogramming) • 7.4.3 虛擬記憶體(Virtual Memory) • 7.5 磁碟管理
7.1 作業系統簡介 • 只有硬體而沒有任何軟體(或韌體)的電腦系統稱為裸機(Bare Machine),裸機是無法運作的。 • 作業系統(Operating System)是最基本也是最重要的系統軟體,所有硬體資源的控制與協調都由作業系統負責。 作業系統與電腦系統關係圖
7.1 作業系統簡介 • 作業系統的程式分為兩大部分,一是監督程式,二是管理資源的各種程式。 • 監督程式(Supervisor program)的工作是監督作業系統其他程式的運作,因此,監督程式大多常駐於記憶體內,屬於一種常駐程式(resident program)。 • 監督程式也稱為核心程式(kernel)。當電腦開機之後,首先讀取的程式是放在BIOS內的啟動程式(Bootstrapping),啟動程式的工作非常簡單,會將放在硬碟內的作業系統核心(kernel)載入到主記憶體中,然後程式就會執行核心程式。 核心常駐程式
7.1 作業系統簡介 • 除了核心常駐程式之外,現代流行的作業系統還會提供管理資源的各種程式 • 例如:使用者命令介面程式、磁碟管理程式等等 • 有些作業系統(例如微軟的Windows)甚至還會提供瀏覽器、編輯器或遊戲軟體等等的軟體,這些部分,我們則將之列入為應用軟體的部分。
7.1 作業系統簡介 • 作業系統的主要功能可以分為下列三大項,其對象各有不同: • 管理電腦硬體資源。 • 使用者或應用程式在運作的過程中都必須使用到硬體資源,例如CPU、主記憶體、磁碟、印表機等等 • 在分工的概念下,作業系統將扮演硬體資源管理的角色,並且提供許多的應用介面給一般程式設計師,程式設計師就不需要了解控制硬體的底層技術。 • 現今的作業系統大多提供多人或多工的環境,這些使用者或應用程式其實是共用硬體資源的,作業系統還需要扮演協調及控制不同應用程式及使用者。 作業系統是硬體資源的管理者
7.1 作業系統簡介 • 做為應用程式的虛擬機器: • 對於應用程式設計師來說,就像是在一個完美的虛擬機器(virtual machine)上面開發應用程式,只需要透過作業系統提供的應用程式介面(Application Program Interface;簡稱API)來下命令,作業系統就會將這些命令轉換為真正的硬體動作。 • 開發讀檔功能的應用程式設計師只需要下達一道讀檔的API命令即可,至於實際上的硬碟搜尋(seek)等細節,則交由作業系統完成。 作業系統提供了虛擬機器的環境
7.1 作業系統簡介 • 提供使用者操作介面 • 如檔案複製、刪除等都是作業系統提供的基本操作。 • 作業系統提供的使用者介面可以分為兩大類:命令列(command line)及圖形化使用者介面(graphical user interface;簡稱GUI)。 • 命令列操作介面需要記住一些指令,傳統的Dos及Unix、Linux等提供命令列式操作介面。 Linux的命令列操作介面
7.1 作業系統簡介 • 圖形化使用者介面,使用者只要透過滑鼠,就可以輕鬆操作電腦,常見的圖形化使用者介面有Windows、X-Window、Mac OS X等等。 Windows Vista圖形化使用者介面
7.2 作業系統的演進 • 作業系統並不是一開始就是如今的模樣,隨著電腦的演進,作業系統也隨之改變,功能也越趨多樣化,在本節中,我們將搭配電腦演進的歷史來介紹作業系統的演變。
7.2.1 真空管時代的電腦作業系統 • 在此階段中,作業系統的概念其實尚未成形 • 主要是因為電腦的運算速度慢,記憶體容量小,能夠執行的工作非常少,在當時甚至還沒有程式設計的觀念。 • 對於真空管電腦而言,使用者只想要讓電腦做一些簡單重複性的動作,此時需用使用插卡(Plug-board)來驅動電腦執行相關動作。
7.2.2 電晶體時代的電腦作業系統 • 電腦作業方式透過讀卡來控制,利用固定格式的卡片來撰寫程式,透過讀卡設備,然後電腦會自動執行這些程式。有時候一個程式必須使用許多張卡片,執行一個程式稱為執行一個工作(Job),採用批次作業,因此此類作業系統稱為批次處理系統(Batch processing system)。 • 批次處理系統(Batch processing system)採用整批且中間不間斷的作業方式,工作事先被編排好順序,當前面一個工作被執行完畢後,將繼續執行下一個工作。 • 安排工作的程式稱為工作控制程式(Job Control Program)。 批次處理示意圖
7.2.2 電晶體時代的電腦作業系統 • 批次處理作業系統是一種單工系統(Single-task system),也就是說,它一次只服務一個使用者。 • 早期的作業系統通常會使用批次處理的方式,來增加電腦資源的使用率。例如OS/360作業系統。 • 現代的作業系統仍然可以使用批次處理方式,例如Unix shell可以結合多個指令形成一個新定義的指令,而MS-DOS可以使用BAT檔執行批次任務。 • 往返時間(Turnaround Time)是評鑑一個批次處理系統成功與否的指標,往返時間就是指使用者開始委託(Submit)電腦工作直到所委託的所有工作都完成所需要的時間。 單工系統示意圖
7.2.3 積體電路時代的電腦作業系統 • 電腦的運算速度加快許多,並提供較大的記憶體容量,在此階段的作業系統朝向提供多工的方向努力,以下是此時期作業系統的特點: • 週邊線上同時處理(Simultaneous Peripheral Operation On Line;簡稱SPOOL) • 多重程式處理(Multiprogramming) • 分時處理(Time sharing processing) • 週邊線上同時處理(Simultaneous Peripheral Operation On Line;簡稱SPOOL) • 週邊線上同時處理(Spooling)可以有效地解決共用專屬設備所衍生的問題,它將專屬設備模擬成分享設備(Shared Device),並且能夠正確有效的運作。 • 所謂專屬設備(Dedicated Device)指的是在某一個程式使用該設備尚未結束時,其他程式不能使用該設備,例如印表機就是專屬設備的一種。 • SPOOL共用印表機時,不會發生你印一行,我印一行的問題。
7.2.3 積體電路時代的電腦作業系統 • 週邊線上同時處理的控制程式稱為Spooler,它利用磁碟作為暫存裝置,先將等待執行的工作存放於磁碟中,然後控制程式依序在磁碟中讀入這些工作並且進行處理。 線上同時週邊處理(Spooling)
7.2.3 積體電路時代的電腦作業系統 • 多重程式處理(Multiprogramming) • 為了使得多個程式可以同時執行(嚴格來說只是一個同時執行的假像)而發展的技術,它可以使得CPU一直處於忙碌狀態,而不會等待程式進行週邊的運作,進而提昇電腦系統的整體效率。 • 在支援多重程式處理的系統中,多個程式都會被載入到記憶體中,而當某一個程式進行I/O作業時,CPU就會切換到另一個工作,使得多個工作可以並行處理(concurrent),達到類似同時執行多個程式的效果。
7.2.3 積體電路時代的電腦作業系統 • 在單一時間點內CPU只執行某一個程式,但多重程式處理透過切換工作的方式,使得CPU持續保持忙碌狀態,提高電腦的產量以及CPU的使用率。 多重程式處理 【產量】產量(Throughput)指的是單位時間的工作量,例如每單位時間完成多少個工作或程式。
7.2.3 積體電路時代的電腦作業系統 • 分時處理(Time sharing processing) • 利用多重程式處理的方式,但它主要應用於交談式系統的多使用者環境。 • 分時系統將CPU時間分成許多時間配額(Time Slice),程式在時間配額執行完畢後,CPU控制權將交給下一個程式執行,如此輪流執行各程式的時間配額,直到所有程式被執行完畢為止。 • 當程式必須進行I/O作業時,程式將被移轉到懸置佇列內排隊,而CPU排程則至等待佇列中,取出下一個程式交由CPU執行工作,此時CPU排程會重新分配時間配額。當放在懸置佇列內的程式等待的事件發生時,則進入等待佇列的末端,與等待佇列內的各程式輪流使用CPU。 • 一個程式將被切割為不連續的多個時間配額,因此所有的程式是共用CPU的,但由於每一個時間配額的時間其實都非常短,因此使用者就不會感覺到和別人共用同一個CPU,故而不但能夠提供多使用者環境,且每個使用者也可以透過交談方式操作電腦。
7.2.3 積體電路時代的電腦作業系統 • 回應時間(Response time)是評鑑一個分時系統成功與否的指標,回應時間指的是使用者輸入指令,直到電腦回傳該指令執行結果的時間。 分時處理系統
7.2.4超大型積體電路時代的電腦作業系統 • 電腦的運算更快、大幅度提昇記憶體容量,晶片(例如CPU)價格大幅降價,進而使得整組電腦的價格也大幅降價,這使得更先進的作業系統可以提供更多的服務,此時期作業系統所衍生的新議題如下: • 即時處理(Real-time processing) • 多處理器系統 (Multiprocessor) • 分散式處理(Distributed processing)
7.2.4超大型積體電路時代的電腦作業系統 • 即時處理(Real-time processing)系統 • 能立即針對問題做出反應,並在規範的條件內自動執行相關軟體,且必須得到正確結果。在即時處理系統中,最嚴格的要求就是反應時間(Response Time) • 分為硬性即時及軟性即時兩種。 即時處理
7.2.4超大型積體電路時代的電腦作業系統 • 多處理器(Multiprocessor)作業系統 • 能夠讓系統內的多顆CPU同時執行工作,並且使用共用的匯流排、時脈、記憶體及週邊設備,所以又稱為平行系統(Parallel System)。 • 由於這些CPU共用同一部電腦內的資源,因此屬於緊密性系統(Tightly Coupled System)。 • 由於在一部電腦內有許多顆CPU,因此產量得以增加,也提高了電腦系統的可靠度。 • 多處理器系統擁有優雅衰減的特色,例如在多處理器系統中,損壞一顆CPU,並不會使得電腦系統完全停止運作,而只是讓電腦系統的執行效率降低而已。 多處理器系統
7.2.4超大型積體電路時代的電腦作業系統 • 多處理器系統執行程式的方式有兩種,(1)一個程式同時分配給多個CPU執行,以便快速完成運算。(2)將每個程式分配給一個CPU執行,若程式間必須傳遞訊息,則透過系統執行同步機制來解決。 • 多處理器作業系統依照硬體結構則可以分為 • (1)對稱性多重處理系統 • (2)非對稱性多重處理系統。
7.2.4超大型積體電路時代的電腦作業系統 • 分散式處理(Distributed processing) • 具有分散式處理(Distributed processing)的系統稱為分散式系統(Distributed Systems),它將多部電腦透過通訊線路加以連接,使得彼此可以共用資源、交換訊息及分工合作。 分散式處理系統
7.2.4超大型積體電路時代的電腦作業系統 • 在分散式系統中,每個CPU可以擁有屬於自己的區域記憶體(local memory),屬於鬆散性系統(Loosely Coupled System)。 • 透通性(Transparency) 是分散式作業系統的一大特色,它代表著使用者不需要關心他的程式被分配到哪些處理器以及如何被執行。 • 分散式系統又可以細分為網路作業系統(Network Operating Systems;簡稱NOS)及分散式作業系統(Distributed Operating Systems;簡稱DOS)兩種。 • 網路作業系統(NOS)允許連接在一起的電腦使用不同的作業系統。當這些電腦需要共用資源時,則可以透過遠端登錄或檔案傳輸方式的方式來分享資源。 • 對於分散式作業系統(DOS)而言,所有連接在一起的電腦都必須使用相同的作業系統。並且所有的遠端資源,在邏輯上都被作業系統視為系統本身的資源,因此可以直接存取。
7.2.5 現代化作業系統 • 現代化的作業系統通常具有下列特色: • 具備批次處理特性。必須擁有大量的記憶體以便事先將工作安排完畢,不必然需要以互動方式操作電腦,電腦即可進行這些工作。 • 具備週邊線上同時工作能力。例如使用者不該等待印表機列印而無法從事其他工作。 • 具有多工能力,包含多重程式處理以及多人使用環境。 • 具備分時系統功能,也就是多人使用環境的基礎。 • 可提供安排工作優先等級的機制。 • 具備網路通訊及共用資源的能力。 • 提供分散式系統環境,以提高產量。
7.2.5 現代化作業系統 • 【未來的作業系統】: • 未來的作業系統,應該具備怎麼樣的新功能呢? • 針對目前現有的問題與需求,我們可以預見未來的作業系統必須在安全性上加強,例如減少本身的漏洞,最好是直接將防毒軟體也視為必要軟體。 • 另一方面,隨著數位家庭時代的來臨,數位家庭電子設備的核心設備(可能是PC,也可能是電視)所需要的作業系統必須具有高度整合性,以及對各類網路、無線網路、無線傳輸的支援。
7.3 程序與CPU管理 • 電腦的核心是CPU,作業系統若能對CPU善加管理,將可以使得系統的整體效能得以大幅提升 • 關於CPU管理的專業術語(Terminology)。 • 程序(Process) • CPU執行的對象是程序(Process),對於現代作業系統核心而言,程序是指一個正在執行中的程式。 • 程式(Program)本身並非程序,程式只是單純的被動實體(例如一個檔案內容),而程序則是主動實體,它會指出下一步要執行的指令。 • 一個程式在運作時會產生一個或多個程序,這些程序將交由CPU執行,並透過作業系統加以管理。
7.3 程序與CPU管理 • 一個程序從建立到結束之間,可能處於為五種狀態:建立(New)、準備(Ready)、執行(Running)、等待(Waiting)、結束(Terminated)。 程序狀態移轉圖
7.3 程序與CPU管理 • 程序為執行狀態(Running)代表程序正在被執行,以下是狀態轉移時機的說明: • (1)【建立 → 準備】:只要Ready佇列中仍有空位,就會將Job佇列中新建立的行程移往Ready佇列中。 • (2)【準備 → 執行】:若有空閒的CPU,將會由排程程式(Scheduler)挑選Ready佇列中的程序來執行。 • (3)【執行 → 準備】:發生某些中斷(Interrupt)事件時(例如分配的時間配額已經用完),將會暫停尚未執行完畢的程序,該程序將被移往Ready佇列中等待下一次CPU有空閒時再服務。 • (4)【執行 → 等待】:發生某些需要較長時間處理的事件時(例如I/O事件),將會暫停執行中的程序,該程序將被移往Waiting佇列中。 • (5)【等待 → 準備】:當需要長時間處理的事件處理完畢後(例如I/O事件已經處理完畢),將會把程序移往Ready佇列中等待下一次CPU有空閒時再服務。 • (6)【執行 → 結束】:程序已經完成所有的執行動作,將會被變更為結束狀態,此時只要釋放程序所佔用的資源,該程序就告終止。
7.3 程序與CPU管理 • 工作量(Throughput) • 在作業系統的CPU管理中,工作量(產能)則被定義為在某一段時間內,電腦系統所能完成的程序數量。當然工作量越高代表程序執行效能越佳,這與CPU排程有很大的關係。 • 執行緒(Thread) • 現代的作業系統不但以程序來切割工作,程序還可以分為多個執行緒(Thread),這些執行緒同屬一個程序,共用同一記憶體空間位址,但卻可以擁有自己的控制流程。在支援多執行緒(Multi-Threading)的系統中,執行緒可以共用CPU時間,類似於多重程式處理的分時程式。
7.3.1 排程 • 當資源有限而需要被服務的對象很多時,服務勢必有先後順序,這個順序關係稱之為排程(Schedule)。 • 為了提供多使用者及多程式的服務,需要對這些服務需求進行排程,安排服務順序所提出的方法稱之為排程演算法(Schedule algorithm)。 • 實現排程演算法的程式稱為排程程式(Scheduler)。 • 針對使用CPU服務的排程則可以稱之為CPU排程或程序排程(Process Scheduling)。 • 程序的特性 • 依照程序的CPU指令及I/O指令,程序(process)區分為下列兩大類: • I/O存取較多的程序(I/O Bound Process):此類程序的I/O存取動作比較多(相對於CPU運算而言),例如列印報表程序即是一例。 • CPU運算較多的程序(CPU Bound Process):此類程序的CPU運算動作比較多(相對於I/O存取而言),例如數值計算程序即是一例。
7.3.1 排程 • 排程程式種類 • 排程程式可以分為長程、短程、中程等三大類,分別適用於不同的時機。 長程、短程、中程排程程式
7.3.2 排程演算法 • 任何一個排程程式都有一套排程演算法以決定該服務那一個需求,在這一節中我們將介紹幾種常見的排程演算法。 • 先到先做(First-Come-First-Serviced;簡稱FCFS): • 優先權(Priority): • 循環分配(Round-Robin;簡稱RR): • 最短工作優先(Shortest-Job-First;簡稱SJF): • 最短剩餘時間優先(Shortest-Remaining-Time-First;簡稱SRTF): • (1)先到先做: • 越早到Ready佇列排隊的排程將越早被處理。 • (2)優先權: • 每一個在Ready佇列中的程序都事先被定義其優先權,優先權越高的越先被服務。
7.3.2 排程演算法 • (3)循環分配: • RR排程演算法只適用於分時系統,由於每一個程序都會被配置一個時間配額,當時間配額執行完畢後,CPU切換到下一個程序,而原來的程序若尚未執行完畢,則必須重新回到佇列中等待,如此形成一個循環狀態。 • (4)最短工作優先(SJF): • 按照程序所需要的CPU服務時間長短做為挑選依據,並且所需時間越短的會越早被挑選出來。 • (5)最短剩餘時間優先(SRTF): • 也是以CPU時間的長短來決定要執行哪一個程序,但此處所稱之CPU時間則專指剩餘需要服務的CPU時間,並且不只是Ready佇列內的程序是目標對象,連正在執行的程序也必須考慮在內。 • SRTF與SJF有些相似,所以又稱為先佔式最短工作優先(preemptive SJF)排程。 • 唯一不同的是,SJF的程序一但被CPU服務後就不會被其他程序插隊(non- preemptive),而SRTF的程序即使已經進入執行狀態,仍可能被準備狀態的程序插隊(preemptive)。
7.3.2 排程演算法 SJF與SRTF排程演算法
7.4 記憶體管理 • 在多工及多使用者的環境下,必須透過某些記憶體管理方式,讓所有要被執行的程式輪流載入記憶體中並被CPU所執行。在本節中,我們介紹的記憶體管理有下列幾種: • 傳統記憶體管理 • 多重程式處理(Multiprogramming) • 虛擬記憶體(Virtual Memory)
7.4.1 傳統記憶體管理 • 傳統的記憶體管理,除了作業系統核心之外,就是使用者程式,有些作業系統核心會放置在低記憶體位址,有些則會放置在高記憶體位址。 早期電腦的記憶體配置
7.4.1 傳統記憶體管理 • 傳統記憶體管理技術又分為下列各種技術: • 單一程式處理(Monoprogramming) • 重疊的單一程式處理(Monoprogramming with Overlay) 單一程式處理的記憶體配置
7.4.1 傳統記憶體管理 重疊技術
7.4.2多重程式處理(Multiprogramming) • 多重程式處理為了讓多個程式都可以同時存放於記憶體中,因此需要將主記憶體切割為多個分割區(Partition),依照切割的方式,我們可以將之分為固定分割法及變動分割法兩大類。 • 固定分割 • 將主記憶體切割為許多個大小不同的區域,這些被分割的區域大小一但確定後,就不會再變動。當程序需要被執行時,則載入到適當的分割區。 記憶體的固定分割
7.4.2多重程式處理(Multiprogramming) • 固定分割會產生記憶體碎片,導致記憶體無法被充分利用。記憶體碎片又分為內部碎片以及外部碎片。 • 內部碎片(Internal Fragmentation)指的是分割區內有部分記憶體並未被使用。 • 外部碎片(External Fragmentation)則是總和的記憶體分割區容量足夠程式載入,但卻無法將程式載入。
7.4.2多重程式處理(Multiprogramming) 固定分割的外部碎片 固定分割的內部碎片
7.4.2多重程式處理(Multiprogramming) • 變動分割法 • 根據程式大小動態配置記憶體空間給各個程式。 變動分割法範例
7.4.2多重程式處理(Multiprogramming) • 變動分割法絕對不會產生內部碎片 • 但仍有外部碎片的問題,但這可以透過緊湊變動分割法來加以解決。 緊湊變動分割法範例
7.4.3虛擬記憶體(Virtual Memory) • 所有正在執行的指令一定必須放在主記憶體中,所以作業系統必須透過虛擬記憶體來加以解決程式過多過大而導致主記憶體硬體容量不足的問題。 • 虛擬記憶體是將硬碟視為記憶體的延伸,並且又分為下列幾種: • 分頁(Paging) • 分段(Segmentation) • 分頁式分段(Segmentation with Paging)
7.4.3虛擬記憶體(Virtual Memory) • 分頁(Paging) • 記憶體有兩種,分別是(1)硬體的實體記憶體(Physical memory)以及(2)程式參考用的邏輯記憶體(Logical memory)。 • 由於程式面對的是邏輯記憶體,因此邏輯記憶體其實就是虛擬記憶體(Virtual memory)。 • 實體記憶體與邏輯記憶體都必須先經過切割為大小固定且相同的小區塊 • 實體記憶體的小區塊稱為頁框(Frame) • 邏輯記憶體的小區塊稱為分頁(Page) • 頁框與分頁的大小必須相同以便對應。 • 將記憶體分割後,程式面對的將是邏輯記憶體的邏輯位址(Logical address),存取邏輯位址的指令在真實執行時,將透過分頁設計對應到實體記憶體的實體位址(Physical address)。
7.4.3虛擬記憶體(Virtual Memory) • 邏輯位址又分為兩部分,分別是 • 分頁編號(Page number;代號為P) • 區塊內的偏移值(displacement/offset;代號為d或o)。 • 實體位址也分為兩部分,分別是 • 頁框編號(Frame number;代號為F) • 區塊內的偏移值(displacement/offset;代號為d或o)。 • 邏輯位址與實體位址的對應,作業系統將透過分頁表(Page Table)來處理,程式設計師並不用關心。 • 其中分頁表其實只記錄了分頁編號與頁框編號的對應,而偏移值的部分,由於分頁與頁框的區塊大小相同,所以只需要直接對應即可(兩者完全相同),如圖7-26所示,而圖7-27則是一個對應範例。
7.4.3虛擬記憶體(Virtual Memory) 分頁設計的位址對應 分頁設計的位址對應範例