虛擬化就是由位於下層的軟體模組,通過向上一層軟體模組提供乙個與它原先所期待的執行環境完全一致的介面的方法,抽象出乙個虛擬的軟體或硬體介面,使得上層軟體可以直接執行在虛擬環境上。
虛擬化的分類
硬體抽象層上的虛擬化
–通過虛擬化硬體抽象層來實現虛擬化,為客戶機作業系統提供相同或相近的硬體抽象層;
–相同的指令集;
–特設指令由虛擬化軟體進行處理;
–中斷控制器、裝置等可以是完全不同的抽象層;
–vmware、xen;
作業系統層上的虛擬化
– 作業系統的核心可以提供多個相互隔離的 使用者態例項(容器);
– 想一想chroot;
– 每個容器有獨立的檔案系統、網路、函式庫等;
– 靈活性小,guest os 相同;
– 隔離性稍差
– virtuozzo (vps)openvz;
函式庫層上的虛擬化
– 通過虛擬化作業系統的應用級函式庫的服務介面,支援不 同的應用程式;
– wine,在linux環境下支援windows程式的執行環境;
–cygwin,在windows環境下支援linux程式的執行環境
程式語言層上的虛擬化
– 程序級的虛擬執行環境;
– **翻譯為硬體機器語言;
– jvm;
– 跨平台;
虛擬化的優點
• 封裝(邏輯化) –快照、轉殖、掛起、遷移
• 多例項 –計算資源的充分利用率、綠色節能、降低成本
• 隔離
• 硬體相容
• 虛擬化層特權 –入侵檢測、病毒防護、細粒度io控制
虛擬化的缺點
• 效能:虛擬化是對計算資源的分割;
• 錯誤:虛擬化層的引入增加了系統出錯層面;
• 安全:虛擬化會帶來一些安全隱患;
• 影響:一台伺服器死機會影響其上所有虛擬機器;
• 複雜:帶來管理上的複雜性;
虛擬化軟體對物理資源的虛擬可以歸結為三個主要任務:處理器虛擬化,記憶體虛擬化,i/o虛擬化。
處理器虛擬化
指令的模擬
傳統方式:
1.作業系統核心執行在ring0;
2.對cpu有完全控制權;
3.直接讀寫暫存器,執行指令流;
4.直接切換上下文;
虛擬化以後:
1.客戶作業系統核心執行在ring1;
2.vmm執行在ring0;
3.vmm為每個虛擬機器開闢記憶體作為虛擬暫存器;
4.vmm切換整個虛擬處理器上下文;
5.客戶作業系統在虛擬處理器中切換程序上下文;
記憶體虛擬化
作業系統對記憶體的要求:
1.從實體地址0開始;
2.記憶體是連續的;
vmm要做的是:
1.維護客戶機實體地址到宿主機實體地址的對映;
2.截獲虛擬機器對客戶機實體地址的訪問並轉換為宿主機實體地址;
計算機i/o原理
1. i/o埠暫存器被對映到i/o位址空間
2. 中斷模組向中斷控制器發出中斷訊號
3. 處理器中斷當前指令流,通過idt查詢對應的中斷服務程式
4. 通過i/o訪問埠執行i/o操作
5. 在dma情況下,mmio暫存器會對映到實體地址空間,通過頁表的方式來進行訪問
i/o虛擬化
2. 訪問截獲:vmm截獲客戶機作業系統對虛擬裝置的訪問,並進行模擬
3. 裝置模擬
4. 裝置共享
管理虛擬環境
– 虛擬資源
• 處理器虛擬化模組
• 記憶體虛擬化模組
• 裝置虛擬化模組
– 虛擬環境排程
• 虛擬處理器上下文排程
– 虛擬機器間通訊
• 特權域與虛擬機器之間的通訊
• 普通虛擬機器之間的通訊
– 虛擬環境管理介面
• 為使用者提供管理介面
管理物理資源
– 處理器管理
– 記憶體管理
– 中斷管理
– 系統時間維護
– 裝置管理
其他模組
– 軟體定時器
– 電源管理
– 安全機制
– 多處理器同步原語
– 效能採集和分析工具
– 除錯工具
按虛擬平台分類
– 完全虛擬化(虛擬的平台和現實的平台一樣)
• 軟體輔助的完全虛擬化
• 硬體輔助的完全虛擬化
– 半虛擬化(虛擬的平台和現實的平台不一樣)
按vmm實現結構分類
– hypervisor模型
– 宿主模型
– 混合模型
虛擬化產品簡介
• vmware
– hypervisor模型
– 面向企業級的產品
– 支援完全虛擬化和半虛擬化支援intel vt和amd-v技術
• kvm
– 開源(gpl)
– 基於intel-vt技術的硬體虛擬化
– i/o虛擬化借用了qemu
– 宿主模型
• xen
– 開源(gpl)
– 混合模型
– 支援intel vt和amd-v技術
– 支援完全虛擬化和半虛擬化
– i/o虛擬化借用了qemu
前端隨心記 MySQL
資料庫 顧名思義,就是儲存資料的倉庫。mysql是一種關聯資料庫管理系統,關聯資料庫將資料儲存在不同的表中,而不是將所有資料放在乙個大倉庫內,這樣就增加了速度並提高了靈活性。mysql是乙個輕量級的資料庫,與php配合使用效果非常好,mysql支援大部分sql語句。常見的資料庫 oracle mys...
前端隨心記 小程式的雲函式
小程式的雲函式開發 開啟小程式的雲開發模式 當每次新增新的函式時,都需要手動進行上傳,需支援npm時要在專案開啟nom支援。雲函式的增刪改查 增 insert function success res fail err 改 updata function then res catch err 查 s...
前端隨心記 PHP基礎
php變數規則 變數以 符號開始,後面跟變數名稱.變數名必須以字母或者下劃線字元開始 變數名只能包含字母數字字元以及下劃線 變數名不能包含空格 變數名是區分大小寫的 php變數作用域 local global 用於函式內訪問全域性變數.static 當函式完成後,它的所有變數都會被刪除,然而,有事不...