【図解】パソコンのOSとは?OSの仕組み・役割を解説
OS(Operating System)とは、コンピュータの
- 操作
- 運用
- 運転
を司る基本ソフトウェアです。
OSは
- ユーザーやアプリケーションプログラムとハードウェアの中間に位置
- ユーザーやアプリケーションプログラムに対して標準的なインターフェースを提供
- ハードウェアなどの各リソースに対して効率的な管理
を行います。
この記事ではOSの役割について解説していきます。
OSの役割
OSの主な役割には
- プロセス管理
- 記憶管理
- 入出力装置管理
- ファイル管理
- APIの提供
があります。
プロセス管理
プロセス(Process:手順)とは、ユーザが与えた仕事(ジョブ:Job)をする為の一連の操作系列を実行する事を指します。
プロセスはタスク(task)とも呼ばれます。
一般的にプロセスは実行中のプログラムと解釈されます。
タスク(プロセス)の状態
タスク(プロセス)は、生成されてから消滅するまでに三つの状態の間を遷移します。
- 実行状態・・・CPUを使用し実行中の状態
- 実行可能状態・・・タスク(プロセス)は実行可能だが、他の(優先順位の高い)タスク(プロセス)が実行中のため待機している状態
- 待ち状態・・・入出力待ち等によりCPUの使用権を与えられても使用できない待ちの状態
記憶管理
プログラムをCPUが実行する為には、プログラムにある
- 命令
- データ
をCPUがすぐに取り出せる場所に置いておく必要があります。
そのすぐに取り出せる場所がメモリになります。
OSとCPUは相互に連携してメモリを効率よく管理するために様々な方式を利用しています。
- 実記憶管理・・・明示的にプログラムをHDD・SSDへの追い出しを行う管理方式
- 仮想記憶管理・・・OSがプログラムのうち使用頻度が低い部分を自動的にHDD・SSDに追い出す管理方式
- OSがアクセスしたアドレスをメモリに配置
- 残りをHDD・SSDに配置
実記憶管理
プログラムをCPUが実行するためには、HDD・SSDに格納されているプログラムをメモリに読み込む必要があります。
実記憶管理では、メモリにあるプログラムを効率的に配置し、メモリを有効に利用します。
実記憶管理には、
- 固定区画方式
- 可変区画方式
- スワッピング方式
- オーバーレイ方式
があります。
固定区画方式
メモリの容量を予め一定の大きさの区画に分け、その領域にプログラムを読み込む方法を指します。
プログラムの読み込み後、区画上に残っている空き領域は使用されません。
単一区画方式
単一区画方式では、メモリを一つの区画とし、この区画にプログラムを読み込見ます。
メモリ上には、一つのプログラムしか存在しません。
多重区画方式
多重区画方式は、メモリを一定の大きさの区画に分割し、区画ごとにプログラムを読み込む方式です。
この方式では、区画よりも大きなサイズのプログラムを読み込んで実行することは出来ません。
可変区画方式
プログラムの大きさに応じて、メモリ上の区画の大きさを変えることで、メモリを有効に利用する方式です。
可変区画方式では、プログラムの必要とするサイズがそれぞれ異なるため、様々なプログラムの実行や終了などを繰り返すことで、メモリ上の空き領域がさまざまな領域に散在してしまいます。
合計のメモリ空き容量が十分な大きさにもかかわらず、プログラムをメモリ上に読み込めなくなってしまうことがあります。
この状態をフラグメンテーション(断片化)と呼びます。
フラグメンテーションが起こると
- プログラムを読み込めなくなり
- メモリ上のプログラムを再配置
- メモリの空き領域を集め
- 一つの大きな空き領域を創造
このメモリの空き領域の再配置をコンパクション(Compaction:圧縮)と言います。
スワッピング方式
スワッピング方式は、
- 複数プログラムの実行中を想定
- 実行待ちなどのプログラムをHDD・SSDに追い出す
という方式になります。
オーバーレイ方式
オーバーレイ方式は
- 一つのプログラムを分割してHDD・SSDに追い出すことを想定
- プログラムの一部(セグメント)は管理部として必ず残す
という方式になります。
仮想記憶管理
CPUで処理されるプログラムのデータや命令は,メモリに準備され格納されている必要があります。
つまり、メモリの容量が不足すると、プログラムの実行は出来ません。
その問題を解決するのが,仮想記憶管理という仕組みです。
仮想記憶管理により、コンピュータに搭載されているメモリ容量よりも大きなメモリ空間が提供され、物理的なメモリの量を超えて
- プログラムを複数起動
- 大きなデータファイルを扱える
事が出来ます。
実際の仮想記憶管理は,
- メモリ
- HDD・SSD
のハードウェアから成り立っています。
仮想記憶管理を使うことで、
- 物理メモリ空間・・・実装されているメモリ全体が扱う空間
- 仮想アドレス空間・・・プログラムが扱う空間
と分離が可能です。
OSが持つ仮想記憶管理機能は、メモリ管理ユニット(Memory Management Unit:MMU)が管理しています。
メモリ管理ユニット(Memory Management Unit:MMU)ではCPUの要求するメモリアクセスを処理しており、主な機能には、
- 仮想アドレスを物理アドレスに変換する機能(仮想記憶管理機能)
- メモリ保護機能
- キャッシュ制御機能
- バス調停機能 等々
があります。
特に、この仮想アドレスを物理アドレスに変換を行うCPU内部のハードウェアを「動的アドレス変換機構(DAT:Dynamic Address Translation)」と言います。
仮想記憶管理の具体的な仕組みを、アプリケーションAというプログラムの実行を例に取って説明します。
前提条件として、物理メモリ空間のメモリ上ではアプリケーションAというプログラム以外にも複数のプログラムがプロセス中だとします。
- アプリケーションAのプロセス実行
- アプリケーションAのプロセス実行により物理メモリ空間のメモリの容量を使い果たす
- OSの仮想記憶管理により物理メモリ空間のメモリの中で、アプリケーションAを
- CPUに使用されていない部分 -> 補助記憶装置(HDD・SSD)に移動・保存
- CPUに使用されている部分 -> メモリに保存
とそれぞれに分割
- 物理メモリ空間のメモリに未使用領域を確保
プログラム(アプリケーション)はブロックに分割されています。
各ブロックは,
- 物理メモリ空間のメモリ
- 補助記憶装置(HDD・SSD)
どちらかにあります。
各ブロックが
- 物理メモリ空間のメモリ
- 補助記憶装置(HDD・SSD)
のどちらに存在するかの対応付けを行うのが「変換テーブル」になります。
「変換テーブル」によって,各ブロックごとに
- フラグビットでは、そのブロックが
- 物理メモリ空間のメモリ
- 補助記憶装置(HDD・SSD)
どちらにあるのかを区別
- 実際のブロック・アドレスでは、
- 物理メモリ空間のメモリのアドレス(物理アドレス)
- 補助記憶装置(HDD・SSD)上のアドレス
を記録
このように認識されており、「変換テーブル」によって,仮想アドレス空間のブロックが実際にどこにあるかが分かります。
仮想記憶管理には大きく分けて
- ページング方式
- セグメント方式
の二種類があります。
ページング方式とセグメント方式の違いを一冊の本で例えると
- ページング方式・・・文字通り「ページ」、固定長
- セグメント方式・・・「章」,不定長(一章のページ数は章によって様々)
になります。
ページング方式
ページング方式とは、プログラムをページと呼ばれる固定長に区切り、仮想アドレス空間を使い、
- 物理メモリ空間のメモリ
- 補助記憶装置(HDD・SSD)
に効率的に配置する方式です。
CPUの各命令・実行ごとに「動的アドレス変換機構(DAT:Dynamic Address Translation)」が「変換テーブル」にアクセスし、仮想アドレス空間の仮想アドレスから
- 物理アドレス
- 補助記憶装置(HDD・SSD)上のアドレス
を導き出します。
ページフォルト(物理メモリ空間のメモリ上に必要なページが存在しない)が発生した場合、
- ページイン・・・必要なページを物理メモリ空間のメモリへ転送
- ページアウト・・・物理メモリ空間のメモリ上で最も使用頻度の低いページから順に補助記憶装置に転送
ページの入れ替えをします。
セグメント方式
セグメント方式はページング方式とほぼ同様の方式です。
プログラムのブロックの大きさが固定長では無く、セグメントという論理的な可変長になります。
ページング方式の
- ページイン
- ページアウト
の事をセグメント方式では、
- ロールイン
- ロールアウト
と言います。
入出力装置管理
入出力装置管理とは、コンピュータ本体と入出力装置との間の入出力の管理の事を指します。
入出力方式には、
- OS全体での標準的な入出力方式
- 装置ごとの固有の処理を仲介する方式
があります。
装置ごとの固有の処理のアダプタとなるプログラムをデバイスドライバといいます。
データの入出力は、
- バッファリング(buffering)・・・バッファリング(buffering)とは、バッファを経由させることによって、コンピュータ本体と入出力装置を並行処理させて性能を向上させる方法です。
バッファ(buffer:保存領域)とは入出力のためのメモリ上に確保される領域の事です。
- スプーリング(spooling)・・・プリンタなどの低速な装置の入出力データを、高速な外部記憶装置を経由させることによって性能を向上させる方法
があります。
入出力制御方式
各種の入出力装置を効率よく動作させる方式として
- プログラム制御方式
- DMA(Direct Memory Access)方式
- チャネル制御方式
があります。
プログラム制御方式
プログラム制御方式では
- プログラム中の入出力命令を実行
- レジスタを経由
- メモリと入出力装置間でデータをやり取り
という流れになります。
低速な入出力処理の間、CPUが待機されます。
レジスタに関する記事はこちら
DMA(Direct Memory Access)方式
DMA方式とはプログラムが入出力命令を実行した際、DMAコントローラという専用のハードウェアが
- メモリ
- 入出力装置
間のデータをやり取りします。
CPUと入出力装置が並行処理されます。
チャネル制御方式
チャネル制御方式では、チャネル制御装置という専用のプロセッサが
- メモリ上のチャネルプログラムを解読
- 一連の入出力命令とCPUを並行処理
してくれます。
ファイル管理
コンピュータ上で、ユーザは意識する事なくファイルを
- 開く・閉じる
- 読み込む
- 編集・再編集
- ファイル名を付けて保存
をする事が出来ます。
これらの機能に加え、一連の操作後、ファイルを補助記憶装置等々で管理することを、ファイル管理(ファイルシステム)と呼びます。
ファイルシステムの種類
ファイルシステムは
- ディスク・ファイルシステム
- 分散ファイルシステム
- 特殊用途のファイルシステム
に分類できます。
ディスク・ファイルシステム
ディスクファイルシステムとは、コンピュータに接続された補助記憶装置、特にHDD上にファイルを格納するためのシステムです。
ディスク・ファイルシステムの例として、
- FAT(File Allocation Table)・・・MS-DOSのファイルシステム
- NTFS(NT File System)・・・Windows NT系の標準ファイルシステム
- ext(extended filesystem)・・・LinuxOSで広く利用されていたファイルシステム
- HFS(Hierarchical File System)・・・Mac OS標準フォーマット
があります。
分散ファイルシステム
分散ファイルシステムとは
- ファイル共有のためのプロトコルを準備
- ネットワークに対応
しているファイルシステムの事です。
分散ファイルシステムの例として、
- Windows標準・・・SMB/CIFS(Server Message Block / Common Internet File System)は、主にWindowsを中心とした環境でLANを通じて
- ファイル共有
- プリンタ共有 等々
に使用される通信プロトコル
- Macintosh・・・AFP(AppleTalk Filing Protocol)は、アップルが開発した、Classic Mac OS / macOSのファイル共有の為のプロトコル
- UNIX・・・NFS(Network File System)は、主にUNIXで利用される分散ファイルシステムおよびそのプロトコル
があります。
特殊用途のファイルシステム
特殊用途のファイルシステムとは、ディスクファイルシステムでも分散ファイルシステムでもないファイルシステムの事を指します。
特殊用途のファイルシステムの例として、
- procfs(Process Filesystem)・・・Unix系システムにある擬似ファイルシステム
があります。
ファイルシステムの構造
二つ以上のファイルの名前が重なると区別出来なくなるので、ファイル名の有効範囲を限定する為に、「ディレクトリ階層」という木(ツリー)構造でファイルシステムを構成します。
- ファイル・・・個々のユーザ・データ
- ディレクトリ・・・ファイルの管理情報とファイル本体を結ぶ部分。階層構造でその頂点にいるディレクトリをルートディレクトリと呼びます。
ファイル構成
各ファイルの構成方法として一般的に三つあります。
- バイト並び・・・特定のファイル構造を持ちません
使用OS)UNIX、Windows NT(FAT) - レコード並び・・・レコード(ブロック)はOSによって区分される最小情報単位
使用OS)メインフレーム用OS - 属性並び・・・データ以外にデータに関する属性情報(メタデータ)を持ちます
使用OS)MacOS、WindowsNT(NTFS)
APIの提供
OS上で動作するプログラムをアプリケーションと呼びます。
- OS(Operating System)・・・基本ソフトウェア
- アプリケーション(Application)・・・応用ソフトウェア
とも呼ばれており、アプリケーションの使用時にはOSに対してシステムコールする事でOSの機能の一部を利用しています。
システムコールとは、OSの機能を呼び出す(Call)ために使用される機構の事を指します。
プログラミングにおいては、OSの機能は関数(API)呼び出しによって実現されます。
API(Application Programming Interface)とは、自己のソフトウェアを一部公開する事で、他のソフトウェアと機能を共有できるようにしたものを指します。
以上がOSの役割についての解説になります。
コメント