linuxのkernel

linuxのkernelファイル群
bpf, cgroup, configs, debug, dma, events, gcov, irq, livepatch, locking, power, printk, rcu, sched, time, trace
当然全てC言語で書かれていますね。
https://github.com/torvalds/linux/tree/master/kernel

ubuntuだとbootディレクトリの中に入っている
config-*-generic, initrd.img-*-generic, System.map-*-generic, vmlinuz-*-generic, grub

主要機能だとデバイスドライバ、スケジューラ、メモリ管理、ファイルシステム、ネットワークプロトコルスタック、システムコールあたりか。

モノシリックカーネルとマイクロカーネル

モノシリックカーネル
全OSは一つのカーネル内に存在し、カーネルスレッド上で実行される
システム構成要素間の依存関係が複雑
デバイスドライバ、スケジューラ、メモリ管理、ファイルシステム、ネットワークプロトコルスタックなどもカーネル空間におかける
Linux, FreeBSDはモノシリック
ソフトウェアが少なく高速、コードも少ない
システムコールの延長で動作する
コーディングは難しい 標準Cライブラリが使えず、GNUデバッガが必要

モノシリックカーネル
伝統的なカーネルからサーバ群に機能を移転するOS設計方針
サーバ群を可能な限りユーザ空間で動作させる
ハードウェアの抽象化とシステムコールの最小
IPC(プロセス間通信)、基本スケジューラ、基本メモリハンドラ、基本I/Oプリミティブなどはカーネル空間におかける
スケジューラ本体、メモリ管理、ファイルシステム、ネットワークスタックの大部分はユーザ空間で動作
macOS, QNX, GNU Hurdなど
マイクロカーネルは通常、アドレス空間定義部、プロセス間通信(IPC)、プロセス管理などを扱う
ハードウェア処理などの昨日はマイクロカーネルで扱わない
メモリ、ソフトウェアを多く使用し、プロセス管理が複雑
ロボット、医療用システムで使われる

ハイブリッドカーネル
macOS
通信プロトコルスタックやファイルシステムをカーネル空間で動作、一部のカーネルコードはユーザ空間で提供
サードパーティーのテクノロジーを素早く統合できる

unixはユーティリティプログラム群とカーネル
linuxカーネルは1300万行
macOSはDarwinをベースとしており、XNUと呼ばれるハイブリッドカーネルを採用
Windowsもクライアント・サーバ型階層型サブシステムモデルを採用しており、ハイブリッドカーネルと見なされている

なるほど、Linux, Windows, MacOSだと、カーネルの設計・仕組みが異なるってことか。

Kernel

kernelって、どの本にも出てくるけど、具体的に何やってんの?
→ OSの中核。アプリケーションとハードウェアのデータ処理の架け橋
ハードウェアとソフトウェアコンポーネントのやり取りを管理する
プロセスの抽象化、プロセス間通信、システムコールなどを提供する
L モノシリックカーネルは全てを一つの仮装アドレス空間に格納されたコードで実行して性能を向上
L マイクロカーネルはサービスの大部分をユーザー空間で実行し、保守性とモジュール性を向上

あれ、これ、CPU、memory, deviceと繋がってるってことは、CPU、memory、deviceのアーキテクチャを理解してないと、kernelは書けないってこと? ん?
CPU、memory、deviceも日進月歩で進化してるよね。。

– カーネルの機能
コンピュータのリソースを管理し、他のプログラムがそれらのリソースを使って動作できるようにする
 CPU(プロセッサ): 多数のプロググラムからプロセッサ群を選択する
 memory: メモリにはプログラムとデータ両方が格納される
 input, output: keyborad, hdd, usbなど
リソース管理の重要な観点は、実行領域とその領域へのアクセス調停
プロセス同士の同期も提供
マルチタスクシステム(Mac OS, Windows採用)はプロセスを高速に切り替える。プロセスには優先度が設定される。プロセス間通信(IPC)は、パイプ、共有メモリ、メッセージ、RPC、ソフトウェア割り込みなどがある。
協調型マルチタスクは、割り込まれずに実行される。

メモリ管理
ページング方式、セグメント方式による仮想アドレッシング
物理アドレスを仮想アドレスに変換している(RAMからHDDなど)

システムコール
カーネルを呼び出す

カーネルの設計
モノシリックカーネル(大部分をカーネル内に含む)とマイクロカーネルで設計に大きな違いがある
多くのカーネルは、中間のハイブリッドカーネルになっている