2024年4月26日发(作者:邹子瑜)
Virtualization
傳統的電腦主機(Server,Desktop,Laptop)安裝完一種作業系統(Windows , Linux ...),就只能提供其作業系統
所能提供的服務,我們無法在同一主機上同時提供 Windows 的服務又同時提供 Linux 的服務,或者其他作
業系統的服務.也因此虛擬化由此誕生.而虛擬化的目的就是為了要讓多個作業系統同時運作在同一台機
台上.
目前虛擬化可以分成下面這幾種.
1- Emulation 虛擬出來一個與現行完全不同的硬體環境
2- Full Virtualization 使用的是 - Binary Translation
3- 另一種需要修改作業系統的核心才能支援 - Paravirtualization
4- Hardware-assisted virtualization 這也是最新的方式需要有硬體(CPU) 的支援 - Intel VT 或者 AMD-V
5- Application-Level Virtualization 不需要 VT 或是額外的硬體來支援
上面的種類的產品一開始會讓使用者搞不清楚到底是要用什麼產品,這一類的產品多到不勝枚舉.基本上
企業要用的就是可以全虛擬化的環境如 Full Virtualization 或是 Paravirtualization 這一類像是 VMware
ESX 或是 XenServer.至於學生而言可以在原先的 Windows 系統下使用 Linux 或是其他非 Windows 系統.
就可以直接選擇 Application-Level Virtualization 像是 VMware Server 等的產品.
Ring
在還未解說 CPU 虛擬化之前先解釋一個東西就是 Ring(環), 在 Intel x86 系統架構下為了保護指令的運
行,提供了 4 種不同 Privilege 特權級別的指令.也就是俗稱的 Ring,可以區分成為 Ring 0,Ring 1,Ring 2 和
Ring 0 擁有最高的權限,通常是由系統核心才會有 Ring0 的權限,Ring 0 可以直接和硬體溝通讀取
IO,CPU,Memory 與周邊裝置.其次是 Ring 1,以此類推.一般 Kernel,driver 會存在 Ring 0.一般 AP 存在
Ring 3,一般的作業系統也只運用到 Ring 0 和 Ring3.採取這種方式的優點是一般運行的程式沒有辦法直
接與硬體溝通,所以不會有像 Window 3.1 時一樣的狀況發生,一個程式就能把整個系統摧毀(Crash)掉.
VMM(Virtual Machine Monitor)
一個機台要能同時執行很多作業系統時不能像是傳統的方式讓 OS 的核心存放在 Ring0.取而代之的就是
VMM((Virtual Machine Monitor) 也可以稱作 Hybervisor.也為了虛擬化的資源分配管理,所以必須有一個
東西來管理所有虛擬化的作業系統(Guest OS).也就是所謂的 VMM(Virtual Machine Monitor).
此時的 VMM 主要工作為
‧ 模擬出一個完整的硬體環境給每一個 Guest OS
‧ 分配硬體支援給每一個 Guest OS
‧ 每一個 Guest OS 都是獨立出來不會被彼此影響的
1 - Emulation
這一類的虛擬化,比較像是藉由應用程式虛擬出來一個與現行完全不同的硬體環境.像是一些可以在 PC
環境上模擬出來的遊戲機之類的,或是透過虛擬的硬體環境去模擬 smart phones 以及 PDAs .可以提供給
程式開發者在 PC 的環境下開發出 smart phones 或是 PDAs 的應用程式.
2- Full Virtualization 使用的是 - Binary Translation
也正因為 Intel CPU 架構的關係,不少的 CPU 指令必須執行在 Ring 0 底下,而傳統的作業系統核心也必須
放在 Ring 0 讓他們能直接存取硬體.所以一開始的虛擬化幾乎不能在 X86的系統上使用.但是 VMware
使用了一種方式讓虛擬化能夠執行在 X86 的系統上.他們使用一種稱為 Binary Translation 加上 direct
execution 的方式,所謂的 Binary translation 就是將原本要執行不能虛擬化的指令(nonvirtualizable
instructions)VMM 會轉換成另一種語法,然後再交由 VMM 去執行.就像是 Guest OS 要將資料寫入硬碟中,
但是其實 Guest OS 的硬碟可能只是硬碟中的一塊磁碟區塊(partition)或是檔案(Loop file),所以 VMM 會
把他的請求轉換成另一種方式再來向硬體提出要求.而不再是用原本的指令去執行了.至於 direct
execution 是一般性的指令不需要在 Ring0 才能執行就直接可以向硬體提出請求.
這樣的缺點是會造成效率的低落,但好處是虛擬出來的作業系統(Guest OS)並不知道有 VMM 的存在,他
會以為自己擁有整個機器,而且虛擬出來的作業系統(Guest OS)也不需要修改核心去配合 VMM.加上
VMM 會去虛擬整個機器包括了虛擬化的 BIOS,devices 和 memory的管理,.而且每一個虛擬出來的作業
系統(Guest OS)都是獨立而且安全性高不會受到其他虛擬出來的作業系統(Guest OS)影響.
目前採用這種方式的有 IBM System/370, VirtualBox, VMware Workstation (32-bit guests) 以及
Microsoft Virtual PC.
2024年4月26日发(作者:邹子瑜)
Virtualization
傳統的電腦主機(Server,Desktop,Laptop)安裝完一種作業系統(Windows , Linux ...),就只能提供其作業系統
所能提供的服務,我們無法在同一主機上同時提供 Windows 的服務又同時提供 Linux 的服務,或者其他作
業系統的服務.也因此虛擬化由此誕生.而虛擬化的目的就是為了要讓多個作業系統同時運作在同一台機
台上.
目前虛擬化可以分成下面這幾種.
1- Emulation 虛擬出來一個與現行完全不同的硬體環境
2- Full Virtualization 使用的是 - Binary Translation
3- 另一種需要修改作業系統的核心才能支援 - Paravirtualization
4- Hardware-assisted virtualization 這也是最新的方式需要有硬體(CPU) 的支援 - Intel VT 或者 AMD-V
5- Application-Level Virtualization 不需要 VT 或是額外的硬體來支援
上面的種類的產品一開始會讓使用者搞不清楚到底是要用什麼產品,這一類的產品多到不勝枚舉.基本上
企業要用的就是可以全虛擬化的環境如 Full Virtualization 或是 Paravirtualization 這一類像是 VMware
ESX 或是 XenServer.至於學生而言可以在原先的 Windows 系統下使用 Linux 或是其他非 Windows 系統.
就可以直接選擇 Application-Level Virtualization 像是 VMware Server 等的產品.
Ring
在還未解說 CPU 虛擬化之前先解釋一個東西就是 Ring(環), 在 Intel x86 系統架構下為了保護指令的運
行,提供了 4 種不同 Privilege 特權級別的指令.也就是俗稱的 Ring,可以區分成為 Ring 0,Ring 1,Ring 2 和
Ring 0 擁有最高的權限,通常是由系統核心才會有 Ring0 的權限,Ring 0 可以直接和硬體溝通讀取
IO,CPU,Memory 與周邊裝置.其次是 Ring 1,以此類推.一般 Kernel,driver 會存在 Ring 0.一般 AP 存在
Ring 3,一般的作業系統也只運用到 Ring 0 和 Ring3.採取這種方式的優點是一般運行的程式沒有辦法直
接與硬體溝通,所以不會有像 Window 3.1 時一樣的狀況發生,一個程式就能把整個系統摧毀(Crash)掉.
VMM(Virtual Machine Monitor)
一個機台要能同時執行很多作業系統時不能像是傳統的方式讓 OS 的核心存放在 Ring0.取而代之的就是
VMM((Virtual Machine Monitor) 也可以稱作 Hybervisor.也為了虛擬化的資源分配管理,所以必須有一個
東西來管理所有虛擬化的作業系統(Guest OS).也就是所謂的 VMM(Virtual Machine Monitor).
此時的 VMM 主要工作為
‧ 模擬出一個完整的硬體環境給每一個 Guest OS
‧ 分配硬體支援給每一個 Guest OS
‧ 每一個 Guest OS 都是獨立出來不會被彼此影響的
1 - Emulation
這一類的虛擬化,比較像是藉由應用程式虛擬出來一個與現行完全不同的硬體環境.像是一些可以在 PC
環境上模擬出來的遊戲機之類的,或是透過虛擬的硬體環境去模擬 smart phones 以及 PDAs .可以提供給
程式開發者在 PC 的環境下開發出 smart phones 或是 PDAs 的應用程式.
2- Full Virtualization 使用的是 - Binary Translation
也正因為 Intel CPU 架構的關係,不少的 CPU 指令必須執行在 Ring 0 底下,而傳統的作業系統核心也必須
放在 Ring 0 讓他們能直接存取硬體.所以一開始的虛擬化幾乎不能在 X86的系統上使用.但是 VMware
使用了一種方式讓虛擬化能夠執行在 X86 的系統上.他們使用一種稱為 Binary Translation 加上 direct
execution 的方式,所謂的 Binary translation 就是將原本要執行不能虛擬化的指令(nonvirtualizable
instructions)VMM 會轉換成另一種語法,然後再交由 VMM 去執行.就像是 Guest OS 要將資料寫入硬碟中,
但是其實 Guest OS 的硬碟可能只是硬碟中的一塊磁碟區塊(partition)或是檔案(Loop file),所以 VMM 會
把他的請求轉換成另一種方式再來向硬體提出要求.而不再是用原本的指令去執行了.至於 direct
execution 是一般性的指令不需要在 Ring0 才能執行就直接可以向硬體提出請求.
這樣的缺點是會造成效率的低落,但好處是虛擬出來的作業系統(Guest OS)並不知道有 VMM 的存在,他
會以為自己擁有整個機器,而且虛擬出來的作業系統(Guest OS)也不需要修改核心去配合 VMM.加上
VMM 會去虛擬整個機器包括了虛擬化的 BIOS,devices 和 memory的管理,.而且每一個虛擬出來的作業
系統(Guest OS)都是獨立而且安全性高不會受到其他虛擬出來的作業系統(Guest OS)影響.
目前採用這種方式的有 IBM System/370, VirtualBox, VMware Workstation (32-bit guests) 以及
Microsoft Virtual PC.