Linuxカーネル
概要
Linuxカーネルは、カーネル空間に配置されて稼働する巨大なプログラム
Linuxカーネルはモノリシックなので、一つのプロセスの中に複数のスレッドを抱え込んでいるという状態で動作している
カーネルがどのように動作しているか可視化することが難しい
カーネルの実態は/boot/vmlinuz-....と/lib/modules配下のカーネルモジュール(デバイスドライバ)を併せたもの
vmlinux-リリース番号は圧縮カーネルイメージという
vmlinuxではなくvmlinuzとなっているのはzlibという圧縮ライブラリで圧縮しているからそのモジり
https://gyazo.com/a34382b66a0222284980f301f18c950d
gcpのインスタンスで確認
https://gyazo.com/b990f4bdc3e52ad2465d1a18db74e02b
gcpインスタンスでkernelモジュールのkoファイル数をカウント
ハードウェアと協調して、アプリケーションを健全に動作させる基盤を構築することが第一目的
カーネルはイベント駆動型
カーネルは起動したら自発的に何かをすることはない
外部割り込み、ソフトウェア割り込みがあると処理を行う
ソフトウェア割り込み
外部割り込み
周辺機器
カーネルスレッド
カーネル空間で動作するプロセス
LinuxはモノリシックOSなのでカーネルでメモリ空間は共有されて動いている
ユーザープロセスからカーネルへは自由にアクセスできない
仮想メモリで実現
システムコールでカーネル機能を呼び出す
https://gyazo.com/1a613eea6555a118aabd383a22964938
Linuxカーネルの機能
タスク管理
割り込み管理
時間管理
ネットワーク
ブロック入出力
デバイスドライバ
https://gyazo.com/bb00ba367ff610a9851f4de7249b0a82
ローダブルカーネルモジュール機構
モジュールファイルの格納先/lib/modules/カーネルバージョン
find /lib/modules/$(uname -r) -name "*.ko"
カーネル内の機能パーツをモジュールファイルという形で分離する
必要に応じて機能パーツを稼働中のカーネルに組み込んだり切り離したりする仕組み
https://gyazo.com/c7a2d4ee20ebfe856eaac7aab9fd2629
カーネルの全てのコードを圧縮カーネルイメージに格納しておく方法には問題がある
サイズが肥大化する
使用する機能の取捨選択がカーネルビルド時にしかできなくなってしまう
モジュール機構によって、機器メーカーが独自のデバイスドライバを提供することができる
モジュール機構がないと、デバイスドライバが入っているカーネルをビルドしないといけなくなって、デバイスドライバだけの配布が困難になる
モジュール管理コマンドでモジュールを抜き差しする
depmod,insmod,lsmod,modinfo,modprobe,rmmod
参照