作業系統(二):作業系統結構

Robod丶發表於2020-09-12

好好學習,天天向上

本文已收錄至我的Github倉庫DayDayUP:github.com/RobodLee/DayDayUP,歡迎Star

作業系統服務和介面

在上一篇文章中討論什麼是作業系統的時候我舉了個例子,說作業系統就是幫我們管理大宅子的管家,既然是管家,那麼肯定是有很多才能的,不然難以擔此大任。正是管家有諸多才能,才可以更好地服務於我們,對於作業系統而言,這些才能就是作業系統服務。那麼都有哪些作業系統服務呢?舉幾個例子:

· 使用者介面
· 程式執行
· I/O 操作
· 檔案系統操作
· 通訊
· 錯誤檢測
· 增值服務
· 資源分配
· 統計
· 保護和安全
· 作業系統服務
· 作業系統程式介面(系統呼叫)
· 作業系統使用者介面
· 系統程式
  · · · · · 

既然作業系統有這麼多的服務,那麼我們平時是怎麼去使用作業系統的呢,或者說,平時我們是怎麼使喚管家為我們服務的呢?有兩種方式。

第一種,給管家留張小紙條,告訴他下午去菜市場買幾瓶82年的青島啤酒,然後管家看到後就屁顛屁顛屁顛跑去了。這種方式俗稱命令列,也就是黑乎乎的視窗,在黑視窗裡面敲命令然後系統執行命令。這種方式用起來可不算簡單,要是遇上個什麼複雜的操作,敲鍵盤都得敲半天。

第二種就是指哪打哪,比如我看見花園裡該除草了,就把管家喊過來,說:“你看這裡雜草這麼多,你去安排一下,把草除除吧”。然後管家又屁顛屁顛跑去幹活了,這種方式就是圖形化介面,比如我們們的Windows,MacOS。這種方式可比第一種簡單多了,很多操作用滑鼠隨便點幾下就可以完成了,舒服極了~~~

看起來作業系統好像也沒什麼嗎, 作為普通使用者而言,點點滑鼠敲敲鍵盤就能完成很複雜的操作,就算對於開發者而言,調調常用的API就能完成需求。之所以我們可以很這麼方便地使用作業系統,那是因為作業系統遮蔽了諸多實現細節。我們平時使用的叫做使用者介面和系統程式,使用者介面和系統程式是作業系統提供給使用者的服務形式,那麼誰為系統程式提供服務呢——系統呼叫。系統呼叫是作業系統提供給程式的服務程式。

由於系統呼叫的存在,大大簡化了程式設計師的工作,上一篇文章中不是說過系統執行分為使用者模式和核心模式嗎,當我們呼叫一個系統API的時候,作業系統就會從使用者模式切換到核心模式,然後去做一系列的工作。比如open()

當執行open的時候,CPU從使用者模式切換到核心模式,作業系統根據名稱 “open” 查表,找到系統呼叫的位置,再到系統呼叫向量表中找到入口地址,然後開始執行系統呼叫的程式碼,執行完後,CPU又切換到使用者模式,將執行結果返回給應用程式。

系統呼叫大致分為五大類:程式控制檔案管理裝置管理資訊維護通訊

既然系統呼叫是為系統程式提供服務的,一般認為用於管理、維護作業系統的程式是系統程式。那麼哪些屬於系統程式呢?

  • 檔案管理
  • 狀態資訊
  • 檔案修改
  • 程式語言支援
  • 程式裝入和執行
  • 通訊
  • ......

作業系統結構

十幾年前,還沒有智慧機,只有功能機,功能機效能有限,只能玩玩俄羅斯方塊什麼的。隨著手機效能的不斷進步,開始出現了Android和IOS這樣的智慧手機作業系統。早期的Android系統功能還很有限,介面也很醜,經過這麼多年的發展,才有今天的局面。我認為推動作業系統結構發展的原因有兩個,第一是在現有的硬體基礎上優化系統結構從而提升效能,第二點是為了適應不斷更新迭代的計算機硬體從而體現硬體的價值

  • 簡單結構

    早期的計算機功能很簡單,在開發作業系統的時候,根本不用去過多地考慮系統該怎麼設計,直接幹就完事兒了。就算有很好的設計,在計算機硬體的限制下,也不能很好地體現出它的價值。所以最開始的操作系都是規模小,功能簡單的,一個人幹幾個月就能搞個作業系統出來,缺點就是不利於維護,隨著計算機的發展,這樣的作業系統就顯得不太合適了。

  • 層次結構

    為了更好地設計作業系統,可以採用模組化的思想,層級結構就是一種模組化的思想。層次結構就和蓋樓一樣,最底層為硬體,最高層為使用者層,每層只使用低層次的功能和服務,也就是說上層可以呼叫下層的服務但不可以呼叫其它層的服務。就像下圖這樣:

    這種結構帶來的好處就是簡化了系統設計,便於除錯和升級維護。比如我可以先去除錯第一層,當第一層沒有問題後再去除錯第二層。但同樣的,這種設計也存在缺點,就是層的定義困難以及效率差。比如一個程式要進行I/O操作,需要經過I/O層,記憶體管理層,CPU排程層,然後傳給硬體,每一層都會增加額外的開銷,帶來的結果就是比在非分層系統上執行要耗費更多的時間。

  • 微核心結構

    隨著作業系統的進一步發展,功能不斷地疊加,核心也隨之擴大,所帶來的問題就是管理起來越來越困難。就像一個人,越胖活動起來就越困難。所以就出現了微核心技術來優化模組化結構,就是將一些非核心的功能移到使用者空間去,這種設計帶來的好處就是方便擴充套件系統,所有新服務都可以在使用者空間增加,核心基本不用去做改動。但是這也帶來了一個問題,就是增加了使用者空間和核心空間的通訊的開銷,所以引入了訊息傳遞機制。

  • 模組化結構

    模組化結構將系統的功能劃分為不同的模組,模組之間通過介面進行通訊。模組化結構類似於分層結構,不同的是分層結構只能相鄰兩層之間進行通訊,而模組化結構就不受此限制。

    模組化結構的一個特點就是用的時候才會被載入到核心,類似於我們平時用電腦的時候用到滑鼠或者鍵盤才會將其插到電腦上一樣,優點就是靈活,我們還可以自己去設計一個模組然後裝載進系統。

  • 混合結構

    當系統設計者們不滿於單一系統結構時,就會選擇混合結構去滿足效能、安全等多方面的需求,也就是多種結構並存的方式。例如Mac OS X

虛擬機器

虛擬機器我相信很多人都用過吧,虛擬機器是一種通過軟體模擬實現,具有完整硬體系統功能,並執行在一個完全隔離環境中的完整計算機系統。虛擬機器也分為很多種,有高階語言虛擬機器供特定語言執行使用的,還有在一臺計算機上虛擬出多個作業系統的。

  • Java虛擬機器

    學Java的都應該知道,Java的一大特點就是 “一次編寫,多處執行”。為什麼Java可以有這種特點呢?因為有Java虛擬機器(JVM)的存在。Java程式都是跑在JVM裡面的,不直接與電腦的作業系統和計算機硬體接觸。所以只要在特定的平臺安裝特定的JVM,比如Linux版的,Windows版的,就可以實現一套程式碼到處執行。

  • 工作站虛擬機器

    工作站虛擬機器就是在一個宿主作業系統中安裝很多個作業系統。比如我們可以在自己的電腦上安裝一個VMWare,然後在VMWare中去安裝不同的作業系統

    這種方式最大的好處就是方便,比如我平時需要在CentOS上使用Docker,要是我單獨再去搞一臺電腦裝CentOS,不僅耗費金錢還很麻煩。如果採用安裝虛擬機器的方式就可以為我省下一大筆錢,甚至我還可以同時跑很多個CentOS做叢集玩。

  • 伺服器虛擬機器

    伺服器虛擬機器和工作站虛擬機器有點類似,但不同的是它是直接將將伺服器物理資源抽象成邏輯資源,讓一臺伺服器變成幾臺甚至上百臺相互隔離的虛擬伺服器,不需要宿主作業系統。有兩種模式:

    一虛多:一臺伺服器虛擬成多臺伺服器虛擬機器

    多虛一:多個獨立物理伺服器虛擬為一個伺服器虛擬機器

    我認為這種方式最大的好處就是提高了資源利用率,比如我們學校,有云機房也有傳統機房。我最大的一個感受就是,有的實驗室裡面的電腦平時用的很少,可能也就上課的時候用一下,不用的時候就在那閒著。等過了幾年,效能不夠的時候用起來又有點卡,很不爽。而云機房這種伺服器虛擬機器就很不錯,可以動態的擴容,提高了資源利用率。

總結

這篇文章先介紹了作業系統服務和介面,然後介紹了幾種作業系統結構,如簡單結構、層次結構、微核心結構等。最後介紹了幾種虛擬機器,有JVM,工作站虛擬機器,伺服器虛擬機器。下一篇文章就開始將程式了~~~

碼字不易,可以的話,給我來個點贊收藏關注

本文已收錄至我的Github倉庫DayDayUP:github.com/RobodLee/DayDayUP,歡迎Star

相關文章