問題タブ [page-tables]
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.
linux-kernel - ドライバー mmap 操作 ページテーブルの作成
ドライバーでの mmap 操作を理解しようとしています。mmap を行っている理由はわかっています。mmap の次の 2 つの実装と混同しています。
と
最初の例は、ページ テーブルを変更しない単純な実装ですが、2 番目の例は変更します。
では、2番目のアプローチの根拠は何ですか。最初の例も適切に機能します。
memory - 半分しか使用されていない場合、マルチレベルのページテーブルはページテーブル全体を保存しますか?
1024 エントリの 2 レベルのページ テーブルがあるとします。2 レベルのページ テーブルが 3 つだけ使用され、そのうちの 1 つが半分空であることを考慮してください。したがって、3 つのエントリを持つトップレベルのページ テーブルがあります。
では、ページ テーブル システムは RAM でどのくらいのメモリを占有するのでしょうか?
それぞれ4 ページ1024 * 32bits = 4kBytes
ずつ保存する必要がありますか、それとも使用する分だけ保存することを許可されていますか? (3 + 1024 * 2 + 1024 * (1/2)) * 32
ビットだけ?
memory - 2 レベルのページ テーブルのサイズの計算
したがって、ページ サイズは4kb
、32
ビット アドレス CPU で、実装された 2 レベルのページ テーブルがあります。
1081 ページを保存したいので、次のものが必要です。
1024
第 2 レベルのページ テーブルのエントリ57
別の第 2 レベルのページ テーブルのエントリ2
エントリを保持するトップ レベルのページ テーブル。
さて、これらのページ テーブルのフル サイズをメモリに保存する必要がありますか?
- 最初のケースでは、次に使用します
4bytes * 2 + 4bytes * 1024 + 4bytes * 57
- それ以外の場合は
1 * 4bytes * 1024 + 2 * 4bytes * 1024
ヒントはありますか?
virtual-address-space - それぞれのレベル 2 ページ テーブル ビットとページ テーブル エントリを計算します。
- レベル 1 ページ テーブルはちょうど 1 ページのメモリを占有します
- 32 ビット仮想アドレス
- ページサイズ 8kb
- PTE 4 バイト
各フィールドは何ビットですか?
レベル 1 テーブルにはいくつのエントリがありますか?
レベル 2 テーブルにはいくつのエントリがありますか?
レベル 2 ページ テーブルがマップするページ数は?
試してみたところ、オフセットは 13、レベル 1 は 11、レベル 2 は 8 でした。残りの解決方法がわかりません。
operating-system - ページ テーブルにあるエントリの数を確認する方法
システムが 32 ビット アドレス空間を使用しており、各エントリが 32 ビットで、各ページが 8 KB であるとします。ページテーブルにはいくつの異なるエントリが含まれますか?
私の論理:32ビットのアドレス空間は、合計2 ^ 32のアドレスを意味するため、合計2 ^ 37ビットです。ページあたり 8 KB は、ページあたり合計 2^16 ビットを意味します。したがって、ページ テーブルには 2^37 / 2^16 = 2^21 のエントリがあります。
これは正しいです?
linux - 実行可能ファイルで使用した場合、mmap() はどのように機能しますか?
私はUbuntu 14.04 LTSに取り組んでいます。
- 次の 2 つのファイルがあります
file1.c
。file2.c
- それらはそれぞれ と にコンパイルされ
exec1
ますexec2
。file2.c
静的ライブラリの関数を利用します。
exec1
exec2
を使用して仮想アドレス空間にマップしmmap
ます。次の行は からのものfile1.c
です。
次の一連のイベントが発生します。
exec1
実行されます。exec1
その仮想アドレス空間へのmmapsexec2
(ここで正確に何が起こるのでしょうか?)exec2
が実行されます (この段階でexec1
は、バックグラウンドで実行され続けます。正確には何が起こっているのでしょうか?)
exec2
PS:がディスク上にあり、それが?mmap
によって編集されるとどうなるかを知りたい exec1
に対応する仮想アドレス空間とページ テーブルはどのようにexec1
変化しますか?
次に、exec2
実際に実行されるとメインメモリに持ち込まれます。物事はどのように変化しますか?で使用される静的ライブラリ関数はメモリ内のどこにありますfile2.c
か? 私はそのプロセスについて明確な考えを持っていません。誰でもこのトピックに光を当てることができますか?
operating-system - アドレスとページ テーブル サイズを決定する
この質問が何度も出されたことは承知していますが、いまだに苦労していると感じています。
物理アドレスと仮想アドレスがどのように見えるかを判断し、ページ テーブルのサイズを計算する必要があります。
私が持っているものが正しいかどうかはわかりませんが、これは私がこれまでに得たものです:
ページエントリ数は 2^20/2^10=2^10
ページテーブルのサイズを計算するにはどうすればよいですか? 各 PTE には仮想アドレスと物理アドレスの両方があるため、混乱しています。ページエントリ数*(物理アドレス+仮想アドレス)でしょうか? 現在のビットが設定されている場合、どのように違いますか?
operating-system - How does the OS update the appropriate page table when it evicts a victim page?
In an OS that uses virtual memory, each process has a page table. Each page table maps a process's virtual memory pages to the system's physical memory pages and indicates whether a given page is currently valid (loaded in memory) or not.
Suppose that memory is running low and the OS needs to choose a page to evict from physical memory. There are different algorithms for this. For example, FIFO, LRU. Once the OS chooses a page to evict, how does it invalidate any existing references to the page?
If the victim page is currently used by the active process, then the OS must invalidate the mapping in the current process's page table. If the victim page is currently used by another process, the OS must invalidate the mapping in the other process's page table. In any case, how does the OS determine which page table to update (if any), and how does it know where the mapping lives in that page table without doing a linear search?
There is a detailed description of x86 page table structure beginning at slide 22 of this presentation:
http://www.scs.stanford.edu/12au-cs140/notes/l8.pdf
I also found some helpful overviews of virtual memory:
http://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/9_VirtualMemory.html http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Memory/virtual.html
Similar Stack Overflow question without an answer:
operating-system - 特定の MMU は 32 ビットおよび 64 ビットの仮想アドレスで動作しますか?
新しいプロセスが起動すると、オペレーティング システムは MMU のレジスタをプロセスのページ テーブルで初期化します。仮想アドレス変換 MMU は仮想アドレスを取得し、それをコンパレータに渡し、物理アドレスを取得します (間違っていたら訂正してください)。したがって、ページ テーブルがハードウェアの一部である場合、1 つの MMU が 32 ビットおよび 64 ビットのオペレーティング システムでどのように機能するかを説明します。つまり、32 ビットの仮想アドレスを取得するようにプログラムされている場合、64 ビットの仮想アドレスを取得したときにどのように機能するかということです。
ありがとう。