TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない...
Transcript of TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない...
![Page 1: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/1.jpg)
ゆるかわLinux
![Page 2: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/2.jpg)
今日話したいこと。
![Page 3: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/3.jpg)
今日話したいこと
「LL で Web アプリ作るよ!」っていう Web エンジニア
LL でコードさえ書ければOK!
という雰囲気でもない...
![Page 4: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/4.jpg)
今日話したいこと
知っておきたいこと
* サーバのこと* ネットワークのこと* データベースのこと* フロント、デザインのこと
...いろいろ
![Page 5: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/5.jpg)
今日話したいこと
PHP × Web アプリケーションよくある開発環境
L AMP とか L APP とか...
![Page 6: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/6.jpg)
今日話したいこと
Linux についても知っておきたい
Linux とはどんなものか?
裏でどんなことしてる?
![Page 7: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/7.jpg)
今日話したいこと
Linux...
Linux カーネル?
![Page 8: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/8.jpg)
ということで、今日は
Linux カーネルのお仕事を
中心に話したいと思います。
![Page 9: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/9.jpg)
カーネルのバージョンは
2.6.x ですごめんなさい
![Page 10: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/10.jpg)
Linux カーネルって?
OSの中で核となるプログラム。アプリケーションが動作するための基本環境を提供。
![Page 11: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/11.jpg)
Linux カーネルがやってること。
* ハードウェアの制御* プロセス管理* メモリ管理* ファイルシステム * ネットワーク ...など
Linux カーネルって?
![Page 12: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/12.jpg)
まずは基本機能について。
![Page 13: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/13.jpg)
Linux カーネル内では様々な処理が非同期に動作する。
この動作を制御するため、Linux カーネルは次のような機能を持っている。
カーネルの基本機能
![Page 14: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/14.jpg)
* システムコール* プロセススケジューラ* 割り込み* 同期と排他* 時計
カーネルの基本機能
![Page 15: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/15.jpg)
システムコールとはプロセスがカーネルに対して要求を行うためのインタフェース。
システムコール
![Page 16: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/16.jpg)
カーネルの機能(関数)はプロセスから直接呼び出せない。システムコールを通して呼び出す。
システムコール
![Page 17: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/17.jpg)
カーネルの機能を呼び出す際にシステムコールを通すことで、ほかのプロセスやカーネル本体の動作が不安定にならないよう保護できる。
システムコール
![Page 18: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/18.jpg)
たくさんのプロセスが同時に走る。処理を行うCPUの数は限られている。
カーネルはプロセスの中からもっとも動作させるにふさわしいプロセスに実行権限を与える。
プロセススケジューラ
![Page 19: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/19.jpg)
ハードウェアやネットワークからのシグナルを受け取るしくみ。
割り込み
![Page 20: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/20.jpg)
たくさんのプロセスが同時に走る。なので、共有しているメモリの内容が書き換えられてしまう可能性が...
排他制御が必要!
シングルコアでもマルチコアでも!
同期と排他
![Page 21: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/21.jpg)
時計。
時計
![Page 22: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/22.jpg)
ファイルシステムは OS の中心機能。
ファイルシステムは記憶装置上のデータに対して「ファイル」という形式を通して一貫したアクセス手順(開く、読む、書く、閉じる)を提供する。
ファイルシステム
![Page 23: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/23.jpg)
ファイルシステムのおかげで、カーネルはファイル内のデータ型を意識する必要がない。そんなのは利用するアプリケーション側が意識すればいいよ!
ファイルシステム
![Page 24: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/24.jpg)
プロセス管理について。
![Page 25: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/25.jpg)
そもそもプロセスって?
プログラムが動いている状態のこと。OSが管理する処理の単位。( OS によってはタスクと呼ばれる )
![Page 26: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/26.jpg)
そもそもプロセスって?
Linux だと ps コマンドでプロセスの状態を確認できる。
* ps … process status
pid(各プロセスが持つ固有のID)とかプロセスの名前とか…
![Page 27: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/27.jpg)
そもそもプロセスって?
それぞれのプロセスは固有のコンテキストを持つ。
...コンテキスト?
![Page 28: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/28.jpg)
そもそもプロセスって?
コンテキストとは...
* 一連の処理の流れ* 動作するために必要なプロセス空間* 動作するためのレジスタ値
![Page 29: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/29.jpg)
プロセスは fork システムコールを呼ぶことで生成される。
...誰がプロセスを生成(fork)する?
プロセスの生成
![Page 30: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/30.jpg)
プロセスには親子関係がある。
プロセスを生成したときに、生成した側が親になり、生成された側が子になる。
プロセスの生成
![Page 31: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/31.jpg)
プロセスは複数の子プロセスを持つことができる。また、その子がさらに子を持つことができる。
プロセスの生成
![Page 32: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/32.jpg)
Linux プロセスはfork システムコールを発行したプロセスの子として生成される。このとき親プロセスが保有する情報は子プロセスにそっくりコピーされる。
プロセスの一生
![Page 33: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/33.jpg)
親プロセスの fork システムコールにより発行された子プロセスは...
* exec システムコールで目的の処理を実行開始。
* 処理終了時に exit システムコールを発行する。
プロセスの一生
![Page 34: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/34.jpg)
子プロセスが exit したとき...
* 親プロセスは wait システムコールで子プロセスの終了を待ち合わせることができる。
* 親プロセスで wait システムコールが発行されない場合、子プロセスは保留状態(ZOMBIE)となる。
プロセスの一生
![Page 35: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/35.jpg)
プロセスの一生
(1) 親プロセスが wait したとき(2) 親プロセスが wait しなかったとき 親プロセスが先に死んだとき
![Page 36: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/36.jpg)
特殊なプロセス
init プロセス
プロセス ID が 1 のプロセス。すべてのプロセスの先祖。親プロセスを失った子プロセスの親にもなる。
![Page 37: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/37.jpg)
特殊なプロセス
idle プロセス
実行できるプロセスが何もないときに実行されるプロセス。プロセス ID が 0 で CPU の分だけ生成される。ps 等で見ることはできない。
![Page 38: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/38.jpg)
特殊なプロセス
カーネルスレッド
カーネルだけで動作してユーザーコードを実行しない特別なプロセス。これも init プロセスの子プロセス。
![Page 39: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/39.jpg)
たくさんのプロセスが同時に走る。処理を行うCPUの数は限られている。
カーネルはプロセスの中からもっとも動作させるにふさわしいプロセスに実行権限を与える。
プロセス切り替え処理
![Page 40: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/40.jpg)
プロセスディスパッチャ
プロセス切り替えを行う機能。
プロセス切り替え処理
![Page 41: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/41.jpg)
プロセススケジューラ
実行可能なプロセスを監視し、どのプロセスに実行権を与えるか判断して、プロセスディスパッチャに切り替え要求を出す機能。
プロセス切り替え処理
![Page 42: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/42.jpg)
※イメージ図
プロセス切り替え処理
実行待ちプロセス
待機状態プロセス
実行可能プロセス
![Page 43: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/43.jpg)
* ユーザ側から実行されるプロセス* ハードウェア、ネットワーク からの割り込み
割り込みの方が優先度高い!
プロセス切り替え処理
![Page 44: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/44.jpg)
メモリ管理について。
![Page 45: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/45.jpg)
ふたつのメモリ管理
Linux カーネルは2種類のメモリ管理を行う。
* 実メモリ管理* 仮想記憶
![Page 46: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/46.jpg)
ふたつのメモリ管理
仮想記憶は高価で容量が少ない実メモリを効率よく管理できるよう、もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が大きくなってきたので、この辺のメモリ管理機能も変わる可能性があるとかないとか。
![Page 47: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/47.jpg)
実メモリ管理
RAMチップ内のメモリ領域(実メモリ)を管理すること。
![Page 48: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/48.jpg)
実メモリ管理
Linux カーネルは実メモリを「ページ」という単位で管理する。ページは仮想メモリを利用したときにCPUがサポートするメモリ管理の最小単位。
![Page 49: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/49.jpg)
仮想記憶
アプリケーション(プロセス)から参照するメモリアドレスは実メモリのアドレスではなく、仮想的な領域のアドレスとなる。
![Page 50: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/50.jpg)
仮想記憶
物理的に分散したページを集めて仮想的に連続したアドレス空間を作るのもカーネルのしごと。
![Page 51: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/51.jpg)
仮想記憶
(1) プロセスが「メモリほしい!」と 要求する。(2) カーネルがメモリに空いてる アドレスを確認する。(3) メモリが空いてるアドレスを返す。(4) プロセスにアドレスを返す。
![Page 52: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/52.jpg)
仮想記憶
※イメージです
![Page 53: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/53.jpg)
仮想記憶
アドレス空間はプロセスごとに割りつけられるので、各プロセスは自分のアドレス空間を自由に利用することができる。
![Page 54: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/54.jpg)
仮想記憶
アプリケーション側で意識しなくちゃいけないことが減る。
* ほかのプロセスとメモリが競合しないか、とか
* メモリのアドレスがどこから始まるのか、とか
![Page 55: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/55.jpg)
スワップ
最近アクセスされた仮想ページのみを実メモリに置いておき、ほかは2次記憶装置に退避しておくことで、実際に搭載されている実メモリよりも大きなメモリを使用しているように見せることができる。
![Page 56: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/56.jpg)
スワップ
これがスワップ。
![Page 57: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/57.jpg)
スワップ
とは言っても2次記憶装置。メモリに比べると速度は遅い。あまり発生させたくない。
スワップ必要なの?
![Page 58: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/58.jpg)
ある日のカーネルさん。
![Page 59: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/59.jpg)
カーネルさんの仕事
![Page 60: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/60.jpg)
カーネルさんの仕事
![Page 61: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/61.jpg)
カーネルさんの仕事
![Page 62: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/62.jpg)
カーネルさんの仕事
_人人人人人人人人人_ > 突然のOOM Killer <  ̄^Y^Y^Y^Y^Y^Y^Y^ ̄
![Page 63: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/63.jpg)
Out of Memory Killer
Linux カーネルにはメモリが確保できなくなったとき、無作為に選んだプロセスを殺す素敵な機能がある。
![Page 64: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/64.jpg)
Out of Memory Killer
Malloc で実メモリ+スワップよりも多くメモリ確保できる
↓実際メモリを確保しようとして失敗
↓_人人人人人人人人人人人人人人人人人人人_> OOM Killer or カーネルパニック < ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
![Page 65: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/65.jpg)
Out of Memory Killer
大事なプロセスを殺されたり、カーネルパニックで全滅するよりスワップした方がましなこともありますよね。
![Page 66: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/66.jpg)
Out of Memory Killer
大事なプロセスは殺さないよう設定可能だったりもするけど、やっぱりチューニング大事!
* Apache の Max Clients とか* MySQL の buffer_pool_size とか
![Page 67: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/67.jpg)
で、これ結局何の役に立つの?
![Page 68: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/68.jpg)
役立ちそうなこと
きっとたぶんいろいろある!
* パフォーマンスを意識した Web アプリケーションづくり* パフォーマンスチューニング* トラブル対応* ミドルウェア選定
![Page 69: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/69.jpg)
役立ちそうなこと
たとえば Web サーバを選ぶとき...
* apache? nginx?* prefork? worker?
「要件に向いているのはどれか」「なぜそれを選ぶのか」選ぶ理由はパフォーマンスだけじゃないけど...
![Page 70: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/70.jpg)
参考書籍など。
![Page 71: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/71.jpg)
Linux のしくみ的なところ
Linuxカーネル解読室高橋浩和・小田逸郎・山幡為佐久
/ソフトバンククリエイティブ
プロのためのLinuxシステム構築・運用技術中井悦司/技術評論社
![Page 72: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/72.jpg)
ソースコード読みたい人向け
Linuxカーネル解析入門[増補版]平田豊/工学社
デーモン君のソース探検BSDのソースコードを探る冒険者たちのための手引き書氷山素子/アスキー
![Page 73: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/73.jpg)
もっと詳しく知りたい
がっつり詳しく仕様を知りたい人には「詳解 Linuxカーネル」がよさそう。
安心のオライリー。
![Page 74: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/74.jpg)
まとめ。
![Page 75: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/75.jpg)
Linux もかわいいけど
FreeBSD もかわいいよ!
![Page 76: TCP/IP と HTTP...ふたつのメモリ管理 仮想記憶は高価で容量が少ない 実メモリを効率よく管理できるよう、 もともとUNIXで実装されていた手法。しかし最近は実メモリも容量が](https://reader034.fdocument.pub/reader034/viewer/2022042402/5f135344136de43d3467e172/html5/thumbnails/76.jpg)
ありがとうございました。