整理一下虛擬化與Linux的學習經歷
由於工作的原因,需要開始接觸虛擬化。正好前幾天學了許岑的《如何成為有效學習的高手》,其中建議成年人需要以任務驅動的方式進行學習,並且需要刻意製造反饋,比如把學習內容整理成文章才能更有效的學習,所以嘗試寫下此文作為學習虛擬化歷程的記錄。
虛擬化我們都不陌生,平時我們網路工程師或者 運維工程師進行實驗的各個平臺都用了虛擬化的技術,比如 VMware 還有 EVE 模擬器等等。但其實我們使用的 Windows 其實也是一種最基礎的虛擬化,它是分時複用系統,會將所有硬體進行虛擬化,再硬體資源邏輯化的基礎之上,使用分時複用和共享記憶體功能,所以我們的電腦才能同時處理不同軟體的工作。程式設計領域的 Java 虛擬機器其實也是一種虛擬化技術,也是將作業系統資源進行虛擬化,然後 Java 程式就可以方便的移植到其他計算機上了。
廣義上來講,虛擬化就是在一套硬體上同時執行多個 OS 。虛擬化的實現就是開發出 VMM ( virtual machine monitor )虛擬機器監視程式。最早的發展其實就是 IBM 開發分時系統了, IBM 工程師們透過將 CPU 的佔用切分為無數個極短的時間片,然後讓每片去執行不同的任務,透過輪詢的方式使之偽裝成多個 CPU 處理不同的程式,把物理資源邏輯化,以提高利用效率。
不同廠家開發出了不通的虛擬化軟體和技術,他們的實現也有所不同。比如 VMware 針對個⼈⽤戶是 VMware Workstation ,針對蘋果系統是 VMware Fusion ,針對企業⽤戶是 VMware vSphere+VMware vCenter 。 Linux 大廠 RedHat 使用的是( QEUM-KVM ) kernel-based virtual machine 和 QEUM 。微軟開發的是 hyper-V 運用在自家的 windows 系統上,廠家 Citrix 開發的是 Xen ,這家和其他廠家不太相同,是一種半虛擬化技術。
因為工作的原因,我注重學習的是 Linux 的 KVM , Linux 在 IT 領域應用的更為廣泛,學習 Linux 就不在此多敘,如果想系統的入門學習 Linux ,可以去看看 這本書。
在虛擬化中,物理機提供物理資源,再上一層是 Hypervior/VMM 也就是宿主機,由他分成不同的客戶機 OS1 , OS2 , OS3......
虛擬化模式下有兩種指令,特權指令和敏感指令。顧名思義,特權指令是操作和管理關鍵系統資源的指令,只有在最高特權級才能正確執行,如果在非最高特權級執行,特權指令會引發一個異常,處理器可能會陷入最高特權級,交由系統軟體進行處理。敏感指令,是操作特權資源的指令,其中包含修改虛擬機器的運⾏模式或者下⾯物理機的狀態;讀寫時鐘、地址重定位系統及所有的 I/O 指令、中斷等暫存器;訪問儲存保護系統等等。透過對比可以得出特權指令比敏感指令等級更高。當 guest OS 執⾏特權指令的時候, VMM 會捕捉到異常,對 guest OS 執⾏的特權指令進⾏特權降級,然後進行模擬,透過模擬的⽅式實現 guest OS 需要實現的操作。
需要注意的是由於 X86 架構的 CPU ,敏感指令並不完全是特權執⾏,有些敏感指令對於 VMM 來說是捕捉不到的,所以⽆法進⾏特權降級然後陷⼊模擬,所以由於 X86 架構的 CPU 的這種情況,⽆法實現虛擬化的全部功能。
但如何解決 X86 架構的虛擬化實現呢, VMware 給出了他們的技術方案,那就是透過二進位制翻譯( BinaryTranslation )。 X86 硬體虛擬化誕生也就十多年,但 VMware 已經成立了二十多年了, BT 技術的歷史也早已超過硬體虛擬化的歷史,所以這是一項成熟到有些過時的技術了。 BT 技術包含了二進位制程式碼翻譯技術還有優先順序壓縮技術,他們的共用實現了讓虛擬監視器和客戶機可以執行在不同的特權級,實現 Guest OS 的核心指令透過虛擬監視器的捕獲和模擬來執行,實現客戶作業系統需要做的操作。由於純軟體的實現⽅式導致效率極低,速度慢,所以又有了半虛擬化技術。半虛擬化採用了 Hypercall 技術, guest os 部分的程式碼被改變,使它會將特權指令的草案中都轉還給 VMM 的 Hypercall ,由 VMM 繼續處理,使 guest os 知道自己執行在 1 環而不是 0 環,有效的避免了虛擬化的執行衝突問題。半虛擬化有一項優點,那就是效率高,但缺點是他無法虛擬化 Windows ,因為 Windows 不能修改程式碼。
本片介紹了虛擬化的概念還有各個廠家對虛擬化的不同技術實現,下一篇會持續介紹 Linux 虛擬化技術 KVM 的安裝和使用等。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2936537/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- KVM虛擬化學習筆記筆記
- 簡單聊聊Linux學習經歷Linux
- 用經濟學的眼光看儲存虛擬化薦
- Java虛擬機器的原理是怎樣的?學習一下吧Java虛擬機
- 我的前端學習經歷前端
- 虛擬化學習筆記-基礎知識筆記
- 我的學習經歷——Linux系統入門教程Linux
- Linux小小白的學習經歷那點事Linux
- Xdoclet之學習經歷
- 虛擬化的發展歷程和實現方式
- 虛擬化技術的發展歷程簡述
- 網路虛擬化之linux虛擬網路基礎Linux
- 學習Linux安裝虛擬機器有哪些步驟?Linux運維學習Linux虛擬機運維
- 聊一下學習linux的小經驗和重要性Linux
- 【原創】Linux虛擬化KVM-Qemu分析(六)之中斷虛擬化Linux
- 我的Go語言學習經歷Go
- 虛擬機器上學習Linux運維?學linux有什麼用虛擬機Linux運維
- 學習過程中對Vmware虛擬化產品的選擇
- 分享我曾經的學習和找工作經歷
- 【原創】Linux虛擬化KVM-Qemu分析(四)之CPU虛擬化(2)Linux
- 虛擬化四、KVM虛擬化技術
- IO虛擬化的優勢與需求分析
- 學習筆記-虛擬機器筆記虛擬機
- 在Linux中,什麼是虛擬化?並且列出常見的虛擬化技術。Linux
- nofile引數的學習與整理
- 關於Docker你不知道的事——虛擬化歷史Docker
- Linux虛擬化平臺檢測Linux
- 我大一學習C++的經歷C++
- 安裝虛擬Redhat Linux,物理硬碟與虛擬硬碟共存的問題(轉)RedhatLinux硬碟
- 【原創】Linux虛擬化KVM-Qemu分析(五)之記憶體虛擬化Linux記憶體
- 【原創】Linux虛擬化KVM-Qemu分析(七)之timer虛擬化Linux
- 【原創】Linux虛擬化KVM-Qemu分析(二)之ARMv8虛擬化Linux
- 一次Linux虛擬機器安裝Oracle 11G資料庫經歷Linux虛擬機Oracle資料庫
- Java虛擬機器學習筆記整理Java虛擬機機器學習筆記
- 與 Linux 一起學習:物理模擬Linux
- 啥是伺服器虛擬化,虛擬化的優勢伺服器
- 通過編寫簡易虛擬DOM,來學習虛擬DOM 的知識!
- 超級雲端計算與虛擬化