問題タブ [virtual-address-space]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 上位 BIOS メモリを仮想アドレス空間にマップしようとすると、mmap が失敗する理由
次のアドレスを仮想アドレス空間に(m)マップしようとしています:
---物理アドレスは 0xf6c50 です --- このアドレスは、EBDA ベース ポインターと上位 Bios メモリ ウィンドウ (ACPI_HI_RSDP_WINDOW_BASE) の合計です。
目的は、ACPI テーブルをプロセスのアドレス空間にマップし、後で使用することです。
ファイル記述子を開いて「/dev/mem」を読み取ります。プリアドを使用してアドレスに到達し、ACPI ヘッダー構造を読み取ります。署名が一致したら、それを仮想アドレス空間にマップしたいのですが、そうするとエラーが発生しますのような:「メモリを割り当てることができません」
FreeBSD 8.x を使用しています。一般的に mmap が機能することを確認できます。エラーにつながる呼び出しは次のとおりです。
MAP_SHARED も使ってみましたが、どうもあまり変わりません。
ここで pa は、「ACPI_HI_RSDP_WINDOW_BASE」マクロによって定義された上記のアドレスです。誰でもこれに光を当てることができますか、またはこれを回避する方法はありますか?
linux - 命令ポインターに基づいてコンテキストを決定する
命令トレースが QEMU エミュレーターから来るシミュレーターを開発しています。トレース内の命令ポインターは、仮想命令ポインターです。
32 ビット Linux オペレーティング システムに関する私の基本的な理解は、4GB のアドレス空間のうち、下位 3GB、つまり 0 ~ 3GB がアプリケーション用に予約され、上位 1GB、つまり 3GB ~ 4GB がカーネル用に予約されているということです。
私の基本的な理解は正しいですか??
カーネルまたはアプリケーションなどの命令のコンテキストを決定するために、単純なチェック ip>3G を使用しています。これは有効ですか??
もう1つ、この単純な方法は64ビットオペレーティングシステムに簡単に拡張できますか??
c++ - Windows の仮想アドレス空間
申し訳ありませんが、私は Windows ドライバー開発の初心者です。WDK からこのドキュメントを読んだ後、理解できないことがありました。
文書によると
プロセスが使用できる仮想アドレスの範囲は、プロセスの仮想アドレス空間と呼ばれます。各ユーザー モード プロセスには、独自のプライベート仮想アドレス空間があります。32 ビット プロセスの場合、仮想アドレス空間は通常、0x00000000 から 0x7FFFFFFF までの 2 ギガバイトの範囲です。64 ビット プロセスの場合、仮想アドレス空間は 0x000'00000000 から 0x7FF'FFFFFFFF までの 8 テラバイトの範囲です。仮想アドレスの範囲は、仮想メモリの範囲と呼ばれることがあります。
それについての私の質問は次のとおりです。
8ギガバイトのメモリバンクを持つコンピュータがあるとします。
- この 8 ギガバイトのメモリからすべての仮想アドレス空間が実際に割り当てられているのでしょうか?
- 1 つのプロセスに 2g の仮想アドレス空間を割り当てる必要がある場合、システムで 4 つのプロセスが実行されていると言えますか。彼らは完全に8ギガバイトのメモリを必要としていますか? 答えが「はい」の場合、そのコンピューターで実行できるプロセスの最大数が 4 であることを意味しますか?
何かを誤解しているかどうかはわかりません。私を修正してください。どうもありがとう。
visual-studio-2010 - アプリケーションの LARGEADDRESSAWARE フラグを元に戻すには?
わかりました、以下のコマンドを使用して、32 BIT Excel の使用アドレスを 2GB より大きくしました
editbin /largeaddressaware EXCEL.EXE
今、私はこれを元に戻したい..助けてください..Googleで試しましたが、元に戻すコマンドが見つかりませんでした
caching - プロセッサ x86/x86_64 では、L1、L2、および L3 でのキャッシングに物理または仮想アドレッシングが使用されていますか?
プロセッサ x86/x86_64 で L1、L2、および L3(LLC) のキャッシングに使用されるアドレッシングはどれですか?物理または仮想 (PT/PTE およびTLBを使用) で、PAT(ページ属性テーブル)はそれに影響しますか?
この場合、ドライバー (カーネル空間) とアプリケーション (ユーザー空間) に違いはありますか?
簡単な回答 - Intel は、仮想的にインデックスが作成され、物理的にタグ付けされた(VIPT) L1 キャッシュを使用しています。
- L1 -仮想アドレス指定 (
8-way
定義のためのキャッシュでは、virt と phys で同じであるSet
必要があります)12 bits
- L2 -物理アドレッシング (Virt-2-Phys の TLB へのアクセスが必要)
- L3 -物理アドレッシング (Virt-2-Phys の TLB へのアクセスが必要)
memory - コンピュータの仮想アドレス空間と実際のアドレス空間の違いは何ですか?
仮想アドレス空間は、特定のプロセスに割り当てられた RAM のセクションだと思いました。しかし、私が読んでいる本によると、仮想アドレス空間の標準的な制限は 4 GB です。それはRAMの全量ではありませんか?その場合、仮想アドレス空間とは何かについて混乱しています。誰でも私を啓発できますか?
c++ - 仮想メモリアドレスはどこにありますか?
ページがメイン メモリにない場合、CPU はスワップ ファイルからページを取得します。そのため、仮想アドレスに対応する物理アドレスが配置されていない場合、CPU はそれをディスクから取得します。したがって、仮想アドレスへのマッピングは、物理メモリまたはディスクの 2 つの場所のいずれかになります。私の質問は、仮想アドレス自体はどこにありますか? CPU は、マッピングを実行するためにこの仮想アドレスを必要とするためです。CPU はどこでこのアドレスを取得しますか? また、gdb を使用して仮想アドレス空間を調べる場合、gdb はこのすべての仮想アドレスをどこから取得するのでしょうか?
例:
仮想アドレス 0x420000
ページ テーブル 20
RAM 0x800000
ここで 20 (ページ テーブル エントリ) は RAM にあります。0x800000 (物理アドレス) は RAM に常駐します。0x420000 情報はどこにありますか? CPU はどこかからこの情報を必要とします。そうでなければ、アドレス変換をどのように実行しますか?
これで、仮想アドレス情報がどこから来たのかがわかったと思います。これは、アプリケーション プログラム自体から PC カウンターに送られ、その時点で CPU に渡され、CPU が変換を行います。