kernel overview

Post on 16-Jul-2015

528 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Kernel OverviewKai 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 プロセスIDUTS ホスト名、ドメイン

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

top related