コンテンツにスキップ

3. ソフトウェア

3.1. ソフトウェアとOS

3.1.1. ソフトウェアの分類

ソフトウェアはコンピュータ内の果たす役割により基本ソフトウェア応用ソフトウェアミドルウェアに分類できる。

基本ソフトウェア

基本ソフトウェアはコンピュータを動作させるための基本機能を提供するソフトウェア。OSとも呼ばれる。

  • 基本ソフトウェア
  • 制御プログラム ... ハードウェアを管理しコンピュータを効率管理できるように働くソフトウェア
  • 言語処理プログラム ... C言語、Javaなどのプログラム言語で書かれたプログラムを機械語に翻訳するプログラム
  • サービスプログラム ... コンピュータの機能を補う補助的なプログラムでユーティリティと呼ばれ、ファイル圧縮プログラムなどがある

応用ソフトウェア

応用ソフトウェアはアプリケーションとも呼ばれるユーザに近い作業を実現するソフトウェアのこと。

ミドルウェア

ミドルウェアは基本ソフトウェアと応用ソフトウェアの間に位置し、応用ソフトウェアが共通に利用する専門機能を提供するソフトウェアのこと。DBMSなどがある。

3.1.2. OS

OSの役割

OSが果たす役割は以下の通り。

  1. ハードウェアの管理
  2. ファイルの管理
  3. 周辺機器の管理

代表的なOS

種類 説明
Windows Microsoft社製のOS、GUIによる画面操作でコンピュータに命令を行う
Mac OS Apple社製のクリエイティブな作業によく用いられるOS、GUIを先駆けで導入したことで有名
MS-DOS Windows普及前に使われていたMicrosoft社製のOSであり、CUI入力であったことで有名
UNIX サーバに使われることが多いOS、大勢のユーザが同時利用できるように考えられている
LINUX UNIX互換のOSであり、オープンソースで無償で利用可能

OSの操作性

コンピュータを操作するインターフェスとしてGUIとCUIがある。 GUIは画面を視覚的に操作することで命令を伝える操作方式でCUIはコマンドで操作する方式。

API

API(Application Program Interface)はOSが含み持つ各機能をアプリケーションから呼び出せる仕組みである、

RPA

RPAはソフトウェアによる自動化のことを指す。

3.2. ジョブ管理

ユーザからみて処理させたい一連の作業のかたまり単位がジョブであり、OSはそれを効率よく処理していけるように実行スケジュールを管理する。

ジョブ管理にはバッチ処理と呼ばれる処理に時間のかかる作業をコンピュータに登録しまとめて処理する仕組みがある。

3.2.1. ジョブ管理フロー

ジョブ管理はカーネルが持つ機能の1つであり、この機能でユーザとの間に橋渡しを行うマスタスケジューラという管理プログラムがある。

ユーザはこの管理プログラムにジョブの実行を依頼する。 また、マスタスケジューラはジョブの実行をジョブスケジューラに依頼し、マスタスケジューラは実行の監視に努め、ジョブスケジューラがジョブを実行する。

3.3. タスク管理

コンピュータから見た仕事の単位がタスクである。 タスクはシステムによってはプロセスと呼ばれる。

3.3.1. タスクの状態遷移

OSはタスクの使用権を適切の割り当てるため3つの状態に分けて管理を行う。 実行可能なタスクにCPUの使用権を割り当てることはディスパッチと呼ばれる。

  • 実行可能状態(Ready) ... いつでも実行可能でCPUの使用権が回るのを待機する状態、生成直後のタスクは待ち行列になりこの状態となる
  • 実行状態(Run) ... CPUの使用権が与えられ実行中の状態
  • 待機状態(Wait) ... 入出力処理が発生したので終了を待っている状態

3.3.2. タスクスケジューリング方式

タスクスケジューリングは択巣が複数存在する場合にどういう順番でタスクを実行すべきか決めるもののこと。2つの方式がある

プリエンプティブ方式

OSが強制的にタスクを切り替えるスケジューリング方法

方式の種類 説明
優先式方式 タスクに優先度を設定し、優先度が高いものから実行していく方式。実行中のタスクよりも優先度が高いものが待ち行列に追加されると実行途中でCPUの使用権が奪われる(プリエンプション方式)
ラウンドロビン方式 CPUの使用権を一定時間ごとに切り替える方式。実行可能状態になった順番でタスクにCPU使用権が割り当てられるが、規定時間に終わらなかった場合は待ち行列の最後に回される。

ノンプリエンプティブ方式

プログラムがタスクを切り替えるスケジューリング方式

方式の種類 説明
到着順序方式 実行可能となったタスク順にCPUの使用権を割り当てる方式。タスクに優先順位がないため、実行途中でCPUの使用権が奪われることはない(ノンプリエンプション)

3.3.3. マルチプログラミング

マルチプログラミングは複数のプログラムを見かけ上、同時に実行させることにより遊休時間を削減しCPuの使用効率を高めるものである。

3.3.4. 割り込み処理

実行中のタスクを中断し別の処理に切り替え、そちらが終了すると再び元のタスクに再帰する処理は割り込み処理と呼ばれる。

割り込み処理には下記のような種類がある。

内部割込み

内部割込みはタスク自体にエラーが発生しておこるもの

種類 説明
プログラム割込み 記憶保護例外などの場合に生じる割り込み
SVC割り込み 入出力処理の要求などのカーネル呼出し命令が生じた際に生じる割り込み
外部割込み

外部割込みはハードウェア故障などタスク以外が原因となって起こるもの

種類 説明
入出力割込み 入出力装置の動作完了時や中断時に生じる割り込み
機械チェック割込み 電源異常や主記憶装置障害などのハードウェアの異常時に生じる割り込み
コンソール割込み ユーザによる介入が行われた際に生じる割り込み
タイマ割込み 規定の時間を過ぎたときに生じる割り込み

3.3.5. スプーリング

CPUと入出力装置には処理速度に大きな差が存在する。 スプーリングと呼ばれる、低速な装置とのデータやり取りを高速な磁気ディスクを介して行い処理効率を高める手法が導入されている。

スプーリングを用いるとCPUの待ち時間を削減できるため、単位時間あたりに処理できる仕事量を増やすことが可能。

3.4. 記憶管理

3.4.1. 実記憶管理と仮想記憶管理

記憶管理には主記憶そのものを使用する実記憶管理と、補助記憶を一部使用して実際の主記憶より大きな記憶空間を作り出し、主記憶より大きな容量のプログラムを実行できるようにする補助記憶管理がある。

3.4.2. 実記憶管理

限られた主記憶空間を効率よく使われるようにプログラムに割り当てるのが実記憶管理の役割となる。実記憶管理の方式には区画方式スワッピング方式などがある。

区画方式

固定方式は主記憶をいくつかの区域に分割してプログラムを割り当てる管理方式のこと。

  • 固定区画方式 ... 決まったサイズに区画を分割する方式。メモリの獲得や返却などの処理時間は一定となる。
  • 可変区画方式 ... プログラムをロードするタイミングで必要なサイズに区切る管理方式。固定区画方式よりも主記憶の利用効率は良い。

フラグメンテーションとガーベジコレクション

可変区画方式の場合プログラムを主記憶上に隙間なく埋め込んで実行するとができるが、必ず詰め込んだ順番にプログラムが終了するとは限らないため連続した状態で主記憶の空き容量を確保することができない。 この現象はフラグメンテーション(断片化) と呼ばれる。

フラグメンテーションの解消のためにはロードされているプログラムを再配置することにより、細切れ状態の空き領域を連続したひとつの領域する必要がある。 この操作はメモリコンパクションまたはガーベジコレクションと呼ばれる。

スワッピング方式

スワッピング方式は優先度の低いプログラムを一時中断して補助記憶に退避させ優先度の高いプログラムを実行させる方式のこと。

スワッピングはプログラムを補助記憶に退避させる(スワップアウト)主記憶に戻す(スワップイン)することを指す。

スワッピング

オーバレイ方式

区画を効率よく配置できるようにしても実行したプログラムのサイズが主記憶の容量を超えていたらロードができない。 これを可能にするような工夫がオーバレイ方式である。

この方式ではプログラムをセグメントという単位に分割しておいて、そのときに必要なセグメントだけを主記憶上にロードして実行される。

オーバレイ

3.4.3. 仮想記憶管理

仮想記憶は主記憶や補助記憶の存在を隠蔽し、広大なメモリ空間を自由に扱えるようにするもの。 実記憶上の配置のような物理的制約を意識する必要がないのが特徴。

また仮想アドレスから実アドレスへ変化する処理はメモリ交換ユニット(MMU)が行う。またこの仕組みは動的アドレス変換機構(DAT) と呼ばれる。

また仮想記憶に置かれたデータは主記憶装置を超えても補助記憶装置もメモリの一部として扱うことにより主記憶装置よりも大きなサイズの記憶空間を提供できる。

ページング方式

仮想記憶の実装方式には仮想アドレス空間を固定長の領域に区切って管理するページング方式可変長の領域に区切って管理するセグメント方式がある。

ページング方式ではプログラムをページと呼ばれる単位で分割管理する。現在のOSでは実行に必要なページだけを実記憶に読み込ませる方式が主流である。

またこの方式では仮想記憶と実記憶の対応付けはページテーブルという表により管理され、これにより仮想記憶上と実記憶上のどのページが結びついている確認できる。

補助記憶から実記憶へのページ読み込みはページインと呼ばれます。またページインしようとしても実記憶がいっぱいの場合いずれかのページを補助記憶に追い出して空きを作る必要がある。実記憶から補助記憶へとページを追い出すことはページアウトと呼ばれる。

実記憶の容量が少ないとページの置き換えをする頻度が高くなりシステム利用効率が極端に低下する。この現象はスラッシングと呼ばれる。

ページ置き換えアルゴリズム

方式 説明
FIFO 最初にページインしたページを追い出し対象にする
LIFO 最後にページインしたページを追い出し対象にする
LRU 最も長い時間参照されていないページを追い出し対象にする
LFU 最も参照回数の少ないページを追い出し対象にする

3.5. ファイル管理

3.5.1. OSのファイル管理

OSはデータをファイルという単位で管理する。 ファイルはカテゴリごとにディレクトリ(フォルダ)という入れ物を使って整理する。

ルートディレクトリとサブディレクトリ

ディレクトリ中にはファイルだけではなく他のディレクトリも入れられる。 補助記憶装置全体に階層構造を持たせて管理することが可能である。

  • ルートディレクトリ ... 階層の一番上位に位置するディレクトリ
  • サブディレクトリ ... 他のディレクトリに含まれるディレクトリ

カレントディレクトリ

コンピュータが現在開いて作業しているディレクトリはカレントディレクトリと呼ばれる。 また、カレントディレクトリの1階層上のディレクトリは親ディレクトリと呼ばれる。

3.5.2. パスの指定

ファイルの場所はファイルパスを用いて示す。このファイルまでの場所を示す経路はパスと呼ばれる。

パスにはルートディレクトリからの経路を示す絶対パスとカレントディレクトリからの経路を示す相対パスが存在する。

絶対パスの表記

  1. ルートディレクトリは「/」or「\」で表す
  2. ディレクトリの次の階層は「/」or「\」で区分する

相対パスの表記

  1. ディレクトリの次の階層は「/」or「\」で区分する
  2. カレントディレクトリは「.」で表す
  3. 親ディレクトリは「..」で表す

3.5.3. コンピュータにおけるファイルの扱われ方

コンピュータにとってのファイルは一連のデータをまとめたものであり、レコードの集合がファイルである。

コンピュータのOSがどのようにレコードを格納するかを定義づけたファイル構成法をいくつか用意している。

ファイルへのアクセス方法

アクセス方式 説明
順次アクセス 先頭レコードから順番にアクセスする方法であり、シーケンシャルアクセスと呼ばれる。
直接アクセス 任意のレコードに直接アクセスする方法であり、ランダムアクセスと呼ばれる。
動的アクセス 順次アクセスと直接アクセスを組み合わせた方法で、任意のレコードに直接アクセスした後以降、順次アクセスで順番に処理する。

3.5.4. 順編成ファイル

先頭から順番にレコードを記録していくのが順編成ファイル。もっとも単純な編成法で順次アクセスのみが可能である。

3.5.5. 直接編成ファイル

レコード中のキーとなる値を利用することで任意のレコードを指定した直接アクセスを可能となる編成法。

直接アクセス方式と間接アクセス方式があり、キー値から格納アドレスを求める方法が異なる。

直接アクセス方式

キー値の内容をそのまま格納アドレスとして用いる方式。

間接アドレス方式

ハッシュ関数という計算式によりキー値から格納アドレスを算出して用いる方式。

またハッシュ関数での計算値が一致し異なるレコードが同じアドレスで衝突する現象はシノニムと呼ばれそれが起こるレコードはシノニムレコードと呼ばれる。

3.5.6. 索引編成ファイル

索引を格納する索引域とレコードを格納する基本データ域、そこからあふれたレコードを格納する溢れ域の3つの領域から構成される。

索引による直接アクセスと先頭からの順次アクセスに対応した編成法である。

3.5.7. 区分編成ファイル

メンバと呼ばれる順編成ファイルを複数持ち、それらを格納するメンバ域と各メンバのアドレスを管理するディレクトリ域で構成される編成法。

これはプログラムやライブラリを保存する用途によく使われる。