1 第一回輪講 Linux 渡邊研究室 4 年早川顕太
本の紹介 Linux エンジニア養成読本 編集 :SoftwareDesign 編集部 出版社 : 技術評論社 発売日 :2011 年 4 月 8 日 2
Linux とは? Linux とは 1991 年にリーナス トーバルズ氏 ( 当時 21 歳 ) により作られた UNIX 互換なカーネル 開発動機 Minix は教育用で機能が劣る 商用 UNIX は高価 Linux のマスコットキャラクター TUX ( この画像の著作権者 Larry Ewing) 3
カーネルとは? カーネル :OSの中核部分カーネルの主機能 プロセス管理 メモリ管理 割り込み管理 ファイルシステム ネットワーク etc O S ユーザー ( アプリケーション ) シェル ライブラリ ドライバなど カーネル ハードウェア 4
Linux の特徴 豊富なディストリビューション 多くのアーキテクチャに対応 POSIX 準拠 モノリシックカーネル モジュールカーネル 多くのファイルシスムに対応 オープンソース 5
( 特徴その 1) 豊富なディストリビューション Linux カーネルはソースコードで配布 コンパイルが必要 アプリケーション ライブラリ ドライバなどは何もない ユーザーが用意 一般ユーザーが導入するのは困難 Linux ディストリビューションの登場 LinuxOS として必要なものをパッケージ化し それを簡単に導入できるようにした Linux カーネルの配布形態 現在 Linux ディストリビューションは 300 種以上 6
(Linux の特徴その 2) 多くのアーキテクチャに対応 Linuxカーネルはソースコードを アーキテクチャに依存する部分 アーキテクチャに依存しない部分に明確に分割 最新バージョン Linux-3.8.7 では 28 種ものアーキテクチャに対応 これにより 移植が比較的に容易となり 多くのアーキテクチャをサポート インストールするシステムに合わせてコンパイル ただし ディストリビューションでサポートしないのも多い 7
( 特徴その 3) POSIX 準拠 POSIX(Portable Operating System Interface) POSIX とは UNIX に関する標準的な API を定めた規格 API の例 :open() read() write() fork() etc (API: アプリケーションプログラミングインタフェース ) Linux は UNIX から直接派生した OS ではないが POSIX に準拠しているため UNIX とのソースレベル互換を実現 8
( 特徴その 4) モノリシックカーネル カーネルの設計方針 モノリシックカーネル : OS の機能をカーネルメモリ空間内に実装 マイクロカーネル : OS の機能をアプリケーションとして実装 ハイブリッドカーネル : モノリシック方式とマイクロ方式の混合方式 Linux はモノリシックカーネル採用 アプリ アプリ モノリシックカーネル メモリ管理 プロセス管理 割り込み管理 ファイルシステム ネットワーク etc アプリ アプリケーション メモリ管理 割り込み管理 マイクロカーネル プロセス間通信 etc プロセス管理 ファイルシステム ネットワーク 9
( 特徴その 5) モジュールカーネル モノリシックカーネルの欠点全ての機能を単一のカーネルメモリ空間に配置 カーネルの肥大化 ( メモリの消費 ) 機能追加でカーネルの再コンパイルが必要 モジュールカーネル採用により解決 カーネルの一部 ( カーネルモジュール ) をカーネルメモリ空間に動的にロード / アンロードする仕組み HDD ドライバ A ドライバ B ドライバ C ロード / アンロード アプリ アプリ アプリ モノリシックカーネル メモリ管理 プロセス管理 割り込み管理 ファイルシステム ネットワーク etc ドライバA 10
(Linux の特徴その 6) 多くのファイルシステムに対応 Linux のファイルシステムの構成 Linux は多くのファイルシステムが利用可能 それら各々のファイルシステムの差異を吸収するため 抽象化層として仮想ファイルシステムがある ファイルシステム操作の抽象化 システムコール VFS( 仮想ファイルシステム ) 実際のファイルシステム ( カーネルモジュールとして実装 ) ext4 FAT NTFS NTFS (NT file System) FAT (File Allocation Table) ext4 (extended file system) 各種デバイスドライバ 各種デバイス 11
( 特徴その 7) オープンソース Linux はオープンソースライセンスのひとつである GNU General Public License (GNU GPL) の下で配布 GNU GPL の基本的な概念 利用 改変 再配布 コピーは自由 再配布の条件 ソースコードを公開 同一ライセンス下で配布 ソースコード (GPL で公開 ) 派生 ソースコード (GPL で公開 ) 派生 ソースコード (GPL で公開 ) 著作権フリーとは異なる ソースコード (GPL で公開 ) ソースコード (GPL で公開 ) ソースコード ( 非公開 ) 12
Linux が使われる場面 サーバ スパコン 2010 年では 上位 500 のスパコンの内 90% 以上は Linux を使用している 理由 : 無料 カスタマイズ可能 安定動作するため 組み込みシステム スマートフォンやタブレット端末 カーナビ テレビなど 理由 : 多くのアーキテクチャに対応しているため 家庭用 OS 理由 : ディストリビューションが豊富であり 導入が簡単で GUI( グラフィカルユーザインタフェース ) を備えるものが多い 13
Linux と Windows の比較 配布形態 Linux オープンソース ( 無償 ) Windows クローズドソース ( 有償 ) 対応アーキテクチャ豊富 x86 x64 のみ アプリケーションの互換性 カーネルの設計方針 ソースレベル互換 ( 再コンパイルの必要あり ) バイナリレベル互換 ( 再コンパイルの必要なし ) モノリシックカーネルハイブリッドカーネル 14
まとめ Linuxの概要 Linuxの特徴 Linuxが使われる場面 Windwsとの比較 15
参考文献 IT pro Linux カーネルの基本機能 http://itpro.nikkeibp.co.jp/article/column/2008050 1/300463/ Wikipedia Linux http://ja.wikipedia.org/wiki/linux e のらぼらとりパソコン実習室 [ ブートストラップ ] http://park12.wakwak.com/~eslab/pcmemo/boot/in dex.html 16
17 付録
18 Linux の仕組み ブートストラップ ファイルシステム
ブートストラップ ブートストラップとは? コンピュータシステムの電源を入れたときに OS を起動するまでの処理の流れのこと ブートストラップの手順 BIOS ブートローダーカーネル 問題点プログラムをメモリにロードするにも そのロードするプログラムがメモリ上にないといけない 解決策丌揮発性の ROM を用意し メモリ上にマッピング 19
Linux のブートストラップ ( その 1) Intel アーキテクチャでの Linux のブート手順 BIOS (Basic Input/Output System) BIOS ROM がメモリ上にマッピングされており そこから CPU はプログラムを実行 1 POST(Power On Self Test) と呼ばれるハードウェアの自己診断を行う 2 起動ディスクの先頭 1 セクタ (MBR: マスターブートレコーダ ) をロードし 実行 ブートローダ GRUB(Grand Unified Bootloader) を使用した場合 GRUB は 3 つのプログラムに分かれている 1 MBR に stage1 が格納されている stage1.5 をロードし 実行 2 stage1.5 はファイルシステムを認識する ファイルシステム内の stage2 をロードして実行 3 stage2 でカーネルと initrd をロードし カーネルコードを実行 20
Linux のブートストラップ ( その 2) 物理メモリ Linux カーネル 1 周辺機器の初期化 2 圧縮されたカーネル本体を展開し 実行 3 カーネルの初期化 4 圧縮された initrd を展開し ルートとしてマウント 5 そこから HDD などのモジュールを読み込む 6 本来のルートファイルシステムをルートとしてマウント 7 各種アプリケーションを起動 initrd(initial ramdisk) とは? カーネルの初期化用のために メモリ上に構築されるファイルシステム モジュールを組み込む initrd HDDドライバカーネル HDDドライバ HDD にアクセス可能 HDD アプリケーション 21
Linux のブートストラップの アニメーション HDD MBR (GRUB stage1) GRUB stage1.5 ルートファイルシステム GRUB stage2 Linuxカーネルイメージブートセットアップ CPU メモリ (RAM) 先頭部分のみ カーネル本体 ( 圧縮 ) BIOS ROM initrd BIOS ROM 22
ファイルシステム ( ディスク ) ファイルシステムとは? 補助記憶媒体に構造を持たて管理 以下の抽象的な もの を提供 1 ファイル データの入れ物 2 ディレクトリ ファイルの入れ物 3 ツリー構造 ディレクトリの階層構造 ファイルシステムの例 ディレクトリ NTFS(NT file System) FAT(File Allocation Table) ファイル ファイル ディレクトリ ext4(extended file system) ファイル ファイル 23
ext2 ファイルシステム ( その 1) ext2(second extended filesysytem) Linux で幅広く利用されるファイルシステム 管理単位はセクタ (512byte) をいくつかまとめたブロック ( 多くは 4Kbyte) i-node 方式で 各ファイルは i ノードと一対一に対応 ブロックと i ノードにはそれぞれ 通し番号が割り振られる i ノードは対応するファイルの管理情報を保持管理情報の例 : ファイルの種類 ファイルサイズ ファイルデータを保持しているブロック ( データブロックという ) の番号など ディレクトリもファイルで定義ディレクトリのデータブロックには そのディレクトリに属する各ファイルのファイル名と i ノード番号の組が記されている 24
ext2 ファイルシステム ( その 2) i ノードとデータブロックの関係 ディレクトリ i ノード mode: ディレクトリ size :50byte etc i ノード mode: 通常ファイル size :3,000byte etc データブロック filea のデータ file A file B データブロック fileb のデータ データブロック filea i ノード番号 fileb i ノード番号 i ノード mode: 通常ファイル size :60,000byte etc データブロックへの参照は最大 15 個 最後の 3 つは各々 1 段 2 段 3 段の間接参照をサポート データブロック fileb のデータ データブロック (1 段間接参照 ) データブロック fileb のデータ データブロック fileb のデータ データブロック fileb のデータ 25
ext2 ファイルシステム ( その 3) ext2 のパーティション内の構造 ブロックグループに分けて管理 1 つのファイルのデータブロックは同じブロックグループ内に格納 断片化が減る シークタイムが減る パーティション ブロックグループ 0 ブロックグループ 1 スーパブロック グループディスクリプタ データブロックビットマップ i ノードビットマップ i ノードの配列 ブロックグループ n データブロックの配列 26