3章 ソフトウェア          
 この章では、ハードウェアの上に新しい機能を備えた機械を作り上げるソフトウェアについて述べる。初期の頃は、ソフトウェアはハードウェアを使いやすくするためのものとして考えられていた。しかし、最近では、ソフトウェアを中心としてハードウェアを開発するという傾向にあり、ソフトウェアの効率向上のため一部の機能をハードウェア化することも行われている。そのため、両者を区別して述べるのは難しくなっている。

*このテキストはかなり以前に作成したもので、進歩が激しく、現状とは合わない部分、説明不足している部分があるかと思います。
3.1 ソフトウェアとは
 ソフトウェア(software)とは、コンピュータのハードウェアに対して使われだした言葉で、ソフトな細工物(ware)を意味しており、コンピュータプログラムのことをいう。しかし、ソフトウェアとプログラムとの間には微妙な違いがある。すなわち、プログラムというときには、ある仕事をコンピュータにさせるときの処理手順(命令の列)のことを単に示すのに対して、プログラムをハードウェアの上にかぶせて新しいコンピユータを作り出したと見るときに、ソフトウェアと呼び分けることがある。
 ここでは、ソフトウェアはユーザの作成するプログラムも含むものとみなす。それらは次のように3つに大別して考えることができる。
  ◎プログラムの開発環境を整えるもの
  ◎コンピュータの実行環境を整えるもの
  ◎一般ユーザが直接利用するもの
 プログラムの開発環境を整えたり、コンピュータの実行環境を整えたりするソフトウェアは、コンピュータを動かすのに必要な基本機能を提供するので、基本ソフトウェアと呼ばれている。これに対し、一般ユーザが直接利用するソフトウェアを応用ソフトウェアという。応用ソフトウェアには、ユーザ自身が作成したブログラムや特定の用途向けに作成し、パッケージとして売られているプログラム(応用パッケージ)などがある。応用パッケ−ジには、一般のユーザが手軽にコンピュータを利用できるように、いろいろな道具も多数整えられている。たとえば、パーソナルコンピュータ用の7つ道具として、ワードプロセッサ、お絵描きツール、プレゼンテーションツール、表計算ツール、簡易データベース、電子メール、ブラウザなどがある。
 
コンピュ一タシステム
 コンピュータシステム=ハードウェア+ソフトウェアであり、両方がそろって初めて目的とする処理を行うことができるコンピュータシステムとなる。
 ●ソフトウェア 一つのプログラムまたはプログラムの集合体
 ●応用ソフトウエア
  ・ユーザープログラム:利用者が作成する応用プログラム(メーカが提供するソフトウェアと区別)
  ・応用パッケージ:メーカその他が提供するパッケージ化された応用プログラム
 ●「基本ソフトウェア」
 コンピュータがデータの入出力を管理するOS、応用ソフトウェアの開発を助けたり、あるいは実行を効率的にするために、メーカが提供するソフトウェア
 


図3.1 コンピュ一タシステム

基本ソフトウェアが行う仕事にはどんなものがあるかを、前述の二つにわけて述べる。
 
(a) プログラムの開発環境を整えるもの
 ハ−ドウェアがそのまま実行できる命令は0と1の並びからなる機械語命令であり、実際、初期には機械語を用いてプログラムを作成していた。しかし、これはおぼえにくく、見にくいので、命令を英語の略字で書くアセンブリ(assembly)言語や利用者が日常使いなれている記述法に近いBASIC、C、FORTRAN、COBOLなどいわゆる高水準(high level)言語が考えだされた。そして、これらの言語で書いたブログラムを機械語に変換するための言語プロセッサ(lunguage processor)が作られている。システム設計用ツールや、プログラムの入力や修正に役立つブログラムデバッグ用ツールなどを含め、体系化したものをプログラム開発環境と呼んでいる。
 
(b) コンピュータの実行環境を整えるもの
 ハードウェアの一部である演算装置は電子的な速さで動くのに対し、キーボードからの入力やプリンタヘの出力は機械的な動きであるため、これらの速度の間には大きな差がある。そこで、全体として効率的に使用するため、複数のブログラムを一緒に実行させるようになった。それに伴って、どのプログラムを次に実行させるかというスケジユーリングや各装置の利用の管理などを行うオペレーティングシステム(operatjng system、OS)が必須のものとなった。この他、オペレーティングシステムと応用プログラムの中間に位置するミドルウェア(middleware)と呼ばれるソフトウェアがある。たとえば、ディスクなどの2次記憶装置に大量のデータをあらかじめ記憶しておいて、いろいろな用途に用いるようになったが、これらの扱いが容易になるようにデータベース管理システムが提供されるようになった。さらに、ネツトワークを介してコンピュータを利用したりデータ交換を可能にする通信管理システムや、ネットワークで情報を共有することによりグループ作業を効率化するためのグループウェア(groupware)などの道具を備えることも日常的になっている。またインターネット利用環境を備えるツールや、ディスプレイの表示および操作環境を提供するGUI(Graphical User Interface)等もこの中に分類される。
 
3.2 プログラミング言語
 この節ではブログラムを書くための言語(プログラミング言語)について述べる。
(1) アセンブリ言語
 機械語(machine language)は、コンピュータのハードウェアがそのまま実行できる命令体系である。コンピュータの持つ機能を効率的に使うのに役立つが、0と1の並び(または対応する8進数、l6進数)で各命令を書かなけれはならないという煩わしさがある。アセンブリ言語(assembly language)はこの面倒を滅らすために考えられたもので、命令や記憶番地を表すのに、その意味が連想しやすいような英数字の表意記号ニーモニック、mnemonic code)を用いる。
リスト3.1 にアセンブリ言語のニーモニックによるプログラム例を示した。 アセンブリ言語の命令は、オペコードオペランドと言われる構文からなり、それぞれの機能は、表3.1に示す。リスト3.2は、リスト3.1を機械語にコンパイル(変換)した結果であり、16進数の並びである。同じ内容のVisual Basic によるコードをリスト3.3 に示す。整数aと整数bの和を求める関数である。
 
リスト3.1 アセンブリ言語
リスト3.2 機械語
 
表3.1 アセンブリ言語のコードの意味

 
 
リスト3.3 高水準言語のVisual Basic によるコード

 
(2) 高水準言語
 高水準言語(high levcl language)は、アセンブリ言語よりも簡潔にプログラムを記述できるように考えられたプログラミング言語の総称である。アセンブリ言語は機械語に対応しているため、コンピュータの機種ごとに固有のものであり、それを書いたプログラムは機種間での互換性がなく、また、したい仕事を細かい操作に分けて書かなけれはならないという不使さがある。そこで、日常使い慣れている言語に近い形のプログラミング言語が登場した。
 最初に提案され定若したものが科学技術計算をおもな対象とするFORTRAN(FORmula TRANslation)である。また、事務処理を念頭においたCOBOL(COmmon Business Oriented Language)がある。次いで会話型の利用に向くものとして、BASIC(Beginer's Al|-purpose Symbolic lnstruction Code)が現れた。BASICはハーソナルコンピュータ用の言語として広く受け入れられている。
 プログラムの作成と保守の容易さを考えると、簡潔でわかりやすいプログラムが望ましい。そのためのーつの方法に、処理の流れを連結、反復、選択の三つの基本構造のみで表現する技法がある。これを構造化プログラミング(structured programming)という。高水準言語の中に、ALGOL、PASCAL、Cなど、構造化プログラミングが行いやすいように設計されたものがある。
 
(3) オブジェクト指向言語
 前述の言語はすべて処理手順を順次に記述するもので、手続き型言語(procedure-oriented Language)と呼ばれる。これに対し、非手続き型言語(procedure-oriented Language)と呼ばれるいくつかの言語がある。
 ここでは、非手続き型言語のひとつであるオブジェクト指向言語について述べる。これは処理手順に対してデータが与えられるという考え方でなく、対象物(オブジェクト)に対して、処理の指示をメッセージとして送ることにより、実際の処理を進めていくものである。つまり、データとそのデータに対する処理を記述したものをまとめてオブジェクトとしてとらえる。オブジェクトに処理を実行させるためには、その処理を実行せよというメッセージを送れはよい。
 たとえは、[長方形」というオブジェクトは、「位置、幅、高さ」のデータ(属性)と、「長方形を画面に書く方法」つまり手順(メソッド)をもっている。メソッドを実行させるためにオブジェクトに送る文字列をメッセージという。オプジェクトがメッセージを受け取ると、画面上に長方形が描かれる。この意味では、オブジェクト「長方形」は「長方形を書く」という行動をする主体であると考えるのが自然である。オブジェクトを中心にする考え方は、手続きを中心にして考えるよりも自然であり、わかりやすいといわれている。
 代表的な言語として、SmallulkやC++がある。Smalltalkは、オブジェクト指向の考え方を取り人れた最初の言語である。さらにSmalltalkは、この言語の利用者とのやりとりにマウスやアイコン(絵文字)を用いていて、今日のユーザインタフェースの考え方に大きな影響を与えた。
 C++は、C言語にオブジェクト指向の機能を取り入れ拡張した言語である。
 
(4) その他のプログラミング言語
 前述のオブジェクト指向言語は非手続き型言語のひとつの型であるが、非手続き型言語にはさらに次のようなものがある。
 
イメージ配置連結型
  いままで述べてきた言語は、文字列で表現するものであるが、これらの他にアイコンなどの絵文字を用いてユーザーとコンピュータとの対話を行うLabVIEWと言う言語がある。National instruments社により開発された言語でイメージを論理的に順番に並べていくことによりプログラミングする言語。1997年、NASAによるSojourner Rover(月面探査機)を使つた月面探査が行われ、着陸船に対するこの探査機の位置、地面に対する向き、この探査機全般の物理的な状態などをモニターするために使用された。LabVIEWは、大学や産業界のエンジニアや科学者たちに利用されているパワフルなプログラミング環境である。LabVIEWは、測定と制御用の最先端のソフトウエア開発ツールで、バイオメディカル、航空宇宙、エネルギーといつた研究応用分野、およびその他の多くの応用分野において、実際の結果を分析し計算処理するために使用されている。アイコンに制御などのルーチンがすでに埋め込まれており、ユニット化され、デバッグはほとんど不要でプログラム開発の効率は上がり、信頼性のあるプログラムができる。この簡易バージョンがレゴブロックに応用されているLEGO Mindstorm(レゴ・マインドストーム)である。実際のプログラミングでは、間違い探し、虫取り(デバッグ)にかなりの時間が費やされるのが普通である。
 
ビジュアル言語
 ユーザーがコンピュータで作業をするときに、アイコンやマウスを使うことにより、直観的にわかりやすく操作をすることができる。このような、絵文字などによるユーザーとコンピユータとの対話0方式をGUI(gramphical user Interface)という。利用者がGUlを使って作業をすることのできるブログラムを作成するための言語として、Visual BasicやVisua| C++などがある。さらにこれらの言語でプログラムを作成するときにも、GUIを使うことができるので、プログラミングがより簡単になる。
 
表3.2 主要なプログラミング言語


ハラメタ型
 代表的なものにExcelがある。Exce|では処理手順でなく、取り扱うデータの仕様を表形式で記述する。集計用紙のように縦横に分割した衣に入力されたデータを計算し、表形式に表示したり、対話型でグラフを作成することができる、さらにデータベース機能や、たくさんの人にわかりやすく説得力のある資料を作成したりするためのプレゼンテーション機能も備えている。
  
関数型
  すべての処理(計算)を関数呼出しの形で定義する言語であるLISP(LISt Processor)やAPL(A Programing Language)などがある。言語の一部としてあらかじめ定義された関数を用いて、利用者があたらしい関数を定義する。したがって、プログラム全体が関数の集合体の形をとっている。
 
論理型
 「もし〜ならは…である」という規則や「〜は…である」という事実を記述しておき、入力される問合せに対して、規則と事実にもとづいて、推論を行い、結果を求める。PROLOG(PRO-graming in LOGic)やOPS(Officia| Production System)などがある。
 
(5) 手続き型プログラミング言語の構成

 前述のように、プログラミング言語には手続き型と非手続き型があるが、ここでは一般によく用いられている手続き型言語を申心にその構成を述べる。
 
(a) 使用可能な文字
 プログラミング言語ごとに、プログラムを書くのに使える文字の組が決まっている。通常、英字A〜Z、数字0〜9、および+、*などの特殊記号からなる。なお、これはデータとして使える丈字の組とは違う。
 
(b) 基本要素
   使用呼能な文字またはその組合せ(文字列)で、その吝諸を構成する基本要素を表す。その基本要素を字句(token)と呼ぶ。字句には2種類のものがある。すなわち、言語により決まっているものと、ユーザーが定義できるものである。
 
言語固有の字句
 この代表的なものとして、算術演算子(+、−、*、/など)がある。大小比較のための関係演算子(>、<、=など)や論理和・論理積などの論理演算子(∧、∨など)、あるいは文字列の連結を表す演算子がある。これらの演算子のほか、実行を制御するのに用いる字句がある。変数に新しい偵を人れる代入演算子もこの一種であり、条件により分岐するためのIF、THEN、ELSEなどや変数の型を宣言するためのREAL、lNTEGERなどもある。このような交字列は言語の中で特定の意味を持つものであり、これらをキーワード(keyword)と呼ぶ。
 
利用者が決める字句
 ユーザーがプログラムの中で用いる変数、関数、副プログラムなどの名前は、通常、何文字かの英字と数字で戎すが、これも分解・不可能な基本要素、すなわち字句であり、これらを識別子(identifier)と呼ぶ。文につけるラベルも識別子の1つである。定数は、それらの持つ値自白身が識別子になっているものとみなせる。文字列型の定数をリテラル(litera1)ともいう。
 
(c)
 言語の文法に従って、字句を並べて意味のある形にまとめたものが文(statement)である。文は、実際に機械語命令の列に直されて実行される実行文(executable statemenl)と、機械語命令を生成するときに必要な情報を提供する非実行文(nonexecutable statemen)に分けられる。
 実行文には、算術代入文、交字列代入文、データの出し入れに関する入出力文、実行の制御を司る制御文などがある。代入文では、代入演算子(=または:=で示される)の右側にある式(算術式)で指定され計算の結果が、左側に指定されている変数に代入される。
 非実行文には、変数がどんな種類の値をとるかを定める型宣言文(declaration statement)、データの入出力の際の形式(書式)を定める書式指定文(formate statement)などがある。変数などのとる値の型として、整数、実数、文字列、論理値は基本的なものであるが、これらを構成要素に持つ複合的な構造として配列がある。
 
(d) 主プログラム(メインプログラム)と副プログラム(サブプログラム)
 実行文と非実行文を適宜並べて、必要な計算処理をするようにしたものがプログラムであり、手続き(procedure)ともいう。プログラムの構造をとらえやすくしたり、書く手間を減らしたりするため、何回も同じ計算をする場合など、その一部をまとめて名前を付けて参照することができる。これをサブプログラム(subprogram)という。これに対して、全体の中心となって仕事を進めるものをメインプログラム(mainprogram)という。
 サブプログラムを記述するとき、一般性を持たせるため、いくつかのパラメータを使うことができる。この記述に使うパラメタを仮引数(ひきすう、formal parameter)といい、メインプログラムで実際にサブプログラムを引用するときに使うパラメータを実引数(actual parameter)という。
 サブプログラムには2種類ある。一つは、その名前が計算した結果を持つものであり、これを関数、ファンクション(function)という。それ以外のものをサブルーチン(subroutine)と呼ぶ。なお、たいていの言語には頻繁に用いるいくつかの関数、たとえは対数や三角関数などをあらかじめ言語体系の一部に組み込んである。これを組込み関数(built-in function)と呼ぶ。
  
表3. 3 基本データ型 Visual Basic Ver.6.0の場合

 
(e) その他
 プログラミング言語について考えるとき注目する必要のあるその他の項目をいくつかあげておく。
 
データタイプ
 配列(array)はほとんどの言語に備わっているデータタイプ(データの型)であるが、他に、レコード型、ホインタ型、スタツクなど種々の型がある。利用者が新しい型を定義できる機構を持つ言語もある
 
1次元配列
 同種類の大量のデータを管理、処理する場合に配列(Array)は便利です。添え字が一つの場合を1次元配列と言います。2つのものを2次元配列、3つを3次元配列などと命名します。
 
図3.2 1次元配列

図3.2の場合に、配列名a の配列が容量11個分、メモリーに確保されます。 次のコードでは、配列に0から10までの整数が代入されます。
 
          リスト3.4
    For i = 0 To 10
          a(i) = i ' a(0)=0 a(1)=1 ゥゥゥa(10)= 10
     Next i
2次元配列 a ( i , j )

2次元配列の宣言は
図3.3 2次元配列
 
のように、添え字の上限値を指定します。 こうすることにより、(i+1)×(j+1) 個のメモリ が配列a ( i , j )のために確保されます。
 
値の受渡し
 副プログラムが働くとき、そのパラメタの実際の値を主プログラムからどのように受け取るか、結果をどう渡すかについて、いくつかの方式がある。参照による呼び出し(call by reference)と値による呼びだし(call by value)が主な方式である。その他、名前による呼びだし(ca|l by name)などの方式もある。
 
ブロック
いくつかの文をまとめて一つの丈として扱える言語がある。このまとまりをブロック(block)という。
 
変数名の有効範囲
 変数には、プログラム全体、一つの手続きの中だけ、あるブロックの中だけというように、その名前が意味を持つ範囲、スコープ(scope)が決まっている。ある範囲の中だけで有効なものをローカル変数(local variable)、より広い範囲にまたがって有効なものをグローバル変数(global variable)という。
 


図3.4 スコープ 変数の適用範囲 Visual Basic Ver.6.0の場合
 
再帰性
サブプログラムの中で自分自身を、または他のサブプログラムを経由して自分を呼び出すことを再帰呼出し(recursive call)という。
 
リスト3.5 n!を計算するプログラム


その他
 主記憶装置の記憶場所を実行開始前に定めることを静的割当て(static allocation)、実行時に記憶場所を割り当てることを動的割当て(dynamic allocation)という。
 
3.3  言語プロセッサ
 機械語以外の言語で書いたプコグラムは、そのままでコンピュータに実行させることはできない。実行させるには、それを機械語のプログラムに変換する必要がある。この変換の仕事をするのが言語プロセッサ(language processor)である。変換前のプログラムをソースプログラム(source program)・ソースコード、変換した結果のプログラムをオブジェクトプログラム(object program)・ネイティブコードと呼ぶ。オブジェクトプログラムは必ずしも機械語のものとは限らず、さらに変換が必要になる場合もある。
 
言語プロセッサの構成
 言語ブロセッサには2通りのものがある。すなわち、ソースプログラム全体を翻訳して、オブジェクトプログラムを作る翻訳プログラム(translator)と、ソースプログラムの1行ずつを解析し実行する型の解釈プログラム(interpreter)である。通常、BASICで書いたプコグラムは解釈プログラムで処理される。FORTRANやCOBOLなどの高水準言語に対する翻訳プログラムをコンパイラ(compiler)と呼び、アセンブリ言語に対するものをアセンブラ(assembler)という。以下、コンハイラを中心に説明するが、その要点は他の言語プロセッサでも同じである。
 ソースプログラム、すなわちソース言語で嘗いたプログラムを翻訳するには、まず、プログラムの各文字を調べていつて、字句に分解する必要がある。この仕事をする部分を字句解析プログラム(|exical analyzer)、あるいはスキャナ(scanner)と呼ぶ。次にソース言語の文法に従って、いくつかの字句を一つの構造にまとめる。たとえは、字句A、+、およびBを式 "A+B" という単位位にまとめる。さらに、これらを文という単位にまとめる。この什事のためのプログラムを構文解析プログラム(syntax analyzer)またはパーザ(parser)という。パーザによって得られた構造をもとにして、目的言語の命令列を作ることになる。しかし、通常は、中継ぎをする中間的な言語(中間コード)による命令列を作り出す。これは中間コード生成プログラム(intermediate code generator)の仕事である。この中間コードに含まれている無駄な部分を除くため、コード最適化(code optimization)を行い、最終段階の目的、コード生成プログラム(code gcncrator)に引き継ぐ。
 


図3.5 コードの翻訳処理の流れ
 
3.4 プログラム開発支援ツール
(1) プログラム開発のためのツール
 プログラムを開発する際、ソースプログラムの作成、コンパイル、リンク、試験的実行(テスト)のステップを繰り返すが、その仕事を助けるためのツールとして、テキストエデイタ、リンケージエデイタ、プログラムテストおよびデバッグ用ツール等がある。
 
(a) テキストエデイタ
 ソースプログラムや一群のデータを文字形式のファイルとして編集するのに用いられるプログラムをテキストエディタ(text editor)あるいは編集プログラムという。対話型で文字列や数値を逐次人力していき、誤りに気付いた時点で、文字単位、または行単位に挿入または削除することができる。また、指定した文字列を検索、置換あるいは複写することができるようになっている。ワープロは、入力した文字の修飾機能や、図の挿入などの機能を持っているがこれらの機能を省いたものが、テキストエディタであり、ワープロより高速で、プログラムを書く上で便利な機能が備わっている。Windowsのワードパットもテキストエディタの簡易版である。
 Visual Basic などに添付されているテキストエディタ(コード編集画面)は、文法上の誤りがあれば、チェックのためのメッセージボックスが表示され、ヘルプボタンを押すと関連項目の文法等が表示される。また、入力時、よく使うステートメント等はリストボックスが表れ、項目を選択できるようになっており、プログラム開発の効率がアップする。
 
(b) リンケージエデイタ
 テキストエディタで作成されたソースプログラムは、コンパイラを用いてオブジェクトプログラムに変換される。このオブジェクトプログラムは機械語とほぼ同一の形式であるが、通常そのままでは実行することはできない。たとえは、別々に作成した複数のオブジェクトプログラム(メインプログラムとサブプログラムなど)を結び付けたり、コンパイル時に相対番地で表現されている変数やサプルーチンの番地を絶対番地に変換する必要がある。オブジェクトブログラムを実行可能な形式のプログラムに作り上げるのがリンケージエディタ(linkage editor)である。なお、リンケージエディタのことを単にリンカ(linker)とも呼ぶ。
 
(c) テストツール
 ソースプログラムをテキストエディタで作成し、コンパイル、リンクしただけではプログラムが完成したとはいえない。作成したブログラムが意図したとおりに動作することを確認する必要があり、そのためにプログラムのテストを行う。テストの方法としては、想定される条件(人カデータ)のもとでブログラムを実行し、その結果(出カデータ)を検証するのが普通である。また、ブログラムを修正して新規機能を追加した場合、その新機能の稼動テストはもちろんのこと、機能追加のための修正プログラムが他の機能に対し予期しなかった悪影響を与えていないことを確認する必要がある。
 さらに、機能的には正しく動作しても、予想以上に処理時間がかかってしまうこともある。このような場合にはプログラムの実行効率を向上させる必要がある。そのためにプログラムのどの部分で時間を費やしているかをテストで発見し、処理方法の変更を検討するための手掛かりを得ることも重要である。このようにプログラムのテストは非常に大切であるが、テスト用のデータの作成や、テストの繰返しなどに、プログラム作成と同じくらい手間がかかることもある。そこで、テストを効率的に行うためのツールが用意されている。
 
(d) デバッキングツール
 テストにより実行結果になんらかの不都合が見つかった場合、ブログラムの誤りを修正する必要がある。構文上の誤りなどはソースプログラムをコンパイルするときにわかるが、定数や変数に用いた文字の書き間違いや使用した命令の間違いなどはコンパイルではチェックできない。ソースプログラムあるいはコンハイル時に打ち出されたリスト、あるいはさらに実行結果を見てプログラムの実行の流れを追い、誤りの原因を見つけて修正する作業をデバッグ(debug)という。机の上でリストを見ながら行うデバッグを机上デハッグという。
 しかし、単にリストの上で命令の流れを追っただけではその原因がわからないで、プログラム実行の途中経過を確認しながらでなければ誤りの原因を究明することが難しい場合がある。このような場合に備えて、いくつかのデバッグ用ツール(デバッガ、debugger)が用意されている。
 
(e) プログラム管理ツール
ライブラリ管理ツール
  関連の強いプログラムをまとめたものをモジユールというが、作成したモジュールが多くなったり、また、同一のモジュールを複数のプログラムで共有するような場合、モジュールが一元的に管理されていると便利である。複数のモジュ−ルを一つのファイル(ライブラリと呼ぶ)に格納し管理するためのライブラリ管理ツールがある。
 
バージョンソースプログラム管理ツール
 ソース・プログラムは作成後何回も修正が行われるのが普通である。各修正段階をバージョン(version)と呼ぶ。最終バージョンのプログラムだけではなく、最初からの履歴も保持していると便利なことがよくある。すべてのバージョンのソース・プログラムをそのまま保存するのではなく、バージョンごとにどのような更新が行われたかを示す情報だけを記録するなど、記憶領域を減らす工夫がされている。このような処理をするのがソース・プログラム管理ツールである。
 
モジュール管理ツール
  通常、プログラムをいくつかのモジュールに分割して作成するが、各モジユール間には関係がある。たとえは、モジュールAとモジュールBが、モジュールXを共通に参照しているような場合、モジユールXが更新されたらモジユールA、Bの両方についてコンパイルし直したり、リンクし直したりする必要がある。このようなモジュール間の関係の管理は、プログラムの規模が大きくなり、モジュール数が多くなると非常に複雑になる。モジユール管理ツールは、各モジュール間の関係の管理を手助けするためのものであり、関連するモジュールの再コンパイルや再リンクを自動的に行うような機能も持っている。
 
その他のツール
 以上の他に、作業中にCPUをどれくらい使用しているかを表示するためのCPUサーモメータがある。また、実行中の作業を終了させずにヘルプを参照できるオンラインヘルプ機能や、さまざまなサンプルプログラムが整えられている。
 
(2) ビジュアルな開発環境
 GUI(graphical user interface)の環境でプログラムを作成すると飛躍的に開発効率が上がる場合もある。たとえば、Visua|Basicでは、マウスを使って画面を簡単に設計できる。
 画面に長方形を表示し、その長方形をクリックすることによってある処理を実行させるものとする。それには、あらかしめ用意されているツールを使って長方形(ボタン)を表示し、そのボタンと処理プログラムをリンクさせれはよい。
 処理内容をコマンドや組み込まれている関数などで記述する必要があるが、ボタンを表示したり、ボタンがクリックされたときに個々の処理に移る指定は非常に簡単にできる。
 処理結果を出力する帳票の設計も、罫線を引くためのツールを使って簡単にできる。さらにデータの属性を定義したりすることも、あらかじめ用意されているさまざまなアイコンを使って簡単にできる。
 高水準の機能を持つ画面やきれいな帳票を作るのに、従来のようにプログラム全体を、細かい規則に気を使いながら、エディタで1行ずつコーディングするのではなく、用意されているツールを使ったり、機能をわかりやすく表示したアイコンで指定するという簡単な作業で作成できる。
 さらに、表計算ソフトやワードプロセッサでも、画面を設計する機能や、関数などのマクロ機能をもっているものが多い。マクロ機能とは、いくつかの操作手順を登録しておき、一連の操作を自動的に実行できるようにしたものである。操作手順を登録する方法には、ふつうのプログラミングと同様に、マクロ言語で記述する方法と、実際の操作を一つ一つ実行しながら記録して、プログラムを作成する方法がある。この方法では、操作を行うことにより、その操作に対応するプログラムを自動的に記録してつなぎ合わせて新たなプログラムができるので、容易にプログラムを作成することができる。
1例として、Visual Basic による簡易電卓のプログラム例を 図3.6に示す。コマンドボタンをクリックするとテキストボックスに数値が示され、+、−、*、/のボタンを押すと入力した数値(A)が記憶され、、その後、数値を入力し、= を押すと数値(B)を記憶し、+、−、*、/のボタンに対応して、それぞれ、演算を行い、計算結果をテキストボックスに表示する。プログラムは、それぞれのボタンが押されたときの役割をコーデングすることになる。
 


図3.6 Visual Basic によるフォーム
フォーム上には、テキストボックスと18個のコマンドボタンのオブジェクトを配置
 
3.5 オペレーティングシステムとは
 この節では、オペレーティングシステム(OS、operating system)について、その目的を中心に述べて、それを果たすための機能の概要・を説明する。
 
(1) オペレーティングシステムの目的
 コンピュータが登場した当初、プログラムをコンパイルし、実行するためには、何度も人手を介さなければならなかった。人手による操作の間、コンピュータは何も仕事をしないで、遊んでいる。そこで、人手の介入を極力減らし、この無駄を省くことを目的として、OSが開発された。初期の頃はごく単純な機能しか持たないものであり、モニタプログラムと呼ばれていた。
 その後、コンピユータをさらに有効に利用し、より使い易くするために、OSには多くの機能が追加された。たとえは、あるプログラムが入出力の終ず待ち状態のとき、CPUでは別のプログラムを実行する他、プログラミング(multi‐programming)機能がある。このようにハードウェアやソフトウェアなどのコンピュータ資源(computer resource)を管理、制御して有効活用することもOSの目的の一つである。
 また、コンピュータシステムの利用者にとって使い易い環境を提供するためには、プログラムを作成する際にハードウェアからくる制約をいかに少なくするかが重要である。そこで、OSの持つ機能には、他の利用者を意識しないで、また、実メモリの容量や入出力装置の種類を意識しないで、プログラムを作成できるような環境を提供することもOSの目的である。
 近年、ハーソナルコンピユータ用OSの出現により、OSの概念が大きく変わった。すなわち、複数の人が共用するコンピュータから、個人が占有するコンピュータになったため、多くの仕事を同時に実行する必要がなくなった。また、高価なコンピュータから低価格なコンピュータになったため、コンピュータ資源の有効活用よりも、使い易さの方が重視されるようになった。これらのコンピュータどうしをネットワークで接続し、お互いに利用し合うことも多くなった。分散していることを利用者に意識させないで利用できる環境を提供することもOSの役割である。
 
(2) パーソナルコンピュータ用オペレーティングシステム
 パーソナルコンピユータ(PC、personal computer)は、その名の示すとおり、個人用に作られたものであり、汎用コンピュータとは異なる発展をしたOSの上に、使い易く役に立つ応用(ソフトウェア)パッケージが多数作られている。
 一般に、応用(ソフトウェア)パッケージは、パソコンメーカーとは独立のソフトウェアハウス(ISV:independent software vcndcr)によって開発され、パソコンショップなどで売られている。lSVは、彼等の製品をたくさん売るために、よく売れているPC上に開発する。そのため、たくさん売れているPCは、多くの応用パッケージが使えるようになり、ますます売れるという現象を起こす。このようにして市場の大半を押さえ、実質的にも誰もが認めざるを得ないようになった標準をデファクトスタンダード(事実上の標準)と呼んでいる。
 PCの世界のデフアクトスタンダードは、マイクロプロセッサでは86系、ハードウェアではPC/AT、OSではMS-DOSである。この仕様を満足するPCであれば、多くの応用パッケージが利用できる。
 応用パッケージは、OSインタフェースだけでなく、BIOS(basic I/O system)と呼ばれるlBMが規定した入出力インタフェースを直接利用したり、ハードウェアに直接アクセスして高速処理を実現しているものもある。しかし、このような方法で作られた応用パッケージは、ハードウェアやOSの早い進歩に追従できなくなる恐れがある。
 ハードウェアの進歩により、OS自身も変革が迫られた。たとえは、MS-DOSは、インテルのマイクロプロセッサ8086用に作られているため、640Kハイトというメモリ空間の制限がある。その後のマイクロプロセッサの進歩とメモリの大容量化にともない、大きなメモリ空間を使いたいとの要望が高まった。そこで、MS-DOSに代わるOSとしてOS/2、Windows、WindowsNTなどのOSが登場した。WindowsおよびWindowsNTでは、MS-DOS上に開発された応用パッケ−ジが使えると共に、新しい機能拡張が施されている。さらに、携帯情報端末やテレビなどへの組込みを目指し、コンパクトなOSも登場している。
 
表2 代表的なオペレーティングシステム

  
(3) オペレーティングシステムの機能と構成
 オペレーティングシステム(OS)は、コンピュータのハードウェアを効率的に動かすための基本機能を提供するものである。OSの機能が複雑になるに従い、OSが巨大化し大きな主記憶を必要とするようになった。その反省から近年のOSは、2層構造になっている。第1層は、OSの中核部であり、コンピュータを制御するための必要最小限の機能を提供している。第2層は、いろいろなサービスモジュールを提供しており、必要に応じ選択的に利用できるようになっている。
 
(a) 中核部(kernel)
 高速性を要求するOSの基本機能を提供するモジユール群である。その動作モードは、カーネルモード(kemel mode)と呼ぶ特権モードである。WindowsNTでは、これらのモジユール群をエグゼクティブ(executive)と呼んでおり、次の四つの層から構成されている。
 
システムサービス
  ユーザモードで動作するモジュールとカーネルモードで動作するモジュールの間のインタフェースである。
エグゼクテイプコンホーネント
  セキュリティ参照モ二タ、オブジェクト管理、プロセス管理、LPC(local procedure call)機能、仮想メモリ管理、入出力管理の六つの機能を提供する。
 
カーネル
 スケジューリングや割込み処理などの核となる機能を提供する。マイクロカ一ネル、あるいはスーパハイザと呼ぶOSもある。
 
HAL(hardware abstraction layer)
  ハードウェアの違いを吸収するためのフィルタの役割を果たす。
 
(b) サービス部
 いろいろなサービスモジュール群である。その動作モードは、応用プログラムと同じ扱いであり、ユーザモードと呼んでいる。WindowsNTでは、これらのモジュール群をサブシステムと呼んでおり、OS固有のセキユリテイ管理、セッション管理、ネットワーク関連サービスからなる中核サブシステムと、他のOSの上で開発された応用プログラムがそのまま利用できるように翻訳する機能(エミュレータ)を持った環境サブシステムに大別される。他のソフトウェアハウスが特別のサービスを付加する場合、サブシステムの一つとして扱うことができる。
 
(4) オペレ―ティングシステムの動き
 カーネルは主に,システムの各種資源の状態を把握し,各プロセス(後述)に対する資源の割当てを行い,不要となった資源の回収などを行う。これらの制御の受渡しは割込みにより行われる。あるプロセスを実行中になんらかの割込み原因が生じると,カーネルはその割込み原因を解析し,それにもとづいて該当する制御ルーチンヘ制御を渡す。
 割込み原因としては,主記憶領域の要求/解放,入出力の要求/完了,タイマによる割込み,各装置の誤動作による割込み,その他プログラムの誤動作(たとえは,演算中桁あふれが生した,指定領域以外の番地を参照した)などいろいろなケースがあり,それぞれに対して適切な処置を行う必要がある。たとえは,実行中のプロセスが入出力を要求した場合,そのプロセスを待ち状態に切り替えて,他のプロセスを実行させる。入出力が終了したことを知らせる割込みが生じると,待ち状態にあるプロセスを実行再開が可能な状態に切り替える。このような割込みによる制御の受渡しが,カーネルによって行われる。
 システム全体の制御を統一的に行うためには,入出力制御やメモリ制御などいくつかの特別な命令はカーネルにしか使えないようにする必要がある。そこで,オペレーティングシステムが動作中の状態と,利用者のブログラムが動作中の状態とを区別して考える。
 一般のプログラムから入出力の要求などカーネルモ−ドでしか使用できない特権命令を利用するためには,OSに用意されているコマンドを用いて,カーネルを呼び出す必要がある。
 オペレーテイングシステムを構成するカーネル以外の各種管理プログラムの詳細については次節で述べる。
 
3.6 オペレーティングシステムの機能
 
(1) プロセス管理
 CPUの処理速度は,入出力装置の処理速度などに比べると非常に速い。そのため,処理を順次実行していくと,CPUの活動はそのほとんどが入出力終了待ちによる「待ち状態」となることが多い。そこで,いくつかの処理を並行して実行することにより,CPUの空き時間を少なくする工夫が行われている。これを多重プログラミングという。多重プログラミングを実現するためには、CPUをいくつかの処理の間で随時切り換えて使用できるようにする必要がある。これを行うのがプロセス(process)管理,あるいはタスク(task)管理である。
 プロセスあるいはタスクとは,メモリやファイルなどの資源の所有単位であり,CPU実行権を与える単位である。プロセスには,その作成から終了までに,実行可能状態(ready state)、実行状態(active state),待ち状態(wait state)の三つの状態がある。ある仕事の実行指示を行うと対応するプロセスが生成される。生成されたプロセスは,実行可能状態の待ち行列に並ぶ。実行中のプロセスが入出力などの待ち状態になるか,決められたCPUの占有時間を経過すると,そのプロセスの実行を一時中断し,待ち状態にする。待ち状態が解除されたプロセスは,再び実行可能状態の待ち行列に並ぶ。仕事が終了するとプロセスは消滅する。
 プロセスの実行順序を決めるモジュールをスケジューラ(scheduler)と呼ぶ。スケジューラにより決定され,次に実行されるプロセスを処理に移すモジュールをディスパッチャ(dispacher)と呼ぶ。スケジューラとデイスパッチャはペアになって実行権の切替えを行う。スケジューリングの方法は,優先度の高いプロセスから順番に実行する優先度方式と,同じ優先度のプロセスに対し順番に実行するラウンドロビン方式を組み合わせたものである。
 プロセスの数が増えてくると,プロセスを切り換えるための負荷(オーバーヘッド)が大きくなる。特にメモリの割付けのテーブルの書替えにかなりの負荷がかかる。そこで考え出されたのが軽量化プロセス(|ightweight process)と呼ばれる方式である。
 
(2) メモリ管理
 多重プログラミングにおいては,いくつかの処理が並行して実行されるため,主記憶上に大きさの異なる複数のプログラムとデータが記録される。処理が終了すると,それぞれのプログラムの命令やデータの記憶領域は解放される。この場合,プログラムを記憶する場所を固定したり,連続領域を確保したりすると,主記憶の無駄,すなわち利用できない領域が多くなる。そこで,相対番地で記述されたプログラムをいくつかの任意の場所に分けて記憶し,実行時に絶対番地に変換して演算その他を行うようにして,主記憶の使用効率を高めることが行われている。
 また,互いの記憶領域を干渉し合わないようにするため,記憶領域保護の機能を備える必要がある。このような,主記憶上のさまざまな制御を行うのがメモリの管理モジュールである。
 
(a) 記憶制御機能
 主記憶はある有限の大きさのものである。また,プログラムを実行するには,それを主記憶上にロードする必要がある。そのため,たとえば、主記憶がlMバイトの場合,lMバイトより大きなプログラムはこのコンピュータでは実行できない。そこで,プログラムの一部分だけを主記憶に入れて実行し,実行し終わつたところに別の部分を重ねて格納できるようにするオーバレイ(overlay)機能とか,見かけ上主記億のサイズを十分大きくする仮想記憶(vinual memory)機能により,大きなプログラムを実行できるようにしている。
 
(b) 記憶保護機能
 記憶保護機能としては次の三つの方式がある。@プログラムごとに使用可能な領域を定め,その上下限をレジスタに入れておいて,これを越える場所への参照要求があると,それをハードウェア的に検出する方式(限界レジスタ方式),A各プログラムに保護キーを指定し,主記憶にはある区切りごとに記憶キーを持たせ,お互いのキーが一致しないと使用を禁止するもので,キーの組合せで書込みを禁止する方式(キー方式),B仮想記憶機能により,各プログラムに割り当てる仮想空間を独立させ,互いに他の空間には入り込むことができないように制御する方式(仮想記憶方式)。
  
(3) 入出力管理
 多重プログラミングができる環境では,同し装置に対して複数のプロセス(プログラム)から入出力要求が出されることがある。しかし,一つの入出力装置が同時に処理できる入出力要求は一つだけなので,複数の要求の発生に備えて入出力の動作を管理する必要がある。これを行うのが入出力管理モジュ一ルである。
 通常,複数の入出力要求は,その発生順に待ち行列に並べられる。ある入出力要求の処理が終わると,次の要求をこの待ち行列から取り出し,入出力を実行する。なお,待ち行列中の入出力要求を取り出す順番は,先入れ先出し(FIFO,first in first out)が基本となっているが,優先順位の高い要求を先に処理したり,また,ディスクの場合,シークタイム(目的のデータの位置までヘツドが移動するための時間)が最も短い要求から処理されることもある。
 端末装置からの入出力では,入出力管理モジユールはデータ通信システムとのやりとりを行い,画面に表示したり,キーボードからの人力を受けつけたりする。
 ファイル入出力の場合,入出力管理モジュールはファイル管理モジユールハードウェア(磁気ディスク装置や磁気テープ装置)との間に位置づけられる。利用者プログラムから入出力命令が出されると,それはファイル管理モジュールを通して,入出力管理モジュールヘ入出力要求が渡される。また,ユーザブログラムから直接入出力管理モジュールヘ要求を出すこともできるが,この場合,ブロックとレコードの管理は利用者プログラムで行う必要がある。
 入出力管理モジュールは次のような処理も行う。すなわち,ユーザプログラムからの入出力要求を,対象としている装置に依存した入出力命令に置き換えること,入出力に関する割込みを検知し適切な処理を行うこと,入出力時にエラーが発生した場合には再実行してエラー回復を試みることなどである。
 
(4) ファイル管理
  一般にシステムの利用者が利用するデータやプログラムは,2次記憶装置上にファイルとして格納されている。このファイルを必要に応じて主記憶装置上に読み込んで利用する。この場合,利用者がその都度ファイルの格納場所を指定して取り出すのは面倒な作業である。また,複数の利用者が共有して利用する記憶装置については,ファイルの読み書きを制限したい場合もある。
 そこで,2次記憶装置上に記憶されたファイルの記憶場所を統一的に管理し,いろいろな用途に合わせて入出力できるようにするのがファイル管理モジユールの役割である。
 複数の記憶媒体がある場合,そこからデータを取り出すためには,取り出すファイルがどの媒体(ボリユーム,volume)にあるかをまず指定する必要がある。複数の媒体を認識するために,各媒体には名前をつけておく。この名前をボリューム名という。
 各媒体に記憶されているファイル名や格納番地,ファイルの大きさなどファイルヘのアクセスに必要な情報は,ファイルデイレクトリ(MS-DOSではFAT,file allocation tableと呼び,各ディレクトリはフォルダと呼んでいる)に保持する。また,ボリューム名やファイルディレクトリの格納場所を保持するボリュームラベルを各媒体ごとにつける。OSはこのボリュームラベルとファイルディレクトリを参照することにより,どの媒体にあるファイルヘもアクセスできる。ファイルディレクトリは階層構造になっており,複数のファイルを分類して収容することができる。
 ファイル管理モジュールの機能を大別すると,@ファイル(あるいはデータセットとも呼ぶ)がどこにあるかつきとめる機能,Aファイルを新規に編成し,データを読み込み,書き出し,更新し,追加する機能,B2次記憶装置上の使用状況を管理し,ファイルの格納場所を確保したり,拡張したりする機能などからなる。
 一般に,ファイルの構造はOSにより異なるため,異なるOSで作成したファイルを受け渡す場合は変換が必要である。そのため,複数のファイル構造を扱えるように複数のOSに対応した変換機能を標準装備するOSが一般的である。
 
(5) システム管理
 コンピュータシステムが全体の動きを管理し,良質なサービス,利用環境を整備することがシステム管理の目的である。システム管理モジユールが行う作業として,次のようなものがあげられる。
 
(a) システムの運転状況の監視と記録
 システムの運転状況を常に監視し,定期的にその状況を記録(保存)しておく。この記録をもとに各種のレポートを作成し,システムの稼動効率の向上や,システム拡張計画の立案のための資料とする。
 
(b) 障害の検出,診断,異常処理
 システム内の障害,異常をいち早く検出し,それぞれの状態を診断,解析し,その原因に応じて,障害部分の切離しなどの適切な処置を行う。これらの機能の実現のため,システムのハードウェア構成に冗長度を持たせる必要がある。デュプレックスシステム(duplex system)やデュアルシステム(dual system)がその例である。
 
(c) 障害に対するバックアップ
 障害によりブログラムの実行が中断しても,復旧後に残りの処理を継続して行えることが望ましい。プログラムの途中にオペレーティングシステムに対する特別な命令を組み込んでおき,その命令が実行されると,システム管理モジュールが,そのプログラムの実行状態を記録しておく。記録を残す時点のことをチェックポイント(check point)と呼ぶ障害復旧後はチェックポイントでの状態からプログラムを再始動することができる。
 
(d) 利用者の利用状況の把握
 特定の利用者がシステム資源を占有したり,他人のデータを不正に使用したりすることがないよう,利用者ごとにその使用状況を把握している必要がある。たとえは,CPUの利用時間やメモリ、ディスク領域の使用量があらかじめその利用者に割り当てられている上限値を超えていないかどうかのチエックをする。また,機密保護機能として,他人のファイルに無断でアクセスできないようにする仕組みがある。システムの資源の使用状況を正確に把握する機能は,使用量に応して適正な料金を課すためにも必要である。
 
3.7 ミドルウエア
 ミドルウエアは,OSと応用ソフトウェアの中間に位置し,デイスブレイの表示および操作環境,データベース構築および利用環境,分散処理環境,共同作業支援環境,インターネット利用環境などを実現する基本ソフトウェアである。
(1) マルチウィンドウシステム
 人が机に向かって報告書を作成するとき,関連する資料をいくつも机の上に広げるのと同じように.ディスプレイ上にウィンドウ(window)と呼ばれる画面をいくつか表示し,あるウィンドウで資料を参照しながら別のウインドウで文書を作成できるようになっている。別のウィンドウのデータをそのまま,クリップボードにコピーし、作成中の文書に貼り付けることも可能である。このようなシステムをマルチウィンドウシステム(multi-window system)という。
 一般に,マルチウィンドウシステムとGUI(graphical user interface)とは,一体のものとして提供されている。 GUIとは,アイコン(icon)と呼ばれる絵文字などのグラフィックスを利用して,コンピュータと人とが対話する方式のことである。マウス(mouse)でアイコンなどを操作することによってコンピュータヘの指示を与える。アイコンにより操作内容が直観的に理解でき,キーボードからコマンド丈字列を入力する時に必要な細かい規則を知らなくてもよいので,コンピュータヘの指示は容易である。
 
(2) デ−タベース管理システム
 データベースの構築および維持・管理を行うソフトウェアをデータベース管理システムという。複数の利用者が同じデータベースを同時に利用し,更新や検索を行っても,矛盾がおこらないように管理し,また効率よく利用できるようにしている。データを共有資源として管理し,またプログラムと関係なく独立して管理している。
 データの構造にはいくつかの棟類があるが,2次元の表形式の構造をもつデータの集まりをリレーショナルデータベース(relational database)という。リレーショナルデータベース用の言語として,国際標準に制定されたSQL(structured query lunguage)がある。このSQLを使ってデータベースの形式を定義したり,データの検索や修正ができる。
 
(3) ネットワークOS
 複数のコンピュータやプリンタなどをLAN(Local Area Network)に接続し,分散したファイルなどの資源を利用するための環境を実現するためのソフトウェアとして,ネットワークOS(network operating system)がある。ネットワークOSの主な機能は,LANを通して大容量の外部記憶装置や高性能のプリンタなど高価なハードウェアを共有できるようにすること,高価なソフトウェアやデータベースを共同で利用できるようにすること,複数のコンピュータに処理を分散させることなどである。
 ネットワークOSによりクライアントサーバシステムが実現できる。すなわち,クライアントとは利用者が直接操作する端末であり,サーバとはクライアントから出される要求に従い動作する共用コンピュータである。利用者が,サーバの資源を自分(クライアント)が備えているかのように,利用できるようにする。比較的小規模なLANでは,専用のサーバを必要としないことが多い。つまり1台のワークステーションが,サーバの機能もクライアントの機能も持つようにすることができる。
 
(4) グループウェア
 ネットワークを介してグループによる共同作業を支援するためのソフトウェアをグループウェア(groupware)と呼ぶ。たとえば,電子メール,電子会議,掲示板,回覧,スケジユール管理,文書管理などの機能を持つ。
 電子メールを使うと,ネットワークで結はれた端末の間でメッセージを送受信することができる。相手の都合に関係なく情報を正確に伝えたり,また自分の都合のよい時に晴報を受け取ることができる。電子掲示板は,不特定多数の人達への連絡に使える。
 スケジュール管理の機能を利用すると,全員のスケジュールを共有し,複数のユーザに対して会議などの共通の予定を管理することができる。また文書管理の機能を使って,共有すべき文書を登録しておくことにより,文書作成の能率が上り,さらに登録された情報を簡単に利用できるようになる。これらの機能を用いることにより,アイデイアの交換がスムーズになって,グループ作業の効率を高めることが期待できる
 
(5) インターネット用ツール
 インターネット上では,ハイパーテキスト構造を実現するWWW(world wide web)が利用されている。WWWによりテキストや音声,画像などで構成されたデータ(ホームページと呼ぶ)間をネットワークを介してリンクが張られており,分散したホームページをいもづる式に次々と検索することができる。そのホームページがどこの国のどのサーバにあるかを意識しないで,利用することができる。同時に自分のもっている情報をホ一ムページとして登録すれば,インターネットを通して世界中の人に利用してもらうこともできる。ただし,このようなインターネットのサービスを利用するには,インターネットに接続されているサーバに,クライアントとして接続しなければならない。
 ハイパーテキストを構築するには,HTML(hyper texte markup language)という言語を用いる。この言語では,テキストのなかにタグ(tag)という文字列を置いて,タグを通じて他のページや他のサーバの情報にリンクすることができる。このようなHTMLで記述された文書を作成するためには,HTMLエディタがあるが,通常のワードプロセッサや表計算ソフトウェアで作成した文書をHTML文書に簡単に変換するソワトウェアもある。インターネットのサーバにはHTML形式の丈書ファイルが蓄債されている。
 サーバにあるHTML形式の文章ファイルを読み込み表示するには,クライアントにwwwプラウザ(browser)を備えておかなくてはならない。つまりブラウザとはインターネット上のホームページを閲覧するためのソフトウェアである。このブラウザを使って,WWWサーバに登録されているデータを見るときに,各サイトの最初に見える画面をホームページというが,WWWサーバが提供しているデータを総称してホームページということも多い。
 ハイパーテキスト構造の文書をサーバとクライアントの間で通信するときのプロトコル(protocol)、データ通信を行うときに必要な手順や規約)にはHTTP(hyper text transfer protocol)を用いる。
 リスト3.6は、HTML言語によるホームページソースの一部である。〈 〉はタグと言われる。例えば、「Trash is Treasure」というホームページ上に表示する文字のフォントの種類、カラー、サイズ等を、タグ <FONT ・・・・・>Trash is Treasure</FONT>で囲むことによって指定している。リスト 3.6のそれぞれの意味は下記の通りである。
 
     <H1>ゥ</H1>,<H2>ゥ</H2> : 大見出し、中見出しタグ 数段階に大きさを指定可能
     <P>ゥ</P> : 本文タグ
     < FONT ゥ・>ゥ・< /FONT> : フォント関連w定タグ
     color="#000099" : 文字色 000099  RGB ブルー系統色
     size="+2" : 標準サイズより2ポイント大きく
     face="Century Schoolbook"  : フォントの種類はCentury Schoolbook
     <I>----</I> : ホ体
     &lt;H1&gt; : &lt;は< , &gt; は>であり、表ヲ文字とタグを混同しないよう  にしている。
 
                     リスト 3.6 HTML言語によるホームページソースの一部
 

 

  図3.7 リスト3.6 の表示例
 
3.8 Windowsと言うOSについて
WindowsはMicrosoft社が提供するOSであるが、Windows 95/98/Me/NT4.0/2000/XPの特徴は以下の通りです。
 
(1) 32ビットOSである。
Windows 95以降のWindowsは32ビットのOSである。
32ビットパソコンがかなり以前に出現したが、16ビットOSであったMS-DOS(Microsoft社Disk Operating System)で処理をせざるを得なかった。32ビットOS、Windows95が出現し、MS-DOSと比較すると、同時にいくつかのアプリケーションを動かし、仕事をさせるマルチタスクを備え、進化したOSである。Visual Basicにおいても、32ビットのおかげで、Long型の整数データが可能になった。また、一辺に処理できるデータの量は16ビットより32ビット型が多く、処理速度にも関係してくる。アドレスも大量にとれる。
  
(2). APIやCOMによるシステムコールを提供

Windowsは、API(Application Programming Interface)やCOM(Component Object Model)
と言う2つのシステムコールを提供する。