Paging: Introduction
3913 ワード
オペレーティングシステムは、空間管理の問題を解決するために、通常2つの方法を採用します.仮想メモリでは、分割と呼ばれる方法でメモリを異なるサイズで分割する.しかし、この方法の欠点は、メモリを2つのブロックに分割すると、フラグメントの問題が発生する可能性があることです. これは、メモリを固定に分割する鍵です.virtualmemoryでは、この方法をページングと呼びます.プロセスのアドレス空間は、異なるサイズのセグメント(コード、スタック、スタック)に分けられず、固定サイズのページに分けられます.したがって、物理メモリを固定サイズのページフレームワークの配列と見なすことができます.
分かりやすいように、小さなメモリを例にとると、合計4ページで64バイト、1ページあたり16バイトのサイズがあります.図18.2に示すように、実際の物理メモリは8ページあり、仮想空間は物理メモリの異なるアドレスにある.
ページングには多くの利点があります. flexibility
プロセスがaddress spaceをどのように使用しても、抽象を効率的に実行できます.heap、stackがどの方向に増大するかを仮定する必要はありません. simplicity
free spaceの管理を容易にします.64 KBのアドレス空間を物理メモリの8ページに格納する場合、1ページは16 KBで、OS管理のフリーリストから4ページを取得するだけです. 仮想ページのアドレスが物理メモリのどのアドレスにあるかを知るには、オペレーティングシステムが各プロセスのページテーブルを持つ必要があります.
page tableの主な目的は、アドレス空間内の仮想ページの物理メモリ内の位置を示すアドレス変換を格納することである.
例えば、18.2において、virtualpage 0は物理ページフレームワーク3に相当することが分かる.
まず、プロセスで生成された仮想アドレスを物理メモリのアドレスに変換するには、virtualpage numberとpageのoffsetの2つのコンポーネントに分ける必要があります.
Viftual address spaceは64 KB(2^6=64)で、6ビットが必要です.
ページのサイズは16 KBで、4ページが必要です.これを表すために、明示的な方法を使って、上位2桁で4ページを表すことができます.
例えば、virtual address 21は物理メモリに変換される.
従って、18.2の図から、virtualpage 1は物理page 7に位置することがわかる.
page tableはsection table、base、boundレジスタよりずっと大きい.
通常は4 KBのpage,32 bitのアドレス空間です.では、32 bitのaddress spaceには4 kbページがほぼ何ページあるのでしょうか.
まず、4 kbは
22∗2102^2 * 2^{10}22∗210
はい.
232/212=220(約100万)2^{32}/2^{12}=2^{20}(約100万)232/212=220(約100万)
したがって,約100万ページが存在する.したがって上位20位はVPNとなり,残り12位はoffsetとなる.したがって、Page Table Entry(PTE)が弱い物理翻訳やその他の情報を保存するために4 kbのメモリを必要とする場合、100プロセスの実行時にPTEを1つ保存するだけで400 MBが必要になります.今のような64 bit環境ではさらに大きくなります.
このようなPage Tableは大きすぎて、実行中のプロセスのPage TableをMMU onchipハードウェアに保存しません.各プロセスのpageテーブルをメモリに格納します.
Page tableは、仮想アドレス(仮想page number)を物理アドレス(物理page number)にマッチングするデータ構造である.
最も簡単な構造はlinear-page tableと呼ばれる配列です.アレイのように、OSはVPNでアレイをインデックスしてPFNを検索する.
PTEには私たちが知っていることがたくさんあります.
valid bitは、特定の翻訳が有効か否かを示すビットである.たとえば、プログラムが実行されている場合はcode、stack、heap領域が使用されていることを示し、他の未使用のアドレス空間では有効ビットが無効であることを示します.アクセスしたアドレスが無効な場合は、OSにアクセスしてプロセスを終了します.
したがってvalid bitは残りのアドレス空間を無効として表し、物理フレームを割り当てないことでメモリを節約する.
また、特定のページを読み取り、書き込み、実行できるかどうかを示す保護ビットも重要です.次にpresent bitは、現在のページがディスクにあるかメモリにあるかを示します.dirty bitは、ページをメモリにインポートしてから変更したかどうかを示します.reference bitは、ページへのアクセスがあるかどうかを追跡するために使用されます.ページが頻繁に使用されるため、メモリに残るべきかどうかを示します.
データをページに適切に渡すには、まずvirtual addressを物理addressに変換する必要があります.このため、ハードウェアには、現在実行中のプロセスのページテーブルが必要です.
まず、page table base registerにpage tableの実際の開始位置が格納されていると仮定する. PTEを得るために、上記作業を行う.
我々の例では、仮想アドレス全体からVPNを取得するVPN MASKは0 x 30(110000)である.SHIFTはオフセット量のビット値4に設定します.21(010101)という名前のvirtual addressの場合、VPNは01であるため、virtualpageは1に相当し、これをインデックスとしてPTEからpage table base registerを取得することができる.
物理アドレスがわかり、ハードウェアはメモリから適切なデータをレジスタeaxに送信することができる.
要約すると、各メモリリファレンスのプロトコルについて理解しました.18.6では、ページングによってメモリにアクセスする方法について説明します.すべてのメモリリファレンスに対して、ページごとにpageテーブルから翻訳をインポートするために追加のメモリリファレンスが必要であることがわかります.追加のメモリリファレンスは非常に高価であり、この場合、プロセスが2倍以上遅くなる可能性があります.
そのため、ハードウェアとソフトウェアが丹念に設計されていない場合、Page Tableは大量のメモリを必要とし、システムを遅くします.
ソース:OSTEP
Simple example and Overview
分かりやすいように、小さなメモリを例にとると、合計4ページで64バイト、1ページあたり16バイトのサイズがあります.図18.2に示すように、実際の物理メモリは8ページあり、仮想空間は物理メモリの異なるアドレスにある.
ページングには多くの利点があります.
プロセスがaddress spaceをどのように使用しても、抽象を効率的に実行できます.heap、stackがどの方向に増大するかを仮定する必要はありません.
free spaceの管理を容易にします.64 KBのアドレス空間を物理メモリの8ページに格納する場合、1ページは16 KBで、OS管理のフリーリストから4ページを取得するだけです.
page tableの主な目的は、アドレス空間内の仮想ページの物理メモリ内の位置を示すアドレス変換を格納することである.
例えば、18.2において、virtualpage 0は物理ページフレームワーク3に相当することが分かる.
まず、プロセスで生成された仮想アドレスを物理メモリのアドレスに変換するには、virtualpage numberとpageのoffsetの2つのコンポーネントに分ける必要があります.
Viftual address spaceは64 KB(2^6=64)で、6ビットが必要です.
ページのサイズは16 KBで、4ページが必要です.これを表すために、明示的な方法を使って、上位2桁で4ページを表すことができます.
例えば、virtual address 21は物理メモリに変換される.
movl 21, %eax
21はバイナリ数字なので、virtual address 21はvirtualpage 1(VPN:"01")の5番目(Offset:"0101")の位置にあることがわかります. 従って、18.2の図から、virtualpage 1は物理page 7に位置することがわかる.
Where the Page Table stored?
page tableはsection table、base、boundレジスタよりずっと大きい.
通常は4 KBのpage,32 bitのアドレス空間です.では、32 bitのaddress spaceには4 kbページがほぼ何ページあるのでしょうか.
まず、4 kbは
22∗2102^2 * 2^{10}22∗210
はい.
232/212=220(約100万)2^{32}/2^{12}=2^{20}(約100万)232/212=220(約100万)
したがって,約100万ページが存在する.したがって上位20位はVPNとなり,残り12位はoffsetとなる.したがって、Page Table Entry(PTE)が弱い物理翻訳やその他の情報を保存するために4 kbのメモリを必要とする場合、100プロセスの実行時にPTEを1つ保存するだけで400 MBが必要になります.今のような64 bit環境ではさらに大きくなります.
このようなPage Tableは大きすぎて、実行中のプロセスのPage TableをMMU onchipハードウェアに保存しません.各プロセスのpageテーブルをメモリに格納します.
What’s Actually In The Page Table?
Page tableは、仮想アドレス(仮想page number)を物理アドレス(物理page number)にマッチングするデータ構造である.
最も簡単な構造はlinear-page tableと呼ばれる配列です.アレイのように、OSはVPNでアレイをインデックスしてPFNを検索する.
PTEには私たちが知っていることがたくさんあります.
valid bitは、特定の翻訳が有効か否かを示すビットである.たとえば、プログラムが実行されている場合はcode、stack、heap領域が使用されていることを示し、他の未使用のアドレス空間では有効ビットが無効であることを示します.アクセスしたアドレスが無効な場合は、OSにアクセスしてプロセスを終了します.
したがってvalid bitは残りのアドレス空間を無効として表し、物理フレームを割り当てないことでメモリを節約する.
また、特定のページを読み取り、書き込み、実行できるかどうかを示す保護ビットも重要です.次にpresent bitは、現在のページがディスクにあるかメモリにあるかを示します.dirty bitは、ページをメモリにインポートしてから変更したかどうかを示します.reference bitは、ページへのアクセスがあるかどうかを追跡するために使用されます.ページが頻繁に使用されるため、メモリに残るべきかどうかを示します.
Paging: Also Too Slow
データをページに適切に渡すには、まずvirtual addressを物理addressに変換する必要があります.このため、ハードウェアには、現在実行中のプロセスのページテーブルが必要です.
まず、page table base registerにpage tableの実際の開始位置が格納されていると仮定する. PTEを得るために、上記作業を行う.
我々の例では、仮想アドレス全体からVPNを取得するVPN MASKは0 x 30(110000)である.SHIFTはオフセット量のビット値4に設定します.21(010101)という名前のvirtual addressの場合、VPNは01であるため、virtualpageは1に相当し、これをインデックスとしてPTEからpage table base registerを取得することができる.
物理アドレスがわかり、ハードウェアはメモリから適切なデータをレジスタeaxに送信することができる.
要約すると、各メモリリファレンスのプロトコルについて理解しました.18.6では、ページングによってメモリにアクセスする方法について説明します.すべてのメモリリファレンスに対して、ページごとにpageテーブルから翻訳をインポートするために追加のメモリリファレンスが必要であることがわかります.追加のメモリリファレンスは非常に高価であり、この場合、プロセスが2倍以上遅くなる可能性があります.
そのため、ハードウェアとソフトウェアが丹念に設計されていない場合、Page Tableは大量のメモリを必要とし、システムを遅くします.
ソース:OSTEP
Reference
この問題について(Paging: Introduction), 我々は、より多くの情報をここで見つけました https://velog.io/@kmin-283/Paging-Introductionテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol