仮想メモリ

TLBとかMMUとかページテーブルとか.
9
Takeshi HASEGAWA @hasegaw

@yogata ふーむ。でも各OS内のコンテクストスイッチはおきるしなあ

2012-09-27 21:32:00
Ogata Yasuhiko @yogata

@hasegaw 確かに……それはどうしようもないですね……あくまでメモリアクセスする際の論理ー物理アドレスマッピングが高速化されるだけですね.

2012-09-27 21:32:47
Ogata Yasuhiko @yogata

そもそもメモリアクセスの論理ー物理アドレスマッピングがボトルネックで,どうしてもそこを改善しないと><みたいな状況じゃないと,やる意味ない気がしてきた.なるなる.

2012-09-27 21:33:54
Takeshi HASEGAWA @hasegaw

@yogata シャドウページングしているとTLBのフラッシュは避けられないし余計に効率わるかったんでしょうね。まずはTagged TLBで不必要なフラッシュを抑制したけども結局はページテーブルのネストもハードウエア側で対応して、かつそれを世代ごとにチューニングし高速化してる。

2012-09-27 21:34:34
Takeshi HASEGAWA @hasegaw

ボトルネックとは自分が思ったところにあるんじゃなくて、眺めてるとそのへんにあるもの

2012-09-27 21:38:48
中村 実 @nminoru_jp

@yogata リンク元の記事を書いたものですが「プロセス切り替え時にTLBをフラッシュする」です。x86はページテーブル切り替え(mov cr3)が同時にTLBフラッシュですが、page table walkをHWでやるCPUでもTLBフラッシュするのは少数派だと思います。

2012-09-27 21:54:49
Ogata Yasuhiko @yogata

@nminoru_jp 補足ありがとうございます!1つ目の方法はやはりフラッシュするということですね,ただしそもそもTLBフラッシュ自体をしない方法をとっているということですね.

2012-09-27 22:00:21
中村 実 @nminoru_jp

@nminoru_jp @yogata 仮想記憶を本格搭載した最初の商用機であるIBM System/370はCR3に相当するレジスタを切り替えてもTLBはフラッシュされなかった(はず)です。TLBエントリにCR3:仮想アドレスをペアで入れていたんだと思います。

2012-09-27 22:01:17
Ogata Yasuhiko @yogata

@nminoru_jp なるほど,少なくともx86とIBM System/370では違う挙動をするわけですね……

2012-09-27 22:02:49
中村 実 @nminoru_jp

そもそもSystem/370の頃のOSは仮想記憶モードと実(非仮想記憶)モードを行ったり来たりしているんだよなぁ。

2012-09-27 22:03:05
鯉江 @koie

TLBってなんでキャッシュじゃなくてバッファなのか? 歴史的にキャッシュよりも仮想記憶が先にできたから(よくしらんけど)? 他に考えられるのはキャッシュはなくしても動くし外からは隠されてるという特徴があるのに対して、TLBはないと動かないというちがいか? えらい人教えて。

2012-09-27 22:05:26
中村 実 @nminoru_jp

@koie "cache"という名前が出てくるのが遅かったからだと思います。System/370 P.O.O.を見るとキャッシュはありますが"buffer storage"と呼んでいるように見えます。 http://t.co/mMK0Ehj0

2012-09-27 23:28:49
濱マゴロク @magoroku15

S360が登場した時点で(ステージング処理が自動化されてる)キャシュの観念は存在しなかったのと、ステージングではなく単に1ウエイ・セット・アソシエイティブで格納スロット決めていたのの2点ではないかと。 @koie TLBってなんでキャッシュじゃなくてバッファなのか?

2012-09-27 23:59:04
peo3 or ozaki-r @peo3

仮想メモリ方式の分類 http://t.co/3bwlOPyX やっぱりこのページが参照されてる。このページよくまとまってるよなー。なぜかARMはないけれども

2012-09-28 09:29:59
peo3 or ozaki-r @peo3

ちなみにARMv7だとI/D/unified TLBをASIDか仮想アドレスを指定してinvalidateできる

2012-09-28 09:35:12