虚拟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 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Microsoft Wi-Fi Direct 仮想アダプターが PC 上で何をするのか疑問に思われるかもしれません。このネットワーク アダプターは Microsoft 製で完全に安全ですので、ご安心ください。ただし、アダプターがアクティビティを台無しにしており、そのままにしておく価値があるかどうか疑問に思っている場合は、このガイドで知っておくべきすべてのことがわかります。 Microsoft Wi-Fi Direct 仮想アダプターは何をしますか?名前が示すように、Microsoft Wi-Fi Direct 仮想アダプターは、PC をワイヤレス ホットスポットにするのに役立ちます。これにより、他のコンピュータがあなたの PC に接続してインターネットにアクセスできるようになります。これは、ワイヤレス ネットワーク アダプターを仮想化することで実現されます。このようにして、1 つの物理ワイヤレス アダプタが 2 つの仮想ワイヤレス アダプタに変換されます。

「ウエストワールド」に慣れている視聴者は、このショーが未来の世界にある巨大なハイテク成人向けテーマパークを舞台としていることを知っています。ロボットは人間と同様の行動能力を持ち、見聞きしたものを記憶し、核となるストーリーラインを繰り返すことができます。これらのロボットは毎日リセットされ、初期状態に戻ります。スタンフォード大学の論文「Generative Agents: Interactive Simulacra of Human Behavior」の発表後、このシナリオは映画やテレビシリーズに限定されなくなりました。AI はこれを再現することに成功しました。スモールヴィルの「バーチャルタウン」のシーン》概要図用紙アドレス:https://arxiv.org/pdf/2304.03442v1.pdf

Java は、強力なファイル処理機能を備えた人気のあるプログラミング言語です。 Java では、フォルダーを走査してすべてのファイル名を取得するのが一般的な操作であり、これは特定のディレクトリー内のファイルを迅速に見つけて処理するのに役立ちます。この記事では、Java でフォルダーを走査してすべてのファイル名を取得するメソッドを実装する方法と、具体的なコード例を紹介します。 1. 再帰的メソッドを使用してフォルダーを走査する 再帰的メソッドを使用してフォルダーを走査することができます。再帰的メソッドはそれ自体を呼び出す方法であり、フォルダーを効果的に走査できます。

9月25日のニュースによると、ファーウェイモールはAITOのWenjie M9車の予約受付を開始したという。この車は、目を引く機能を備えたパノラマスマートフラッグシップSUVとして位置付けられています。消費者は5,000元の保証金を支払うだけで、最終支払いの最大10,000元を相殺することができ、新型車は航続距離延長バージョンと純粋な電気バージョンの2つのバージョンが用意される。価格は50万~60万元になる見込みで、高級SUV市場で競争力がある。 Wenjie M9 は 2023 年の第 4 四半期に正式に発売される予定ですが、その具体的な構成に関する情報はまだ明らかにされていませんが、M9 モデルはファミリー向けの設計言語を採用していると考えられています。 2枚の公式写真から判断すると、車両のサイドラインは滑らかで、ドアハンドルは隠されたデザインを採用し、車両全体にテクノロジーが追加されています。

PHPglob() 関数の使用例: 指定したフォルダー内のすべてのファイルを走査する PHP 開発では、バッチ操作やファイルの読み取りを実装するために、指定したフォルダー内のすべてのファイルを走査する必要がよくあります。この要件を達成するには、PHP の glob() 関数が使用されます。 glob()関数は、ワイルドカードのマッチングパターンを指定することで、指定したフォルダー内の条件を満たすすべてのファイルのパス情報を取得できます。この記事では、glob() 関数を使用して、指定したフォルダー内のすべてのファイルを反復処理する方法を説明します。

Microsoft は本日、Dynamics 365 Customer Service における SharePoint と Copilot の統合の早期プレビューを発表しました。この統合により、カスタマー サービス エージェントは幅広い知識ソースにアクセスできるようになり、生産性が向上し、顧客とのやり取りが改善されます。現在、Dynamics365 Customer Service の Copilot は内部ナレッジ ベースを活用して、カスタマー サービス エージェントにガイダンスを提供します。チャットや電子メールのコンテンツの下書きを提案することで、Copilot はカスタマー サービス チームの生産性を向上させるための重要なツールになりました。ただし、顧客からのフィードバックは、このツールが SharePoint などの外部ソースからの知識を活用する必要があることを示しています。 SharePoint の共同推進統合 このフィードバックに応えて、

概念的な違い: イテレータ: イテレータは、コレクションから値を取得するイテレータを表すインターフェイスです。 MoveNext()、Current()、Reset() などのメソッドを提供し、コレクション内の要素を横断して現在の要素を操作できるようにします。 Iterable: Iterable は、反復可能なオブジェクトを表すインターフェイスでもあります。これは、コレクション内の要素の走査を容易にする Iterator オブジェクトを返す Iterator() メソッドを提供します。使用法: Iterator: Iterator を使用するには、まず Iterator オブジェクトを取得し、次に MoveNext() メソッドを呼び出して次のオブジェクトに移動する必要があります。

2025年の暗号通貨サークルのトップ10の仮想取引プラットフォーム:高い流動性、豊富な製品である。 6。コインベース、米国の主要な交換、使いやすいコンプライアンス。
