操作系統的抽象與虛擬化

轉自http://my.oschina.net/websec/blog/490958

爲什麼需要操作系統?

說抽象之前得先知道CPU以及鍵盤、鼠標是之間是工作的。CPU最終狀態只能進行加減,當我們輸入一個簡單的字符“A”的時候,鍵盤與CPU都是把字母“A”轉化爲能夠識別的二進制01才能識別。而這一些對於使用者來說都是透明的,讓使用者認爲當輸入一個字母“A”時就是對字母“A”的一個“投影”顯示。但實現這個的一切轉化都已經由操作系統幫助我們完成,如果沒有操作系統,對於一個字母A的輸入,可能就是輸入01000001這樣的二進制代碼。操作系統把設備(CPU,鍵盤,鼠標等)抽象後以方便我們的操作。

操作系統究竟把設備抽象成什麼?

那麼操作系統究竟把這些設備抽象成什麼,是如何開發者方便開發者的調用?在操作系統中Everything is FileCPU,鼠標等這些都被操作系統抽象(虛擬化?)成爲了文件,這樣開發者可以通過對這些文件操作來操作設備。下面兩幅圖前者是Linux(Ubuntu)對於CPU和鼠標抽象之後的結果,後者是Windows7對於硬盤的抽象(虛擬化?)後的截圖:

Linux

Windows7

開發者在使用這些設備的時候內部發生了什麼?

前面提到的OS把一切抽象成爲了文件的形式以供開發者(包括用戶)來使用,那麼在寫一個C語言簡單的scanf的時候,內部究竟幹了什麼?如下圖:

 

上圖一個程序與設備通信的工程,可以想象我們正在執行一個包含scanf的程序,我們需要通過程序輸入一個值,在內部是程序通過系統調用接口(syscall.h man 2 syscall)去操作設備驅動,然後設備驅動選擇使用哪個設備節點,最後節點與實際的設備相關聯。

對於上圖的進一步分析:

對於在Linux操作系統中執行ls命令查看當前文件夾內容的抽象:

抽象=虛擬化?

虛擬化和抽象我認爲不能混爲一談,抽象是把物理設備變成實實在在的文件形式;但是虛擬化對於一個虛擬化系統是一個並不存在的東西,雖然虛擬化系統會認爲自己本身是運行在物理設備之上的,但這一切都是運行在一個虛擬設備監視器(VMM)的容器之內。如圖:

 

因爲每個進程都擁有自己的內存空間,進程間通過pipe進行通信,而虛擬機監視器可以讓虛擬機共享一個物理內存空間。換句話說就是:虛擬機監視器對於虛擬機是多對多的關係,而對於物理設別的抽象內存是一對一的關係。如果是省略中間的監視器,實際上就是虛擬機共享物理內存的一個進程的內存空間(實際是不可能省略中間的監視器,這裏只是類比)。監視器模擬虛擬CPU,虛擬CPU的計算通過監視器傳遞給真實的CPU計算。(下圖爲VMM模擬)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章