SlideShare a Scribd company logo
1 of 45
Download to read offline
【幕張読書会】
UNIXカーネルの設計
3章 バッファキャッシュ
担当: @ktateish
前回の復習(1) カーネルアーキテクチャ
ユーザプログラム
→システムコール
→ファイルシステム
→バッファキャッシュ (今日はココ)
→ブロックデバイス
→デバイスドライバ
→ディスクコントローラ
→物理ディスク
前回の復習(2) プロセスの状態遷移
● 実行中(ユーザモード)
● 実行中(カーネルモード)
● 休眠状態
● 実行可能状態
本書のカーネルはカーネルモード実行中はコンテ
キストスイッチしない。割り込みはかかるが必要に
応じて禁止することも。いずれもカーネル空間の
データ破壊を防ぐため
バッファキャッシュ概要
● ブロックデバイスの内容をメモリに保持
● データをブロック単位で管理
● ヘッダ部とデータ部。ヘッダ重要
● ハッシュと双方向リンクリストで管理
● LRU(Least Recently Used)
意識しておくこと
● ディスクに対してメモリは圧倒的に高速
● 非同期書込してよければそうしたい(高効率)
● ディスクとバッファキャッシュの整合性
● ディスクへの非同期書き込み完了は割り込みコ
ンテキストで処理される(随所で割り込まれ、
バッファが操作される)
バッファヘッダ
● デバイス番号(簡単のため以後省略)
● ブロック番号
● データ部へのポインタ
● バッファ状態変数(ロック中、要遅延書込等)
● ハッシュ用リストポインタ*2(prev,next)
● 自由リスト用ポインタ*2
バッファキャッシュ概観
● ブロック番号をキーとしたハッシュ
● ひとつの自由リスト
m1
m6
m0
FL
m2
15
6
7
44
92
41
14
2
29
13
35
58
20
42
72
…
…
…
…
16ハッシュ
自由リスト
ハッシュ(1)
● デバイス番号、ブロック番号をキーとした高速な
アクセス用
● ブロック番号 mod ハッシュサイズ でリストヘッド
(番兵)を特定
m1
m6
m0
m2
15
6
7
44
92
41
14
2
29
13
35
58
20
42
72
…
…
…
…
16
ブロック92にアクセスした
い場合は 92 mod 7 = 1 な
ので、このリストを探す
ハッシュ(2)
● リスト内は線形検索。順序なし
● ふたつ以上のバッファが同じブロック内容を保
持することはできない(整合性のため)
● (補足)リストの最後は番兵にループ
m1
m6
m0
m2
15
6
7
44
92
41
14
2
29
13
35
58
20
42
72
…
…
…
…
16
このリストをたどって (線形
検索して)92に到達。存在
しなければキャッシュミス。
自由リスト(1)
● {再,新規}割当て可能なバッファのリスト
● System起動時、全バッファはここに繋がる
● 一度有効なデータ(ブロック)を保持するとハッ
シュにもつながれる(下図)
m1
m6
m0
FL
m2
15
6
7
44
92
41
14
2
29
13
35
58
20
42
72
…
…
…
…
16
自由リスト(2)
● バッファを使用中(プロセス/ディスクとの読み書
き)は自由リストから外される
● バッファの使用がおわったら自由リストの最後
尾に繋がれる
m1
m6
m0
FL
m2
15
6
7
44
92
41
14
2
29
13
35
58
20
42
72
…
…
…
…
16
使用が終わった=再利用
可能になったバッファは最
後尾に追加
自由リスト(3)
● ハッシュを検索してヒットした場合は自由リスト
の途中からとりだされる
● {新規,再}割り当ての際、先頭から取り出す
● つまり古いバッファから再利用 → LRU!
m1
m6
m0
FL
m2
15
6
7
44
92
41
14
2
29
13
35
58
20
42
72
…
…
…
…
16
キャッシュヒットの場合は
途中からはずす
キャッシュミスした場合は自由
リストの先頭を取り出して目的
のブロックに再割当て
つまりどういうことだってばよ?
バッファキャッシュはLRU(最後に参照されてから
最も時間がたったバッファを入れ替える)をハッシュ
とリストの組み合わせで実現している。
引き続き具体的なインターフェースについて解説す
る。
が、その前に・・・
注意事項(ロックについて)
● バッファを「ロックする」、という表現が多用され
るが、これは「上位または下位レイヤで使用中
のフラグをたてる」という意味。
● 「使用中」とは、バッファがユーザ空間(上位)と
の間あるいはディスク(下位)との間でコピー中で
あるということ。
注意事項(ロックについて)
● バッファは上下レイヤでのコピー中のみロックさ
れることに注意が必要。
● たとえばユーザ空間にコピーされたデータはコ
ピー元となったバッファのロックとは無関係に操
作される。
インターフェース
● getblk バッファを割り当てて取得(←重要)
● brelse バッファを自由リストに戻す
● bread ブロック読み込み
● breada ブロック先読み
● bwrite ブロック書き込み
getblk (1)
● ブロックをキーとして呼び出される
● 戻り値は当該ブロックに対応するバッファ
● まずハッシュを検索
● ロックされてなければそれをreturn
● されてる場合は解除を待ってやり直し
● ハッシュ内に見つからなければ、自由リストから
の取り出しへ
getblk (2)
● 自由リストの先頭を取り出す
● 遅延書き込みフラグが立ってなければそれを
return
● 立っていたら書き込み依頼してやりなおし
それでは擬似コードをどうぞ
Case1: ハッシュから取り出し
● ハッシュ内にバッファを見つけ、ロックされてな
かったケース
m1
m6
m0
FL
m2
15
6
7
44
92
41
14
2
29
13
35
58
20
42
72
…
…
…
…
16
ブロック番号72を取り出すとす
る。
まず 72 mod 7 ≡ 2 なので m2
リストを探す
ブロック72のバッ
ファが見つかっ
た!
Case1: ハッシュから取り出し
● バッファをロックして
● 自由リストから取り除いて
● 該当バッファをreturn
m1
m6
m0
FL
m2
15
6
7
44
92
41
14
2
29
13
35
58
20
42
72
…
…
…
…
16
ロック(状態変数に使用中のフ
ラグをたてる)して
自由リストから取り除く
Case2:自由リストから再利用
● ハッシュ内にバッファが見つからず、自由リスト
から再利用するケース
m1
m6
m0
FL
m2
15
6
7
44
92
41
14
2
29
13
35
58
20
42
72
…
…
…
…
16
ブロック番号8を取り出すとす
る。
まず 8 mod 7 ≡ 1 なので m1
リストを探す
リストを一周して
もブロック8の
バッファは見つ
からなかった
Case2:自由リストから再利用
● ハッシュに見つからないので、自由リストの先頭
を取り出して再利用する
m1
m6
m0
FL
m2
15
6
7
44
92
41
14
2
29
13
35
58
20
42
72
…
…
…
…
16
自由リストの先頭を取り出す
Case2:自由リストから再利用
● ハッシュに見つからないので、自由リストの先頭
を取り出して再利用する
m1
m6
m0
FL
m2
15
6
7
44
92
41
14
2
29
13
35
58
20
42
72
…
…
…
…
16
自由リストの先頭を取り出す
Case2:自由リストから再利用
● 遅延書き込みフラグが立っていないことを確認
(立ってたらCase3)
● ハッシュから取り除く
m1
m6
m0
FL
m2
15
8
7
44
92
41
14
2
29
13
35
58
20
42
72
…
…
…
…
16
遅延書き込みフラグなし
6 → 8用のバッファにする
Case2:自由リストから再利用
● ハッシュの新しい位置に挿入
● バッファをreturn
m1
m6
m0
FL
m2
15 8
7
44
92
41
14
2
29
13
35
58
20
42
72
…
…
…
…
16
8は m1 リストにあるべきなの
で、ここにつなぐ
Case3:遅延書き込み
● 自由リストから再利用しようとしたが、遅延書き
込みフラグが立っていたケース
● ハッシュ内にないので自由リストの先頭を取り
出す
m1
m6
m0
FL
m2
15
6
7
44
92
41
14
2
29
13
35
58
20
42
72
…
…
…
…
16
ブロック番号8を取り出すとす
る。
自由リストの先頭を取り出す
ところまでは一緒
Case3:遅延書き込み
● とりだした6のバッファには遅延書き込みフラグ
が立っていた=再利用できない
● ディスクへの書き込みを依頼してハッシュを探す
ところからやり直し
m1
m6
m0
FL
m2
15
6
7
44
92
41
14
2
29
13
35
58
20
42
72
…
…
…
…
16
遅延書き込みフラグ ON=再利
用不可。
ディスクへ書き込み依頼
Case3:遅延書き込み
● 再び自由リストの先頭から取り出したが、これも
遅延書き込みフラグが立っていた
● 見つかるまで繰り返す
m1
m6
m0
FL
m2
15
6
7
44
92
41
14
2
29
13
35
58
20
42
72
…
…
…
…
16
またハッシュにないので自由リ
スト先頭から取り出したが
また遅延書き込みフラグ
書き込み中
次はこいつ
Case3:遅延書き込み
● 遅延書き込みフラグがないバッファを見つけた
ら、Case2で見たように再利用
m1
m6
m0
FL
m2
15
6
44
92
41
14
2
29
13
35
58
20
42
72
…
…
…
…
16
ハッシュの位置更新など
書き込み中
書き込み中
8
Case3:遅延書き込み
● 書き込みが終わったバッファは自由リストの先
頭に戻される(書き込み直後だが、必要とされた
のはだいぶ前なので)
m1
m6
m0
FL
m2
15
6
44
92
41
14
2
29
13
35
58
20
42
72
…
…
…
…
16
8
自由リストの先頭に戻す
Case3:遅延書き込み(ポイント)
● ディスクの書き込みは遅いので完了を同期的に
待つより別のバッファを探したほうが速い
● それに、スリープしてしまうと目覚めたときに別
のプロセスコンテキストによりバッファがロックさ
れている可能性があり、書き込まれたバッファを
そのまま使えない
● → 結局while文をやりなおすしかない
Case4:自由リストが空
● 自由リストから再利用しようとしたが、自由リスト
にバッファがないケース
● この場合は自由リストにバッファが追加されるま
でスリープする
m1
m6
m0
FL
m2
15
6
7
44
92
41
14
2
29
13
35
58
20
42
72
…
…
…
…
16
ブロック番号8を取り出すとす
る。
自由リストの先頭を取り出そう
とするが、空だった。
Case4:自由リストが空
● このケースも目覚めたらwhile文やりなおし
● このプロセスコンテキストが目覚める前に、一緒
に目覚めた別のコンテキストが実行可能状態に
なり、バッファを同じブロックに割り当てる可能
性に対応するため
● 言い換えると、目覚めた後ハッシュを確認せず
に自由リストを使うと二重割り当てしてしまうか
ら
Case5: ハッシュから取り出し
● ハッシュ内にバッファを見つけたが、ロックされ
ていたケース
m1
m6
m0
FL
m2
15
6
7
44
92
41
14
2
29
13
35
58
20
42
72
…
…
…
…
16
ブロック番号72を取り出すとす
る。
ブロック72のバッ
ファが見つかっ
た!
でもロックされて
る
Case5: ハッシュから取り出し
● 要求ありのフラグをバッファに立てて、アンロッ
クを待ってスリープ
● 目覚めた後はwhile文をやり直し
● 理由はCase3,4と同様
m1
m6
m0
FL
m2
15
6
7
44
92
41
14
2
29
13
35
58
20
42
72
…
…
…
…
16
要求あり
インターフェース
● getblk バッファを割り当てて取得
● brelse バッファを自由リストに戻す
● bread ブロック読み込み
● breada ブロック先読み
● bwrite ブロック書き込み
brelse (1)
● ロックされたバッファを引数に呼び出される
● 戻り値はなし
● 自由リストのバッファ追加まちのプロセスを起こ
す
● 引数バッファのアンロックまちのプロセスを起こ
す
brelse (2)
● 割り込みを禁止して
● 有効なデータが入っていて、古くないバッファは
自由リストの最後に
● そうでない(IOエラーや遅延書き込み後)バッファ
は自由リストの先頭につなぐ
● 割り込み禁止を解除してバッファをアンロック
インターフェース
● getblk バッファを割り当てて取得
● brelse バッファを自由リストに戻す
● bread ブロック読み込み
● breada ブロック先読み
● bwrite ブロック書き込み
bread
● ブロック番号を引数にして、データを読み込んだ
バッファを返す
● バッファの取得にはgetblk()を使用
● バッファに有効なデータが乗っていればそのま
まもどし、乗ってなければディスクから読み込ん
で戻す
● シーケンシャルに読み込む場合は次のブロック
をバッファに載せたい→breada
インターフェース
● getblk バッファを割り当てて取得
● brelse バッファを自由リストに戻す
● bread ブロック読み込み
● breada ブロック先読み
● bwrite ブロック書き込み
breada
● ブロック番号を引数にして、データを読み込んだ
バッファを返す(breadと同じ)
● ただし、引数のブロック番号の次のブロックにも
非同期で読み込みをディスクに依頼する
● 詳細は擬似コードで
インターフェース
● getblk バッファを割り当てて取得
● brelse バッファを自由リストに戻す
● bread ブロック読み込み
● breada ブロック先読み
● bwrite ブロック書き込み
bwrite
● バッファを引数にして、そのバッファのデータを
ディスクに書き込む
● 同期書き込みの場合はバッファのアンロック
brelse()まで実施
● 遅延書き込みの場合は「内容が古いフラグ」を
たてて、割り込みコンテキストからbrelse()でア
ンロックされた場合に自由リストの先頭に追加さ
れるようにする
まとめ&感想
● バッファキャッシュは最近アクセスしたものを
キャッシュに載せておく(LRU)
● 自由リストの順番が「長く使ってない順」そのも
の
● ハッシュと二重リンクリストの性質をうまく使って
いる
● コンテキストスイッチと割り込み怖い

More Related Content

What's hot

BitVisor Summit 7「8. ベアメタルクラウドにおけるハードウェア保護に関する研究 & Advent Calendar について」
BitVisor Summit 7「8. ベアメタルクラウドにおけるハードウェア保護に関する研究 & Advent Calendar について」BitVisor Summit 7「8. ベアメタルクラウドにおけるハードウェア保護に関する研究 & Advent Calendar について」
BitVisor Summit 7「8. ベアメタルクラウドにおけるハードウェア保護に関する研究 & Advent Calendar について」BitVisor
 
10分で分かるLinuxブロックレイヤ
10分で分かるLinuxブロックレイヤ10分で分かるLinuxブロックレイヤ
10分で分かるLinuxブロックレイヤTakashi Hoshino
 
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08Nobuto Murata
 
“bcache”を使ってSSDの速さと HDDの大容量のいいとこどり 2015-12-12
“bcache”を使ってSSDの速さと HDDの大容量のいいとこどり 2015-12-12“bcache”を使ってSSDの速さと HDDの大容量のいいとこどり 2015-12-12
“bcache”を使ってSSDの速さと HDDの大容量のいいとこどり 2015-12-12Nobuto Murata
 
Btrfsの基礎 part1 機能編
Btrfsの基礎 part1 機能編Btrfsの基礎 part1 機能編
Btrfsの基礎 part1 機能編fj_staoru_takeuchi
 
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチプロセスとコンテキストスイッチ
プロセスとコンテキストスイッチKazuki Onishi
 
あるmmapの話
あるmmapの話あるmmapの話
あるmmapの話nullnilaki
 
Kernel vm study_2_xv6_scheduler_part1_revised
Kernel vm study_2_xv6_scheduler_part1_revisedKernel vm study_2_xv6_scheduler_part1_revised
Kernel vm study_2_xv6_scheduler_part1_revisedToshiaki Nozawa
 
Programming under capability mode
Programming under capability modeProgramming under capability mode
Programming under capability modeYuichiro Naito
 
GPGPUによるパーソナルスーパーコンピュータの可能性
GPGPUによるパーソナルスーパーコンピュータの可能性GPGPUによるパーソナルスーパーコンピュータの可能性
GPGPUによるパーソナルスーパーコンピュータの可能性Yusaku Watanabe
 
Lxc cf201207-presen
Lxc cf201207-presenLxc cf201207-presen
Lxc cf201207-presenKouhei Maeda
 
仮想スイッチをフェイルオーバーさせてみる予定
仮想スイッチをフェイルオーバーさせてみる予定仮想スイッチをフェイルオーバーさせてみる予定
仮想スイッチをフェイルオーバーさせてみる予定Takashi Naito
 
Cocoa勉強会#62-新しい通信クラス群NSURLSessionを使ってみる
Cocoa勉強会#62-新しい通信クラス群NSURLSessionを使ってみるCocoa勉強会#62-新しい通信クラス群NSURLSessionを使ってみる
Cocoa勉強会#62-新しい通信クラス群NSURLSessionを使ってみるMasayuki Nii
 

What's hot (18)

BitVisor Summit 7「8. ベアメタルクラウドにおけるハードウェア保護に関する研究 & Advent Calendar について」
BitVisor Summit 7「8. ベアメタルクラウドにおけるハードウェア保護に関する研究 & Advent Calendar について」BitVisor Summit 7「8. ベアメタルクラウドにおけるハードウェア保護に関する研究 & Advent Calendar について」
BitVisor Summit 7「8. ベアメタルクラウドにおけるハードウェア保護に関する研究 & Advent Calendar について」
 
10分で分かるLinuxブロックレイヤ
10分で分かるLinuxブロックレイヤ10分で分かるLinuxブロックレイヤ
10分で分かるLinuxブロックレイヤ
 
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
Ubuntuとコンテナ技術 What is LXD? and Why? 2015-12-08
 
“bcache”を使ってSSDの速さと HDDの大容量のいいとこどり 2015-12-12
“bcache”を使ってSSDの速さと HDDの大容量のいいとこどり 2015-12-12“bcache”を使ってSSDの速さと HDDの大容量のいいとこどり 2015-12-12
“bcache”を使ってSSDの速さと HDDの大容量のいいとこどり 2015-12-12
 
KVM+cgroup
KVM+cgroupKVM+cgroup
KVM+cgroup
 
UNIXアレコレ調べたい3
UNIXアレコレ調べたい3UNIXアレコレ調べたい3
UNIXアレコレ調べたい3
 
Btrfsの基礎 part1 機能編
Btrfsの基礎 part1 機能編Btrfsの基礎 part1 機能編
Btrfsの基礎 part1 機能編
 
CUDAメモ
CUDAメモCUDAメモ
CUDAメモ
 
Isca13 study
Isca13 studyIsca13 study
Isca13 study
 
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチプロセスとコンテキストスイッチ
プロセスとコンテキストスイッチ
 
あるmmapの話
あるmmapの話あるmmapの話
あるmmapの話
 
Slide
SlideSlide
Slide
 
Kernel vm study_2_xv6_scheduler_part1_revised
Kernel vm study_2_xv6_scheduler_part1_revisedKernel vm study_2_xv6_scheduler_part1_revised
Kernel vm study_2_xv6_scheduler_part1_revised
 
Programming under capability mode
Programming under capability modeProgramming under capability mode
Programming under capability mode
 
GPGPUによるパーソナルスーパーコンピュータの可能性
GPGPUによるパーソナルスーパーコンピュータの可能性GPGPUによるパーソナルスーパーコンピュータの可能性
GPGPUによるパーソナルスーパーコンピュータの可能性
 
Lxc cf201207-presen
Lxc cf201207-presenLxc cf201207-presen
Lxc cf201207-presen
 
仮想スイッチをフェイルオーバーさせてみる予定
仮想スイッチをフェイルオーバーさせてみる予定仮想スイッチをフェイルオーバーさせてみる予定
仮想スイッチをフェイルオーバーさせてみる予定
 
Cocoa勉強会#62-新しい通信クラス群NSURLSessionを使ってみる
Cocoa勉強会#62-新しい通信クラス群NSURLSessionを使ってみるCocoa勉強会#62-新しい通信クラス群NSURLSessionを使ってみる
Cocoa勉強会#62-新しい通信クラス群NSURLSessionを使ってみる
 

Viewers also liked

百万件くらいのデータの扱い方
百万件くらいのデータの扱い方百万件くらいのデータの扱い方
百万件くらいのデータの扱い方Masafumi Yokoyama
 
詳解UNIXプログラミング 第4章 ファイルとディレクトリ
詳解UNIXプログラミング 第4章 ファイルとディレクトリ詳解UNIXプログラミング 第4章 ファイルとディレクトリ
詳解UNIXプログラミング 第4章 ファイルとディレクトリTakaya Kotohata
 
Google borg と コンテナベース分散システムデザインパターン
Google borg と コンテナベース分散システムデザインパターンGoogle borg と コンテナベース分散システムデザインパターン
Google borg と コンテナベース分散システムデザインパターンktateish
 
Editor縮小のススメ
Editor縮小のススメEditor縮小のススメ
Editor縮小のススメNobukazu Hanada
 
エンジニアにMacを薦める理由
エンジニアにMacを薦める理由エンジニアにMacを薦める理由
エンジニアにMacを薦める理由Hiroyuki Kusu
 
GPUによる多倍長整数乗算の高速化手法の提案
GPUによる多倍長整数乗算の高速化手法の提案GPUによる多倍長整数乗算の高速化手法の提案
GPUによる多倍長整数乗算の高速化手法の提案Koji Kitano
 
私がお世話になった技術書たち
私がお世話になった技術書たち私がお世話になった技術書たち
私がお世話になった技術書たち法林浩之
 
SIMDで整数除算
SIMDで整数除算SIMDで整数除算
SIMDで整数除算shobomaru
 
UNIXことはじめ
UNIXことはじめUNIXことはじめ
UNIXことはじめTomoya Miwa
 
Unixコマンド入門
Unixコマンド入門Unixコマンド入門
Unixコマンド入門Satosi Sakai
 
SSHの便利な使い方〜マイナーな小技編〜
SSHの便利な使い方〜マイナーな小技編〜SSHの便利な使い方〜マイナーな小技編〜
SSHの便利な使い方〜マイナーな小技編〜ktateish
 
Xeonphiハッカソンでexpを作ってみた
Xeonphiハッカソンでexpを作ってみたXeonphiハッカソンでexpを作ってみた
Xeonphiハッカソンでexpを作ってみたMITSUNARI Shigeo
 
Unix 基礎
Unix 基礎Unix 基礎
Unix 基礎Sho A
 
図解gitworkflows(7)
図解gitworkflows(7)図解gitworkflows(7)
図解gitworkflows(7)ktateish
 
Gitの便利ワザ
Gitの便利ワザGitの便利ワザ
Gitの便利ワザktateish
 
Unixカーネルの設計 7 プロセスの制御
Unixカーネルの設計 7 プロセスの制御Unixカーネルの設計 7 プロセスの制御
Unixカーネルの設計 7 プロセスの制御Norito Agetsuma
 
TO LOVE IN'~人生のパートナーを見つける旅~
TO LOVE IN'~人生のパートナーを見つける旅~TO LOVE IN'~人生のパートナーを見つける旅~
TO LOVE IN'~人生のパートナーを見つける旅~Shuhei Hinoshita
 

Viewers also liked (20)

百万件くらいのデータの扱い方
百万件くらいのデータの扱い方百万件くらいのデータの扱い方
百万件くらいのデータの扱い方
 
詳解UNIXプログラミング 第4章 ファイルとディレクトリ
詳解UNIXプログラミング 第4章 ファイルとディレクトリ詳解UNIXプログラミング 第4章 ファイルとディレクトリ
詳解UNIXプログラミング 第4章 ファイルとディレクトリ
 
Google borg と コンテナベース分散システムデザインパターン
Google borg と コンテナベース分散システムデザインパターンGoogle borg と コンテナベース分散システムデザインパターン
Google borg と コンテナベース分散システムデザインパターン
 
Editor縮小のススメ
Editor縮小のススメEditor縮小のススメ
Editor縮小のススメ
 
エンジニアにMacを薦める理由
エンジニアにMacを薦める理由エンジニアにMacを薦める理由
エンジニアにMacを薦める理由
 
GPUによる多倍長整数乗算の高速化手法の提案
GPUによる多倍長整数乗算の高速化手法の提案GPUによる多倍長整数乗算の高速化手法の提案
GPUによる多倍長整数乗算の高速化手法の提案
 
私がお世話になった技術書たち
私がお世話になった技術書たち私がお世話になった技術書たち
私がお世話になった技術書たち
 
SIMDで整数除算
SIMDで整数除算SIMDで整数除算
SIMDで整数除算
 
UNIXことはじめ
UNIXことはじめUNIXことはじめ
UNIXことはじめ
 
Unixコマンド入門
Unixコマンド入門Unixコマンド入門
Unixコマンド入門
 
SSHの便利な使い方〜マイナーな小技編〜
SSHの便利な使い方〜マイナーな小技編〜SSHの便利な使い方〜マイナーな小技編〜
SSHの便利な使い方〜マイナーな小技編〜
 
Xeonphiハッカソンでexpを作ってみた
Xeonphiハッカソンでexpを作ってみたXeonphiハッカソンでexpを作ってみた
Xeonphiハッカソンでexpを作ってみた
 
Boost.SIMD
Boost.SIMDBoost.SIMD
Boost.SIMD
 
PFI Seminar 2010/02/18
PFI Seminar 2010/02/18PFI Seminar 2010/02/18
PFI Seminar 2010/02/18
 
Unix 基礎
Unix 基礎Unix 基礎
Unix 基礎
 
図解gitworkflows(7)
図解gitworkflows(7)図解gitworkflows(7)
図解gitworkflows(7)
 
Gitの便利ワザ
Gitの便利ワザGitの便利ワザ
Gitの便利ワザ
 
Unixカーネルの設計 7 プロセスの制御
Unixカーネルの設計 7 プロセスの制御Unixカーネルの設計 7 プロセスの制御
Unixカーネルの設計 7 プロセスの制御
 
バージョン管理入門
バージョン管理入門バージョン管理入門
バージョン管理入門
 
TO LOVE IN'~人生のパートナーを見つける旅~
TO LOVE IN'~人生のパートナーを見つける旅~TO LOVE IN'~人生のパートナーを見つける旅~
TO LOVE IN'~人生のパートナーを見つける旅~
 

Similar to 【幕張読書会】Unixカーネルの設計 3(バッファキャッシュ)

本当にわかる Spectre と Meltdown
本当にわかる Spectre と Meltdown本当にわかる Spectre と Meltdown
本当にわかる Spectre と MeltdownHirotaka Kawata
 
0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきこと0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきことmao999
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努Insight Technology, Inc.
 
先進的計算基盤システムシンポジウム SACSIS2009 Slide Suzaki
先進的計算基盤システムシンポジウム SACSIS2009 Slide Suzaki先進的計算基盤システムシンポジウム SACSIS2009 Slide Suzaki
先進的計算基盤システムシンポジウム SACSIS2009 Slide SuzakiKuniyasu Suzaki
 
第33回 U-20プログラミング・コンテスト 「USB Lock」
第33回 U-20プログラミング・コンテスト 「USB Lock」第33回 U-20プログラミング・コンテスト 「USB Lock」
第33回 U-20プログラミング・コンテスト 「USB Lock」kazuhirokazu
 
社内サーバインフラ勉強会(DB)
社内サーバインフラ勉強会(DB)社内サーバインフラ勉強会(DB)
社内サーバインフラ勉強会(DB)Masahiro NAKAYAMA
 
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめMakiko Konoshima
 
はじめてのDockerパーフェクトガイド(2017年版)
はじめてのDockerパーフェクトガイド(2017年版)はじめてのDockerパーフェクトガイド(2017年版)
はじめてのDockerパーフェクトガイド(2017年版)Hiroshi Hayakawa
 
cassandra調査レポート
cassandra調査レポートcassandra調査レポート
cassandra調査レポートAkihiro Kuwano
 
2章 Linuxカーネル - メモリ管理1
2章 Linuxカーネル - メモリ管理12章 Linuxカーネル - メモリ管理1
2章 Linuxカーネル - メモリ管理1mao999
 
2021 03-09-ac ri-nngen
2021 03-09-ac ri-nngen2021 03-09-ac ri-nngen
2021 03-09-ac ri-nngen直久 住川
 
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステムオープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステムShinya Takamaeda-Y
 
オペレーティングシステム 第1回-公開用
オペレーティングシステム 第1回-公開用オペレーティングシステム 第1回-公開用
オペレーティングシステム 第1回-公開用Ruo Ando
 
OSやアプリを問わず装着するだけで重要データを防御するセキュリティバリアデバイス by 戸田 賢二
OSやアプリを問わず装着するだけで重要データを防御するセキュリティバリアデバイス by 戸田 賢二OSやアプリを問わず装着するだけで重要データを防御するセキュリティバリアデバイス by 戸田 賢二
OSやアプリを問わず装着するだけで重要データを防御するセキュリティバリアデバイス by 戸田 賢二CODE BLUE
 
PostgreSQL運用管理入門
PostgreSQL運用管理入門PostgreSQL運用管理入門
PostgreSQL運用管理入門Yoshiyuki Asaba
 
Scalable Cooperative File Caching with RDMA-Based Directory Management
Scalable Cooperative File Caching with RDMA-Based Directory ManagementScalable Cooperative File Caching with RDMA-Based Directory Management
Scalable Cooperative File Caching with RDMA-Based Directory ManagementJunya Arai
 
Tremaで試すFirewall
Tremaで試すFirewallTremaで試すFirewall
Tremaで試すFirewallM Hagiwara
 
カーネルモジュールでキーロガー
カーネルモジュールでキーロガーカーネルモジュールでキーロガー
カーネルモジュールでキーロガーnemumu
 

Similar to 【幕張読書会】Unixカーネルの設計 3(バッファキャッシュ) (20)

本当にわかる Spectre と Meltdown
本当にわかる Spectre と Meltdown本当にわかる Spectre と Meltdown
本当にわかる Spectre と Meltdown
 
0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきこと0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきこと
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努
 
先進的計算基盤システムシンポジウム SACSIS2009 Slide Suzaki
先進的計算基盤システムシンポジウム SACSIS2009 Slide Suzaki先進的計算基盤システムシンポジウム SACSIS2009 Slide Suzaki
先進的計算基盤システムシンポジウム SACSIS2009 Slide Suzaki
 
第33回 U-20プログラミング・コンテスト 「USB Lock」
第33回 U-20プログラミング・コンテスト 「USB Lock」第33回 U-20プログラミング・コンテスト 「USB Lock」
第33回 U-20プログラミング・コンテスト 「USB Lock」
 
社内サーバインフラ勉強会(DB)
社内サーバインフラ勉強会(DB)社内サーバインフラ勉強会(DB)
社内サーバインフラ勉強会(DB)
 
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ
 
はじめてのDockerパーフェクトガイド(2017年版)
はじめてのDockerパーフェクトガイド(2017年版)はじめてのDockerパーフェクトガイド(2017年版)
はじめてのDockerパーフェクトガイド(2017年版)
 
cassandra調査レポート
cassandra調査レポートcassandra調査レポート
cassandra調査レポート
 
2章 Linuxカーネル - メモリ管理1
2章 Linuxカーネル - メモリ管理12章 Linuxカーネル - メモリ管理1
2章 Linuxカーネル - メモリ管理1
 
2021 03-09-ac ri-nngen
2021 03-09-ac ri-nngen2021 03-09-ac ri-nngen
2021 03-09-ac ri-nngen
 
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステムオープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム
 
オペレーティングシステム 第1回-公開用
オペレーティングシステム 第1回-公開用オペレーティングシステム 第1回-公開用
オペレーティングシステム 第1回-公開用
 
OSやアプリを問わず装着するだけで重要データを防御するセキュリティバリアデバイス by 戸田 賢二
OSやアプリを問わず装着するだけで重要データを防御するセキュリティバリアデバイス by 戸田 賢二OSやアプリを問わず装着するだけで重要データを防御するセキュリティバリアデバイス by 戸田 賢二
OSやアプリを問わず装着するだけで重要データを防御するセキュリティバリアデバイス by 戸田 賢二
 
いまさら聞けないPostgreSQL運用管理
いまさら聞けないPostgreSQL運用管理いまさら聞けないPostgreSQL運用管理
いまさら聞けないPostgreSQL運用管理
 
PostgreSQL運用管理入門
PostgreSQL運用管理入門PostgreSQL運用管理入門
PostgreSQL運用管理入門
 
Scalable Cooperative File Caching with RDMA-Based Directory Management
Scalable Cooperative File Caching with RDMA-Based Directory ManagementScalable Cooperative File Caching with RDMA-Based Directory Management
Scalable Cooperative File Caching with RDMA-Based Directory Management
 
Tremaで試すFirewall
Tremaで試すFirewallTremaで試すFirewall
Tremaで試すFirewall
 
Linux Namespaces
Linux NamespacesLinux Namespaces
Linux Namespaces
 
カーネルモジュールでキーロガー
カーネルモジュールでキーロガーカーネルモジュールでキーロガー
カーネルモジュールでキーロガー
 

【幕張読書会】Unixカーネルの設計 3(バッファキャッシュ)