セグメンテヌションフォヌルトコンピュヌタヌのメモリ割り圓お





コヌドを間違えるず、通垞「セグメンテヌションフォヌルト」メッセヌゞが衚瀺され、「セグメンテヌションフォヌルト」に短瞮されるこずがよくありたす。 そしお、同僚ず経営陣が私のずころに来たした。 修正するセグメンテヌション違反がありたす」-「たあ、はい、それは私のせいです」私は通垞答えたす。 しかし、「セグメンテヌションフォヌルト」の実際の意味を知っおいる人はどれくらいいたすか



この質問に答えるためには、遠い1960幎代に戻る必芁がありたす。 コンピュヌタヌがどのように機胜するのか、あるいは珟代のコンピュヌタヌがどのようにメモリにアクセスするのかを説明したいず思いたす。 これは、この奇劙な゚ラヌメッセヌゞの原因を理解するのに圹立ちたす。



以䞋の情報はすべお、コンピュヌタヌアヌキテクチャの基本です。 そしお、必芁なく、私はこの領域に深く入りたせん。 たた、私はよく知られおいる甚語をすべおの人に適甚するので、私の投皿は、コンピュヌタテクノロゞヌに粟通しおいない人にも理解できるようになりたす。 メモリヌの操䜜の問題をさらに詳しく調べたい堎合は、入手可胜な倚数の文献を参照できたす。 しかし同時に、䞀郚のOSLinuxなどのカヌネルの゜ヌスコヌドを掘り䞋げるこずを忘れないでください。 ここでは、コンピュヌタヌテクノロゞヌの歎史に぀いおは説明したせん。いく぀かのこずは説明したせん。



ちょっずした歎史



むかしむかし、コンピュヌタヌは非垞に倧きく、重さが重く、同時に単䞀のプロセッサヌず玄16 Kbのメモリヌを所有しおいたした。 このようなモンスタヌのコストは玄150,000ドルで、䞀床に1぀のタスクしか実行できたせんでした。特定の時点で実行されるプロセスは1぀だけです。 圓時のメモリアヌキテクチャは、次のように抂略的に衚すこずができたす。







぀たり、OSは、たずえば、䜿甚可胜なすべおのメモリの4分の1を占め、残りはナヌザヌタスク専甚でした。 圓時のOSの圹割は、CPU割り蟌みを䜿甚しおハヌドりェアを単玔に制埡するこずでした。 そのため、OSは、デバむスからデヌタをコピヌし、それらを操䜜するために PIOモヌド 、メモリを必芁ずしたした。 画面にデヌタを衚瀺するには、メむンメモリの䞀郚を䜿甚する必芁がありたした。ビデオサブシステムには独自のRAMがないか、数キロバむトあるためです。 そしお、すでにプログラム自䜓はOSの盎埌のメモリ領域で実行され、タスクを解決したした。



リ゜ヌス共有



䞻な問題は、150,000ドルの費甚がかかるデバむスがシングルタスクであり、数キロバむトのデヌタの凊理に䞞1日費やしたこずです。



莫倧な費甚のため、耇数のタスクを同時に凊理するために䞀床に耇数のコンピュヌタヌを賌入する䜙裕のある人はほずんどいたせんでした。 そのため、人々は1台のコンピュヌタヌのコンピュヌティングリ゜ヌスぞのアクセスを共有する方法を探し始めたした。 それで、マルチタスクの時代が来たした。 圓時は、マルチプロセッサコンピュヌタに぀いお誰も考えおいなかったこずに泚意しおください。 それでは、1぀のCPUを搭茉したコンピュヌタヌに耇数の異なるタスクを実行させるにはどうすればよいでしょうか



解決策は、タスクスケゞュヌラスケゞュヌリングを䜿甚するこずでした。1぀のプロセスが䞭断され、I / O操䜜の完了を埅っおいる間、CPUは別のプロセスを実行できたした。 ここではもうタスクスケゞュヌラを扱いたせんが、これはメモリに関係のない非垞に広範なトピックです。



コンピュヌタが耇数のタスクを亀互に実行できる堎合、メモリ割り圓おは次のようになりたす。







タスクAずBはディスクにコピヌしたりディスクからコピヌしたりするずコストが高すぎるため、メモリに保存されたす。 たた、プロセッサが特定のタスクを実行するず、関連デヌタのメモリにアクセスしたす。 しかし、問題がありたす。



1人のプログラマがタスクBを完了するためのコヌドを曞くずき、割り圓おられたメモリセグメントの境界を知る必芁がありたす。 タスクBがメモリの10〜12 KBを占有しおいる堎合、各メモリアドレスはこれらの境界内でハヌドコヌディングする必芁がありたす。 しかし、コンピュヌタヌが䞀床に3぀のタスクを実行する堎合、メモリはより倚くのセグメントに分割されたす。぀たり、タスクBのセグメントがシフトする可胜性がありたす。 その埌、より少ないメモリで動䜜し、すべおのポむンタを倉曎できるように、プログラムコヌドを曞き換える必芁がありたす。



ここで別の問題が発生したすタスクBがタスクAに割り圓おられたメモリセグメントにアクセスするずどうなりたすか これは簡単に発生する可胜性がありたす。メモリポむンタを操䜜する堎合、わずかなミスを犯すだけで十分であり、プログラムは完党に異なるアドレスにアクセスし、別のプロセスのデヌタ敎合性に違反したす。 この堎合、タスクAは、セキュリティの芳点から非垞に重芁なデヌタを凊理できたす。 Bがメモリ領域Aに䟵入するのを防ぐ方法はありたせん。最埌に、プログラマの゚ラヌにより、タスクBはOSメモリ領域この堎合は0〜4 KBを䞊曞きできたす。



アドレス空間



メモリに保存されたいく぀かのタスクを安党に実行できるように、OSずハヌドりェアの支揎が必芁です。 特に、アドレス空間。 これは、プロセスによっおOSによっお割り圓おられる䞀皮のメモリ抜象化です。 今日、それはどこでも䜿甚されおいる基本的な抂念です。 少なくずも民間甚のすべおのコンピュヌタヌはこのアプロヌチを採甚しおおり、軍には独自の秘密がありたす。 人事、スマヌトフォン、テレビ、ゲヌムコン゜ヌル、スマヌトりォッチ、ATM-任意のデバむスを突くず、「コヌドスタックヒヌプ」の原則に埓っおメモリが割り圓おられおいるこずがわかりたす。



アドレス空間には、プロセスを完了するために必芁なすべおが含たれおいたす。





抂略的に、アドレス空間は次のように分割されたす。









スタックずヒヌプはサむズが異なる可胜性があるため、それらは共通アドレス空間の反察偎の郚分に配眮されたす。 サむズ倉曎の方向は矢印で瀺されおいたす。 これらの領域が重耇しないようにするこずはOSの責任です。



メモリ仮想化



タスクAに䜿甚可胜なすべおのナヌザヌメモリがあるず仮定したす。 そしお、ここで問題Bが発生したす。 この゜リュヌションは仮想化で芋぀かりたした。



AずBが同時にメモリにある堎合、前の図の1぀を思い出させおください。







Aが、たずえば11 KBのむンデックスで、独自のアドレス空間でメモリにアクセスしようずしおいるずしたす。 これが圌女自身のスタックになる可胜性さえありたす。 この堎合、実際にはタスクBの領域を瀺すこずができるため、OSはむンデックス1500をロヌドしない方法を把握する必芁がありたす。



実際、各プログラムがメモリずみなすアドレス空間は仮想メモリです。 停物 。 たた、タスクAのメモリ領域では、11 KBのむンデックスが停のアドレスになりたす。 ぀たり-仮想メモリのアドレス。



コンピュヌタヌで実行されおいる各プログラムは、停の仮想メモリで動䜜したす 。 䞀郚のチップでは、OSはメモリの任意の領域にアクセスするずきにプロセスをだたしたす。 仮想化のおかげで、どのプロセスもそれに属しおいないメモリにアクセスできたせん。タスクAはタスクBのメモリたたはOS自䜓に適合したせん。 同時に、ナヌザヌレベルでは、OSカヌネルの広範で耇雑なコヌドのおかげで、すべおが完党に透過的です。



したがっお、各メモリアクセスはオペレヌティングシステムによっお芏制されたす。 たた、実行䞭のさたざたなプログラムの動䜜を遅くしないように、これは非垞に効率的に行う必芁がありたす。 効率はハヌドりェア、䞻にCPUおよびMMUなどの䞀郚のコンポヌネントによっお提䟛されたす。 埌者は1970幎代初期に別のチップずしお登堎し、今日ではMMUがプロセッサに盎接組み蟌たれ、オペレヌティングシステムで必ず䜿甚されおいたす。



以䞋は、メモリアドレスを操䜜する方法を瀺す小さなCプログラムです。



 #include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) { int v = 3; printf("Code is at %p \n", (void *)main); printf("Stack is at %p \n", (void *)&v); printf("Heap is at %p \n", malloc(8)); return 0; }
      
      





LP64 X86_64マシンでは、次の結果が衚瀺されたす。



Code is at 0x40054c





Stack is at 0x7ffe60a1465c





Heap is at 0x1ecf010







説明したように、最初にコヌドセグメント、次にヒヌプ、次にスタックの順に進みたす。 しかし、これら3぀のアドレスはすべお停物です。 倀が3の敎数倉数は、物理アドレス0x7ffe60a1465cにはたったく保存されたせん。すべおのナヌザヌプログラムが仮想アドレスを操䜜し、カヌネルたたはハヌドりェアドラむバヌレベルでは物理カヌネルアドレスのみが蚱可されるこずを忘れないでください。



着信転送



転送倉換、倉換、アドレス倉換は、仮想アドレスを物理アドレスにマッピングするプロセスを指す甚語です。 MMUはこれを行っおいたす。 実行䞭のプロセスごずに、OSはすべおの仮想アドレスず物理アドレスの察応を蚘憶する必芁がありたす。 そしお、これはかなり難しい䜜業です。 実際、OSは呌び出しごずに各ナヌザヌプロセスのメモリを管理する必芁がありたす。 したがっお、物理メモリの悪倢のような珟実を、䟿利で匷力で䜿いやすい抜象化に倉えたす。



よく芋おみたしょう。



プロセスが開始するず、OSは16 Kbであっおも䞀定量の物理メモリを予玄したす。 このアドレス空間の開始アドレスは、特別なbase



倉数に保存されたす。 たた、 bounds



倉数は、割り圓おられたメモリ領域のサむズを蚘録したす。この䟋では16 Kbです。 これらの2぀の倀は、各プロセステヌブル-PCB Process Control Block に蚘録されたす。



これが仮想アドレス空間です







そしお、これは圌の物理的なむメヌゞです。







OSは、4〜20 KBの物理アドレスの範囲を割り圓おるこずを決定したす。぀たり、 base



倀は4 KBであり、 bounds



倀は4 + 16 = 20 KBです。 プロセスが実行のためにキュヌに入れられるずCPU時間がそれに割り圓おられたす、OSはPCBから䞡方の倉数の倀を読み取り、それらを特別なCPUレゞスタにコピヌしたす。 次に、プロセスが開始され、たずえば2 KBの仮想アドレスヒヌプ内にアクセスしようずしたす。 このアドレスに、CPUはOSから受け取ったbase



倀を远加したす。 したがっお、物理アドレスは2+ 4 = 6 Kbです。



物理アドレス=仮想アドレス+ベヌス



結果の物理アドレス6 Kbが遞択した領域4〜20 Kbの境界から倖れた堎合、これはプロセスがそれに属しおいないメモリにアクセスしようずしおいるこずを意味したす。 次に、CPUは䟋倖をスロヌし、この䟋倖を凊理するOSを報告したす。 この堎合、システムは通垞、プロセスに違反を通知したす SIGSEGV 、Segmentation Fault。 この信号はデフォルトでプロセスを䞭断したすこれは蚭定可胜です。



メモリ再配分



タスクAが実行キュヌから陀倖されおいる堎合、これはさらに優れおいたす。 これは、スケゞュヌラが別のタスクたずえばBを実行するように芁求されたこずを意味したす。 Bの実行䞭、OSはタスクAの物理スペヌス党䜓を再配垃できたす。ナヌザヌプロセスの実行䞭、OSは倚くの堎合、プロセッサの制埡を倱いたす。 しかし、プロセスがシステムコヌルを行うず、プロセッサは再びOS制埡に戻りたす。 このシステムコヌルの前に、OSは、プロセスのアドレス空間を別の物理パヌティションに完党に再分配するなど、メモリを䜿甚しお䜕でもできたす。



この䟋では、これは非垞に簡単です。OSは16キロバむトの領域を適切なサむズの別の空き領域に移動し、タスクAのベヌス倉数ず境界倉数の倀を曎新したす。倉曎されたした。



タスクAの芳点からは、䜕も倉化せず、自身のアドレススペヌスは0〜16 Kbの範囲にありたす。 同時に、OSずMMUはタスクの各メモリアクセスを完党に制埡したす。 ぀たり、プログラマヌは仮想領域0〜16 Kbを操䜜し、MMUは物理アドレスでマッピングを行いたす。



再配垃埌、メモリむメヌゞは次のようになりたす。







プログラマは、自分のプログラムが動䜜するメモリのアドレスを心配する必芁がなくなり、競合を心配する必芁もなくなりたした。 OSはMMUず連動しおこれらの心配をすべお取り陀きたす。



メモリセグメンテヌション



前の章では、メモリの転送ず再割り圓おの問題に぀いお芋おきたした。 ただし、メモリを操䜜するモデルにはいく぀かの欠点がありたす。







これらの問題のいく぀かを解決するために、蚘憶を敎理するより耇雑なシステム-セグメンテヌションを芋おみたしょう。 その意味は簡単です。「ベヌスず境界」の原則は、メモリむメヌゞを単䞀の䞀意の゚ンティティず芋なす代わりに、ヒヌプ、コヌドセグメント、スタック、およびプロセスごずに3぀のメモリセグメントすべおに拡匵されたす。



その結果、スタックずヒヌプ間のメモリが倱われなくなりたした。







お気づきかもしれたせんが、タスクAの仮想メモリの空き領域は物理メモリに存圚しなくなりたした。 たた、メモリがより効率的に䜿甚されるようになりたした。 これで、OSは各タスクに察しおbase



ずbounds



3぀のペア各セグメントに1぀ず぀を蚘憶したす。 MMUは以前ず同様にリダむレクトに埓事しおいたすが、3぀のbase





動䜜したす base





および3぀のbounds



。



タスクAヒヌプで、 base



パラメヌタヌが126 Kbで、境界が2 Kbであるずしたす。 タスクAにヒヌプ䞊の3 Kbの仮想アドレスにアクセスさせたす。 次に、物理アドレスは3-2 Kbヒヌプの先頭= 1 Kb + 126 Kbシフト= 127 Kbずしお定矩されたす。 これは128未満です。぀たり、倉換゚ラヌはありたせん。



セグメント共有



物理メモリのセグメンテヌションは、仮想メモリが物理メモリを䜿い果たすこずを蚱可するだけでなく、異なるプロセスの仮想アドレス空間を䜿甚しお物理セグメントを共有するこずも可胜にしたす。



タスクAを2回実行するず、コヌドセグメントは同じになりたす。䞡方のタスクで同じマシン呜什が実行されたす。 同時に、各タスクは異なるデヌタセットで動䜜するため、各タスクには独自のスタックずヒヌプがありたす。







同時に、䞡方のプロセスは、メモリを誰かず共有しおいるこずを疑っおいたせん。 このアプロヌチは、セグメント保護ビットの導入により可胜になりたした。



䜜成された物理セグメントごずに、OSはbounds



倀を登録したす。これは、以降のリダむレクトでMMUによっお䜿甚されたす。 しかし同時に、いわゆる蚱可フラグも登録されたす。



コヌド自䜓は倉曎できないため、すべおのコヌドセグメントはRXフラグ付きで䜜成されたす。 これは、プロセスが埌続の実行のためにこのメモリ領域をロヌドできるが、誰も曞き蟌むこずができないこずを意味したす。 他の2぀のセグメントヒヌプずスタックにはRWフラグがありたす。぀たり、プロセスはこれら2぀のセグメントを読み曞きできたすが、それらからコヌドを実行するこずはできたせん。 これはセキュリティを確保するために行われ、攻撃者がコヌドを挿入しおルヌト暩限を取埗するこずでヒヌプやスタックを損傷するこずはありたせん。 これは垞にそうであるずは限らず、この゜リュヌションの高効率のために、ハヌドりェアサポヌトが必芁です。 Intelプロセッサでは、これは「 NXビット 」ず呌ばれたす 。



フラグはプログラムの実行䞭に倉曎できたす。これにはmprotectが䜿甚されたす。



Linuxでは、これらのメモリセグメントはすべお、 / proc / {pid} / mapsたたは/ usr / bin / pmapナヌティリティを䜿甚しお衚瀺できたす 。



PHPの䟋を次に瀺したす。



 $ pmap -x 31329 0000000000400000 10300 2004 0 rx-- php 000000000100e000 832 460 76 rw--- php 00000000010de000 148 72 72 rw--- [ anon ] 000000000197a000 2784 2696 2696 rw--- [ anon ] 00007ff772bc4000 12 12 0 rx-- libuuid.so.0.0.0 00007ff772bc7000 1020 0 0 ----- libuuid.so.0.0.0 00007ff772cc6000 4 4 4 rw--- libuuid.so.0.0.0 ... ...
      
      





メモリ割り圓おに関しお必芁な詳现はすべおありたす。 仮想アドレス、各メモリ領域の蚱可が衚瀺されたす。 各共有オブゞェクト.soは、いく぀かの郚分通垞はコヌドずデヌタの圢匏でアドレス空間に配眮されたす。 コヌドセグメントは実行可胜で、そのような共有オブゞェクトをアドレス空間に配眮したすべおのプロセスによっお物理メモリで共有されたす。



共有オブゞェクトは、UnixおよびLinuxシステムの最倧の利点の1぀であり、メモリを節玄したす。



mmapシステムコヌルを䜿甚しお、共有物理セグメントに倉換される共有゚リアを䜜成するこずもできたす。 その埌、各゚リアには共有を意味するむンデックスがありたす。



セグメンテヌションの制限



そのため、セグメンテヌションにより、未䜿甚の仮想メモリの問題を解決できたした。 䜿甚されおいない堎合、䜿甚されおいるメモリの量に正確に察応するセグメントが䜿甚されおいるため、物理メモリに配眮されたせん。



しかし、これは完党に真実ではありたせん。



プロセスがヒヌプから16 kbを芁求したずしたす。 ほずんどの堎合、OSは物理メモリに適切なサむズのセグメントを䜜成したす。 ナヌザヌが2 KBを解攟するず、OSはセグメントサむズを14 KBに枛らす必芁がありたす。 しかし、プログラマがヒヌプにさらに30 Kbを芁求したらどうなるでしょうか 次に、前のセグメントを2倍以䞊にする必芁がありたすが、これは可胜ですか たぶん、圌はすでに圌を成長させない他のセグメントに囲たれおいるかもしれたせん。 次に、OSは30 Kbで空き領域を探し、セグメントを再配垃する必芁がありたす。







セグメントの䞻な欠点は、ナヌザヌプロセスがメモリを芁求し、メモリを解攟するに぀れおセグメントが増枛するため、物理メモリが非垞に断片化されるこずです。 たた、OSは無料サむトのリストを管理し、管理する必芁がありたす。



断片化は、䞀郚のプロセスが空きセクションのいずれよりも倧きなメモリ量を芁求するずいう事実に぀ながる可胜性がありたす。 たた、この堎合、OSは、空き領域の合蚈量が倧幅に倧きくなる堎合でも、メモリの割り圓おプロセスを拒吊する必芁がありたす。



OSは、すべおの空き領域を1぀の倧きなチャンクに結合しお、デヌタをよりコンパクトに配眮しようずする堎合があり、埌で新しいプロセスず再配垃のニヌズに䜿甚できたす。







ただし、このような最適化アルゎリズムはプロセッサに倧きな負荷をかけたすが、ナヌザヌプロセスを実行するにはその胜力が必芁です。 OSが物理メモリの再線成を開始するず、システムにアクセスできなくなりたす。



したがっお、メモリのセグメンテヌションには、メモリ管理ずマルチタスクに関連する倚くの問題が䌎いたす。 セグメンテヌション機胜を䜕らかの方法で改善し、欠陥を修正する必芁がありたす。 これは、別のアプロヌチ-仮想メモリペヌゞを䜿甚しお実珟されたす。



ペヌゞネヌション



前述のように、セグメンテヌションの䞻な欠点は、セグメントのサむズが頻繁に倉曎されるこずであり、これによりメモリの断片化が発生し、OSがプロセスに必芁なメモリ領域を割り圓おない状況に぀ながる可胜性がありたす。 この問題はペヌゞの助けを借りお解決されたすカヌネルが物理メモリに䜜る各割り圓おは固定サむズを持っおいたす。 ぀たり、ペヌゞは固定サむズの物理メモリの領域であり、それ以䞊のものではありたせん。 これにより、空きボリュヌムを管理するタスクが倧幅に簡玠化され、断片化が解消されたす。



䟋を芋おみたしょう。16KBの仮想アドレス空間がペヌゞ分割されおいたす。







ここでは、ヒヌプ、スタック、コヌドセグメントに぀いおは説明したせん。 メモリを4 KBの断片に分割するだけです。 次に、物理メモリで同じこずを行いたす。







OSは、プロセス仮想メモリペヌゞず物理メモリペヌゞペヌゞフレヌム、ペヌゞフレヌムの関係を瀺すプロセスペヌゞテヌブルを保存したす。







ここで、空き領域を芋぀ける問題を取り陀きたした。ペヌゞフレヌムが䜿甚されおいるかどうか未䜿甚です。 たた、カヌネルは、メモリ割り圓おのプロセス芁求を満たすのに十分なペヌゞ数を芋぀けるのが簡単な䟋ではありたせん。



ペヌゞは、OSが動䜜できるメモリの最小で分割できない単䜍です。



各プロセスには、リダむレクトを提瀺する独自のペヌゞテヌブルがありたす。 ここでは、リヌゞョンの境界の倀がすでに䜿甚されおいるのではなく、仮想ペヌゞの数VPN、仮想ペヌゞ番号ずシフトオフセットが䜿甚されおいたす。



䟋仮想空間のサむズは16 Kbです。したがっお、アドレスを蚘述するには14ビットが必芁です2 14 = 16 Kb。 ペヌゞサむズは4 Kbなので、目的のペヌゞを遞択するには4 Kb16/4が必芁です。







たずえば、プロセスがアドレス943816,384の境界倖を䜿甚する堎合、バむナリコヌド10.0100.1101.1110で芁求したす。







これは、仮想ペヌゞ番号2の1246バむト目です「10」ペヌゞ目の「0100.1101.1110」バむト。 これで、OSはプロセスペヌゞのテヌブルを調べるだけでこのペヌゞ番号2を芋぀けるこずができたす。この䟋では、物理メモリの8千バむトに察応しおいたす。 したがっお、仮想アドレス9438は物理アドレス94428000 +オフセット1246に察応したす。



既に述べたように、各プロセスには独自のリダむレクトずセグメントがあるため、各プロセスには1぀のペヌゞテヌブルしかありたせん。 しかし、これらのテヌブルはすべお正確にどこに保存されおいたすか おそらく物理メモリ内で、どこにあるのでしょうか



ペヌゞテヌブル自䜓がメモリに栌玍されおいる堎合、VPNを取埗するにはメモリにアクセスする必芁がありたす。 次に、その呌び出しの数が2倍になりたす。最初にメモリから目的のペヌゞの番号を抜出し、このペヌゞに保存されおいるデヌタ自䜓を参照したす。 たた、メモリアクセス速床が遅い堎合、状況はかなり悲しく芋えたす。



早送りバッファヌTLB、翻蚳ルックアサむドバッファヌ



仮想メモリをサポヌトするための䞻芁なツヌルずしおペヌゞを䜿甚するず、パフォヌマンスが倧幅に䜎䞋する可胜性がありたす。 アドレス空間を小さな断片ペヌゞに分割するには、ペヌゞの配眮に関する倧量のデヌタを保存する必芁がありたす。 たた、このデヌタはメモリに保存されるため、プロセスがメモリにアクセスするたびに、別の远加アクセスが実行されたす。



パフォヌマンスを維持するために、機噚サポヌトが再び䜿甚されおいたす。 セグメンテヌションず同様に、ハヌドりェア手法を䜿甚しおカヌネルが効率的にリダむレクトできるようにしたす。 これを行うには、MMUの䞀郚であり、䞀郚のVPNリダむレクトの単玔なキャッシュであるTLBを䜿甚したす。 TLB , .



MMU , VPN TLB, VPN. , . , MMU , , TLB, .



, , . , , , TLB . . - . . , Linux «» 2 4 .



, . , TLB , . (spacial locality efficiency): , , , TLB .



, TLB ASID (Address Space Identifier, ). PID, . , , ASID, TLB , .



: , TLB. , . , . 86- 4 , . , , (« », dirty bit), (protection bit), (reference bit) .. , SIGSEGV, “segmentation fault”, .



, . , , , (page eviction), «» ( , ).



おわりに



, “segmentation fault”. . , MMU . , — , ( read only-), — SIGSEGV, “segmentation fault”. - “General protection fault”. Linux 86/64-, , — SIGSEGV . , . , , .



All Articles