成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

腳本語言的虛擬機和操作系統的虛擬機

系統 其他OS
腳本語言因為是運行在用戶進程中,運行的代碼也是用戶態代碼,所以實現起來比qemu這類虛擬機要簡單的多。它只需要解釋一些常用指令就行了,不需要處理系統級的指令,也不需要管理復雜的內存映射。

虛擬機是個用軟件實現的CPU,而CPU的權限控制分為系統級和用戶級。

例如,Linux內核就運行在CPU的最高優先級(ring0),而普通應用程序則運行在最低優先級(ring3)。

雖然英特爾把CPU的權限分了4個優先級,但實際只用到了2個。

對于虛擬機來說,要想模擬操作系統的運行,也必須進行權限分級。

1,CPU的權限分級,主要是指內存的訪問權限。

intel的CPU分為實模式和保護模式,保護模式最主要的作用就是保護內存的訪問權限。

內核代碼可以訪問所有的內存,但是用戶代碼只能訪問進程的用戶空間(內存)。

用戶空間的內存是通過進程的頁表來管理的,而進程的頁表只能通過系統內核來修改。

當使用malloc()分配內存的時候,實際上并不是分配一塊物理內存,而只是把用戶空間的某一個內存范圍設置為可用。

只有當進程代碼真去讀寫這個內存范圍的時候,操作系統才會給它分配物理內存,即Linux的寫時復制和需求加載機制。

所以虛擬機要想“模擬”操作系統的運行,首先要模擬CPU的保護模式。

2,CPU保護模式的實現,靠的就是幾個控制寄存器。

對于intel CPU來說,跟保護模式下相關的寄存器是cr0, cr1, cr2, cr3。

其中cr0用于控制分段和分頁機制,一旦開啟內存的分段機制就進入了保護模式。

一旦開啟了內存的分頁機制,操作系統可以支持的進程個數就是無限的了。

開啟了分頁之后,操作系統就可以4096字節的一個頁為單位,為進程分配“必需的”內存空間,非常的靈活。

什么時候必需?

當然是寫時復制和需求加載的時候必需,所以進程剛創建時除了它的task_struct結構之外,只需要給它分配4096字節做為頁目錄即可,其他的都可以跟父進程共享。

對于多進程多任務的操作系統來說,內存的分頁機制是必需的,因為分段機制太死板了。

cr3就是頁目錄基地址寄存器,哪個進程運行時它就指向哪個進程的頁表,內核運行時它就指向內核頁表。

cr2在缺頁中斷時用于保存進程用戶空間的內存地址。在哪個位置出錯了,就保存哪個地址,然后操作系統就會為那個位置(所在的內存頁)分配內存。

獲取一個位置addr所在的內存頁非常的簡單,把它的最低12位清零就行,addr & ~0xfff

3,虛擬機要想模擬操作系統的運行,必須自己實現MMU的功能。

操作系統的運行,首先要依賴這幾個控制寄存器。

這幾個控制寄存器的主要作用,其實就是內存管理。

在真實的硬件上,內存管理是通過MMU實現的。MMU可以根據進程的頁表實現用戶空間的內存地址(線性地址)到物理內存的映射。

如果在虛擬機上,這部分功能就只能通過代碼去實現了。

虛擬機要實現三層內存地址的映射:虛擬進程的用戶內存地址 --> 虛擬物理內存的物理地址 --> 虛擬機所在的真實進程的用戶內存地址。

OS虛擬機的內存映射過程

所以像qemu這種能夠直接運行Linux系統的大型虛擬機,是必須要實現CPU的控制寄存器和系統級指令的。

系統級指令,指的是只能在內核代碼(或引導扇區)里運行的指令,例如:

pushfl 把標志寄存器壓棧,

mov cr2, eax 把導致缺頁的內存地址讀到eax寄存器,

mov ax, cs 加載段選擇符,等等。

4,腳本語言的虛擬機

腳本語言因為是運行在用戶進程中,運行的代碼也是用戶態代碼,所以實現起來比qemu這類虛擬機要簡單的多。

它只需要解釋一些常用指令就行了,不需要處理系統級的指令,也不需要管理復雜的內存映射。

它只需要把編譯之后的字節碼文件根據程序頭的信息加載起來,并且處理動態庫函數的調用(動態鏈接),就可以實現腳本語言的運行了。

最主要的是,腳本語言的字節碼和編譯器都是腳本語言的作者設計的,作者可以實現字節碼和虛擬機的精確匹配,而不需要去實現CPU的整個指令集。

系統級的虛擬機就不得不實現CPU的整個指令集,因為OS內核被編譯之后有可能用到CPU的所有指令,其中任何一條指令沒被支持都可能導致內核運行失敗。

腳本語言的虛擬機怎么寫,之前已經說過了,不再細說了。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2012-05-18 10:22:23

2013-07-17 09:32:58

2010-07-26 09:02:38

2019-08-05 14:23:32

虛擬機操作系統軟件

2023-02-07 00:24:24

2020-01-17 10:52:37

無服務器容器技術

2009-09-07 22:01:52

虛擬機安裝Linux系

2009-08-07 11:06:07

虛擬機安裝Vista系統

2009-12-22 16:05:05

Linux操作系統

2023-01-09 08:32:00

編譯器虛擬機操作系統

2009-10-13 15:00:36

物理機虛擬機網絡安全

2014-02-21 11:20:34

KVMXen虛擬機

2010-12-23 14:05:12

虛擬機

2012-04-10 10:29:29

2023-09-03 17:05:20

虛擬機

2020-12-08 05:58:57

CPU虛擬化虛擬機

2020-06-03 14:43:26

Java虛擬機JVM

2009-09-09 08:05:51

優化VMware Se

2009-06-29 19:36:07

虛擬機備份虛擬環境

2016-12-19 13:49:33

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久国产精品亚洲 | 欧美视频网 | 久久久国产一区二区三区四区小说 | 久久久久欧美 | 国产精品无码专区在线观看 | 欧美一区二区三区在线播放 | 久久综合国产 | 一区二区三区在线观看免费视频 | 久精品久久| 亚洲色图综合 | 少妇黄色 | 久草中文在线观看 | 黄色一级毛片免费看 | 国产一区二区精品在线观看 | 天天天操 | 国产日韩视频在线 | 99精品久久久 | 在线高清免费观看视频 | 伊人久久精品 | 亚洲欧美日韩在线 | 亚洲精品68久久久一区 | 99精彩视频 | 精品日韩一区 | 成人免费黄视频 | 一区二区三区欧美 | 日韩视频免费看 | 中文字幕91 | 国产一区二区三区在线 | www.久久.com | 天天干b | 夜色www国产精品资源站 | 午夜大片 | 久久蜜桃精品 | 在线视频日韩精品 | 999久久久久久久久 国产欧美在线观看 | 在线观看视频中文字幕 | 成人在线亚洲 | 亚洲性人人天天夜夜摸 | 9久9久9久女女女九九九一九 | 国产成人精品综合 | 久久av一区二区三区 |