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