1. ソフトウェア
    1. ソフトウェアとは
    2.  ハードウェア(機械)に対し、これを効率よくかつ柔軟に動かすためのもの。

      • システムソフトウェア
      •  ハードウェアをユーザーが操作可能にする機能を備えたソフトウェア。

        • 基本ソフトウェア
        •  ハードウェアを制御する基本的な機能を備えたソフトウェア。広義のオペレーティングシステム。

          • 制御プログラム
          •  ハードウェアを効率的に動かす狭義のオペレーティングシステム。

          • 言語処理プログラム(言語プロセッサ)
          •  各プログラム言語で書いたプログラムを解釈実行するプログラム。

          • サービスプログラム
          •  ファイルを変換したり、整列したり、テキストを編集するソフトウェア。

        • ミドルウェア
        •  基本ソフトウェアと応用ソフトウェアの中間的ソフトウェア。応用ソフトウェアに共通的な機能を提供するソフトウェア。

      • アプリケーション(応用)ソフトウェア
      •  ユーザーが求める機能を備えたソフトウェア。

    3. オペレーティングシステム
    4.  コンピュータの生産性を向上するため、ソフトウェアを体系的に統合したもの。一般的にOSと略される。

      1. ハードウェア資源の有効活用

      2. ジョブ制御
      3.  コンピューターの利用者から見た作業単位はジョブと呼ばれる。このジョブを効率的に達成するためには以下の目標をクリアする必要がある。

        • スループット*の向上。
        • ターンアラウンドタイム*の短縮。
        • オーバーヘッド*の極小化。

      4. RASISの向上
        • Reliability…信頼性
        • Availability…可用性
        • Serviceability…保守性
        • Integrity…完全性
        • Security…機密性

      5. 応用ソフトウェアの負荷の軽減

    5. 制御プログラム
      1. タスク(プロセス)管理
      2.  タスク(プロセス)は実行されているプログラムのOS管理上の単位。コンピュータにジョブ管理機能を持たせるには必要な複数のプログラムを同時並行して実行する必要がある。マルチタスク*が実装されたOSにおいては複数のプログラムが同時に実行されるがCPU、メモリ、ハードディスクなどのハードウェア資源(リソース)は1つしかないため、資源の割り当ての競合が発生する。スループットを向上するには効率的な割り当てが求められる。

        • タスクの状態管理
          • 実行可能状態
          •  リソースの割り当てがあればタスクを実行できる状態。

          • 実行状態
          •  リソースが割り当てられてタスクを実行している状態。

          • 待ち状態
          •  入出力待などでリソースの割り当てが可能でもタスクを実行できない状態。

        • ディスパッティング
        •  実行可能状態のタスクにCPUの使用権を与え実行状態にすること。これを実行するプログラムはディスパッチャと呼ばれる。ディスパッチャはスケジューリング方式に基づき実行可能状態のタスクから実行状態にすべきタスクを選び、CPUの使用権を与えて実行状態にする。この際、今までCPUの使用権を割り当てられていたタスクが待ち状態にならなければスワップアウトされ、実行可能状態になる。このタスクからタスクへのCPUの使用権切り替えの動作をコンテキスト切替(コンテキストスイッチング)と呼ぶ。

        • コンテキストスイッチング
        •  タスクからタスクにCPUの使用権を切り替えること。二つの方法で切り替えが行われる。

          • プリエンプティブ
          • 割り込み処理や採用されたスケジューリング方式に基づき、タスクを強制的に実行状態から実行可能状態にする方法。

          • ノンプリエンプティブ
          •  タスクがSVC(入出力システムコール)*を実行することにより自主的に実行状態から待ち状態に遷移させる方法。

        • スケジューリング
          • 到着順(FIFO)方式
          •  タスクが生成された順に割り当てられる方式。ノンプリエンティブにコンテキストが切り替わる。

          • 優先度方式
          •  各タスクにあらかじめ優先度を設定しておく方式。プリエンティブにコンテキストが切り替わる。優先度の低いタスクが長時間処理されず、ターンアラウンドタイムが増加する場合もあるため、優先度が低くても一定時間経過すれば優先度が上がる動的優先度方式もある。

          • ラウンドロビン方式
          •  各タスクに一定のCPU使用時間(タイムクォンタム)を与え、これを使い切れば待ち行列の最後尾に回す方式。プリエンティブにコンテキストが切り替わる。

          • SJF(Shortest Job First)方式
          •  最もCPU使用時間が短いタスクを優先的に処理する方式。OSがあらかじめタスクのCPU使用時間を把握することは困難なため、ラウンドロビン方式のタイムクォンタムを短く設定して実現する。

          • 多重待ち行列方式
          •  タスクの優先度毎に待ち行列を設け、この各優先度の待ち行列はラウンドロビン方式でスケジュールする方式。

        • 排他/同期制御
        •  資源割り当ての競合が発生した際に、資源を獲得したタスクが資源を占有して他のタスクに資源の獲得を排除する仕組みを排他制御と呼び、資源を占有したタスクと他のタスクがお互いの状態を共有しあう仕組みを同期制御と呼ぶ。

          • セマフォ
          •  排他/同期を実現する資源の獲得状態を管理する仕組み。セマフォ変数と呼ばれる資源の空き数(資源がひとつであれば1)を示す変数に対し、タスクの状態が実行可能状態になればセマフォ変数から1を減らして待ち行列に並べ、実行状態にあったタスクがスワップアウトされればセマフォ変数を1増加して実行可能状態に戻す。セマフォ変数が0以下であれば資源は占有されていることになり、負の数分のタスクが待ち行列にスケジューリングされていることになる。

        • 割込み
        •  実行中のプログラムを一時中断して制御プログラムに実行の制御を移す。

          • 外部割込み(非同期割込み)
          •  ハードウェアに起因する割り込み。

            • 電源異常割込み
            •  コンピュータの電源異常による割込み。電圧低下や瞬停、停電による電源の喪失などにより起こる。

            • 外部信号割込み
            •  周辺装置からの信号による割込み。

            • 入出力(完了)割込み
            •  待ち状態にあるタスクに対する入出力処理が完了したことを通知する割り込み。

          • 内部割込み(同期割込み)
          •  プログラムの実行状況によって発生する割込み。タスクがOSに対しコール(発行)処理することによって発生するものが多い。

            • プログラム割込み
            •  オーバーフローなどの例外処理で発生する割込み。

            • SVC割り込み
            •  実行状態にあるタスクが入力待ちなどでCPU使用権を必要としない状況になった際、入出力システムコールを発行することで発生する割込み。

           割込みには優先度がある。現在実行中の割込みに対し、優先度の低い割込みが発生してもこの割込みはすぐに実行されないが優先度の高い割込みの場合は割込みがさらに割込まれる(多重割り込み)という状態が発生する。通常、割込みは割込みマスクを用いて禁止することもできるがノンマスカブル割込みであれば禁止することはできない。

          例)割込み優先度
           優先度  割込み





           電源異常割込み
           SVC割込み
           プログラム割込み
           外部信号割込み
           入出力割込み


      3. 記憶管理
      4.  主記憶の限られた容量で多くのプログラムを実行できるようにメモリに読み込まれるデータをコントロールする技術。記憶領域を仮想記憶と実記憶に分けてそれぞれで効率的な記憶管理をしつつ、相互作用でさらに効率を高める。

        • 実記憶
        •  補助記憶装置を用いた仮想記憶に対し、主記憶上に読み込まれたデータを管理する仕組み。

          • スワッピング
          •  実記憶上にないプログラムを読み込む際、主記憶の容量が不足していれば実記憶上の別のプログラムを一時的に主記憶から外して(スワップアウト)、ロードしたプログラムが不要になればプログラムを主記憶に戻す(スワップイン)仕組み。後述の仮想記憶におけるページング方式がプログラムを分割したページ単位で管理されるのに対し、スワッピングはプログラム単位で管理する。

          • ガーベジコレクション
          • ガーベジコレクションとは実記憶上で実際には利用されていない記憶領域を集約すること。ガーベジ(ゴミ)をコレクション(収集)することからこう呼ばれる。タスクの生成によって確保された記憶領域はタスクの消滅後、解放されて空き領域となるが微細すぎて他のタスクが発生しても利用できず、断片化(フラグメテーション)して余ることがありうる。これによって実質的にメモリが解放されておらず、メモリが不足するメモリーリークが発生するため、ガーベジコレクションによってこの微細な空き領域を集約し、ひとつの領域にまとめる。これをコンパクションと呼ぶ。オブジェクト指向プログラム言語においてはスタック構造でデータを保持する手続き型の言語と違いヒープ構造でデータを保持するため特にメモリーリークは発生しやすい。このためこのガーベジコレクションがあることが記憶管理の上で特に重要とされる。

          • オーバレイ
          •  プログラムをいくつかに分割して実行に必要な部分だけ動的にメモリに読み込んで記憶領域を節約する方法。プログラムの作成時にプログラマが考慮してプログラムすることで実現可能。

        • 仮想記憶
        •  主記憶装置の容量を上回るデータ量を持つプログラムを書き込むにあたって補助記憶装置を仮想的な主記憶領域として用いる仕組み。キャッシュが主記憶の高速化のために用いられるのに対し、仮想記憶は主記憶の容量不足を補う。実現にはページング方式が用いられる。これは主記憶の割り当て領域を「ページ」と呼ばれる単位で管理し、補助記憶上のプログラムを「スロット」と呼ばれる単位で管理して主記憶への書き込みを行う方式である。

          • ページイン
          •  補助記憶のスロットを主記憶のページに書き込むこと。

          • ページアウト
          •  主記憶のページからスロットを補助記憶に移すこと。

          • ページフォールト
          •  主記憶のページに必要なスロットがないこと。

           ページフォールトが生じ、ページインを行うにあたって空きページがない場合、まずページアウトを行う必要がある。この一連のページ置き換えの動作をページリプレースメントと呼ぶ。仮想記憶はページイン、ページアウトが頻繁に起こると処理能力が低下するスラッシングという現象が発生する。ページングにあたってはページングアルゴリズムによりページアウトするページが決められる。

          • FIFO(First in First Out)
          •  ページインした順にページアウトしていく方式。

          • LRU(Least Recently Used)
          •  最も長い時間参照されていないページをページアウトしていく方式。

          • LFU(Least Frequently Used)
          •  最も参照回数が少ないページをページアウトしていく方式。

          • LIFO(Last in First Out)
          •  ページインした順とは逆にページアウトしていく方式。最新のページがページアウトされる。

      5. ファイル管理
      6.  データをファイルとして補助記憶装置に恒久的に保存しておく仕組み。データは通常、レコードと呼ばれる単位に分割してファイルに保存される。DBMSはこのファイル管理機能をより高度にしてオペレーティングシステムから独立させたものであり、DBMSを利用しないシステム構成においてはこのファイル管理機構がデータを管理することになる。

        • アクセス方式
          • 順アクセス
          •  ファイルにあるレコードを格納順に一件づつ読み出し、書き込みを行う方法。書き込みは高速だが必要となるレコードの読み出しに時間がかかる場合がある。

          • 直接アクセス
          •  ファイルにあるレコードを直接読み出し、書き込みを行う方法。特定のレコードを取得するにはキーとなるレコードの値(キー値)からハッシュ関数により格納アドレスを求める。読み込みは平均して高速になるが、書き込みはハッシュ値を求めることによるオーバーヘッドが発生するため時間がかかる。

            ※ハッシュ関数
             キーとなる値から特定のアルゴリズムに基づいてハッシュ値(メッセージダイジェスト)を導出する関数。直接アクセス方式では通常これを格納アドレスにする。キー値からハッシュ値を求めるのはたやすいが、ハッシュ値からキー値を求めることは難しいため一方向性関数と呼ばれる。ハッシュ関数ではアルゴリズムにより異なるキー値であっても同じハッシュ値(格納アドレス)が導出される場合もあり、データコリジョン(衝突)が発生する。これをシノニムレコードと呼ぶ。

        • ファイル編成法
          • 順編成
          •  補助記憶装置に順番にレコードを記憶するファイル編成法。順アクセスに適している。主に磁気テープで採用される最も原始的な方法。

          • 直接編成
          •  直接アクセスで用いられる、補助記憶装置にランダムにレコードを記憶するファイル編成法。ファイルの格納位置の取得は格納先のアドレスを直接指定する。主に磁気ディスクで採用される。

          • 索引編成
          •  補助記憶装置に順番にレコードを記憶するが、索引(インデックス)により直接アクセスが可能な編成法。書き込みと最初の読み込みは順アクセス方式でおこない、最初の読み込み時に対象レコードのインデックスを生成してこれをキー値とする。これにより順アクセス方式と直接アクセスの双方のメリットを享受することができる。索引編成のデメリットとして生成したインデックスもファイルとして別に格納する必要があり、記憶容量を消費する点が挙げられる。主に磁気ディスク(とりわけRDBMS)で採用される。

          • 区分編成
          •  複数のレコードをいくつかのメンバに集約して順編成し、ファイル内ではこのメンバを直接編成するファイル編成法。読み込み時はまず、対象となるメンバを指定して直接アクセスし、メンバ内のレコードを順アクセスする。デメリットとして対象レコードの他にメンバを指定しなければならないため、オーバーヘッドが増大する。主に磁気ディスク(とりわけRDBMSとディレクトリ構造のファイル管理)で採用される。

          • VSAM編成
          •  仮想記憶で利用されるファイル編成法。

    6. 言語プロセッサ
      1. 翻訳ソフトウェア
      2.  高水準言語プログラムで書かれたソースプログラムをオブジェクトプログラム(目的プログラム)に変換する。ソフトウェア。

        • アセンブラ
        •  低水準(アセンブリ)言語で記述されたソースプログラムを機械語で記述されるオブジェクトプログラムに変換する。

        • コンパイラ
        •  高水準言語で記述されたソースプログラムを機械語で記述されるオブジェクトプログラムに変換する。

        • インタプリタ
        •  アセンブラやコンパイラがファイルにあるソースプログラムを一度に機械語に翻訳した後、別のファイルを生成するのに対しインタプリタは一命令ごとに解釈しながら実行する。このため処理速度が遅くなるが、ソースプログラムとオブジェクトプログラムが分かれないため管理が容易になるなどの利点がある。

        • ジェネレータ
        •  入力・処理・出力などの必要な条件をパラメタで指示することによって、処理目的に応じたオブジェクトプログラムを生成する。

        • シミュレータ
        •  本来互換性のない他機種のプログラムを自機種のプログラムに変換するソフトウェア。

        • エミュレータ
        •  本来互換性のない他機種のプログラムが自機種で動作するように対象機種のマイクロプログラムを仮想的に用意し、自機種のマイクロプログラムに変換するソフトウェア。シミュレータの概念をより具体化したもの。

      3. ローダとリンカ
      4.  プログラマにより編集され、外部記憶装置に保存されたプログラムはリンカ(連係編集プログラム/リンケージエディタ)によってライブラリと関連付け(リンク)されローダによって主記憶上に読み込まれ、ロードモジュールとして扱われる。

      5. 静的リンクと動的リンク
      6.  複数のプログラムが利用するライブラリとロード対象のプログラムを関連付けすることをリンクと呼ぶ。リンクには次の二つがある。

        • 静的リンク
        •  個々のロードモジュールにライブラリ上のプログラムがロードされる。複数のロードモジュール(プログラム)が同時にロードされる場合、ライブラリ上の同じプログラムがいくつも主記憶上にロードされることになり、主記憶容量に負荷がかかる。

        • 動的リンク
        •  個々のロードモジュールにライブラリ上のプログラムの参照位置がロードされる。複数のロードモジュール(プログラム)が同時にロードされても参照先のライブラリは一つなので主記憶容量が節約できる。ライブラリはあらかじめ別にロードされている必要があるため、ダイナミックリンクライブラリ技術によってOSに管理を依存している。

      7. 共有ライブラリとプログラムの再利用性
      8.  動的リンクで利用されるライブラリを特に共有ライブラリと呼ぶ。共有ライブラリには再利用性(リユーザブル)が求められる。これは一度ローディングされれば、再度ローディングする必要がないよう、呼び出される度に変数を初期値に戻すなどの処理が実装されたプログラムを指す。特に変数領域を初期化し、プログラムが呼び出されるたびに格納領域を変えられることを再配置可能(リロケータブル)と呼ぶ。また、共有ライブラリが複数のプログラムから同時に呼び出される場合は再入可能性(リエントラント)が求められる。これはプログラムの呼出しをスタック構造にすることにより、複数のプログラムに呼び出されても結果が狂うことなく処理される性質のことである。再入可能なプログラムは再利用可能であるが、再利用可能であっても再入可能ではないプログラムは逐次再利用可能(シリアルリユーザーブル)と呼ばれる。再入可能(スタック構造)なプログラムは再帰可能性(リカーシブ)を持ち、再帰呼び出しが可能である。これはプログラムが自分自身を呼び出すことで、繰返し処理などに利用される。