みてる: oza_x86 「仮想マシン上におけるメモリの仮想化について for x86」1/4 - YouTube - https://t.co/6JRNHweN!
2012-09-27 16:18:22TLBの探索ってどうやるんだろう.ハッシュ?シーケンシャルに探索?あとページテーブルってどこにあるんだろう.SDRAM上なのかな.
2012-09-27 16:19:53@yogata TLB自体はHWでCAMかなぁ。ページテーブルはメインメモリ上でCPUが勝手にやったりカーネルがやったり石によってちがうようです。
2012-09-27 16:23:39@koie なるほど!CAMだと1クロックで探索できるので高速ですね.ハッシュだと衝突した時を考えなきゃとか,シーケンシャル・探索木だと複数メモリアクセスなので遅そう,……とか思ってました.ページテーブルの位置は色々なのですね.ありがとうございます!
2012-09-27 16:26:33ゲストOSはページテーブルは見ないのか.Pre-validationだと,CR3へのアクセスをフックしてホストOSのSPTにアクセスさせるのかー.なるほど,すごい.
2012-09-27 16:31:34@yogata @koie ページテーブルの位置はメインメモリ上です。ページテーブルの読み書きを行う主体がCPUであるアーキテクチャと、カーネルが勝手にやれというアーキテクチャがあります
2012-09-27 16:33:54@yogata このあたり、来月のSDにちょろっと書きます…解説の量的にはoza_x86氏やhasegaw氏のプレゼンの方が充実してるやもしれませんが
2012-09-27 16:35:22@syuu1228 @koie ありがとうございます!メインメモリ上なんですね.ポインタ(CR3)がレジスタ上にあるとあったので,テーブル自体もCPU上に乗っているのかな?でもサイズ的に無理じゃね?と思ってました.
2012-09-27 16:35:39@yogata @koie サイズ的に無理なので、頻出の数十エントリだけTLBにおいて(キャッシュ)CAMで素早くアクセスします。
2012-09-27 16:37:10@syuu1228 @koie 理解しました.ありがとうございます!! TLBは,CAMで探索してページテーブルはCPU上のSRAMに保持.キャッシュに引っかからないページテーブルはCR3が示すメインメモリ上に保持.ってことですね.
2012-09-27 16:40:49@yogata x86的にはTLBになかったらCR3のページテーブルから引いてきてTLBに載せる、とかやるはずっす(カーネルは介在しない)。条件によって、カーネルからTLBをフラッシュしないといけないパターンとか出てくる事もあって、その為の命令とかあります
2012-09-27 16:44:46疑問:x86のTLBフラッシュは完全に手動?何かの命令に伴ってフラッシュされる事とかあるのかな
2012-09-27 16:45:55@syuu1228 プロセスごとにページテーブルを持っているので,プロセススイッチした時にTLBをフラッシュして次のプロセス用に更新するやり方だと,TLBフラッシュが必要かもですね http://t.co/2KkWJtTi
2012-09-27 16:53:00ページテーブルはプロセスごとに作るので,適切なTLBを維持する方法の1つとして,プロセススイッチに伴ってページテーブルも切り替える方式があるらしい「プロセススイッチ時に TLB をフラッシュすることで、仮想アドレスの衝突を解決している。 」http://t.co/2KkWJtTi
2012-09-27 16:54:17読み間違えたかも.ページテーブルを切り替えるんじゃなくて,消してまっさらにする,ってことかな.切り替えるなら前の情報を保持しないといけないし.
2012-09-27 16:55:35@yogata Tagged TLB(TLBエントリにプロセス識別子を持つ)でない限り、プロセスをスイッチする時にTLB全フラッシュが必要なはずです。あと、ページテーブルエントリを書き換えてしまった時とかにも必要になるはずじゃないかな
2012-09-27 17:00:58TLB!TLB! RT @hasegaw: TLB!TLB! RT @yogata: TLB!TLB! RT @yuzuhara: TLB!TLB!
2012-09-27 17:01:21@syuu1228 おー,なるほど,確かに.TLBの作り方を工夫してプロセス識別を仕込んだり,そもそもエントリ変わった場合はフラッシュ必須ですね.
2012-09-27 17:02:42