問題タブ [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.
unix - 子プロセスのプロセス仮想アドレス空間を変更する
Unix 系のオペレーティング システムで子プロセスの仮想アドレス空間を変更できるかどうかを知りたいです。できる能力が欲しい
(a) 共有ライブラリのロード/アンロード
(b) 子プロセスのランダムなユーザー空間メモリ ロケーションに書き込みます (共有メモリではありません)。
私は基本的に、子プロセスのプロセスアドレス空間を完全に制御したい(Windows 95を制御のように考えてください)。
デバッガーがこれをある程度達成していることは知っていますが、これを達成していますか (使用するシステムコール、主題に関するチュートリアルなど)??
cpu - POWER8 アーキテクチャーの「フラット」仮想アドレス空間
ここで述べたように、「フラット」な 32 ビット空間の意味を説明できる人はいますか?
怠け者のためのテキスト:
このアーキテクチャのもう 1 つの興味深い機能は、すべてのアドレスを 52 ビット空間にマップする仮想アドレス システムです。このようにして、アプリケーションは「フラットな」32 ビット空間でメモリを共有でき、すべてのプログラムがそれぞれ 32 ビットの異なるブロックを持つことができます。
linux - プロセス領域テーブル & グローバル記述子可能 & 仮想アドレス
ここにあるトレーニング機関の 1 つからの Linux ノートを調べています。そのため、プロセスが作成されるたびに、リージョンがそれに割り当てられます。リージョンには、プロセスのすべてのセグメントが含まれます。
また、リージョンは region-table によって指定されます。リージョン テーブルには、次のエントリが含まれます。 --
仮想アドレスから - 物理アドレス ポインタ + ディスク ブロック ディスクリプタ
ディスク ブロック記述子は、ディスク上のスワップ ファイルまたは exe ファイルを指します。
私が持っている2つのダウト:-----
1> グローバルおよびローカル記述子の役割はどこにありますか。
2> 各プロセスには独自のグローバル記述子テーブルがありますか? そうでなければ、2 つのプロセスの仮想アドレスが同じ物理アドレスを指します。
提案してください
memory - プログラムが同じ仮想アドレス空間を持つ場合はどうなりますか
プログラム foo.c を 2 つの異なる端末で実行し、実行中のローカル変数のアドレスを出力した場合。それらは同じでしょう。ただし、たとえばシェル内でフォークして実行するというコンテキストでは、 foo.c などのプログラムを実行します。シェルのまったく同じコピーを作成し、 foo.c を実行します。それらは同じ仮想アドレス空間を持っていますか。また、プログラムが再帰的に自分自身を呼び出した場合、再帰的に呼び出された同じ変数は同じアドレス空間を持ち、このプログラムは独自のアドレス空間内でどのように成長するのでしょうか?
memory - プロセスの vm 領域へのアクセス
プロセスから vm 領域のアドレスを読み取る必要がある LKM を作成しようとしています。task_struct へのポインターを取得するために pid_task() を使用していますが、それを使用して vmarea の開始アドレスを取得しようとすると、コンパイル エラーが発生します。
そして、「エラー:不完全な型へのポインターを逆参照しています」というエラーが表示されます
私は Linux の初心者であり、LKM の完全な初心者です。
助けていただければ幸いです。
皆さん、ありがとうございました
operating-system - 仮想アドレス空間はどのようにページングできますか?
このウィキペディアの記事http://en.wikipedia.org/wiki/Memory_management_unit#How_it_worksを読んでいるときに、仮想アドレス空間 (プロセッサが使用するアドレスの範囲) をページに分割することに出くわしました。しかし、物理メモリ (RAM) だけがページに分割されていることを知りました。では、プロセスの仮想アドレス空間の分割はどのように行われるのでしょうか?
また、ここでの仮想アドレス空間の定義は、プロセッサが使用するアドレスの範囲として行われます。プロセッサが使用するアドレスの範囲は、プロセッサ内のアドレスバスの長さを意味しますよね? では、アドレス バスが 32 ビットのプロセッサと 4 GB (2^32) の RAM を使用している場合、物理アドレス空間と仮想アドレス空間は同じですか?
質問が素朴すぎる場合はご容赦ください。アドレス空間の明確な視覚化はまだ得られていません。前もって感謝します。
c - c で %p 形式の printf() によって出力されるアドレスはどれですか?
私は次のような簡単なコードを持っています:
上記のプログラムの出力は次のとおりです。
2 回目の実行:
仮想アドレスと物理アドレスについて勉強しています。次の質問があります。
- 変数「a」の出力アドレス(物理/仮想)はどれ?
- 仮想の場合、同じプログラムの実行ごとにどのように変化しますか? 私が理解しているように、コンパイラはコンパイル時に変数に仮想アドレスを提供しますか?
- プログラムの実行ごとにグローバル変数のアドレスが一定なのはなぜですか?
Linux でこのプログラムを実行した場合: 2.6.18-308.el5 x86_64 GNU/Linux
使用してコンパイル: gcc バージョン 4.1.2 20080704 (Red Hat 4.1.2-52)
c - 上位半分のカーネルにジャンプするにはどうすればよいですか
現在、上位半分のカーネルを構築しています。ブートローダーはカーネルを物理アドレス 0x100000(1M) にロードし、ID マッピングは 0 ~ 4MB に設定されています。ここで質問があります: どうすればより高い仮想アドレス (たとえば 3GB) にジャンプできますか?
私はこの質問をグーグルで検索し、2 つの方法を見つけました。1 つはアドレス スペース ワープ アラウンドを使用する方法で、もう 1 つはページ エントリを設定して 3GB ~ 3GB + 4MB を 0 ~ 4MB にマップしてから、より高いアドレスに「ジャンプ」する方法です。使用することにしました。 2番目の方法ですが、それを実装するのに十分な情報が見つかりません. カーネルを逆アセンブルしたところ、すべてのアドレスが絶対アドレスであることがわかったので、単一の「jmp」命令では不十分だと思います。私が考えることができる唯一の方法は、3GBを超える仮想アドレスに関数があり、この関数を下位スペースで呼び出し、上位スペースで実行し、この関数が返されないことです。これが正しい場合、どうすればこれを行うことができますか?