Linux は OS のカーネル、つまり processor、memory、device、process、共通の resource abstraction を管理する特権ソフトウェアです。完全な Linux システムには、user-space library、utility、service、shell、graphical software、distribution policy も含まれます。
Kernel · レッスン 1
カーネルの概要
Linux カーネルがハードウェア、リソース、分離、ユーザー空間からの要求を仲介する仕組みを学びます。
ハードウェアリソース
processor は instruction を実行し、memory は動作中の state を保存し、controller は storage、network、display、input device などの peripheral を接続します。ハードウェアが公開するのは architecture・device 固有の仕組みであり、すべてのアプリケーションが安全に使える単一 interface ではありません。
カーネルは architecture code と device driver を通じて、これらのリソースを初期化・制御します。interrupt、DMA coordination、timer、power-management event を処理しながら、workload 間のアクセス境界を強制します。
Linux で device driver と hardware interrupt を通常調整する層はどれですか?
カーネルの責務
主要な責務には次のものがあります。
- 実行可能な thread を CPU へ schedule する
- virtual address space を作成・分離する
- process credential、permission、security policy を強制する
- filesystem、networking、IPC、device interface を提供する
- signal、timer、process lifecycle を処理する
- resource を割り当て、計上し、回収する
Linux は、core service と多くの driver が一つの特権 kernel address space で動くため、一般に monolithic kernel と呼ばれます。同時に modular でもあり、対応する component を kernel module として load・unload できます。特権 kernel code の bug はシステム全体を危険にさらすため、kernel update と module provenance はセキュリティ上重要です。
カーネル scheduler は何を管理しますか?
ユーザー空間
ユーザー空間には通常の process、つまり init と service、command-line tool、language runtime、database、shell、desktop application があります。hardware privilege により、これらの program は多くの機密 instruction を直接実行したり、任意の kernel memory へアクセスしたりできません。
process は system call を通じてカーネルへ処理を要求し、file descriptor、socket、device node、procfs、sysfs、netlink、memory mapping などの公開 interface とやり取りします。library がこれらを高水準 API で包むこともよくあります。
user-space root は policy 上大きな権限を持ちますが、通常は processor の user mode で実行されます。user identity と CPU privilege mode は別の概念です。
通常の root 所有アプリケーションは、すべての instruction を kernel mode で実行しますか?
境界と抽象化
カーネルは生の物理機構を直接公開せず、virtual process、file、socket、address space を提示します。これらの abstraction は分離と移植性を支えますが、それだけで完全な security boundary になるわけではありません。namespace、cgroup、capability、security module、seccomp、virtualization が専用の制御を加えます。
トラブルシューティングでは、どの層が動作を所有するかを考えてください。application、library、system-call interface、filesystem、driver、kernel subsystem、firmware、hardware のいずれでしょうか。誤った層の証拠は、不適切な修正につながります。
system call とは何ですか?
管理された環境でカーネルの modular な部分を観察するには、Linux でカーネルモジュールを管理するを利用できます。
レッスン完了
カーネルの概要 を完了しました
これで、物理リソースと分離された user-space process の間にカーネルを位置付けられます。
driver と architecture code を hardware control と関連付ける。
scheduling、memory、security、filesystem、network の責務を識別する。
root credential と processor kernel mode を別の概念として扱う。
user-kernel interaction を管理された runtime interface に位置付ける。