整理一下虛擬化與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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 簡單聊聊Linux學習經歷Linux
- 我的學習經歷——Linux系統入門教程Linux
- Linux小小白的學習經歷那點事Linux
- 網路虛擬化之linux虛擬網路基礎Linux
- 學習Linux安裝虛擬機器有哪些步驟?Linux運維學習Linux虛擬機運維
- 虛擬機器上學習Linux運維?學linux有什麼用虛擬機Linux運維
- 我的前端學習經歷前端
- 聊一下學習linux的小經驗和重要性Linux
- 【原創】Linux虛擬化KVM-Qemu分析(六)之中斷虛擬化Linux
- 【原創】Linux虛擬化KVM-Qemu分析(七)之timer虛擬化Linux
- 虛擬化的發展歷程和實現方式
- Linux虛擬化平臺檢測Linux
- 【原創】Linux虛擬化KVM-Qemu分析(四)之CPU虛擬化(2)Linux
- 在Linux中,什麼是虛擬化?並且列出常見的虛擬化技術。Linux
- Xdoclet之學習經歷
- 什麼是linux虛擬機器?如何安裝?Linux學習入門!Linux虛擬機
- 【原創】Linux虛擬化KVM-Qemu分析(二)之ARMv8虛擬化Linux
- 【原創】Linux虛擬化KVM-Qemu分析(五)之記憶體虛擬化Linux記憶體
- linux基礎:1、linux簡介、虛擬化軟體的安裝與配置、Xshell的安裝與配置Linux
- Linux運維適合哪些人學習?linux虛擬機器下載Linux運維虛擬機
- 我的Go語言學習經歷Go
- 虛擬化四、KVM虛擬化技術
- nofile引數的學習與整理
- 整理了一下 Linux 中習見命令及分類Linux
- 深度學習聖經“花書”各章摘要與筆記整理深度學習筆記
- 分享我曾經的學習和找工作經歷
- 學習筆記-虛擬機器筆記虛擬機
- 啥是伺服器虛擬化,虛擬化的優勢伺服器
- 【linux】Linux程式相關知識學習整理Linux
- 通過編寫簡易虛擬DOM,來學習虛擬DOM 的知識!
- 整理了一下-Linux-中習見命令及分類Linux
- 常見的虛擬主機型別有哪些?linux運維基礎學習型別Linux運維
- 網工的Linux系統學習歷程Linux
- 什麼是伺服器虛擬化,虛擬化的優勢!伺服器
- Linux雲端計算技術學習:常用虛擬機器引數Linux虛擬機
- Linux虛擬主機與Windows虛擬主機之間有什麼區別LinuxWindows
- Hadoop叢集--linux虛擬機器Hadoop安裝與配置、克隆虛擬機器HadoopLinux虛擬機
- JAVA虛擬機器學習筆記Java虛擬機機器學習筆記