1. 程式人生 > >作業系統與計算機組織基本知識(一)

作業系統與計算機組織基本知識(一)

    作業系統是作為計算機硬體和計算機使用者之間的中介的程式。作業系統的目的是為使用者提供方便且有效地執行程式的環境。作業系統是管理計算機硬體的軟體,硬體必須提供合適的機制來保證計算機系統的正確性,以及確保系統不受使用者程式干擾正常執行。作業系統龐大而複雜,因此它必須被分塊構造。每一塊都是系統中明確定義的一部分,具有嚴格定義的輸入、輸出和功能。

一、作業系統用來做什麼?

計算機系統分為四個組成部分:計算機硬體、作業系統、系統程式與應用程式和使用者。

硬體,如中央處理器,記憶體、輸入輸出裝置,為系統提供基本的計算資源。

應用程式如字處理程式、電子製表軟體、編譯器、網路瀏覽器規定了使用者按照何種方式使用這些資源。

作業系統控制和協調各使用者的應用程式對硬體的使用。

計算機系統的組成包括硬體、軟體以及資料。在計算機系統的操作過程中,作業系統提供了正確使用這些資源的方法。作業系統類似於政府。與政府一樣,作業系統本身並不能實現任何有用的功能。它只不過是提供一個方便其他程式做有用工作的環境。

二、從使用者視角來看作業系統

    我們平時在使用計算機時,面對的就是一臺主機、一個滑鼠、鍵盤、耳機和顯示器。我們可以進行工作和遊戲。而對於我們使用者來說,作業系統為我們提供了視覺化的操作介面,只需要點選圖示即可進行我們想要完成的事。對於使用者來說,作業系統提供了便利,效能是次要的,也不在乎資源使用率——如共享硬體和軟體資源。

    而如今,我們個體接觸最多的就是我們的智慧手機,我們每個人的手機都有一個單獨的作業系統,例如安卓和蘋果。而各個廠家又在安卓的基礎上開發出自己的作業系統。

    我們在家庭中使用的空調遙控器,學生計算器等等家電或者汽車這些所使用的嵌入式計算機,智慧開啟和關閉指示燈來顯示狀態,這些裝置的作業系統無須使用者干預就能自行執行。

三、從系統視角來看作業系統

    作業系統是與硬體最為密切的程式。可以將作業系統看作是資源分配器。計算機系統有很多資源,用來解決CPU時間、記憶體空間、檔案儲存空間、I/O裝置等問題。作業系統管理這些資源,面對有限甚至衝突的資源請求,作業系統必須決定如何為各個 程式和使用者分配資源,以便計算機系統能夠有限而公平地執行。

    作業系統是控制程式。控制程式用來管理使用者程式的執行以防止計算機資源的錯誤使用或者使用不當。

四、作業系統的定義

    作業系統是配置在計算機硬體上的第一層軟體,是對硬體系統的首次擴充。是一組管理和控制計算機硬體和軟體資源,合理對各 類作業進行排程,以及方便使用者使用的程式的集合。

五、計算機系統組織與結構

1.計算機系統


    現代通用計算機系統由一個或多個CPU和若干個裝置控制器通過共同的匯流排相連而成,該匯流排提供了對共享記憶體的訪問。每個裝置控制器負責一種特定型別的裝置。CPU可以和裝置控制器併發工作,並競爭記憶體週期,為了確保對共享記憶體的有序訪問,需要記憶體控制器來協調對記憶體的訪問。    當開啟電源或者重啟時,計算機開始執行,它需要執行一個初始化程式。該初始化程式或載入程式通常位於ROM中,成為計算機硬體中的韌體。它初始化系統中所有關的部分,包括CPU暫存器、裝置控制器和記憶體內容。載入程式必須知道如何裝入作業系統並開始執行作業系統。為了完成這一個目標,載入程式必須定位作業系統核心並把它轉入記憶體。接著,作業系統開始執行第一個程序如init,並等待事件發生。    事件的發生通常是通過硬體或軟體的中斷來表示的。硬體可隨時通過系統匯流排向CPU發出訊號,以觸發中斷。軟體通過執行特別操作如系統呼叫(監視器呼叫)也能觸發中斷。    當CPU中斷時,它暫停正在做的事並立即轉到固定的位置去繼續執行。該固定位置通常是中斷服務程式開始位置的地址。中斷服務程式開始執行,在執行完後,CPU重新執行被中斷的計算。    中斷必須將控制轉移到合適的中斷處理程式。處理轉移的簡單方法是呼叫一個通用子程式以檢查中斷資訊。接著,該子程式會呼叫相應的中斷處理程式。

2.儲存結構

    計算機程式必須在記憶體(RAM)中以便於執行。記憶體是處理器可以直接訪問的唯一的大容量儲存區域。它通常使用被成為動態隨機訪問記憶體的半導體技術來實現的,是一組記憶體字的陣列,每個字都有其地址。通過對特定記憶體執行一些列load或store指令來實現互動。指令load能將記憶體中的字轉移到CPU的暫存器中,而指令store能將暫存器的內容轉移到記憶體。除了顯示使用load和store外,CPU可自動從記憶體中裝入指令來執行。    一個典型指令執行週期首先從記憶體中獲取指令,並儲存在指令暫存器中。接著,指令被解碼,並可能導致從記憶體中獲取運算元或將運算元儲存在內部暫存器中。在指令完成對運算元的執行後,其結果可以存回到記憶體中。記憶體單元智慧看見記憶體的地址流,並不知道它們是如何產生的(通過指令計數器、索引、間接、常量地址等),或它們是什麼地址(指令或資料)。理想情況下,程式和資料都永久地駐留記憶體中。但這樣是不可能的,因為記憶體容量太小,不能永久地儲存所需要的程式和資料,記憶體是易失性儲存裝置,當掉電時會失去所有的內容。    因此,絕大多數計算機系統都提供輔存以作為記憶體的擴充。對輔存的主要要求是它要能夠永久地儲存大量的資料。最為常用的輔存裝置為磁碟,它能儲存程式和資料。絕大多數程式(網頁瀏覽器、編譯器、字處理器、電子製表軟體、遊戲等) 儲存在磁碟上,直到要執行時才裝入到記憶體。許多程式都使用磁碟作為它們所處理資訊的來源和目的。因此,適當的管理磁碟儲存對計算機系統來說十分重要。    儲存結構由暫存器、記憶體和磁碟組成,這些僅僅是一種儲存系統。除此之外,還有快取記憶體、CD-ROM、磁帶等。每個儲存系統都提供了基本功能以儲存資料,或儲存資料以便日後提取。各種儲存系統的主要差別是速度、價格、大小和易失性。根據速度和價格,可以按層次結構來組織計算機系統的不同型別的儲存系統。層次越高,價格越貴,但是速度越快。隨著層次降低,單個位的價格通常降低,而訪問時間通常增加。這種折中是合理的: 如果一個給定的儲存系統比另一個更快更便宜,而其他屬性一樣,那麼就沒有理由再使用更慢更昂貴的儲存器。    除了不同的速度和價格,儲存系統還分為易失的和非易失的。當沒有電源時,正如前面所講,易失儲存會丟失其中的內容。如果沒有昂貴的電池和發電機後備系統,那麼資料必須寫到非易失儲存中以便保護。

3.I/O結構

    在計算機中,儲存器只是眾多I/O 裝置中的一種,作業系統的大部分程式碼用來進行I/O管理,這既是因為它對系統可靠性和效能的十分重要,也是因為裝置變化的特性。通用計算機系統由一個CPU 和多個裝置控制器組成,它們通過共同的匯流排連線起來。每個裝置控制器負責特定型別的裝置,可有多個裝置與其相連。例如,SCSI(smallcomputersystem interface) 控制器可有7個或更多的裝置與之相連。裝置控制器維護一定量的本地緩衝儲存和一組特定用途的暫存器。裝置控制器負責在其所控制的外部裝置與本地緩衝儲存之間進行資料傳遞。通常,作業系統為每個裝置控制器提供一個裝置驅動程式。這些裝置驅動程式理解裝置控制器,並提供一個裝置與其餘作業系統的統一介面。    為了開始I/O 操作,裝置驅動程式在裝置控制器中裝載適當的暫存器。相應地,裝置控制器檢查這些暫存器的內容以決定採取什麼操作(如從鍵盤中讀取一個字元)。控制器開始從裝置向其本地緩衝區傳輸資料。一旦完成資料傳輸,裝置控制器就會通過中斷通知裝置驅動程式它已完成操作。然後,裝置驅動程式返回對作業系統的控制,如果是一個讀操可能將資料或資料的指標返回。對其他操作,裝置驅動程式返回狀態資訊。    這種I/O 中斷驅動適合移動少量資料,但對大塊的資料移動,如磁碟I/O,就會帶來超載問題。DMA(直接記憶體訪問) 就是為了解決這個問題而設計的。在為這種I/O 裝置設定好緩衝、指標和計數器之後,裝置控制器能在本地緩衝和記憶體之間傳送一整塊資料,而無需CPU 的干預。每塊只產生一箇中斷,來告知裝置驅動程式操作已完成,而不是像低速裝置那樣每個位元組產生一箇中斷。當裝置控制器在執行這些操作時,CPU 可去完成其他工作。
    一些高階的系統採用交換而不是匯流排結構。在這些系統中,多個部件可以與其他部件併發對話,而不是在公共總線上爭奪週期。此時,DMA 更為有效。

4.單處理器系統

    在單處理器系統中,有一個主CPU能夠執行一個通用指令集,包括來自於使用者程序的指令。絕大多數系統還包括其他特定目的的處理器,它們可能以專用裝置處理器(比如磁碟、鍵盤、圖形控制器) 的形式出現; 在大型機上,它們可能以通用處理器的形式出現,比如在系統部件間快速移動資料的I/O處理器。    所有這些專用處理器執行一個受限的指令集,並不執行使用者程序。有時它們由作業系統管理,此時作業系統將接下來的任務資訊發給它們,並監控它們的狀態。例如,磁碟控制器微處理器接收來自於主CPU 的一系列請求,執行它們自己的磁碟佇列和排程演算法。這種安排克服了主CPU的磁碟排程超載問題。PC在其鍵盤上用一個微處理器來將擊鍵轉換為程式碼,併發送給CPU。在其他系統或環境中,專用處理器被構建成硬體的低階部件。作業系統不能與這些部件通訊,後者獨立地做自己的工作。使用專用處理器很常見,並不會將一個單處理器系統變成多處理器系統。如果只有一個通用CPU,系統則為單處理器系統。

5.多處理器系統

    多處理器系統(也稱為並行系統(parallelsystem) 或緊耦合系統(tightlycoupledsystem)。這類系統有多個緊密通訊的CPU,它們共享計算機匯流排,有時還有時鐘、記憶體和外設等。
多處理器系統有三個主要優點:
1.增加吞吐量: 通過增加處理器的數量,希望能在更短的時間內做更多的事情。用N個處理器的加速比不是N,而是比N小。當多個CPU在同一件事情上時,為了使得各部分能正確工作,會產生一定的額外開銷。這些開銷,加上對共享資源的競爭,會降低因增加了CPU的期望增益。這與一組N位程式設計師在一起緊密地工作,並不能完成N 倍的單個
程式設計師的工作量類似。
2.規模經濟: 多處理器系統比單個處理器系統能節省資金,這是因為它們能共享外設、大容量儲存和電源供給。當多個程式需要操作同樣的資料集合時,如果將這些資料放在同一磁碟上並讓多處理器共享,將比用許多有本地磁碟的計算機和多個數據複製更為節省。
3.增加可靠性: 如果將功能分佈在多個處理器上,那麼單個處理器的失靈將不會使得整個系統停止,只會使它變慢。如果有10個處理器而其中一個出了故障,那麼剩下的9個會分擔起故障處理器的那部分工作。因此,整個系統只是比原來慢了10%,而不是停止執行。
    在許多應用中,計算機系統不斷增加的可靠性是很關鍵的。這種能提供與正常工作的硬體成正比的服務的能力被稱為適度退化(graceful degradation),有些系統超出適度退化的能力被稱為容錯(fault tolerant),因為它們能忍受單個部件的錯誤並繼續操作。容錯需要一定的機制來對故障進行檢測、診斷和糾錯(如果可能)。
    現在使用的多處理器系統主要有兩種型別。有的系統使用非對稱多處理(asymmetric multiprocessing),即每個處理器都有各自特定的任務。一個主處理器控制系統,其他處理器或者向主處理器要任務或做預先定義的任務。這種方案稱為主一從關係。主處理器排程從處理器並安排工作。
    現在最為普遍的多處理器系統使用對稱多處理(symmetric multiprocessing,SMP),每個處理器都要完成作業系統中的所有任務。SMP意味著所有處理器對等,處理器之間沒有主一從關係。如圖,顯示了一個典型的SMP結構。    一個典型的SMP例子是Solaris,一個由Sun Microsystems 設計的商用UNIX。一個Solaris 系統可配置成使用數十個處理器,並且都執行Solaris。這種模型的好處是如果有N個CPU,那麼N個程序可以同時執行且並不影響效能。然而,必須仔細控制I/O 以確保資料到達合適的處理器。另外,由於各CPU互相獨立,一個可能空閒而另一個可能過載,導致效率低。如果處理器共享一定的資料結構,那麼可以避免這種低效率。這種形式的多處理器允許程序和資源(包括記憶體) 在各處理器之間動態共享,能夠降低處理器之間的差異。這樣的系統需要仔細設計。目前幾乎所有現代作業系統,包括Windows,Windows XP、Mac Os X 和Linux 等,都支援SMP。
    對稱與非對稱多處理之間的差異可能是由於硬體或軟體的原因。特定的硬體可以區分處理器,軟體也可編寫成選擇一個處理器為主,其他為輔。    我們日常生活中使用的大多數多核手機實際上就是將多個核心設計到單個晶片上。此外還有雙晶片,多晶片這種技術正在不斷地成為主流。而在大型伺服器中,刀鋒伺服器也逐漸流行起來,所謂的刀鋒伺服器就是將多個處理器板、I/O板和網路板全部置於同一個底板上。和傳統的多處理器系統不同在於,每個刀片處理器獨自啟動並執行各自的作業系統。

5.集群系統

    多CPU系統的另一種型別是集群系統(clustered system)。與多處理器系統一樣,集群系統將多個CPU集中起來完成計算任務。然而,集群系統與多處理器系統不同,它是由兩個或多個獨立的系統耦合起來的。集群系統常用的定義是叢集計算機共享儲存並通過區域網絡連線或更快的內部連線(如InfiniBand)。叢集通常用來提供高可用性(high availability) 服務,這意味著即使叢集中的一個或多個系統出錯,服務仍然繼續。高可用性通常通過在系統中增加一定的冗餘來獲取。叢集軟體執行在叢集節點之上,每個都能監視(通過區域網)一個或多個其他節點。如果被監視的機器失效,那麼監視機器能取代儲存擁有權,並重新啟動在失效機器上執行的應用程式。應用程式的使用者和客戶機只感覺到很短暫的中斷。
    叢集可以是對稱的,也可以是非對稱的。非對稱叢集(asymmetric clustering) 中,一臺機器處於熱備份模式(hot standbymode),而另一臺執行應用程式。熱備份主機(機器)只監視活動伺服器。如果該伺服器失效,那麼熱備份主機會成為現行伺服器。對於對稱叢集(symmetric clustering),兩個或多個主機都執行應用程式,它們互相監視。這種模式因為充分使用了現有硬體,所以更為高效。這要求具有多個應用程式可供執行。
    此外,還有其他形式的叢集,並行叢集和WAN叢集。並行叢集允許多個主機訪問共享儲存上的相同資料。由於絕大多數作業系統不支援多個主機同時訪問資料,並行叢集通常需要由專門軟體和應用程式來完成。例如,Oracle Parallel Server 是一種可執行在並行叢集上的Oracle資料庫版本。每個機器都運Oracle,且有軟體跟蹤共享磁碟的訪問。每個機器對資料庫內的所有資料都可以完全訪問。為了提供這種對資料的共享訪問,系統必須提供對檔案的訪問控制和加鎖,以確保不出現衝突操作。有些叢集技術中包括了這種通常稱為分散式鎖管理器(distributed lock manager,DLM) 的服務。

六、作業系統結構

    作業系統最重要的一點是要有多道程式處理能力,單個使用者通常不能總是使得CPU和I/O裝置都很忙。多道程式設計通過組織作業使CPU總有一個作業可以執行,從而提高CPU利用率。    多道程式處理就是作業系統將使用者所提交的作業都先存放到外存上並排成一個佇列,稱為“後備佇列”,然後作業排程程式按照 一定的演算法從後備佇列選擇若干個作業調入記憶體,使它們共享CPU資源。只要有一個任務可以執行,CPU就不會閒著。    多道程式系統提供了一個可以充分使用各種系統資源(如CPU、記憶體、外設) 的環境,但是它們沒有提供與計算機系統直接互動的能力。分時系統(或多工) 是多道程式設計的延伸。在分時系統中,雖然CPU 還是通過在作業之間的切換來執行多個作業,但是由於切換頻率很高,使用者可以在程式執行期間與之進行互動。    共享需要一種互動計算機系統,它能提供使用者與系統之間的直接通訊。使用者通過輸入裝置,如鍵盤或滑鼠,向作業系統或程式直接發出指令,並等待輸出裝置立即出來的結果。響應時間(responsetime) 比較短,通常小於1秒。
    分時作業系統允許許多使用者同時共享計算機。由於分時系統的每個動作或命令都較短,因而每個使用者只要少量CPU 時間。隨著系統從一個使用者快速切換到另一個使用者,每個使用者會感到整個系統只為自己所用,儘管它事實上為許多使用者所共享。
    分時作業系統採用CPU排程和多道程式設計以提供使用者分時計算機的一小部分。每個使用者在記憶體中至少有一個程式。裝入到記憶體並執行的程式通常稱為程序(process)。當程序執行時,它通常只執行較短的一段時間,此時它並未完成或者需要進行I/O 操作。I/O可能是互動的,即輸出到使用者的顯示器,從使用者的鍵盤、滑鼠或其他裝置輸入。由於互動I/O通常按人的速度來執行,因此它需要很長時間完成。例如,輸入通常受使用者打字速度的限制;每秒7個字元對人來說可能很快,但是對計算機來說相當慢了。在使用者互動輸入時,作業系統為了不讓CPU 空閒,會將CPU切換到其他使用者的程式。    分時和多道程式設計需要在儲存器中同時儲存有幾個作業。通常由於主存較小而不能容納太多作業,所以這些作業剛開始儲存在磁碟的作業池(jobpool) 中。該池由所有駐留在磁碟中需要等待分配記憶體的作業組成。如果多個作業需要調入記憶體但沒有足夠的記憶體,那麼系統必須在這些作業中做出選擇,這樣的決策被稱為作業排程(jobscheduling)。    當作業系統從作業池中選中一個作業,就將它調入記憶體來執行。在記憶體中同時有多個程式可執行,需要一定形式的記憶體管理。另外,如果有多個任務同時需要執行,那麼系統必須做出選擇,這樣的選擇稱為CPU 排程。
    最後,多個併發執行的作業需要作業系統在各方面限制程序的互相影響,如程序排程、磁碟儲存和記憶體管理。在分時作業系統中,作業系統必須保證合理的響應時間,這有時需要通過交換來得到。交換時程序被換入記憶體或由記憶體換出到磁碟。實現這一目的更常用方法是使用虛擬記憶體(virtual memory),虛擬記憶體允許將一個執行的作業不完全放在記憶體中。虛擬記憶體的主要優點是程式可以比實體記憶體(physical memory) 大。再者,它將記憶體抽象成一個龐大且統一的儲存陣列,將使用者所理解的邏輯記憶體(logicalmemory) 與真正的實體記憶體區分開。    分時作業系統也必須提供檔案系統。檔案系統駐留在一組磁碟上,因此也必須提供磁碟管理。為了確保有序執行,系統必須提供實現作業同步和通訊的機制。也要確保作業不會進入死鎖,進而無休止的等待。