Skip to main content
Kernel Overview
Kai Sasaki(@Lewuathe)
Linux Kernelとは
• Unix Likeなオペレーティングシステム
• 世界で最も成功したOSSのひとつ
• ハードウェアとアプリケーションの仲立ちと

なるような多くの機能を提供
• 最新安定版 3.19(2015年2月現在)
ディストリビューション
• ユーザランドの様々なソフトウェアを付属

させて配布
• Debian系(Ubuntu)
• Fedora系(RHEL, CentOS)
• この資料ではRHEL 7準拠
今日の話
1.カーネルの全体像
2.プロセスとメモリ管理(用語メイン)
3.ファイルシステム(用語メイン)
4.ネットワーク(用語メイン)
5.デバイス(用語メイン)
6.リソース制御(用語メイン)
7.カーネルインストール
カーネルの全体像
ソースツリーを眺める
ドキュメント
アーキテクチャ依存部
ブロックデバイス

共通部分
デバイスドライバ
ファイルシステム
スケジューラなど
メモリ管理
ネットワーク
プロセスとメモリ管理
• マルチタスクの実現のため複数プロセスを

スケジューリングする必要がある
• スケジューラ
• O(1): 経験則的な優先度変動を含む(~2.6.23)
• CFS: 現在 のCPU使用時間にのみ基づく
プロセスとメモリ管理
• Linuxのスケジューリングポリシー
• TSS(Time Sharing System)
• 割り当てられた時間だけCPUを使う
• リアルタイムクラス
• 静的な実行優先度を持つ
プロセスとメモリ管理
• Linuxではプロセスの静的な優先度は0-99
• TSSクラスでの実行優先度は常に0
• リアルタイムクラスの実行優先度は1-99に設定可
プロセスとメモリ管理
ただしO(1)スケジューラだとTSSクラスでも

動的に優先度が変更される。
•長時間CPUを占有→優先度下がる
•ユーザとのやりとりを行うような対話型プロセス

はCPU使用時間が短い→優先度上がる
結果的にユーザへの応答反応がよくなる
プロセスとメモリ管理
CFS(Completely Fair Scheduler)はvruntimeを基に

スケジューリングを実施
•すべてのプロセスからvruntimeが最も短いものに

CPUを割り当てる
•内部的に赤黒木で管理
14
9 14
8 12 27
3 13
15
17
ファイルシステム
• ブロックデバイスのデータをファイルとして

抽象的に管理するためのシステム
ファイルシステム
カーネル
ユーザプログラム
ブロックレイヤー
デバイスドライバ
HDD
ファイルシステム
• LinuxのファイルシステムはVFSと

個別のファイルシステムに分けられる
• proc, sysfs, cgroupfsなどカーネルの

インタフェースとしても実装されている
ファイルシステム
23のファイルシステムをサポート
ファイルシステム
file_operations構造体
inode_operations構造体
address_space_operations構造体 
VFS ext4
ext4_file_operations構造体
ext4_file_inode_operations構造体
ext4_dir_inode_operations構造体
ext4_da_aops構造体 
ファイルシステム
分類 例
UFS Base ext2
ジャーナリング ext3, ext4, XFS
ログストラクチャード nilfs2
Copy on Write Btrfs
ネットワーク
• Linuxのネットワークシステムは以下の4つに

分けられる
• ソケットインターフェイス
• プロトコルスタック
• ネットワークデバイス
• 付加機能
ネットワーク
ユーザプログラム
ソケットインタフェース
プロトコルスタック

(TCP/IPなど)付加機能
(ファイアウォール, 

NAT変換 etc)
ネットワークデバイス
関連の処理
カーネル
ネットワークデバイス
ネットワーク
netfilterがパケットフィルタリングやNAT変換の

機能を担っており、iptablesコマンドから操作
3.13からnftablesが実装され、nftコマンドで

ライブラリ(libnftnl)を経由して操作する
デバイス
• データの入出力、保存などを行うための機器
• カーネルはデバイスドライバを用いてこれらを制御
• デバイスの種類
• キャラクタデバイス
• ブロックデバイス
• ネットワークデバイス
デバイス
キャラクタデバイスはキャラクタ単位のデータを

ストリームとして扱う(例:キーボード)
キャラクタデバイスにアドレスなどの概念はない
一方でブロックデバイスはデータをブロック単位で

処理するデバイス。ランダムアクセス可

(例:ストレージデバイス)
通常はファイルシステムを構築してアクセスする
デバイス
ネットワークインタフェースはネットワーク通信

のデータを扱う
キャラクタデバイス
ブロックデバイス
デバイス
• ハードウェアからの入出力を処理するために

割り込みが用いられる
• 割り込みには2種類
• ハードウェア割り込み
• ソフトウェア割り込み
リソース制御
メモリやCPUの公平な配分と効率的使用、

そして排他制御を担う
2.6.24以降リソースを統一的に制御するために

インタフェースが導入された
• cgroup
• namespace
リソース制御
cgroupはプロセスをグループ化して任意のリソースを
割り当てるためのフレームワーク
リソース制御
namespaceはカーネルが提供するリソースの

名前付けを共有できる空間を提供する
namespace 管理対象
PID プロセスID
UTS ホスト名、ドメイン
MOUNT ファイルシステムのマウント関係
Network ネットワークデバイスのルーティング
IPC 共有メモリ、セマフォ
UID ユーザID, グループID
リソース制御
カーネル
cgroup namespace
LXC or Docker
カーネルインストール
デモ
$ sudo su
# yum groupinstall “Development Tools”
# yum groupinstall “Additional Development”
# yum install asciidoc perl-ExtUtils-Embed xmlto zlib-devel 
newt-devel net-tools bc design pcutils-devel wget rpm-build gcc 

hmaccalc pesign
$ wget http://vault.centos.org/7.0.1406/updates/Source/SPackages/

kernel-3.10.0-123.8.1.el7.src.rpm
$ rpm -ivh kernel-3.10.0-123.8.1.el7.src.rpm
$ cd ~/rpmbuild/SPECS
$ rpmbuild --nodeps -bp --target=x86_64 kernel.spec
$ sudo su
# rpm -ivh —force ~/rpmbuild/RPMS/x86_64/

kernel-3.10.0-123.8.1.e17.local.x86_64.rpm