📖

OSの仕組みとシステムコール入門 - 第1回 OSとカーネルの基礎知識

に公開

はじめに

本記事では、OSの仕組みとシステムコール入門として最初にOSとカーネルの基礎知識を学びます。
10回に渡ってOSについて学ぶ講座となっています。
⚠️本稿は参考資料としてお読みください。

本講座の構成(全 10 回)

  1. OSとカーネルの基礎知識 ←今回
  2. プロセスの生成と管理
  3. ファイルシステムの基本
  4. システムコールの仕組み
  5. open, read, write の実例と挙動
  6. ネットワークソケット基礎
  7. strace/ltrace を使ったシステムコール解析
  8. マルチプロセス・マルチスレッドの考え方
  9. 実践演習
  10. まとめ

OSとは

OSとはオペレーティングシステム(Operating System)のことを指します。CPUや主記憶装置などのハードウェアの資源を効率よく便利に使用できるようにする基本ソフトウェアです。
コンピュータをユーザが便利に使えるよう、アプリケーション実行のためのインターフェースを提供します。その際にユーザは、CPUやメモリを考えることなく応用ソフトウェア(アプリケーション)で、文書作成などの目的を達成します。

OSの種類

皆さんがよく利用するOSは何でしょうか?WindowsやmacOSなどがすぐに思い浮かぶと思いますが、OSには様々な種類があります。下記にOSの種類を列挙しますが、以降の章ではLinuxに焦点を当てます。

デスクトップ/クライアント OS

製品 概要・特徴
Windows 11 Windows10と同じNTカーネルを引き継ぎながら、ハイブリッドワークを前提にUI・セキュリティ・AI(Copilot) を強化。
macOS Sequoia Apple Silicon向けに最適化され、Apple Intelligence・iPhone Mirroring・改良されたウインドウタイル等を提供。 (Apple: macOS Sequoia)
Desktop Linux(Ubuntu, Fedoraなど) モノリシックなLinuxカーネルをベースに、オープンソースゆえの高いカスタマイズ性と LTS/Rolling Releaseなどが特徴。

サーバ OS

製品 概要・特徴
Windows Server 2025 (Standard / Datacenter / Azure Edition) Active Directory、Hyper‑V、Failover Clusteringを標準搭載し、Azure Editionではホットパッチ等クラウド連携機能を拡充。
Linuxサーバディストリビューション 高い安定性とコンテナ/Kubernetesとの親和性から、クラウド・オンプレを問わず事実上の標準基盤。

モバイル OS

製品 概要・特徴
Android Linuxカーネル上にHALとJava/Kotlinランタイムを多層構造で載せ、多様なデバイス形態をサポート。
iOS / iPadOS Darwin(XNU)カーネル+Objective‑C/Swiftランタイムにより、Secure Enclaveと連携した強固なセキュリティモデルを採用。

組込み・リアルタイム OS

分類 代表例 主な特徴
RTOS Azure RTOS ThreadX サブマイクロ秒スレッド切替、preemption‑threshold方式、Visual Studio 統合デバッグ。
FreeRTOS 約9kBの軽量フットプリントで40+MCUをサポート、MITライセンス。

Linuxディストリビューション

簡単なまとめは下記です。

  1. カーネル単体ではなく応用ソフトウェア込みで提供される。
  2. ディストリビューションが多数存在する(数百種類)。
  3. 無料で入手・インストール可能。

Linuxディストリビューション、通称distroとは、Linuxカーネルとユーザがすぐ使える環境(インストーラ、デスクトップ環境、パッケージ管理ツールなど)をまとめたものです。2025年時点で数百種類のディストリビューションが存在し、その目的も多岐にわたります。
たとえばUbuntuはCanonicalが開発するDebian系ディストリビューションで、クラウド・デスクトップ・IoT・スパコン向けまで幅広く対応し、Webサーバ用途でも大きなシェアを占めます。
ディストリビューションごとに異なる思想や運用ポリシーがあり、目的に応じた選択ができる事がLinuxの特徴です。

ディストリビューションの具体例

ディストリビューション 特徴
Ubuntu GUIが利用でき、日本語対応。肌感ですが開発環境などで利用している現場が多い。
Debian サーバ運用を重視し、安定版パッケージが中心。長期サポートが充実している。
Kali Linux ペネトレーションテスト用ツールを満載した、セキュリティ特化型。

Linuxカーネルとは

  1. OSの心臓部
  2. モノリシックかつ拡張可能
  3. 約3か月毎のリリース(アップデート)
  4. スマートウォッチからスーパーコンピュータまで同じコードベース

LinuxカーネルはOSの心臓部分です。プロセスやメモリ、ファイルシステム、ネットワークなどのリソースとハードウェアとを安全に仲介する役割を持ちます。
設計上はモノリシックカーネルに分類されますが、ドライバやファイルシステムをカーネルモジュールとして後から読み込めます。そのため、OSを再起動せずに機能を追加・更新できる柔軟性を併せ持っています。

Linuxカーネルは約3か月毎にアップデートされ、その都度多くの変更が取り込まれます。これによりセキュリティ修正が反映され、安全にサーバのホスティングなどが可能となっています。さらに、同じコードベースがスマートウォッチのようなデバイスからスーパーコンピュータまで動作するため、1つのコードベースから幅広い守備範囲を持ちます。

ユーザ空間とカーネル空間

  1. ユーザ空間とカーネル空間の住み分け。
  2. 32bit環境ではユーザ空間:カーネル空間=3GB:1GBが慣例、64bitでも下位をユーザ・上位をカーネルに割り当てる原則は同じ。
  3. syscall / sysenter命令を通じて特権モードへ遷移。
  4. ユーザ空間とカーネル空間の分離による安全性と安定性を提供。

Linuxはユーザ空間とカーネル空間を分離しており、権限境界を設けています。32bit x86環境では4GBの仮想アドレス空間を「下位3GB=ユーザ空間、上位1GB=カーネル空間」に割り当てるのが慣例で、64bitでも下位をユーザ・上位をカーネルという原則は変わらず割り当てます。

ユーザプロセスがOSの機能を呼び出すときは、CPUの syscallsysenter 命令を通じて特権モードへ一瞬だけ遷移し、システムコール番号と引数をカーネルに渡します。
この経路を辿ることで、不正アクセスやバグによってユーザの操作がカーネル領域に直接アクセスしないようになっており、OS全体の安全性と安定性が守られています。

参考文献

Discussion