Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Linuxカーネル超入門

6,756 views

Published on

第2回走る?それともITトークする会の資料です。

  • Be the first to comment

Linuxカーネル超入門

  1. 1. 第二回ITトークの会 お題:Linux カーネル 超入門 ~mori家のVIERAはなぜ遅い~ mori
  2. 2. お品書き <ul><li>目的
  3. 3. Linuxカーネルとは
  4. 4. どこで利用されているの?
  5. 5. カーネルの役割 </li><ul><li>(主にスケジューリングにスコープ) </li></ul><li>ソースコード
  6. 6. 参考文献 </li></ul>
  7. 7. 目的 <ul>① Linuxカーネルとは何かを超簡単に理解する ② 現在のLinuxの活躍とその関わりを通じ 今後、Linuxは飛躍的にデジタル家電等に普及するであろうことを理解する [IT トーク会ということで、フランクに進めますので 質問・疑問点・わからない言葉などあれば随時どうぞ! ] </ul>
  8. 8. Linuxカーネルとは <ul><li>リーナスさんがスクラッチから開発 </li><ul><li>UNIX と似ているように感じるが中身は違う </li></ul><li>オープンソース
  9. 9. アプリケーションが動作するための基本環境を提供
  10. 10. カーネル全体が1つのプログラムで実装
  11. 11. (モノシリックカーネル) </li></ul>
  12. 12. どこで利用されているの? <ul><li>パソコン
  13. 13. デジカメ
  14. 14. 薄型テレビ/HDDレコーダ </li><ul><li>mori 家の VIERA 。 DIGA 。
  15. 15. VIERA: 多分カーネルが古くリアルタイム性い( 2.4 か?) </li><ul><li>⇒ リモコンの効きが悪く感じる </li></ul><li>DIGA: 多分カーネル新しい( 2.6 か?) </li><ul><li>⇒ リモコンの効きがよい。 </li></ul></ul><li>携帯電話 </li><ul><li>mori 所持 VIERA 携帯。
  16. 16. やはり。ボタンを押しての反応が若干遅い。 </li></ul></ul>
  17. 17. Linuxカーネルの役割 <ul>この中にカーネルの役割のものがあります。 ① プロセススケジューリング ② 割り込み ③ 遅延処理 ④ 時計 ⑤ システムコール ⑥ 同期と排他 ⑦ プロセス管理 ⑧ シグナル処理 ⑨ メモリ管理 ⑩ 仮想ファイルシステム </ul>
  18. 18. Linuxカーネルの役割 ①プロセススケジューリング <ul><li>マルチタスクの仕組みを提供
  19. 19. 複数のプロセスを同時に実行可能
  20. 20. 【例】 Emacs を動かしつつ、裏でコンパイルする。
  21. 21. プロセス切り替え
  22. 22. 最も動作させるのにふさわしいプロセスに実行権を与える
  23. 23. 【例】複合機パネルで、ボタンを押したらコピーを始めた。 </li></ul>
  24. 24. Linuxカーネルの役割 ②割り込み <ul><li>ハードウェアから
  25. 25. Linuxカーネル機能を呼び出す
  26. 26. 【例】 </li><ul><ul><li>マウスをクリックした。
  27. 27. イーサネットにデータがきた。
  28. 28. 画処理 ASIC で DMA が完了した。 </li></ul></ul><li>注意点:ブロックできない </li></ul>
  29. 29. Linuxカーネルの役割 ③遅延処理 <ul><li>割り込み処理の遅延
  30. 30. ハードウェア割り込みと連携し、効率的に動作する
  31. 31. 【例】イーサネットにデータがきた。 </li><ul><ul><li>割り込み:イーサネットドライバ処理
  32. 32. (最低限のデータのみコピる)
  33. 33. 遅延処理: TCP/IP プロトコル処理
  34. 34. ⇒ H/W 割り込みはうごける </li></ul></ul></ul>
  35. 35. Linuxカーネルの役割 ④時計 <ul><li>時刻を正確に刻む
  36. 36. 1970 年 1 月 1 日 0 時からの経過時間を記録
  37. 37. CPU のクロック数、 RTC とかを駆使
  38. 38. 一定時間後に指定した処理を行う
  39. 39. 登録した一定時間後にコールバックされるハンドラを登録するための汎用的な仕組みを備えている。 </li></ul>
  40. 40. Linuxカーネルの役割 ⑤システムコール <ul><li>プロセスがカーネルに明示的にサービスを要求するインターフェース
  41. 41. リソースを保護
  42. 42. ユーザ空間とカーネル空間
  43. 43. ユーザ空間:カーネル空間に直接アクセスできない
  44. 44. カーネル空間:全てにアクセスできる
  45. 45. ⇒ カーネル空間は信頼性の高いコードである必要がある </li></ul>
  46. 46. Linuxカーネルの役割 ⑥同期と排他 <ul><li>プロセスの排他 </li><ul><li>セマフォ、プリエンプション禁止
  47. 47. 【例】マルチスレッド間の外部変数の排他 </li></ul><li>割り込みコンテキストの排他 </li><ul><li>割り込み禁止
  48. 48. 【例】割り込みハンドラとの変数の排他 </li></ul><li>マルチプロセッサ環境での排他 </li><ul><li>スピンロック
  49. 49. 【例】 CPU 間での資源排他 </li></ul></ul>
  50. 50. Linuxカーネルの役割 ⑦プロセス管理 <ul><li>プロセスモデル </li><ul><li>プロセス
  51. 51. 同一メモリ空間処理に必要なリソースを共有
  52. 52. プロセス間でメモリ空間は共有できない
  53. 53. POSIX Pthread
  54. 54. スレッド間でメモリ空間を共有 </li></ul></ul>
  55. 55. Linuxカーネルの役割 ⑧シグナル処理 <ul><li>カーネル/プロセスがプロセスに通知する仕組み </li><ul><li>同期
  56. 56. 【例】 </li><ul><li>メモリ保護例外 (SIGSEGV) </li></ul><li>非同期
  57. 57. 【例】 </li><ul><li>インターバルタイマー (SIGALRM)
  58. 58. Ctrl+C(SIGINT) </li></ul></ul></ul>
  59. 59. Linuxカーネルの役割 ⑨メモリ管理 <ul><li>プロセス空間の管理 </li><ul><li>他のプロセスとアドレス空間が異なる </li></ul><li>オンデマンドページ </li><ul><li>malloc しても実物理メモリはまだ必要なわけではない
  60. 60. アクセスしたタイミングで実メモリが取られる
  61. 61. 【参考】 top.txt </li></ul><li>コピーオンライト </li><ul><li>プロセス fork 時に全てのメモリ空間をコピーする
  62. 62. 必要ない。アクセスしたタイミングでコピー </li></ul></ul><ul><ul><li>malloc </li></ul></ul>
  63. 63. Linuxカーネルの役割 ⑩仮想ファイルシステム(VFS)
  64. 64. ここで。なぜmori家のVIERAは 反応が遅いのか!!! <ul>プロセススケジューラの観点で予想 <li>http://www.ibm.com/developerworks/jp/linux/library/l-scheduler/#c
  65. 65. ( linux 2.6 スケジューリングでググる) </li></ul>
  66. 66. ここで。なぜmori家のVIERAは 反応が遅いのか!!!推測 <ul><li>カーネルが2.4 </li><ul><li>線形リストでスケジュール検索が長い
  67. 67. プリエンプションカーネルではない
  68. 68. カーネル空間でジャイアントロック </li></ul><li>リアルタイムスレッドを使いこなしていない
  69. 69. とこじつけて我慢してます。 </li></ul>
  70. 70. ソースコード <ul><li>http://www.kernel.org/ </li></ul>
  71. 71. 参考文献 <ul><li>『Linuxカーネル2.6解読室』
  72. 72. ソフトバンク クリエイティブ株式会社 </li></ul>
  73. 73. <ul>おしまい </ul>

×