基本情報技術者試験など情報処理技術者試験を受験する方にとっては必須の,基本ソフトウェア(OS)についてシンプルにまとめています。はじめに,基本ソフトウェアの構成要素について説明し,その後,制御プログラム(狭義のOS)について説明しています。制御プログラムについては,カーネル(ジョブ管理(ジョブの流れ,スプーリングなど),タスク管理(タスクの状態遷移,タスクのスケジューリング方式(到着順方式,静的優先順位方式,動的優先順位方式,ラウンドロビン方式など)),記憶管理(実記憶管理(区画方式,フラグメンテーション,メモリコンパクション,ガーベジコレクション,メモリリークなど),仮想記憶管理(仮想アドレス,ページング方式,スラッシングなど)),ファイル管理(バイナリファイル,テキストファイル,ファイルの種類,ファイルのアクセス法(順次アクセス,直接アクセスなど),ファイルの編成法(順編成,直接編成,索引編成など))),デバイスドライバ,ファイルシステム(ディレクトリー,絶対パス指定,相対パス指定)について説明しています。たくさんありますので,1つずつ,じっくり丁寧に読んでみましょう。
基本ソフトウェア(OS)
基本ソフトウェアは,コンピューターシステムの核となるソフトウェアです。ハードウェア(CPUや記憶装置(主記憶装置,補助記憶装置),入出力装置など)の管理やネットワーク通信を制御し,利用者や応用ソフトウェアに共通の機能を提供します(「広義のOS」ともいいます)。
※ OS(Operating System):オペレーティングシステム
※ OSには,WindowsやmacOS,Linux,Android,iOSなどがある
基本ソフトウェアの構成要素
制御プログラム(狭義のOS)
制御プログラムは,ハードウェアの管理と制御を行います。
※ 現在は,制御プログラムのみを「OS」ということが多い
カーネル
カーネルは,OSの中核となるプログラムで,次のような機能を持っています。
ジョブ管理 (詳細は後述) | ターンアラウンドタイムやスループットを向上させるために,ジョブの優先順位の決定や,コンピューター資源の割り当て,スケジューリングなどを行う |
タスク管理 (詳細は後述) | 実行するプログラムを複数のタスクに分解して状態を監視し,CPUの割り当てを適切に行う |
記憶管理 (詳細は後述) | 記憶装置の記憶領域を効率的に利用できるように管理する ・実記憶管理 記憶容量の限られた主記憶装置の記憶領域を効率よく割り当てたり解放したりする ・仮想記憶管理 仮想記憶(空間)を作り出し,実記憶よりも大きい記憶領域を扱えるようにする |
システムコール | 応用ソフトウェアからカーネルが提供する特権的な機能を呼び出す。SVC(スーパーバイザコール)ともいう |
デバイスドライバ
デバイスドライバは,ハードウェア(周辺機器)を制御・管理するためのソフトウェアです。各機器に依存した処理を行いますので,機器ごとに必要になります。
プラグアンドプレイ
プラグアンドプレイとは,コンピューターに周辺機器や拡張カードなどを接続した際に,デバイスドライバのインストールを自動的に行うしくみをいいます。
ファイルシステム(詳細は後述)
ファイルシステムは,ファイルやディレクトリー(フォルダー)を管理します。アクセス権の管理なども行います。
言語処理プログラム
言語処理プログラムは,プログラム言語で書かれたソースプログラムを,コンピューターで実行できる機械語に変換するプログラムです。
※ 言語処理プログラムについては,「 -情報処理シンプルまとめ」を参照
サービスプログラム(ユーティリティプログラム)
サービスプログラムとは,コンピューターの機能を補うプログラムのことをいいます。次のようなものがあります。
- テキスト編集プログラム
- ファイル変換プログラム
- ソートプログラム など
ジョブ管理
ジョブとは,(コンピューターの利用者側から見たときに)コンピューターに処理させる仕事の単位のことをいいます。
ジョブ管理では,ターンアラウンドタイムやスループットを向上させるために,ジョブの優先順位の決定や,コンピューター資源の割り当て,スケジューリングなどを行います。
※ ターンアラウンドタイムやスループットについては,「システムの性能評価と信頼性 -情報処理シンプルまとめ」を参照
JCL(Job Control Language;ジョブ制御言語)
JCLとは,コンピューターでバッチ処理を行うときに使用する制御言語です。起動するジョブや起動時のオプション,使用するコンピューター資源の割り当てなどを記述します。
※ JCLは汎用コンピューター(メインフレーム)のOSなどで利用する
ジョブの流れ
ジョブの流れは,次のようになります。
リーダ (読取りプログラム) | 投入されたジョブを,入力待ち行列に登録する |
イニシエータ (開始プログラム) | 入力待ち行列から,次に実行すべきジョブを選択して,必要なコンピューター資源を割り当てる(実行の開始をタスク管理に指示する) |
ターミネータ (終了プログラム) | 実行が終了したジョブに割り当てられていたコンピューター資源を解放し,処理結果を出力待ち行列に登録する |
ライタ (書出しプログラム) | 出力待ち行列から,優先順位の高いジョブを選択して,処理結果を出力する |
スプーリング
スプーリングとは,CPUの待ち時間を短くするために,低速な入力装置からの入力データや,出力装置への出力データを一時的に記憶装置に保存し,CPUの処理とは別に並行して(少しずつ転送して)処理するしくみをいいます。スループットを向上させることができます。
たとえば,プリンターで印刷する場合,プリンターへの出力データを一時的に磁気ディスク装置に蓄えておき,そこからデータを取り出しながら印刷します(その間,CPUは他の処理を実行します)。
※ スループットについては,「システムの性能評価と信頼性 -情報処理シンプルまとめ」を参照
タスク管理
タスクとは,コンピューターから見た処理の単位のことをいいます。
タスク管理では,実行するプログラムを複数のタスクに分解して状態を監視し,CPUの割り当てを適切に行います。
※ UNIX系のOSでは,タスクのことをプロセスという
※ マルチタスク…複数のタスクを同時並行して実行し,スループットを向上させる機能
タスクの状態遷移
タスクの生成から消滅までの状態遷移は,次のとおりです。
① | 実行可能状態→実行状態 実行中のタスクが終了したり他の状態に遷移した場合で,実行可能状態の待ち行列にCPUに割り当て可能なタスクがある場合,(そのタスクに)CPUが割り当てられ実行状態に遷移する ※ ディスパッチ…実行可能状態にあるタスクにCPUを割り当てること |
② | 実行状態→実行可能状態 CPUに割り当てられた時間(タイムスライス)を使い切った場合や,より優先順位の高いタスクが実行可能状態になりCPUの使用権を奪われた場合に,実行中のタスクは処理を一時中断し,実行可能状態に遷移する ※ プリエンプション…実行中のタスクを一時的に中断すること |
③ | 実行状態→待ち状態 割り当てられたタイムスライスを使い切らないうちに入出力要求(SVC割込み)があった場合,待ち状態に遷移する |
④ | 待ち状態→実行可能状態 タスクの入出力処理が終了した場合(入出力割込み)に,実行可能状態に遷移する |
※ 割込みについては,「プロセッサ -情報処理シンプルまとめ」を参照
タスクのスケジューリング方式
タスクの優先順位は,タスクスケジューラによって管理されており,次のような方式があります。
到着順方式(FCFS方式)
到着順方式の場合,タスクは優先順位を持たず,到着した順に実行が終了するまでCPUを割り当てます。
※ FCFS(First Come First Served)
※ プリエンプションがないので,ノンプリエンプション方式ともいう
静的優先順位方式
静的優先順位方式の場合,各タスクに,あらかじめ優先順位を設定し,優先順位の高い順にCPUの使用権を割り当てます。優先順位の低いタスクは,いつまでたっても実行されない可能性(問題)があります。
動的優先順位方式
動的優先順位方式の場合,各タスクのCPU使用状況から優先順位を設定し,優先順位の高い順にCPUの使用権を割り当てます。待ち時間の長いタスクの優先順位を上げるなどします。
ラウンドロビン方式
ラウンドロビン方式の場合,各タスクに,あらかじめCPUの使用時間を設定し,実行可能状態になったタスクから順に実行します。決められた時間内に処理が終わらなかった場合は,次のタスクにCPUの使用権を割り当てます(中断したタスクは,実行可能待ち行列の最後尾に移動します)。
処理時間順方式
処理時間順方式の場合,処理時間の短いタスクから順にCPUの使用権を割り当てます。
イベントドリブン方式
イベントドリブン方式の場合,キーボード入力などのイベントに応じてCPUの使用権を割り当てます。
イベントドリブンプリエンプション方式
イベントドリブンプリエンプション方式は,イベントドリブン方式に優先順位方式を組み合わせた方式で,優先順位の高い処理要求が発生した場合に,実行中のタスクを中断して,優先順位の高いタスクを確実に実行させます。リアルタイムOSなどで利用されています。
※ リアルタイムOS…リアルタイム処理(時間的な制約がある処理)を実行するための機能を備えたOS
記憶管理
記憶管理では,記憶装置の限られた記憶容量を効率的に利用できるように管理します。
実記憶管理
実記憶とは,物理的な記憶装置のことで,主記憶装置のことをいいます。現在のほとんどのコンピューターは,実行するプログラムを主記憶装置に読み込んで(ロードして)実行します(プログラム内蔵方式)。
実記憶管理では,記憶容量の限られた主記憶装置の記憶領域を効率よく割り当てたり解放したりします。
※ プログラム内蔵方式については,「コンピューターの五大装置 -情報処理シンプルまとめ」を参照
記憶領域の割り当て方式
単一区画方式
単一区画方式は,主記憶装置の記憶領域を1つの区画としてプログラムに割り当てる方式です。
図のように,1つの区画しかないため,主記憶装置に読み込んで実行することのできるプログラムは1つです(複数のプログラムを読み込んで実行することはできません)。
固定区画方式
固定区画方式は,主記憶装置の記憶領域を固定長に分割してプログラムに割り当てる方式です。
図のように,複数の区画に分割しますので,主記憶装置に複数のプログラムを読み込んで同時に実行することができます。また,各区画のサイズは固定長であるため管理しやすいです。しかし,各区画には未使用領域が発生しますので使用効率がよくないですし,区画のサイズより大きいプログラムを読み込むこともできません。
可変区画方式
可変区画方式は,主記憶装置の記憶領域をプログラムのサイズに合わせて割り当てる方式です。
図のように,各区画のサイズをプログラムのサイズに合わせますので,使用効率はよいです。しかし,記憶領域の割り当てと解放を繰り返すと,フラグメンテーションが発生します。
※ フラグメンテーションについては後述
スワッピング方式
スワッピング方式は,主記憶装置の空き領域が少なく,他のプログラムに割り当てられない場合に,優先順位の低いプログラムを一時的に終了して補助記憶装置に退避させ,空いた領域に実行したいプログラムを割り当てる方式です。
スワップアウト
スワップアウトとは,優先順位の低いプログラムを,主記憶装置から補助記憶装置に退避させることをいう
スワップイン
スワップインとは,補助記憶装置に退避させておいたプログラムを,主記憶装置に戻すことをいう
オーバーレイ方式
オーバーレイ方式は,主記憶装置の記憶容量よりも大きいプログラムを実行するためのしくみです。実行するプログラムを,あらかじめセグメントという単位に分割しておき,実行時には,必要なセグメントだけを主記憶装置に割り当てます。
フラグメンテーション
フラグメンテーション(断片化)とは,記憶領域の割り当てと解放を繰り返すことによってできる細切れの未使用領域が,多数できる現象をいいます。
フラグメンテーションが発生すると,未使用領域の合計が十分にある場合でも,プログラムに記憶領域の割り当てができない場合があります。
メモリコンパクション
メモリコンパクションとは,断片化した未使用領域を1つの連続した領域にまとめること(再編すること)をいいます。
未使用領域を1つに再編することにより,フラグメンテーション発生時には実行できなかったプログラムに記憶領域を割り当てることができるようになることがあります。
ガーベジコレクション
ガーベジコレクションとは,プログラムが使用しなくなったヒープ領域を回収して,その領域を再び使用可能にすることをいいます。
※ ヒープ領域とは,プログラムの実行中に必要となる記憶領域のことをいう。記憶領域の割り当てと解放を動的に行うので,フラグメンテーションが発生しやすい
メモリリーク
メモリリークとは,OSやアプリケーションソフトウェアのバグが原因で,確保した主記憶装置の記憶領域が解放されないことをいいます。メモリリークが発生すると,プログラムに割り当て可能な記憶領域が減少します。
※ メモリリークは,ガーベジコレクション対象外の記憶領域で発生することもある
仮想記憶管理
仮想記憶(空間)とは,補助記憶装置を利用して作成した(主記憶装置よりも大きい)記憶領域のことをいいます。
仮想記憶管理では,仮想記憶(空間)を作り出し,実記憶よりも大きい記憶領域を扱えるようにします。
実記憶 | 主記憶装置の記憶領域(実記憶空間) |
実アドレス (物理アドレス) | 実記憶空間におけるアドレス |
仮想記憶 | 補助記憶装置に作られた記憶領域(仮想記憶空間) |
仮想アドレス (論理アドレス) | 仮想記憶空間におけるアドレス |
図のように,実行するプログラムを(実行に必要な部分だけ)実記憶に読み込んだり,実記憶にあるプログラムを仮想記憶に退避させたりします。
動的アドレス変換(DAT;Dynamic Address Translation)
動的アドレス変換とは,仮想アドレスを実アドレスに変換するしくみをいう。メモリ管理ユニット(MMU:Memory Management Unit)という装置が行う
ページング方式
ページング方式は,プログラムをページという固定長のサイズ(4kバイトなど)に分割して管理する方式です。
図で,たとえば,CPUが「ページa0」にアクセスする場合,主記憶装置に読み込んでいないためページフォールトが発生します。ページフォールトを受け取ったOSは,「ページa0」を補助記憶装置から主記憶装置に読み込みます(ページイン)。
※ 主記憶装置に空きがない場合は,必要のないページを主記憶装置から補助記憶装置へ追い出し(ページアウト),空いた領域に読み込む(ページイン)
必要のないページと必要なページを置き換えるアルゴリズムには,次のようなものがあります。
FIFO | First-In First-Out(先入れ先出し) 最も早くページインしたページ(最も古くから主記憶装置に存在するページ)をページアウトする方式 |
LRU | Least Recentry Used 最後に参照してから,経過時間が最も長いページをページアウトする方式 |
仮想アドレス
仮想アドレスとは,プログラムが扱うアドレスで,次のように構成されています。
※ プログラム実行時には,仮想アドレスから実アドレスに変換(動的アドレス変換)する必要がある。これをメモリ管理ユニット(MMU)が行う
スラッシング
スラッシングとは,主記憶装置の容量不足によりページフォールトが頻発し,CPU処理時間のほとんどがページング(ページインとページアウト)に費やされてアプリケーションの実行ができなくなり,CPU使用率が極端に減少することいいます。
ファイル管理
ファイルとは,コンピューターで扱うプログラムやデータを補助記憶装置などに記録したものをいいます。
ファイル管理では,ファイルを適切に分類・整理して保存し,必要なときに取り出せるようにします。
ファイルの保存形式
ファイルの保存形式には,次のようなものがあります。
バイナリファイル | バイナリデータ(2進数)を記録したファイル。実行形式のプログラムや画像・動画・音声ファイルなどの多くが該当する |
テキストファイル | 文字列を記録したファイル(各文字は、文字コードで記録されている)。人間が容易に読むことができる |
ファイルの種類
ファイルの種類(利用目的で分類)には,次のようなものがあります。
プログラムファイル | プログラムを格納するファイル |
マスタファイル (基本ファイル) | 選手マスタファイルや,チームマスタファイルなどのような基本的なデータを記録した台帳のようなファイル。データは,比較的,長期間にわたり保存される |
トランザクションファイル (変動ファイル) | 1試合の試合結果データなど,一定期間に発生したデータを記録したファイル。マスタファイルを更新する場合にも使用される |
ジャーナルファイル (履歴ファイル) | 過去から現在までの履歴や更新記録を記録したファイル(ログファイル) |
バックアップファイル | 重要なファイルを複製したファイル。ファイルの破損に備えて,定期的に複製し退避する |
アーカイブファイル | 関連する複数のファイルを1つにまとめたファイル ※ アーカイバ…複数のファイルを1つにまとめるソフトウェア。圧縮機能を持つものが多い |
ファイルのアクセス法
ファイルのアクセス法とは,ファイルを取り扱う方法(レコードの読み書きなど)をいいます。
※ レコード…データ項目の集まり
順次アクセス(シーケンシャルアクセス)
順次アクセスは,ファイルに記録されたレコードを,先頭から順に読み書きするアクセス法です。選手一覧表を作成する場合など,すべてのレコードを順番に処理する場合に適しています。
直接アクセス(ランダムアクセス)
直接アクセスは,特定のレコードを直接読み書きするアクセス法です。レコードのキー値(選手番号など)や,レコードのアドレスを指定することによりアクセスします。
動的アクセス(ダイナミックアクセス)
動的アクセスは,特定のレコードにアクセスしたあと,そこから順にアクセスするアクセス法です(直接アクセスと順次アクセスを組み合わせたアクセス法)。
ファイルの編成法
ファイルの編成法とは,レコードを特定の構造で記録する方法をいいます。
順編成
順編成とは,レコードを順番に記録していく方法です。直接アクセスはできませんが,レコードの記録効率がよく,あらゆる記録媒体(磁気テープや磁気ディスクなど)に記録できます。
直接編成
直接編成とは,レコードのキー値からアドレスを算出し,記録する位置を決める方法です。アドレスの算出には,ハッシュ関数などを使用します。
※ ハッシュ関数については,「ハッシュ関数 -情報処理シンプルまとめ」を参照
索引編成
索引編成は,索引領域(索引を格納する領域),基本データ領域(レコードを記録する領域),あふれ領域(レコードの追加によりデータ領域からあふれたレコードを記録する領域)の3つの領域から構成されます。
※ あふれ域が大きくなった場合は再編成する
区分編成
区分編成は,ディレクトリーと,複数のメンバから構成されます。
※ メンバ…レコードを集めた小規模な単位
VSAM編成
VSAM編成は仮想記憶方式で利用される編成法です。順編成,直接編成,索引編成の特徴を併せ持ちます。順次アクセス,直接アクセスが可能です。
ファイルシステム
ファイルシステムとは,記憶装置を管理・制御し,ファイルの読み書きをできるようにするシステムをいいます。多くのOSが,ディレクトリー(フォルダー)を使用した階層構造でファイルを管理しています。
ディレクトリー
ディレクトリーは,別のディレクトリーやファイルを収めるものです。
ホームディレクトリー
ホームディレクトリーとは,アカウントを持つ利用者がログインした時点で位置づけられるディレクトリーをいいます。利用者は,ホームディレクトリーの下で,ディレクトリーやファイルを管理することができます。
パス指定
パスとは,ファイルやディレクトリーまでの経路のことをいい,パス指定には,次のようなものがあります。
絶対パス指定 | ルートディレクトリーから目的のファイルまでを指定する記述方式 |
相対パス指定 | カレントディレクトリーから目的のファイルまでを指定する記述方式 |
※ カレントディレクトリー…現時点で作業を行っているディレクトリーのこと
また,パスを指定する場合,次のような記号を使用します。
\ | ディレクトリーの区切りを表す |
. | カレントディレクトリーを表す |
.. | 1つ上の階層のディレクトリーを表す |
具体的を載せておきます。
まとめ
今回は,基本ソフトウェア(OS)について,シンプルにまとめてみました。ジョブ管理やタスク管理,記憶管理(実記憶管理,仮想記憶管理),ファイル管理については,しっかり理解できるまで繰り返し読んでみましょう。基本情報技術者試験や応用情報技術者試験などの情報処理技術者試験で,実際に出題されています。覚えるのが辛いかもしれませんが頑張りましょう。