ここでは、OS(オペレーティングシステム)やソフトウェアについて記述します。OSはパソコン・コンピュータを動かす上で基本なプログラムで、各システムの動きを司どっています。このOSとプログラムは密接な関係で、OSの制御により市販の各プログラムは動いています。
1 ソフトウェアの分類について
コンピュー上でソフトウェアは以下のとおり分類されます。
- システムソフトウェア
ハードウェアを制御して各機器(本体など)を動かすソフトウェア。基本ソフトウェアとも言います。 - 応用ソフトウェア
アプリケーションプログラムとも呼ばれ、各業務処理を実行するソフトウェア。共通応用ソフトウェアや個別応用ソフトウェアとも言います。 - ミドルウェア
基本ソフトウェアと応用ソフトウェアの中間に位置するもので、OS上で動作しアプリケーションソフトに対してOSよりも高度で具体的な機能を提供するソフトウェア。
代表的なミドルウェアにはデータベース管理システム(DBMS)や、トランザクション処理機能を提供するTPモニタ、分散オブジェクト環境を提供するORBなどがあります。
2 OSについて
OSとは、上記で基本ソフトウェアのこを言い、MS-DOSやWinodwsなどがこれにあたります。
OSのプログラムは以下のように分類されます。
- 制御プログラム(狭義のOS)
ジョブ管理、タスク管理、データ管理、記憶管理、運用管理、障害管理、通信管理、入出力管理などハードを制御する役割のソフトです。 - サービスプログラム(広域のOS)
ファイル変換、テキストエディタ、分類/併合、整列等、プログラム作成やファイル管
理を行うソフトです。 - 言語処理プログラム(広域のOS)
コンパイラ、インタプリタ、ジェネレータ、アセンブラ等、プログラム等ソフトウェ
アを開発するためのソフトです。
このようにOSと言うと、広義と狭義の意味の2種類があります。
3 OSの目的とは
OSはハードウェア本体を効率よく動かすのが第一の目的であり、その目的は次の通りとなります。
- スループットの向上(処理時間当たりの処理能力)
スループットとはコンピュータが単位時間内に処理できる命令の数や、通信回線の単位時間あたりの実効転送量などを意味します。
- ターンアラウンドタイムの短縮(ジョブを出してから結果が出るまでの時間)
ジョブ(演算や命令)を出してから結果が出るまで時間がかかると、当然全体の処理が遅いことになります。
- レスポンスタイムの短縮(データ入力が終了した時点から出力開始までの時間)
たとえば、身近に印刷命令を送ってから、印刷を開始するまでの時間が早ければ、当然処理が早いことになります。 - RASISの向上
RASISとはコンピュータシステムの信頼性を評価する「信頼性」「可用性」「保守性」「保全性」「機密性」の頭文字を集めたものです。
また、使用面での目的は、
- GUIによる操作性
GUIとは基礎的な操作をマウスなどによって行なうことができるユーザインターフェースのことを言います。
最近ではGUIを利用するための基本的なプログラムをOSが提供することにより、アプリケーションソフトの操作感の統一や、開発負担の軽減などが図れています。 - メモリや周辺機器の増設等が容易に行える拡張性
- どのコンピュータでもデータやソフトが使用できる汎用性
4 ジョブ管理とタスク管理について
1.ジョブとタスクとは
「ジョブ」とは人間から見た仕事(プログラム)の量を表し、単一のプログラムや連続的な一連のプログラムの集団のことをいいます
「タスク」とはコンピュータから見た仕事の量で、OSの下で実行される内部処理の単位となります。
ジョブは、バッチ処理の場合、ユーザが「JCL(ジョブ制御言語)」で記述して、コンピュータに指示を与えます。
プログラムのジョブ管理がこれを受取り、「ジョブステップ」という単位に分割します。
その後、「タスク管理」がジョブステップごとに「タスク」を作成してコンピュータが実行できるようにします。
つまり、タスクは、プログラムの処理を細分化した処理単位です。
「プロセス」これは、実行中のプログラムの量を示します
「スレッド」マルチスレッドOSにおけるプログラム実行の単位のことを言います。
マルチスレッドOSでは、プログラムの中で複数のスレッドを実行することが出来ます。
2.ジョブ管理
ジョブ管理プログラムは「ジョブスケジューラ」とも呼ばれ、コンピュータに導入さ
れた複数のジョブをスケジュール管理し、効率的に実行させています。
「ジョブ管理プログラム」は以下の流れがあります。
- リーダ
ジョブの読み込み - ジョブスケジューラ
ジョブイニシエータ(ジョブの開始)→ジョブターミネータ(ジョブの終了) - マスタスケジューラ
ユーザとジョブスケジューラとのやり取り - ライタ
ジョブの出力
その他として「スプーリング」があります。
よくプリンタ出力などで使われる機能で、ジョブの入出力をプログラムとは独立させて行う機能です。
3.タスク管理
ジョブ管理で生成されたジョブステップはタスク管理に渡されて、タスクが生成されます。
タスクには以下の通りに生成から消滅まで遷移します。
「実行状態」
CPUの使用権が与えられ実行できる状態のタスク
「実行可能状態」
実行可能であるがCPUの空きを待っている状態のタスク
「待機状態」
入出力処理を行っておりその終了を待っている状態のタスク
タスク管理には「ディスパッチャ」というものがあり、実行可能状態のタスクから優先順位の高いタスクを実行状態にしたり、実行状態のタスクを中断させたり、CPUの割り当ての切り替えを行うプログラムです。
また、「スーパバイザ(SV)」というプログラムもあり、不定期に発生するプログラム上の割込みの監視を行います。
また、タスクプログラムは、以下の種類があります。
- 再使用不可能プログラム
実行中にプログラムの内部の値が変更されるため、再度実行する場合はもう一度そのプログラムをロード(読み込み)する必要がある。 - 再使用可能プログラム(リユーザブル)
実行中に変更した値が初期状態に戻るため再ロードする必要がなく、自動実行されます。
再使用可能プログラムには以下の2種類があります。
- 逐次再使用可能プログラム
1つのタスクの終了後、再ロードすることなく繰り返し使用することのできるプログラム。 - 再入可能プログラム(リエントラント)
タスクごとにデータ領域を持つことによって複数のタスクを並行して同時実行できるプログラム。 - 再配置可能プログラム(リロケータブル)
主記憶上のどの位置に読み込まれても実行できるもの。「ペースアドレス指定方
式」であることが必要です。 - 再帰プログラム(リカーシブ)
自分自身を呼び出して(自分で自分のプログラムを再度実行させることができる)
使うことのできるプログラム。
5 マルチプログラミングについて
入出力などの無駄な時間(アイドルタイム)を利用して複数のプログラムを見かけ上同時に実行させ、スループット(処理能力)の向上を図るものです。
実際は、アイドルタイムを利用して他のプログラムにCPUを割り当てます。これにより実現されています。
マルチプログラミングを行うには「割込み」というのが重要となってきます。
割込みとは、現在実行中のプログラムに別の要求が発生した場合、一時中断して要求に応じた別のプログラムを実行させることを言います。
割込みには以下の種類があります。
- 内部割込み
プログラム上から生じる割込みです。主に2つの種類(原因)があります。
・プログラム割込み プログラムの実行中に異常が発生した場合の割込み。
・SVC プログラムから入出力が必要になった時に生じる割込み。 - 外部割込み
プログラム以外の原因で生じる割込みです。4つの種類(原因)があります。
・入出力割込み 入出力処理の終了や誤動作が生じた時の割込み。
・マシンチェック割込み ハードウェアの異常、誤動作が生じた時の割込み。
・コンソール割込み オペレータが介入する時の割込み。
・タイマ割込み 監視タイマで一定時間を経過した時に生じる割込み。
6 実記憶管理について
プログラム等を主記憶装置(メモリ等)に実記憶管理する場合、実行するプログラム
を有効に配置する必要があります。
この配置の「区画方式」には、以下の種類があります。
- 単一区画方式(固定)
主記憶装置内のプログラムの区画は1個だけで1つのプログラムのみ実行します。利用効率がよくありません。 - 多重区画方式(固定)
主記憶装置を一定の大きさに分割してそれぞれのプログラムを割り当てます。この場
合は大きなプログラムが実行できず、小さななプログラムでも1個の区画を使用してしま
います。 - 可変区画方式(可変)
主記憶装置をプログラムの大きさに合わせて区画を割り当てます。利用効率が非常に高い方法です。
ただし、この方法は、小さなプログラムのロードを繰り返していると主記憶の領域に細分化された空き領域である「フラグメンテーション」が多数発生します。
これが多数生じると空き領域が細分化されているため、大きなプログラムをロードできません。
これを、解法する方法としては、ロードされているプログラムをもう一度先頭から配置し直すことで回避します。これを「コンパクション」と言います。
コンパクションを行うためには、各命令アドレスの再配置が必要です。これを実現するプログラムを「再配置可能プログラム」と言い、再配置方法は次の方法があります。
静的再配置 実行前に再配置します。
動的再配置 実行中に再配置します。
実記憶管理の方法について次のようになります。
- スワッピング方式
これは、優先度の高いプログラムをロードするため(スワップイン)、優先度の低いプログラムを中断して補助記憶装置に退避させる(スワップアウト)方法をです。 - オーバレイ方式
主記憶装置よりも大きなプログラムを実行する場合、プログラムを「セグメント」単位に分割して補助記憶装置に入れておきます。
実行時に必要なセグメントのみロードして実行させる方式を言います。
7 仮想記憶システムについて
補助記憶装置を利用して実際の主記憶装置よりも大きな記憶空間を可能にしたものです。いわゆる補助記憶装置の一部が主記憶装置になっています。
仮想記憶は、
実際の主記憶領域「実記憶(実空間)」
このアドレスを「実アドレス(物理アドレス)」補助記憶装置を利用した仮想記憶領域。
「仮想記憶(仮想空間)」このアドレスを「仮想アドレス(論理アドレス)」
の2つで構成されています。
仮想記憶に分割して配置されたプログラムは必要になった時点で実記憶に割り当てられる「動的再配置」が行われます。
この際、「仮想アドレス」を「実アドレス」へ変換するハードウェアを「動的アドレス変換機構(DAT)」と言います。
よって内部では命令実行のたびに、仮想アドレスを実アドレスへ変換しています。
仮想記憶方式には以下の2種類の方式があります。
1.ページング方式
ページングの方法は次のように行われています。
・プログラムを2~4Kの一定の大きさの「ページ」という単位に分割して「実アドレス空間」と「仮想アドレス空間」の双方に動的配置します。
このとき、ページ単位での実アドレス空間と仮想アドレス空間の場所を対応付け(マッピングと言う)する必要があります。
実記憶側では、「ワーキングセット(ページ数)」が設定されています。
・DATにより仮想アドレスを実アドレスへ変換します。
・実記憶上に必要なページが存在しない(ページフォルト)が発生した場合、その必要なページを主記憶へ転送する(ページイン)。
・ページインを行った後、主記憶上で最も使用頻度の低いページから順に仮想記憶に戻し、ページの入れ替え(ページアウト)を行う。
不要なページと必要なページの出し入れの操作を「ページリプレースメント」と言います。
ページリプレースメントには以下の2種類があります。
「FIFO方式」 一番先に入ったページを一番先にページアウトする。
「LRU方式」 最も長い間使用されなかったページをページアウトする方法。
2.セグメント方式
基本的に処理形態はページング方式とほぼ同様ですが、単純に一定の大きさに分けるのではなく、「セグメント」という論理的なまとまりでプログラムを分割します。
但し、ページイン/ページアウトのことを「ロールイン/ロールアウト」と言います。
このように仮想記憶では、実記憶よりも記憶空間を使用できますが、問題点として実記憶が小さい場合や複雑なジャンプが多数使用されている場合はページの入れ替えが頻繁に行われます。
この現象を「スラッシング」と言います。
回避方法としては、実記憶を大きくするか、1ページの大きさを小さくしてワーキングセットを増やす必要があります。
8 言語処理プログラム
プログラム(ソフトウェア)を作成するときに、まずは命令を入力していきます。それで入力された一連のプログラムを「ソースプログラム」といいます。
そのソースプログラムを機械語に翻訳するプログラムのこと「言語処理プログラム」をいい、翻訳されて出来上がったプログラムを「目的プログラム」と言います。
言語処理プログラムには以下の種類があります。
- アセンブラ
アセンブラ言語で記述されたプログラムを翻訳します。アセンブラ言語の命令語は機械語と1対1で対応します。そのため、特徴として高度な動きの場合も一つの命令ではできないので、複数の命令で作成します。
「マクロ命令(定期的に使用する命令を1つに定義したもの)」が使用できます - コンパイラ
高水準言語(命令が英文に近く、作成されやすい)で記述されたプログラムを一括して目的プログラムに翻訳します。(COBOL FORTRAN C等)以下の過程となります。
作成手順は次のとおりとなります。
- 原始プログラムの作成
- コンバイル
(構文等をチェックし、エラー等があれば修正)
翻訳は、「字句解析」「構文解析」「意味解析」「最適化」「コード生成」の順です。
「字句解析」原始プログラムを変数や演算子などのトークン(意味の持つ最小単位)に分ける
「構文解析」トークンの並びが文法に合致しているか調べる
「意味解析」変数や演算子が適切に使用されているかどうか調べる
「最適化」プログラムの冗長性の排除
「コード生成」目的プログラムを生成する - ロードモジュール(実行可能プログラム)の作成
複数の目的プログラムをリンカ(連携編集プログラム)によって連結してロードモジュールを作成する。
プログラムの実行中にリンクすることを動的リンク(ダイナミックリンク)と言います。
動的リンクを行うライブラリーを動的リンクライブラリー(DLL)と言います。
必要時に動的リンクが呼ばれるため、実行時のメモリを節約出来ます。 - 実行(実アドレスへの変換)
ローダとよばれるプログラムを使用してロードモジュールを主記憶装置にロードする。
ロータとは、プログラムを主記憶にロードすることです。(つまり、実アドレスへの変換)
- 原始プログラムの作成
- インタプリタ
原始プログラムの命令を1個ずつ翻訳しては実行する言語処理プログラムです。
(BASIC APL Perl PHP等)
コンパイル言語とは違い、原始プログラムを翻訳する作業が必要でないため、実行=エラー修正が容易に行えます。
その反面、そのつど翻訳されるため、処理は遅くなります。 - .ジェネレータ
あらかじめ用意されたパラメータを入力することで目的プログラムを生成します。「生成プログラム」とも言います。(RPG) - プリコンパイラ
主処理プログラムをコンパイルする前のデータ変換や整列などの前処理的な編集を行う言語処理プログラム。 - クロスコンパイラ
異機種のコンピュータ(OS)の目的プログラムを生成する言語処理プログラム。
9 プログラム言語の種類
プログラムの言語はCPUの発達にともない、進化してきました。これは、CPUの処理できるビット数により実行できる命令の数が増えてきたからです。
プログラムの言語は大きく次のように分けられます。
汎用プログラム言語 低水準言語 機械語(第1世代)
アセンブラ言語(第2世代)
高水準言語(第3世代) 手続き型言語(COBOL FORTRAN BASIC C)
非手続き型言語(RPG LISP PROLOG Smalltalk)
第4世代言語(4GL) - -
スクリプト言語 Perl PHP -
特殊問題向き言語 - -
非手続き型言語は以下のように分類出来ます。
オブジェクト指向型 Smalltalk Java
関数型 LISP
論理型 Prolog
表形式型 RPG
各言語の特徴は次の通りです
- Fortran
古い歴史を持つ科学技術計算用の言語。数式をほぼそのまま記述できるのが特徴で、
世界初の高級プログラミング言語でもあります。 - COBOL
英文に似た記述で事務処理用の言語。事務処理などの一括処理に向いており、信頼性・保守性・堅牢性に優れています。 - C言語
UNIXを開発した言語で、国際標準化機構(ISO)や日本工業規格(JIS)にも標準として採用されています。
豊富な演算子やデータ型、制御構造を持ち、構造化プログラミングに適しています。
また、特定のプラットフォームに依存した部分を言語から切り離しているため、移植性の高いプログラムを記述することができます。 - PL/1
FortranとCOBOLを統合した言語で、あらゆる用途に耐える汎用の言語としてすべての言語を置き換えるべく開発されました。
しかし、あまりに巨大で複雑な言語仕様のため満足なパフォーマンスのコンパイラを開発することができず、また他の言語が改良されたこともあり、現在ではあまり使用されていません。
- ALGOL
ヨーロッパの学術機関が中心となって開発した科学技術計算分野に適した言語。
アルゴリズムの記述に向いていまる。PascalやC言語に強い影響を与えた言語であ
るといわれています。 - BASIC
初心者用に開発されたインタプリタの言語。Microsoft社のVisual Basicなどのように、コンパイラを使うことにより実行速度を向上させた派生言語も存在します。 - Pascal
ALGOLをもとに開発された教育目的の言語。C言語と同じALGOLの流れをくんだ言語で、構造化プログラミングに適している - Ada
Fortran COBOLの後継言語として開発され、文法はPascalの流れをくむ言語。
当時の最新のプログラミング理論やソフトウェア方法論をまるごと取り入れようとした野心的な言語仕様で、厳密なデータ型の定義や、ソフトウェアのモジュール(部品)化、並行処理に関する仕様が特徴的であります。
しかし、あまりに多くの仕様を取り込もうとしたことが過度の肥大化を招き、当時の貧弱なハードウェアで開発を行なうのは困難になってしまいました。
このため、1980年代中盤から後半にかけて、より「軽い」仕様を持ったC言語に
代わられています。 - Smalltalk
オブジェクト指向の先駆。Xerox社のパロアルト研究所が開発した言語で、対話型のインタプリタ言語で、世界で初めてオブジェクト指向を採用した言語として知られている。
- C++
C言語にオブジェクト指向の機能を追加した言語。
- Java
C言語など、既存の言語の欠点を踏まえて一から設計された言語であり、サン・マイクロシステムズ社が開発したオブジェクト指向言語でCに近い文法となっています。
現在では汎用的な言語として注目度が高いのが現状です。
Javaはコンバイルすると「バイトコード」となり、「Java仮想マシン」上で実行可能プログラムとなります。
従って、OSに依存することなく動作が可能です。
Javaは以下の動作形態があります。
・ブラウザ上で実行するものを「アプレット」と言います。
・Webアプリケーションで「サーブレッド」や「JSP」があります。
・その他のJavaを「アプリケーション」と言います。
強力なセキュリティ機構や豊富なネットワーク関連の機能が標準で搭載されており、ネットワーク環境で利用されることを強く意識した仕様になっています。 - LISP
記号処理を中心として、文字列やリスト構造を取り扱うことができる関数型言語。
人工知能の分野で使用されています。
代表的な関数型言語の一つで、既に定義されている関数を組み合わせて新しい関数を定義するという形でプログラムを記述しています - Plolog
論理学を基本として設計された論理型の言語。LISPと同様に人工知能の分野で使用
されています。 - RPG
報告書の作成を目的とした表形式型の言語。条件をパラメータとして与えると機械語プログラムを生成します。
演算、印刷など、必要な処理の種類に応じて仕様書が用意されており、プログラマは必要な仕様書に適切なパラメータを記述することでアプリケーションソフトを作成することができます。
通常のプログラミングに必要なアルゴリズムの記述は必要ありません。