【操作系統原理】第一章-操作系統概述

操作系統概述

操作系統設計的目標和功能

  在最早期的計算機中,並沒有能夠稱得上是操作系統的服務管理程序,例如早期的串行處理計算機,就是人們把程序一個一個輸入進計算機,設定好預計時間,然後讓操作系統進行執行。這樣的串行處理存在着調度不合理,準備時間長的問題,並不便於使用。
  於是人們想方設法希望可以設計出便於使用的操作系統,而到現代,計算機已經普及,大衆對於操作系統的要求更加嚴格,企業和實驗室對操作系統的研究需要從交互性,容錯性,安全性等各個方面考慮,這也是操作系統逐漸進步走向智能的道路。但是操作系統的設計一共可以總結爲三個大目標:方便,有效,易擴展
操作系統
  如上圖,操作系統是連接計算機硬件與用戶的橋樑,發展至今其在計算機體系中起着至關重要的作用,我們可以將操作系統視作一個普通的軟件,面向普通用戶,用戶往往不關心計算機硬件,操作系統需要讓計算機底層細節對用戶透明,提供用戶方便的使用體驗,包括基本的程序創建,文件管理,I/O控制,內存管理等功能;而對程序員,操作系統需要像程序員隱藏硬件細節,開發通用開發工具、服務、庫、接口等。因此操作系統的功能可以列舉如下:程序開發,程序運行,I/O設備訪問,文件訪問控制,系統訪問,錯誤檢測和響應,記賬。
  對於操作系統的擴展性,有着高度要求,因爲操作系統需要不斷進步,不斷擴展以應對新的服務,新的硬件,或者錯誤糾正等情況的發生,因此操作系統一般多使用模塊化的結構,各個模塊組件之間相互配合共同完成工作。

操作系統的發展

串行處理

  最早期的計算機就是利用普通的串行處理完成工作,就是人們把程序一個一個輸入進計算機,設定好預計時間,然後讓操作系統進行執行,這樣的方式有以下兩個問題。
  1、調度不合理。如果程序沒有在預計時間內運行成功則會強制停止,而如果超預期提前執行完畢,用戶也不得不等待預計時間結束纔可以放入下一個程序。
  2、準備時間長。這樣的串行處理操作系統需要人們自己加載編譯器,源程序,加載目標程序進行連接,在此期間需要安裝或拆卸磁帶,十分麻煩,一旦失敗只能重新來過,因此在程序運行的前期準備階段要花費大量時間。

批處理系統

  批處理操作系統內部使用了一個監控程序,人們將想要執行的程序放入輸入設備,監控程序則負責依次自動從輸入設備中調入程序進入內存,指揮處理器進行執行,當執行完畢或遇到錯誤時都會停止當前程序執行,進而調入下一個程序進行執行,執行結果將會放入輸出設備。
  監控程序此時充當了操作系統的角色,當調入程序時指揮權暫時交給程序,當執行結束或者出錯指揮權將重新換回監控程序。這裏指揮權僅僅代表當前情況下處理器從哪個程序中讀取代碼進行執行。
  批處理系統已經有了些操作系統的雛形,但是此時的操作系統一次只能讀入一個程序放入內存,調度模式也只是簡單的順序調入,因此內存管理以及調度方式相對來說十分簡單。但是此時的操作系統已經有了現代操作系統的雛形功能。
  1、內存保護。程序讀入內存不得訪問監控程序的內存區域,如果嘗試這樣做則將控制權轉交監控程序停止當前運行程序,報錯。這樣的模式類似於如今操作系統的用戶態(目態)以及內核態(管態)。用戶程序運行在目態,在用戶態情況下擁有着對內核態內存的絕對保護,當發生中斷、異常、系統調用時系統會從用戶態切換爲內核態進行系統級處理,可以理解爲用戶態是普通用戶,而內核態則是系統管理員,擁有最高權限。
  2、定時器。當一個程序開始運行時即開始計時,當時間到程序還未運行成功則會報錯終止。
  3、特權指令。當程序想要執行一些特殊指令時,例如I/O指令,此時將會發生錯誤,管理權移交監控程序,由監控程序代替普通程序執行特權指令。當用戶想要執行特權指令時只能請求監控程序代替進行執行。這一點十分類似如今操作系統的系統調用庫函數的執行方法,也需要由用戶態向內核態的切換。

多道批處理操作系統

  上述操作系統同一時間內只能將一個程序讀入內存進行執行,但是如果當前程序正在進行I/O操作則處理器只能等待程序I/O結束,因此會有大量的處理器空轉時間。那麼如果我們可以同時向內存中讀入多個程序,在一個程序進行I/O時處理器執行另一個程序豈不是會大大提高處理器利用率。因此多道批處理操作系統誕生了。
  這種可以同時向內存中讀入多個程序的處理稱爲多道程序設計也稱爲多任務處理,是現代操作系統的主要方案。
  由於多道操作系統需要向內存中讀入多個程序因此其對內存的管理,以及作業調度會更加複雜。

分時系統

  分時系統也是多道程序設計的一種,它旨在可以同時完成處理多個交互作業。在這種系統中,多個用戶可以通過不同終端登入同一個系統,同時爲計算機安排任務,因此可以看作多個用戶共享處理器時間,因此稱爲分時
  在分時系統中每個用戶的程序在很多的時間內交替執行,若不計系統開銷則每個用戶平均只能得到計算機有效速度的1/n。第一個分時系統是麻省理工學院開發的兼容分時系統(CTSS)。CTSS的工作方式十分簡單這裏不做過多介紹,但是現代操作系統中的Linux就是典型的分時系統,它允許多個用戶通過不同終端連入系統,同時與系統進行交互,但是Windows則不是分時系統。
  分時及多道程序設計引發了操作系統中的許多新問題,例如內存管理,進程保護,權限控制資源分配等。

現代操作系統

特徵

  操作系統的設計是一門綜合性極高的學科,經過幾十年的發展,操作系統主要在以下四個方面有了理論進展:進程,內存管理,信息保護與安全,調度及資源管理
  在過去數年中操作系統的結構和功能逐步發展,但幾年來新一代操作系統引入許多新的設計要素,使得操作系統有了本質的變化,可以分爲以下幾點。

微內核體系結構

  內核是一個操作系統的核心,它負責完成操作系統內控制管理計算機資源的核心功能,例如進程,調度,內存管理,文件,資源管理等,我們常說的Linux操作系統有很多發行版本,但是他們的內核都是Linux內核,Android操作系統它的內核也是Linux內核不過在其基礎上進行了改進和優化使其可以進入移動端。
  內核是一個操作系統的核心,大多數操作系統都是單體內核,及操作系統絕大部分核心功能都由這一個大內核提供,典型情況下這個內核是一個進程。而微內核體系結構只給內核分配一些最基本的功能,例如地址空間,進程間通訊,調度。其他的功能都在用戶態運行並和普通程序沒有什麼區別,因此這些進程可以更具特定需要和環境進行定製,這些進程也被成爲服務器。微內核結構的設計分離了內核和服務程序的開發,使得操作系統的結構設計更加簡單、靈活,因此多用於分佈式操作系統。

分佈式操作系統

  在一個分佈式系統中,一組獨立的計算機展現給用戶的是一個統一的整體,就好像是一個系統似的。系統擁
有多種通用的物理和邏輯資源,可以動態的分配任務,分散的物理和邏輯資源通過計算機網絡實現信息交換。系統中存在一個以全局的方式管理計算機資源的分佈式操作系統。
  分佈式操作系統需要在各個獨立計算機之間進行信息交互,但是由於在不同的計算機系統中,因此基於處理機之間的通信技術都無法被使用,因此使用分佈式消息傳遞以及遠程過程調用來進行信息交互。

多線程

  線程是處理器調度的最小單位,在Linux中可以看作是一個輕量化進程,進程則可以看作是若干個線程的集合。在同一進程的不同線程中共享代碼段,數據段,I/O狀態信息等,但也有自己獨立的部分例如棧,errno,調度優先級。
  多線程對於許多本質上獨立不需要串行處理的應用程序很有用,相比多進程其進行調度和切換所造成的開銷也會更小。

對稱多處理

  對稱多處理(SMP),是指在一個計算機體系中有多個處理器,並且內核可以在任何一個處理器上執行,系統也可以調度任何一個進程或線程到任何一個處理器上執行。相比單處理器體系結構,SMP系統可以讓多個線程達到並行執行的特點,因此對SMP系統與多線程結合可以大大提高計算機的運行效率。現在的計算機操作系統大部分都是採用對稱多處理的體系結構,因爲我們現在所使用的處理器一般都擁有多個核心,也就是擁有多個處理器共同爲我們工作。
  但是對稱多處理的產生也使得操作系統的設計要考慮更多的因素。因爲此時操作系統所要管理的絕不僅僅是一個核心。舉個例子相比單處理器體系結構對稱多處理操作系統可能會面臨兩個處理器同時調度同一個進程的情況,爲了避免這種情況的發生就需要使用更加高級的調度算法進行調度,當然也可能存在多個處理器同時競爭同一資源的情況,而對於內核來說內核也應該設計成可重入的,保證內核可以同時被多個處理器執行。
  而良好的使用多核處理器和多線程可以大大提高計算機工作效率,而其中又有幾種可以潛在提高並行方式的方法。我們正在進入一個衆核時代。

面向對象設計

  面向對象技術在操作系統開發方面可以是操作系統開發更具模塊化,使得程序員可以定製操作系統,而不會破壞操作系統的完整性,典型的Windows就極大程度的採用了面向對象技術進行開發。

Windows

  Windos操作系統起源於微軟應用於個人計算機上的MS-DOS操作系統,在1985年改名爲Windows,之後通過不斷革新到現在已經推出了Windows10的版本,在每一代操作系統的更新背後都是對操作系統內核結構的改變。

體系結構

操作系統
  上圖顯示了Windows8的總體結構。Windows分開了面向應用的軟件和操作系統核心軟件。在內核組件中包括以下類型:執行體,內核,硬件抽象層,設備驅動,窗口和圖形系統,其中執行體包括操作系統核心服務,如I/O管理器,高速緩存管理器,對象管理器,即插即用管理器,電源管理器,安全訪問監控程序,虛存管理器,進程/線程管理器,配置管理器,本地過程調用。在用戶模式中可以運行4中基本用戶模式進程特殊系統進程,服務進程,環境子系統,用戶應用程序。

客戶-服務器模型

  這種模型廣泛用於分佈式計算。但是在Windows中也使用了這種模型進行構建,環境子系統和Windows用戶模式服務都已通過RPC與客戶端進行通信的進程來實現。客戶-服務器體系結構的優點可以簡化執行體,提高可靠性,靈活性高,爲分佈式計算提供基礎。

線程和SMP

  毫無疑問Windows是典型的支持線程和SMP的操作系統。

Windows對象

  Windows內核使用C進行編寫,但是其採用的設計原理卻與面向對象設計密切相關,擁有面向對象設計的基本特徵。因此我們可以將內核中的任何東西看成對象,執行體中的對象也叫內核對象,只能被內核訪問,這體現了面向對象的封裝特徵,將限制對象的訪問進行了應用。

UNIX

早期UNIX系統

操作系統
  UNIX由貝爾實驗室進行開發,是Multics的微縮版,吸收了其很多思想。無疑UNIX有很多發行版本,其中有商業銷售UNIX System Ⅲ
後臺這一曹祖西歐i同由進行多次升級變成了UNIX System V
  早期UNIX操作系統體系結構如上圖。它被設計成只能在單易處理器上運行,缺乏保護數據結構免受多個處理器同時訪問的能力;它的內核不通用,只支持一種文件系統、進程調度策略和可執行文件格式;傳統UNIX內核不可擴展,不能重用代碼,內核設計巨大,且不是模塊化的。

現代UNIX系統

  隨着UNIX的不斷進步升級,現代的UNIX內核有着如下所示的結構,其已經逐漸開始向模塊化進展。
操作系統
  System V Release 4(SVR4)是一個經過幾乎完全重寫System V的內核後而形成的新版本操作系統,這也是最最重要的UNIX變體。BSD廣泛應用於高效,是許多商業UNIX產品的基礎,應用最廣且文檔最好的BSD版本是FreeBSD,常用於互聯網的服務器,防火牆和嵌入式系統中。Solaris是基於SVR4UNIX版本,最新版是10,也是使用最爲廣泛且最成功的商用UNIX版本。

Linux

  Linux都不陌生,它最初是IBM PC上所應用的一個UNIX變體,它由芬蘭的計算機科學專業學生Linus Torvalds編寫。Linux成功的一大部分原因在於其由免費軟件基金FSF贊助,Linus在開發內核時使用了GNU工具,後來他在GPL下發布了這個內核,因此今天所有的Linux的發行版都是FSFGNU項目、Linus的個人努力以及全世界各地很多合作者共同開發的產品。

模塊結構

  Linux是單體內核,這樣的缺點是一大塊代碼中包含所有的操作系統功能,並作爲單個進程運行。這也就使得對操作系統任何部分的修改都要重新連接、重新安裝,再重新啓動系統,因此任何修改都十分困難,Linux中的這個問題更加尖銳。
  但是儘管Linux是單體的,但由於其特殊的模塊結構使得這些模塊可用由命令自動加載和卸載,這些相對獨立的模塊稱爲可加載模塊Linux的可加載模塊是可以動態鏈接的,並且其也是可堆疊的,按照層次有序排列。例如一個文件系統就是一個模塊。

內核組件

操作系統
  如圖給出了Linux內核的主要組件。所有內核組件都在CPU上執行,其中包含很多內核組件例如信號,系統調用,進程和調度器,虛存,文件系統,網絡協議,字符設備驅動,塊驅動設備,網絡設備驅動,陷阱和錯誤,物理內存,中斷
  順帶一提Linux是典型的分時多用戶操作系統,因此十分適合作爲服務器進行使用,方便程序員合作開發,現在絕大部分服務器都是採用Linux作爲操作系統,但是由於Linux對於用戶的交互體驗不是很好(應該說並沒有Windows的好),無論是從內核設計還是設計理念來看都是Windows操作起來更加方便因此廣泛應用於家用機,如果不是有特殊情況並不建議使用Linux作爲家用操作系統。

Android

  Android操作系統廣泛應用於觸屏移動設備,其也是基於此目的進行設計和開發的,其早期由Android公司開發,該公司隨後被Google收購,

軟件體系結構

  Android是一個包括操作系統內核、中間件和關鍵應用的軟件棧。其因該算是一種嵌入式Linux,基本框架如圖所示。
操作系統

系統體系結構

  體系結構如上圖所示,在進行開發時,開發者最關心應用及框架,他們通常使用Java進行開發,在這一層有着訪問底層服務的API。對於Android系統服務,框架中大部分能夠調用系統服務的接口都已經向開發者開放,而系統服務分爲兩部分,媒體服務以及系統服務。
  對於Android的內核是對原生Linux進行了裁剪,並且針對移動設備提高了內核的功能,可以說Android有着一顆Mini Linux內核。

總結

  綜上我們通過操作系統設計目標,設計重點,操作系統發展歷史,以及現代操作系統中新加入的設計元素以及常用現代操作系統對操作系統進行了概述,當然這只是粗略了,甚至只能說是大體上進行了瞭解,本系列會重點對操作系統原理進行進一步梳理和歸納。參考資料及圖均來自《操作系統-精髓與設計原理(第八版)》。

發佈了85 篇原創文章 · 獲贊 17 · 訪問量 3568
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章