OSの構成と機能

このページでは、OSの全体像と、カーネル・デバイスドライバ・ファイルシステムなどの制御プログラム、カーネルモードとユーザモード、カーネルの作り方の違いがわかります。

  • 一言で言うと:
    • OS(オペレーティングシステム)が「どんな部品でできていて、どう分担して、どうやって自分の身を守っているか」という話。ソフトウェア分野全体の入口。

OSの全体像(基本ソフトウェア)→ 中核の3部品(制御プログラム)→ OSを守る2つのモード(カーネルモードとユーザモード)→ カーネルの作り方2種

覚え方の軸

  • OSは「広い」と「狭い」の2つの意味がある:
    • 広義のOS=制御プログラム+言語プロセッサ+サービスプログラム。狭義のOS=制御プログラムだけ
  • 制御プログラムは3部品:
    • 頭脳(カーネル)、手足(デバイスドライバ)、本棚(ファイルシステム)
  • カーネルの仕事は「〇〇管理」で並べる:
    • ジョブ管理、タスク管理、記憶管理、割込み管理、入出力管理 + システムコール
  • 「大きな単位 → 小さな単位」:
    • ジョブ(利用者から見た仕事)→ ジョブステップ → タスク(CPUを割り当てる単位)
  • 守りの仕組みは「特権があるか」で分ける:
    • カーネルモード(何でもできる)⇔ ユーザモード(危ない命令はできない → システムコールで頼む)

基本ソフトウェアの構成:OSは3つでできている

  • 広義のOS(基本ソフトウェア):
    • 広い視野でとらえたときの基本ソフトウェア
    • 制御プログラム(狭義のOS)を中核に、言語プロセッサとサービスプログラムで構成される
  • OS:
    • オペレーティングシステム
  • 言語プロセッサ:
    • プログラムを翻訳するソフトウェア(詳しくは後の「言語処理ツール」)
  • サービスプログラム:
    • ユーティリティともいう
    • 業種や業務に関係なく必要になる処理を行う、実用的なソフトウェア
    • 例:
      • テキストエディタ、分類併合プログラム、ソートプログラム、ファイル変換プログラム

制御プログラム:OSの本体

  • 制御プログラムの3部品:
    • カーネル、デバイスドライバ、ファイルシステム
    • 応用プログラム → 制御プログラム(カーネル・ファイルシステム・デバイスドライバ)→ 入出力装置、という位置関係
  • ファイルシステム:
    • 記憶装置の中にファイルを記録する仕組み
    • 応用プログラムに、統一的なファイル入出力インタフェースを提供する
  • カーネル(kernel):
    • 主記憶装置に常駐する制御プログラムのモジュール群
    • スーパバイザプログラムともいう
    • スケジューリングや資源の割振りなど、すべてのプログラムの実行を制御する。OSの中核
    • 主な機能:
      • ジョブ管理、タスク管理、記憶管理、割込み管理、入出力管理、応用プログラムへのシステムコールサービス
  • ジョブ:
    • 利用者から見た仕事の単位。コンピュータで実行される、ひとまとまりの処理
    • 構成:
      • ジョブ → 1つ以上のジョブステップ → ジョブステップはタスク(またはプロセス)でできている
  • ジョブ管理:
    • ジョブとジョブステップの実行を監視・制御する
    • 機能:
      • JCL(ジョブ制御言語)を介してジョブを連続的にスムーズに処理する
      • スプーリング
      • 複数ジョブのスケジューリング
    • 補足:
      • ジョブは、ジョブスケジューラを構成するリーダ → イニシエータ → ターミネータ → ライタの順に処理される
  • スプーリング:
    • 遅い入出力処理と、プログラムの実行を切り離す機能(例:印刷データをいったんディスクにためて、CPUは先に次の仕事をする)
    • スループット(単位時間あたりの仕事量)の向上に役立つ
  • タスク管理:
    • CPUの割当て単位であるタスクを管理する
    • 同時に動く複数のタスクに、CPU効率を考えた順番でCPU時間を与える(CPUの有効活用)。詳しくは後述
  • 記憶管理:
    • プログラムを実行するアドレス空間を管理し、有効活用する。詳しくは後述
  • デバイスドライバ:
    • 入出力装置を直接操作・管理するプログラム
    • 装置に依存した処理をするので、装置の種類ごとに用意される。1つのデバイスドライバで1台または複数台の装置を制御する
    • カーネルと入出力装置の間のインタフェース
    • 流れ:
      • 応用プログラムの入出力要求をカーネルが受け取る → カーネルはデバイスドライバに処理を頼み、すぐに次の処理(他のタスク)にとりかかる
    • 補足:
      • デバイスドライバをカーネルに組み込むと、新しいデバイスを追加するたびにカーネルのリコンパイルが必要になり、柔軟性に欠ける。そのため、カーネルから独立させている
  • プラグアンドプレイ(Plug and Play):
    • 新しい周辺装置の接続を検知して、デバイスドライバの組込みや各種設定を自動で行う機能

カーネルモードとユーザモード:OSを壊されないための2つのモード

  • 目的:
    • あるプログラムが誤ってOSを壊すのを防ぐため、CPUには2つの実行モードがある
  • ユーザモード:
    • ユーザプログラムの実行を許すモード
    • 入出力命令などの特殊命令は実行できない
  • カーネルモード(特権モード):
    • カーネルだけが実行できるモード
    • 入出力命令などの特殊命令(特権命令)を実行できる
  • システムコール(スーパバイザコール:SVC):
    • ユーザプログラムが、カーネルに処理を頼むための呼出し
    • 例:
      • ファイルを読み書きしたいとき、ユーザモードでは入出力命令を実行できないので、システムコールを呼ぶ → カーネルは要求の内容とパーミッションを確認してから処理を実行する
    • 例え:
      • お客さん(ユーザプログラム)は金庫を直接開けられないので、窓口(システムコール)で銀行員(カーネル)に頼む。銀行員は本人確認(パーミッション)をしてから金庫を開ける
  • パーミッション:
    • あるデータに対する、読み・書き・実行の権限

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

種類 カーネルに持たせる機能 長所 短所
マイクロカーネル タスク管理や記憶管理など必要最小限だけ。他の機能はサーバプロセスとして、必要なときに呼び出す カーネルが小さい。機能ごとに変更しやすい サービスを実行するたびにプロセスの切替えが多くなる
モノリシックカーネル OSのほとんどすべての機能(monolithic=一枚岩的な) プロセスの切替えが少ない(処理が高速) カーネルサイズが大きく、主記憶を有効に使えない。特定の機能だけを変えるのが難しい

混同しやすいペア

  • 広義のOS(制御プログラム+言語プロセッサ+サービスプログラム)/狭義のOS(制御プログラムだけ)
  • カーネル(OSの中核。スーパバイザプログラム)/デバイスドライバ(装置ごとの操作プログラム。カーネルから独立)
  • ジョブ(利用者から見た仕事)/タスク(CPUを割り当てる単位)
  • カーネルモード(特権モード。特殊命令OK)/ユーザモード(特殊命令NG → システムコールで頼む)
  • マイクロカーネル(最小限。変更しやすいが切替えが多い)/モノリシックカーネル(全部入り。速いが大きく変えにくい)
  • スプーリング(遅い入出力と実行を切り離す)/プラグアンドプレイ(装置の追加を自動で設定する)

← 05 ソフトウェアの目次に戻る

タイトルとURLをコピーしました