デジタル概論 ソフトウェア編1 オペレーティングシステムについて 0から楽しむパソコン講座

基本ソフトウェア(OS)について  オペレーティングシステム(基本ソフトウェア)はハードウェアの最も密接に関係するソフトウェアです。このオペレーティングシステムの働きにより、デジタル機器の操作性や性能が決まってくるといっても過言ではないでしょう。ここではオペレーティングシステムの基本と働きを説明していきます。ここは少し難しくなりますが、よく理解してください。

旧ブラウザ版      新ブラウザ版へ


【豆知識】
通信と宇宙天気予報

今の世の中、通信はかかせないものになっています。しかし通信は外部的な攻撃があると遮断されてしまう危険があります。物理的な攻撃は目で見えますが、「電磁波」などは目に見えません。特に怖いのは「太陽」からの「電磁派」です。このおかげでアメリカでは機械の故障に陥り大規模な停電までなったっことがあります。この「太陽」の電磁派についての「天気予報」のサイトがあります。
「宇宙天気予報センター」です。
このサイトは太陽の活動から電磁波の影響を予報するサイトです。この宇宙天気はさまざまな通信はもちろん、航空機各社も利用しています。
コンピューターサービスの人も利用してみてはいかがでしょうか?
太陽のフレア画像【0から楽しむパソコン講座】
▲太陽のフレア画像
国立天文台/JAXA 提供

PR











オペレーティングシステムとは

オペレーティングシステムの基本を理解しましょうオペレーティングシステムとはの章イメージ 【0から楽しむパソコン講座】
よく「私の使っているパソコンのOSはWindows**」などという会話をします。しかしこのOS=オペレーティングシステムとは何かというのは分からない人は多いのではないのでしょうか。

前章で少し説明したとおりOSはパソコン・コンピュータを動かす上で基本なプログラムで、ハードウェアとミドルウェアやアプリケーションソフトとの制御の受け渡しを行います。そのためOSの機能は非常に重要な役割を果たします。

OSとは、基本ソフトウェアのことで、MS-DOSやWinodws・MacOS・Androidなどがこれにあたります。

昔のコンピューターにはきちんとした統一された規格がなく、ハードウェアの仕様もバラバラでした。また、コンピュータを動かす「基本ソフト」もそれぞれの機器専用にプログラミングを行っていたため、そのコンピュータで別のハードウェアを使うとした場合、ソフトの設定やプログラミングの組み直しなどといった膨大な「手間」や「コスト」がかかりました。また、使用する側もコンピュータによって使用方法が違ったり、ハードウェアの変更をすると最初から使用方法を覚えなければいけないなどといったことになります。

そこで、ハードウェアが違っていても「共通で使用できる」ソフトウェアをコンピュータに組み込むことで、ハードウェアの構成に関係なく統一した操作ができるようになることから基本ソフトウェア(OS)のが出来ました。
このOSの導入により、プログラムを開発する側もすべてのユーザーにプログラムを提供でき、違ったメーカーなどのハードウェアを使用していても簡単にプログラムを作成できるということから急速に普及しました。

基本ソフトウェア(OS)のプログラムには狭い基本ソフトウェア(狭義のOS)と広い基本ソフトウェア(広域のOS)の二つがあります。狭義のOSは「OSの中核部分」のことであり、「制御プログラム」とも言われています。
広域のOSは「基本プログラム」のことです。つまり、広域のOSの一部に狭義のOSがあるということです


広域のOS(基本ソフトウェア)のプログラムは以下のように分類されます。

制御プログラム(狭義のOS)
ジョブ管理、タスク管理、データ管理、記憶管理、運用管理、障害管理、通信管理、入出力管理などハードを制御する役割のソフトです。
サービスプログラム(広域のOS)
ファイル変換、テキストエディタ、分類/併合、整列等、プログラム作成やファイル管理を行うソフトです。
言語処理プログラム(広域のOS)
コンパイラ、インタプリタ、ジェネレータ、アセンブラ等、プログラム等ソフトウェアを開発するためのソフトです。
サービスプログラム(広域のOS)
ファイル変換、テキストエディタ、分類/併合、整列等、プログラム作成やファイル管理を行うソフトです。
言語処理プログラム(広域のOS)
コンパイラ、インタプリタ、ジェネレータ、アセンブラ等、プログラム等ソフトウェアを開発するためのソフトです。

狭義のOSである制御プログラムは別名「カーネル」ともよばれています、カーネルは「OSの中核部分」で、他のアプリケーションソフトウエアとは異なり、中央演算装置や主記憶装置を含むすべてのハードウエアにアクセスできる「特権」を持っています。みなさんが使用しているアプリケーションソフトは、すべてカーネルに処理を委託してハードウェアを制御してもらっているわけです。

ソフトウェアの体系図【0から楽しむパソコン講座】
▲ソフトウェアの体系図


基本ソフトウェア(OS)の目的とは

基本ソフトウェア(OS)の目的は非常に重要です。OSの目的の章イメージ【0から楽しむパソコン講座】  基本ソフトウェアは上記でも説明したとおり、ハードウェアとアプリケーションとの仲介を行っています。そのため基本ソフトウェアはハードウェア本体を効率よく動さなければなりません。そのため、基本ソフトウェアはハードウェア本体との処理の向上を第一の目的としています。その目的の内容は次の通りとなります。

処理時間当たりの処理能力の向上=スループットの向上

スループットとはコンピュータが単位時間内に処理できる命令の数や、通信回線の単位時間あたりの実効転送量などを意味します。

ジョブを出してから結果が出るまでの時間=ターンアラウンドタイムの短縮
ジョブ(演算や命令)を出してから結果が出るまで時間がかかると、当然全体の処理が遅いことになります。
レスポンスタイムの短縮(データ入力が終了した時点から出力開始までの時間)
たとえば、身近に印刷命令を送ってから、印刷を開始するまでの時間が早ければ、当然処理が早いことになります。
信頼性の向上=RASISの向上
RASISとはコンピュータシステムの信頼性を評価する「信頼性」「可用性」「保守性」「保全性」「機密性」の頭文字を集めたものです。

また、基本ソフトウェアはハードウェア本体との処理の向上だけではなく、使用するユーザーが分かりやすく使用できるための操作性の向上も目的としています。使用面での目的は次の通りです。


GUIによる操作性
GUIとは基礎的な操作をマウスなどによって行なうことができるユーザインターフェースのことを言います。
最近ではGUIを利用するための基本的なプログラムをOSが提供することにより、アプリケーションソフトの操作感の統一や、開発負担の軽減などが図れています。
メモリや周辺機器の増設等が容易に行える拡張性
 
どのコンピュータでもデータやソフトが使用できる汎用性

使用面での目的の向上はデジタル機器の普及化により、さまざまな端末が出回るようになりました。そのため、手軽に簡単に操作できるようにといったことが重要になってきました。

OSの目的【0から楽しむパソコン講座】
▲OSの目的

ジョブ管理とタスク管理について

OSはハードウェアとソフトウェアの仲介を行っています。ジョブ管理とタスク管理の章イメージ【0から楽しむパソコン講座】 基本ソフトウェアの大きな目的は上記で示した通りですが、スループットの向上を図るためには、まずは基本ソフトウェアがどんな方法でアプリケーションとハードウェアの仲介を行い、管理しているか理解しなければなりません。基本ソフトウェアは「ジョブ」と「タスク」という方法でプログラムを管理をしています。





ジョブとは・タスクとは


「ジョブ」とは人間から見た仕事(プログラム)の量を表します。ジョブは単一のプログラムであったり、連続的な一連のプログラムの集団(固まり)であったり使用する仕事において量が変わってきます。

ジョブは、バッチ処理(逐次処理)で行う場合、ユーザーが「JCL(ジョブ制御言語)」という命令言語(プログラム)で記述し実行させ、コンピュータに指示を与えます。
コンピュータに指示を与えると、ジョブ管理というプログラムが「ジョブ」を受取り、「ジョブステップ」という単位に分割します。
その後、「タスク管理」というプログラムがジョブステップごとに「タスク」を作成してコンピュータが実行できるようにします。

「タスク」とはコンピュータから見た仕事の量で、OSの下で実行される内部処理の単位となります。

つまり、よくOSなどで使用する「タスク」とはプログラムの処理を細分化した処理単位のものということになり、コンピュータがこの1つ1つのタスクを内部で処理していることになります。

プロセスとは・スレッドとは


よく「タスク」を実行するという意味で「プロセス」と「スレッド」という言葉が出てきます。

「プロセス」とは、現在実行中のプログラムの量を示します。「タスク」の場合、細分化した処理単位で今から実行するプログラムも「タスク」という言葉で使用されます。つまり、「タスク」という言葉はあくまでも「作業」や「処理」と言った意味合いで使われ、今現在実行されているプログラムの量を「プロセス」という言葉で使用します。


「スレッド」はプロセス内に作られる並列動作可能な「処理の単位」です。並列処理とは関連する処理を同時に進行させることを言います。
コンピュータが処理を行う場合CPUの処理速度と他のハードの処理速度(例えばハードディスク上のファイルのアクセスなど)は違います。そのため、CPUの処理には「空き時間」が発生します。関連する処理を並列に進行させることにより、全体の処理の時間が効率よく短縮なるということです。
ジョブ・タスク・プロセス・スレッドとは【0から楽しむパソコン講座】
▲ジョブ・タスク・プロセス・スレッドとは


ジョブ管理プログラムについて

ジョブ管理プログラムの処理を覚えましょう。ジョブ管理プログラムの章イメージ【0から楽しむパソコン講座】  上記で出てきたジョブ管理プログラムは「ジョブスケジューラ」または「タスクスケジューラー」とも呼ばれ、コンピュータに導入された複数のジョブをスケジュール管理し、効率的に実行させています。






「ジョブ管理プログラム」は以下の流れで処理を行っています。
リーダ
ジョブの読み込み
ジョブスケジューラ
ジョブイニシエータ(ジョブの開始)→ジョブターミネータ(ジョブの終了)
マスタスケジューラ
ユーザとジョブスケジューラとのやり取り
ライタ
ジョブの出力

その他として「スプーリング」があります。
よくプリンタ出力などで使われる機能で、ジョブの入出力をプログラムとは独立させて行う機能です。

ジョブ管理プログラムの処理【0から楽しむパソコン講座】
▲ジョブ管理プログラムの処理


タスク管理について

タスク管理の処理を覚えましょう。タスク管理の章イメージ【0から楽しむパソコン講座】  ジョブ管理で生成されたジョブステップはタスク管理に渡されて、タスクが生成されます。
タスクには以下の通りに生成から消滅まで遷移します。
 「実行状態」
CPUの使用権が与えられ実行できる状態のタスク
 「実行可能状態」
 実行可能であるがCPUの空きを待っている状態のタスク
 「待機状態」
 入出力処理を行っておりその終了を待っている状態のタスク
タスク管理【0から楽しむパソコン講座】
▲タスク管理

タスク管理には「ディスパッチャ」というものがあり、実行可能状態のタスクから優先順位の高いタスクを実行状態にしたり、実行状態のタスクを中断させたり、CPUの割り当ての切り替えを行うプログラムです。

また、「スーパバイザ(SV)」というプログラムもあり、不定期に発生するプログラム上の割込みの監視を行います。
スーパーバイザは割込みの監視を行う【0から楽しむパソコン講座】
▲スーパーバイザは割込みの監視を行う。

また、タスクプログラムは、以下の種類があります。
再使用不可能プログラム
 実行中にプログラムの内部の値が変更されるため、再度実行する場合はもう一度そのプログラムをロード(読み込み)する必要がある。
再使用可能プログラム(リユーザブル)
実行中に変更した値が初期状態に戻るため再ロードする必要がなく、自動実行されます。
この再使用可能プログラムにはさらに以下の2種類があります。
逐次再使用可能プログラム(シリアリユーザブル)
 1つのタスクの終了後、再ロードすることなく繰り返し使用することのできるプログラム。
ただし、並行しての処理のデータの保障はできません。
再入可能プログラム(リエントラント)
 タスクごとにデータ領域を持つことによって複数のタスクを並行して同時実行できるプログラム。
再配置可能プログラム(リロケータブル)
 補助記憶装置から主記憶装置へ読み込時、主記憶装置上のアドレス空間のどこに配置しても実行できるプログラムで、「ペースアドレス指定方式」であることが必要です。
再帰プログラム(リカーシブ)
 自分自身を呼び出して(自分で自分のプログラムを再度実行させることができる)使うことのできるプログラム。
プログラムの情報をスタックに保存しています。

ペースアドレス指定方式とは


ベースアドレスの値とアドレス部の値を加算したものを有効アドレスとする方式です。
CPUの内部のベースレジスタの値をアドレスの基準とします。そして、ベースレジスタの値のところからデータのアドレス(変位)の範囲を確保します。命令実行時に、ベースレジスタの値にアドレス部の値を加えた有効アドレスのところで処理を行う方式です。

レジスタについては→デジタル機器の中心部分である中央演算装置(kouseidgai4.html)

タスクの種類【0から楽しむパソコン講座】
▲タスクの種類

ベースアドレス指定方式【0から楽しむパソコン講座】
▲ベースアドレス指定方式


マルチプログラミングと「割込み」

OSの処理を向上させるには「マルチプログラム」と「割り込み」が重要マルチプログラムと割込みの章イメージ【0から楽しむパソコン講座】  スレッドを処理を行う場合、「マルチプログラミング」という方法を使用しています。

入出力などの無駄な時間(アイドルタイム)を利用して複数のプログラムを見かけ上同時に実行させ、スループット(処理能力)の向上を図るものです。
実際は、アイドルタイムを利用して他のプログラムにCPUを割り当てます。これにより実現されています。

マルチプログラミングを行うには「割込み」というのが重要となってきます。

割込みとは、現在実行中のプログラムに別の要求が発生した場合、一時中断して要求に応じた別のプログラムを実行させることを言います。

割込みには以下の種類があります。

内部割込み
プログラム上から生じる割込みです。主に2つの種類(原因)があります。
・プログラム割込み プログラムの実行中に異常が発生した場合の割込み。
・SVC プログラムから入出力が必要になった時に生じる割込み。
外部割込み
プログラム以外の原因で生じる割込みです。4つの種類(原因)があります。
・入出力割込み 入出力処理の終了や誤動作が生じた時の割込み。
・マシンチェック割込み ハードウェアの異常、誤動作が生じた時の割込み。
・コンソール割込み オペレータが介入する時の割込み。
・タイマ割込み 監視タイマで一定時間を経過した時に生じる割込み。
割込みの種類【0から楽しむパソコン講座】
▲割込みの種類

実記憶管理について

OSのスループットの向上には実記憶管理の方法が重要です。実記憶管理の章イメージ【0から楽しむパソコン講座】   基本ソフトウェア(OS)がスループットの向上を図るためには「実記憶管理」も非常に重要になってきます
プログラム等を主記憶装置(メモリ等)に実記憶管理する場合、実行するプログラを有効に配置する必要があります。





この配置の「区画方式」には、以下の種類があります。

単一区画方式(固定)
主記憶装置内のプログラムの区画は1個だけで1つのプログラムのみ実行します。利用効率がよくありません。
多重区画方式(固定)
主記憶装置を一定の大きさに分割してそれぞれのプログラムを割り当てます。この場合は大きなプログラムが実行できず、小さななプログラムでも1個の区画を使用してしまいます。
可変区画方式(可変)
 主記憶装置をプログラムの大きさに合わせて区画を割り当てます。利用効率が非常に高い方法です。
ただし、この方法は、小さなプログラムのロードを繰り返していると主記憶の領域に細分化された空き領域である「フラグメンテーション」が多数発生します。
これが多数生じると空き領域が細分化されているため、大きなプログラムをロードできません。
これを、解法する方法としては、ロードされているプログラムをもう一度先頭から配置し直すことで回避します。これを「コンパクション」と言います。
コンパクションを行うためには、各命令アドレスの再配置が必要です。これを実現するプログラムを「再配置可能プログラム」と言い、再配置方法は次の方法があります。

  • 静的再配置 実行前に再配置します。
  • 動的再配置 実行中に再配置します。
スワッピング方式
 これは、優先度の高いプログラムをロードするため(スワップイン)、優先度の低いプログラムを中断して補助記憶装置に退避させる(スワップアウト)方法をです。
オーバレイ方式
 主記憶装置よりも大きなプログラムを実行する場合、プログラムを「セグメント」単位に分割して補助記憶装置に入れておきます。
実行時に必要なセグメントのみロードして実行させる方式を言います。
実記憶管理の区画方式【0から楽しむパソコン講座】
▲実記憶管理の区画方式

仮想記憶システムについて

仮想記憶は大きな処理を行うときに重要になります。仮想記憶の章イメージ【0から楽しむパソコン講座】   基本ソフトウェア(OS)が処理を行っている場合、小さなジョブもあれば大きなジョブもあります。大きなジョブを処理する場合、処理によっては主記憶装置以上の処理をしなければならない場合があります。しかし主記憶装置の容量は決まっておるため、どこかで主記憶装置以上の領域を確保しなければなりません。そこで補助記憶装置を利用して実際の主記憶装置よりも大きな記憶空間を作り、主記憶装置の一部として処理させることになります。これが「仮想記憶」と言います。



仮想記憶は、

実際の主記憶装置領域「実記憶(実空間)
このアドレスを「実アドレス(物理アドレス)」と言います。

補助記憶装置を利用した仮想記憶領域。「仮想記憶(仮想空間)
このアドレスを「仮想アドレス(論理アドレス)」と言います。

の2つで構成されています。

仮想記憶に分割して配置されたプログラムは必要になった時点で実記憶に割り当てられる「動的再配置」が行われます。この際、「動的アドレス変換機構(DAT)」というハードウェアを使い、「仮想アドレス」を「実アドレス」へ変換します。
よって内部では命令実行のたびに、仮想アドレスを実アドレスへ変換しています。


仮想記憶に記憶させる方式には以下の2種類の方式があります。


1.ページング方式


ページングの方法は次のように行われています。

プログラムはこのままでは大きすぎるので、一定の大きさの「ページ」という単位に分割します。そして「実アドレス空間」と「仮想アドレス空間」に動的配置を行います。「実アドレス空間」と「仮想アドレス空間」に配置した場合ばらばらになっていますので、ページ単位での実アドレス空間と仮想アドレス空間の場所を対応付け(マッピング)を行います。
このマッピングは「マッピングテーブル」に各アドレスとどちらのアドレス空間に配置しているかという情報を保存し、動的配置を行うたびに書き換えられます。

各ページには物理メモリ上での所在地(物理アドレス、実アドレス)とは別に、OSによって仮想メモリ空間上でのアドレス(仮想アドレス、論理アドレス)が与えられ、プログラム(プロセス)へのメモリの割当も仮想メモリ空間上でページ単位で行われております。

そこで実記憶側では、「ワーキングセット(ページ数)」が設定されています。

  • ・DATにより仮想アドレスを実アドレスへ変換します。
  • ・実記憶上に必要なページが存在しない(ページフォルト)が発生した場合、その必要なページを主記憶へ転送する(ページイン)。
  • ・ページインを行った後、主記憶上で最も使用頻度の低いページから順に仮想記憶に戻し、ページの入れ替え(ページアウト)を行う。
  • ・実記憶上に必要なページが存在しない(ページフォルト)が発生した場合、その必要なページを主記憶へ転送する(ページイン)。
  • ・ページインを行った後、主記憶上で最も使用頻度の低いページから順に仮想記憶に戻し、ページの入れ替え(ページアウト)を行う。


不要なページと必要なページの出し入れの操作を「ページリプレースメント」と言います。
ページリプレースメントには以下の2種類があります。

FIFO方式」 一番先に入ったページを一番先にページアウトする。
LRU方式」 最も長い間使用されなかったページをページアウトする方法。


2.セグメント方式

基本的に処理形態はページング方式とほぼ同様ですが、単純に一定の大きさに分けるのではなく、「セグメント」という論理的なまとまりでプログラムを分割します。
但し、ページイン/ページアウトのことを「ロールイン/ロールアウト」と言います。

このように仮想記憶では、実記憶よりも記憶空間を使用できますが、問題点として実記憶が小さい場合や複雑なジャンプが多数使用されている場合はページの入れ替えが頻繁に行われます。
この現象を「スラッシング」と言います。
回避方法としては、実記憶を大きくするか、1ページの大きさを小さくしてワーキングセットを増やす必要があります。

仮想記憶の方法【0から楽しむパソコン講座】
▲仮想記憶の方法

言語処理プログラム

言語処理プログラムはOSの一つです。言語処理プログラムの章イメージ【0から楽しむパソコン講座】  

プログラム(ソフトウェア)を作成するときに、まずは命令を入力していきます。それで入力された一連のプログラムを「ソースプログラム」といいます。
そのソースプログラムを機械語に翻訳するプログラムのこと「言語処理プログラム」をいい、翻訳されて出来上がったプログラムを「目的プログラム」と言います。
言語処理プログラムには以下の種類があります。


アセンブラ

アセンブラ言語で記述されたプログラムを翻訳します。アセンブラ言語の命令語は機械語と1対1で対応します。そのため、特徴として高度な動きの場合も一つの命令ではできないので、複数の命令で作成します。
「マクロ命令(定期的に使用する命令を1つに定義したもの)」が使用できます

コンパイラ

高水準言語(命令が英文に近く、作成されやすい)で記述されたプログラムを一括して目的プログラムに翻訳します。(COBOL FORTRAN C等)以下の過程となります。
作成手順は次のとおりとなります。

原始プログラムの作成

プログラムの「ソースコード」とよばれる命令の文章(一覧)を作成します。

コンバイル(構文等をチェックし、エラー等があれば修正)

翻訳は、「字句解析」「構文解析」「意味解析」「最適化」「コード生成」の順に行われます。
「字句解析」 原始プログラムを変数や演算子などのトークン(意味の持つ最小単位)に分ける
「構文解析」 トークンの並びが文法に合致しているか調べる
「意味解析」 変数や演算子が適切に使用されているかどうか調べる
「最適化」 プログラムの冗長性の排除
「コード生成」 目的プログラムを生成する 
最初に字句(命令)の間違いやプログラムの流れなどのチェックを行い、エラーを修正後、プログラムに間違いがなければ翻訳されます。

ロードモジュール(実行可能プログラム)の作成

複数の目的プログラムをリンカ(連携編集プログラム)によって連結してロードモジュールを作成します。
プログラムの実行中にリンクすることを動的リンク(ダイナミックリンク)と言います。

動的リンクを行うライブラリーを動的リンクライブラリー(DLL)と言います。
必要時に動的リンクが呼ばれるため、実行時のメモリを節約出来ます。

実行(実アドレスへの変換)

ローダとよばれるプログラムを使用してロードモジュールを主記憶装置にロードします。
ロータとは、プログラムを主記憶にロードすることです。(つまり、実アドレスへの変換)
現在jはダブルクリックで実行となっています。

インタプリタ

原始プログラムの命令を1個ずつ翻訳しては実行する言語処理プログラムです。
(BASIC APL Perl PHP等)
コンパイル言語とは違い、原始プログラムを翻訳する作業が必要でないため、1行ごとに実行=エラー修正が容易に行えます。
その反面、そのつど翻訳されるため、処理は遅くなります。

ジェネレータ

あらかじめ用意されたパラメータを入力することで目的プログラムを生成します。「生成プログラム」とも言います。(RPG)

プリコンパイラ

主処理プログラムをコンパイルする前のデータ変換や整列などの前処理的な編集を行う言語処理プログラムです。

クロスコンパイラ

異機種のコンピュータ(OS)の目的プログラムを生成する言語処理プログラムです。 

プログラム言語の種類

プログラム言語はたくさんあります。プログラム言語の章イメージ【0から楽しむパソコン講座】  

 プログラムの言語はCPUの発達にともない進化してきました。これは、CPUの処理できるビット数により実行できる命令の数が増え、複雑な処理を1つの命令で行うようになってきたためです。現在も改良を加え、さまさまな言語が登場しております。



プログラムの言語は大きく次のように分けられます。

汎用プログラム言語 低水準言語 機械語(第1世代)
CPUが直接理解する言語で数字(ビット)の羅列となります。Windowsなどでの「ダンプファイル」などがこれに当たります。
人間が直接理解する形式にはなっていません。
アセンブラ言語(第2世代)
最も機械語に近い命令と言われており、機械語と1対1の命令(英単語)で処理します。低水準言語とも言われています。
 高水準言語(第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
 報告書の作成を目的とした表形式型の言語です。条件をパラメータとして与えると機械語プログラムを生成します。
演算、印刷など、必要な処理の種類に応じて仕様書が用意されており、プログラマは必要な仕様書に適切なパラメータを記述することでアプリケーションソフトを作成することができます。
通常のプログラミングに必要なアルゴリズムの記述は必要ありません。