虚拟MMU---客户机页表遍历
客户 机页表的遍历 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;
}

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

您可能想知道MicrosoftWi-Fi直接虚拟适配器在您的PC上的作用。最好放心,此网络适配器Microsoft且完全安全。但是,如果适配器弄乱了您的活动,并且您想知道它是否值得保留,本指南将为您提供您需要了解的所有信息。MicrosoftWi-FiDirect虚拟适配器有什么作用?顾名思义,MicrosoftWi-Fi直接虚拟适配器有助于使您的PC成为无线热点。这样,其他计算机可以连接到您的PC以访问互联网。它通过虚拟化无线网络适配器来实现此目的。这样,您的单个物理无线适配器将转换为两个虚拟

熟悉《西部世界》的观众都了解,这部剧设定在未来世界的一个巨大高科技成人主题乐园中,机器人们具备与人类相似的行为能力,能够记忆所见所闻,重复核心故事情节。每天,这些机器人都会被重置,回到初始状态在斯坦福论文《GenerativeAgents:InteractiveSimulacraofHumanBehavior》发布后,这种情景不再仅限于影视剧中,AI已经成功复现了这一场景Smallville的「虚拟小镇」概览图论文地址:https://arxiv.org/pdf/2304.03442v1.pdf

Java是一种流行的编程语言,具有强大的文件处理功能。在Java中,遍历文件夹并获取所有文件名是一种常见的操作,可以帮助我们快速定位和处理特定目录下的文件。本文将介绍如何在Java中实现遍历文件夹并获取所有文件名的方法,并提供具体的代码示例。1.使用递归方法遍历文件夹我们可以使用递归方法来遍历文件夹,递归方法是一种自身调用自身的方式,可以有效地遍历文件夹中

9月25日消息,华为商城开始接受AITO旗下问界M9汽车的预订。这款车被定位为全景智慧旗舰SUV,具备引人注目的特点。消费者只需支付5000元的意向金,即可抵扣高达10000元的尾款新车将提供两个版本,分别是增程版和纯电版。预计售价在50万元到60万元之间,使得它在高端SUV市场上具有竞争力。预计问界M9将在2023年第四季度正式上市,目前还没有公开其具体配置的信息据了解,M9车型采用了家族化的设计语言。从官方发布的两张图片来看,车辆的侧面线条流畅,并且车门把手采用了隐藏式设计,给整车增添了科技

PHPglob()函数使用示例:遍历指定文件夹中的所有文件在PHP开发中,经常需要遍历指定文件夹中的所有文件,以实现文件批量操作或读取。PHP的glob()函数正是用来实现这种需求的。glob()函数可以通过指定一个通配符匹配模式,来获取指定文件夹中符合条件的所有文件的路径信息。在这篇文章中,我们将会演示如何使用glob()函数来遍历指定文件夹中的所有文件

Microsoft今天宣布了Dynamics365客户服务中SharePoint与Copilot集成的早期预览版。这种集成将使客户服务代理能够访问更广泛的知识来源,从而提高生产力并改善客户互动。目前,Dynamics365客户服务中的Copilot利用内部知识库为客户服务代理提供指导。通过建议聊天和草稿电子邮件内容,Copilot已成为提高客户服务团队生产力的关键工具。但是,客户反馈表明该工具需要利用来自外部资源(如SharePoint)的知识。SharePoint协同驾驶集成为了响应这些反馈,

概念差异:Iterator:Iterator是一个接口,代表一个从集合中获取值的迭代器。它提供了MoveNext()、Current()和Reset()等方法,允许你遍历集合中的元素,并对当前元素进行操作。Iterable:Iterable也是一个接口,代表一个可迭代的对象。它提供了Iterator()方法,用于返回一个Iterator对象,以便于遍历集合中的元素。使用方式:Iterator:要使用Iterator,需要先获得一个Iterator对象,然后调用MoveNext()方法来移动到下一

2025年币圈虚拟货币交易平台前十名:1. OKX,以高流动性、低费用和丰富产品着称;2. Binance,全球最大交易所之一,用户基础庞大;3. Gate.io,老牌交易所,安全稳定;4. Kraken,专注专业交易者,安全合规;5. Huobi Global,全球知名,技术实力强;6. Coinbase,美国领先交易所,易用合规;7. KuCoin,交易对丰富,费用低廉。
