首頁 資料庫 mysql教程 虚拟MMU---客户机页表遍历

虚拟MMU---客户机页表遍历

Jun 07, 2016 pm 03:36 PM
m 客戶 虛擬 遍歷

客户 机页表的遍历 MMU的功能: 虚拟 机地址转换为物理地址,下面函数模拟此过程。 1.数据结构 struct guest_walker { int level; gfn_t table_gfn[PT_MAX_FULL_LEVELS]; pt_element_t ptes[PT_MAX_FULL_LEVELS]; gpa_t pte_gpa[PT_MAX_FULL_LEVELS]; unsign

客户机页表的遍历

MMU的功能:虚拟机地址转换为物理地址,下面函数模拟此过程。

1.数据结构

 struct guest_walker {
        int level;
        gfn_t table_gfn[PT_MAX_FULL_LEVELS];
        pt_element_t ptes[PT_MAX_FULL_LEVELS];
        gpa_t pte_gpa[PT_MAX_FULL_LEVELS];
        unsigned pt_access;
        unsigned pte_access;
        gfn_t gfn;
        u32 error_code;
};
           +-------+
           |       |
           +-------+
           |   c   |
           |-------|            |       |
           +-------+
           |-------|      
           |-------|       
           +-------+             某级页表
a:页表项基地址
b:index的地址
c:index的地址内容

遍历完成后,数据结构内容为
gfn:客户机页表转换后物理地址页框号
假设PT_MAX_FULL_LEVELS=4
table_gfn【0-3】存放 4级页表项基地址
pte_gpa【0-3】  存放4级页表项中index基地址
ptes【0-3】     存放4级页表项中index基地址内容
pt_access:     gfn的访问权限
pte_access:    gfn的访问权限

2:客户机页表的遍历,也是虚拟MMU
static int FNAME(walk_addr)(struct guest_walker *walker,
                            struct kvm_vcpu *vcpu, gva_t addr,
                            int write_fault, int user_fault, int fetch_fault)
   walker->level = vcpu->arch.mmu.root_level;//64位客户机系统,页表级数为4.
   pte = vcpu->arch.cr3; //页目录基地址
   for (;;) { //从64位客户机页目录开始遍历,最后到页表
                index = PT_INDEX(addr, walker->level);

                table_gfn = gpte_to_gfn(pte);
                pte_gpa = gfn_to_gpa(table_gfn);
                pte_gpa += index * sizeof(pt_element_t);

                walker->table_gfn[walker->level - 1] = table_gfn; //存放页表基地址 
                walker->pte_gpa[walker->level - 1] = pte_gpa;     //存放页表index基地址

                if (kvm_read_guest(vcpu->kvm, pte_gpa, &pte, sizeof(pte)))//获取存放页表index基地址页表项
                        goto not_present;
                 pte_access = pt_access & FNAME(gpte_access)(vcpu, pte);//获取存放页表index基地址页表项权限

                walker->ptes[walker->level - 1] = pte;//存放存放页表index基地址页表项

                if ((walker->level == PT_PAGE_TABLE_LEVEL)//页表的最后一级存放客户机物理页地址
                {
                        int lvl = walker->level;

                        walker->gfn = gpte_to_gfn_lvl(pte, lvl);//转换客户机物理页地址为客户机物理页框号
                        walker->gfn += (addr & PT_LVL_OFFSET_MASK(lvl))
                                        >> PAGE_SHIFT;
                        break;
                }

               pt_access = pte_access;
                --walker->level; //遍历下一级页表
             }
        //页表遍历完成后,获取页表的访问权限,存放到数据结构中
        walker->pt_access = pt_access;
        walker->pte_access = pte_access;
        pgprintk("%s: pte %llx pte_access %x pt_access %x\n",
                 __func__, (u64)pte, pt_access, pte_access);
        return 1;
}



本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
Microsoft Wi-Fi 直連虛擬轉接器:它有什麼作用? Microsoft Wi-Fi 直連虛擬轉接器:它有什麼作用? Jun 29, 2023 pm 12:33 PM

您可能想知道MicrosoftWi-Fi直接虛擬適配器在您的PC上的作用。最好放心,此網路介面卡Microsoft且完全安全。但是,如果適配器弄亂了您的活動,並且您想知道它是否值得保留,本指南將為您提供您需要了解的所有資訊。 MicrosoftWi-FiDirect虛擬適配器有什麼作用?顧名思義,MicrosoftWi-Fi直接虛擬適配器有助於使您的PC成為無線熱點。這樣,其他電腦可以連接到您的PC以存取互聯網。它透過虛擬化無線網路適配器來實現此目的。這樣,您的單一實體無線適配器將轉換為兩個虛擬

25個AI智能體源碼現已公開,靈感來自史丹佛的「虛擬小鎮」和《西方世界》 25個AI智能體源碼現已公開,靈感來自史丹佛的「虛擬小鎮」和《西方世界》 Aug 11, 2023 pm 06:49 PM

熟悉《西方世界》的觀眾都了解,這部劇設定在未來世界的一個巨大高科技成人主題樂園中,機器人們具備與人類相似的行為能力,能夠記憶所見所聞,重複核心故事情節。每天,這些機器人都會被重置,回到初始狀態在斯坦福論文《GenerativeAgents:InteractiveSimulacraofHumanBehavior》發布後,這種情景不再僅限於影視劇中,AI已經成功復現了這一場景Smallville的“虛擬小鎮」概覽圖論文網址:https://arxiv.org/pdf/2304.03442v1.pdf

Java如何遍歷資料夾並取得所有檔案名 Java如何遍歷資料夾並取得所有檔案名 Mar 29, 2024 pm 01:24 PM

Java是一種流行的程式語言,具有強大的檔案處理功能。在Java中,遍歷資料夾並取得所有檔案名稱是一種常見的操作,可以幫助我們快速定位和處理特定目錄下的檔案。本文將介紹如何在Java中實作遍歷資料夾並取得所有檔案名稱的方法,並提供具體的程式碼範例。 1.使用遞歸方法遍歷資料夾我們可以使用遞歸方法遍歷資料夾,遞歸方法是一種自身呼叫自身的方式,可以有效地遍歷資料夾中

AITO旗下問界M9全景智慧旗艦SUV即將登場 AITO旗下問界M9全景智慧旗艦SUV即將登場 Sep 26, 2023 pm 02:41 PM

9月25日消息,華為商城開始接受AITO旗下問界M9汽車的預訂。這款車被定位為全景智慧旗艦SUV,具備引人注目的特質。消費者只需支付5000元的意向金,即可抵扣高達10,000元的尾款新車將提供兩個版本,分別是增程版和純電版。預計售價在50萬元到60萬元之間,使得它在高階SUV市場上具有競爭力。預計問界M9將在2023年第四季正式上市,目前還沒有公開其具體配置的資訊據了解,M9車型採用了家族化的設計語言。從官方發布的兩張圖片來看,車輛的側面線條流暢,並且車門把手採用了隱藏式設計,為整車增添了科技

Copilot 整合:在 SharePoint 和 Dynamics 365 客戶服務中的合作 Copilot 整合:在 SharePoint 和 Dynamics 365 客戶服務中的合作 Aug 03, 2023 pm 09:21 PM

Microsoft今天宣布了Dynamics365客戶服務中SharePoint與Copilot整合的早期預覽版。這種整合將使客戶服務代理能夠存取更廣泛的知識來源,從而提高生產力並改善客戶互動。目前,Dynamics365客戶服務中的Copilot利用內部知識庫為客戶服務代理提供指導。透過建議聊天和草稿電子郵件內容,Copilot已成為提高客戶服務團隊生產力的關鍵工具。但是,客戶回饋表明該工具需要利用來自外部資源(如SharePoint)的知識。 SharePoint協同駕駛整合為了回應這些回饋,

PHP glob()函數使用範例:遍歷指定資料夾中的所有文件 PHP glob()函數使用範例:遍歷指定資料夾中的所有文件 Jun 27, 2023 am 09:16 AM

PHPglob()函數使用範例:遍歷指定資料夾中的所有文件在PHP開發中,經常需要遍歷指定資料夾中的所有文件,以實現檔案批次操作或讀取。 PHP的glob()函數正是用來實現這種需求的。 glob()函數可以透過指定一個通配符匹配模式,來取得指定資料夾中符合條件的所有檔案的路徑資訊。在這篇文章中,我們將會示範如何使用glob()函數來遍歷指定資料夾中的所有文件

順著網路線爬過來成真了,Audio2Photoreal透過對話就能產生逼真表情與動作 順著網路線爬過來成真了,Audio2Photoreal透過對話就能產生逼真表情與動作 Jan 12, 2024 am 09:03 AM

當你和朋友隔著冷冰冰的手機螢幕聊天時,你得猜猜對方的語氣。當Ta發語音時,你的腦海中還能浮現出Ta的表情甚至動作。如果能視訊通話顯然是最好的,但在實際情況下並不能隨時撥打視訊。如果你正在與遠端朋友聊天,不是透過冰冷的螢幕文字,也不是缺乏表情的虛擬形象,而是一個逼真、動態、充滿表情的數位虛擬人。這個虛擬人不僅能夠完美地復現你朋友的微笑、眼神,甚至是細微的肢體動作。你會不會感到更的親切和溫暖呢?真是體現了那一句「我會順著網路線爬過來找你的」。這不是科幻想像,而是在實際中可以實現的技術了。臉部表

Java Iterator 與 Iterable 的深入比較:優缺點分析 Java Iterator 與 Iterable 的深入比較:優缺點分析 Feb 19, 2024 pm 04:20 PM

概念差異:Iterator:Iterator是一個接口,代表一個從集合中取得值的迭代器。它提供了MoveNext()、Current()和Reset()等方法,讓你遍歷集合中的元素,並對目前元素進行操作。 Iterable:Iterable也是一個接口,代表一個可迭代的物件。它提供了Iterator()方法,用於傳回一個Iterator對象,以便於遍歷集合中的元素。使用方式:Iterator:要使用Iterator,需要先取得一個Iterator對象,然後呼叫MoveNext()方法來移動到下一

See all articles