第4回 コンピュータの仕組み


4.1 今週の目標

学習内容

  1. コンピュータ上での情報がどのように表現されているかを学ぶ
  2. 情報量の概念について理解する
  3. コンピュータを構成する機器の外観を把握し,それぞれの機器がどのような役割を果たしているかを理解する
  4. コンピュータのハードウェアとソフトウェアの関係性を理解する
  5. コンピュータがプログラムを実行する仕組みを理解する

学習目的

今週は,情報量とコンピュータの動作原理について学びます.本科目では,コンピュータの単なる使い方を学ぶのではなく,その背後にある動作原理を理解することによって,新しい,若しくは未知の技術を自分で学ぶことができるようになることを目指しています.また,コンピュータの動作原理(及び次週学ぶことになるコンピュータネットワークの原理)を理解することによって,コンピュータの特性を踏まえたより良いWebサイトを制作できるようになることを目的としています.

はじめに,コンピュータの仕組みを考える上で基本的となる情報量と2進法の概念を学びます.続いてコンピュータを構成する主要要素はどのようなものであるかを学び,同時にそれらの個々の役割を理解します.これはハードウェアとソフトウェアの関係性を理解するための前提知識となるためです.

さらにプログラムの役割を理解し,ソフトウェアという概念を学びます.ソフトウェアに関してはとくにOSの役割について詳しく学びます,これはコンピュータがプログラムを実行する仕組みを理解する為に必要な知識となります.ハードウェアとソフトウェアに関する知識がそろったことを利用し,今度はそれらの関係性を学びます.その関係性からコンピュータの特徴とはどういったものかを理解し,プログラムが実行される仕組みをすることが目的です.

キーワード

情報量,ビット,10進位取り記法(以下10進法),2進法,バイト,主記憶装置(メモリ),二次記憶装置(補助記憶装置,ハードディスク,CD-ROMなど),CPU(Central Processing Unit),プログラム,データ,OS(Operating System),プロセス(process)

4.2 情報量

先週のls コマンド(l オプション)の結果をもう一度見てみましょう.

% ls -l
total 1304
drwx------   9 s03000hf  student     512   4/20 15:46 Mail/
drwx------   2 s03000hf  student     512   4/ 8 18:01 WAppCNS/
drwx------   2 s03000hf  student     512   4/ 2 20:36 WAppNMC/
drwx------  11 s03000hf  student     512   4/ 8 18:01 WDataCNS/
drwx------   6 s03000hf  student     512   4/12 12:59 WDataNMC/
drwx------   4 s03000hf  student     512   4/12 12:08 Wnn/
drwxrwxrwx   3 s03000hf  student     512   4/18 15:54 Wnn6/
drwx------   2 s03000hf  student     512   4/ 8 18:01 XPAppCNS/
drwx------  15 s03000hf  student     512   4/18 09:32 XPDataCNS/
-rw-r--r--   1 s03000hf  student     204   4/18 11:12 test
-rw-r--r--   1 s03000hf  student     204   4/18 11:12 test2
drwxr-xr-x   2 s03000hf  student     512   4/11 11:18 tmp/
	    

それぞれのファイルの日付の前についている数字がそのファイルの情報量であると説明しましたが,この情報量とは何なのでしょうか.

コンピュータ(Digital Computer)は数値(digit)を処理します.従ってコンピュータ上で扱われる文字や画像,音声といった情報は全て数値として表現されています.

試しにtestというファイルがどのように数値で表されているか見てみましょう.

% od test
0000000 015444 041073 062044 047472 071106 076111 041061 020444
0000020 045471 052044 041444 037441 021433 024102 005033 022102
0000040 046573 022142 042555 022142 042555 022116 022046 022101
0000060 020443 015450 041012 015444 041104 066444 045444 047445
0000100 045461 024467 056044 026044 022044 065441 021433 024102
0000120 005033 022102 032456 036122 022116 032455 036124 022054
0000140 032445 036126 022107 032442 036122 022067 022077 020443
0000160 015450 041012 015444 041044 031444 031444 043515 075112
0000200 025044 071103 023044 022044 043462 036044 032444 022041
0000220 021433 024102
0000224

情報を数値で表すと,その分量を量ることができます.この分量を情報量と言います.ここでは情報量の概念と情報量の単位(ビット,バイト)について説明します.

情報量

コンピュータ内で表される数字や文字,画像などの情報は,必ず量を持っています.「このファイルは3メガバイトもある」と言った時,3メガバイトという表現は,バイトという単位による情報の量,すなわち情報量を表しています.では一体,情報量とはどのような概念なのでしょうか.

表が黒,裏が白色のカードを使って,天気を現すことを考えてみましょう.もし今このカードが1枚しかなかった時,表か裏の2通りしか表せないので,「」か「雨でない」かしか表現できません.

もし,カードが2枚あれば晴れといったように4つの天候を,3枚あれば8通りの天候を表すことができます(図1).

カード3枚による天気の表現

図1 カード3枚による天気の表現

このカードを図2のように並べると,図形を表すこともできます.

25枚のカードによる画像表現

図2 25枚のカードによる画像表現

さて,1枚のカードは2つの天候しか表すことができないのに対して,2枚のカードは4つの天候を表すことができます.これは1枚のカードよりも2枚のカードの方が表すことのできる情報の量が大きいということを意味しています.3枚のカードは8つの天候を区別し,表すことができるので,2枚のカードよりも更に情報量は大きいということができます.このように,情報量とは

何種類の情報を区別することができるかを示す量

を意味しています.当然,1枚のカードより3枚のカードの方が区別することのできる情報の数が多く,情報量は大きいと言えます.

情報量の単位として用いられるのがビット(語源は2進法の1桁を意味するBinary Digit)といわれるもので,1枚のカードや1枚のコインのように,2つのものを区別することができます.これを1ビットの情報量を持つといいます.表が黒,裏が白の3枚のカードを並べると8つのものを区別することができます(図1).この3枚のカードによる情報の表現は,情報量として3ビットを持つことになります.同様に図2のように 25枚のカードを並べた画像表現は,25ビットの情報量をもちます(すなわち,2の25乗通りの異なるものを区別できるということです).

情報量と2進数

コンピュータでは,全ての情報はコインやカードの表裏のかわりに1か0(電気信号のONかOFFに対応します)の2進数によって表現されます.先ほどのカードの表,裏を2進数の1,0に置き換え,8つの天候を0から7までの10進数(私たちが日常使っている数字記法です)に置き換えると,次のように対応づけることが出来ます(下表).

2進数と10進数の対応表
2進数  0 1 1011100101110111
10進数 01234567

2進法

ここで,2進法と呼ばれる数字記法について説明をします.普段我々が日常生活で使用している数の表し方は,10進位取り記法(以下10進法)と呼ばれる体系です.10進法を用いると,1桁で10個の別々のものを区別することができます.例えば,0は赤,1は青,2は緑・・・といった具合です.11個以上のものを区別するためには,桁を増やすことによって対応します.

さて,人間と違いコンピュータは2進法という表記体系を用いています.10進法に慣れ親しんだ我々からすると非常に変わった体系に思われますが,コンピュータにとっては非常に都合のよい体系なのです.10進法においては0から9までの10種類の記号がありますが,2進法には0と1の2種類しか記号が存在しません.つまり,2進法では1桁で2種類のものしか区別することができないのです.例えば,0が男,1が女,若しくは0が偽,1が真といった具合です.3つ以上のものを区別しようとすると,桁を増やす必要があります(2進法は2の累乗で桁上がりを起こします).

例えば8個のものを区別しようとする際に,10進法では1桁しか必要ないのに対し,2進数では3桁必要となります.また,256個のものを区別するのに,10進法では3桁(0〜999)あれば十分なのに対して,2進法では8桁(0〜11111111)も必要となります.10進法のように使う記号を増やせば桁は少なくなり,2進法のように使う記号を少なくすれば桁が増えます.電気回路であるコンピュータにとっては2進法の方が都合が良いのです.電気信号には雑音があるので,ONかOFFの2通りの状態しか考えないことにすれば,雑音に強い情報を表すことができます.詳しくは →10.4 アナログ情報とデジタル情報を参照してください.

さて,8個の数を区別することのできる2進数表現(すなわち,3桁の2進数)は何ビットの情報量をもつといえるでしょうか.2つのものを区別できるもの(例えば,1枚のコイン,1枚のカード)は情報量として1ビットをもつのでした.2進数において1枚のコインの「枚」にあたるのは,桁数であるといえます.1桁の2進数ならば,1か0という2つの状態の区別ができるので(カードで言えば表裏の区別ができるということです),1ビットの情報量をもちます.同様に,2桁の2進数ならば,11,10,01,00 という4つの情報を区別できるので,コインやカードで言えば2枚,すなわち2ビットの情報量をもつといえます.8個の数を区別することのできる2進数表現は3桁なので,情報量として3ビットを持つと言えます.

一般に,(2進法は2の累乗で桁が増えるので)2進法ではN個のものを区別するためにLog2・N桁,すなわちLog2・Nビット必要であるといえます(a,Bを自然数とした時,Log a・Bは,aを何乗したらBになるかを表しています.例えば,Log2・8=3です).下の表は,0からNまでの自然数を区別しようとする時,何ビットの情報が必要であるかを表したものです(Nは2進数及び10進数で表記しています).

ビットと桁数の対応表
2進数  0 1 10 11 100101110111
10進数 01234567
必要なビット 11223333

16進法

コンピュータは2進法によって様々な情報を扱います.情報を表すために使用されている0と1の列のことをビット列といいます.しかし,2進数で情報を表す場合,2進法では2の累乗で桁上がりを起こすために,情報量が増えると桁数もそれにつれて増えていきます.桁数が増えすぎると読みにくいため,2進数のビット列を4桁ごとに区切って表現することがあります.このとき,4桁の2進数を16進数で表します.

16進数による表現は色の指定(→7.5 スタイルシート)や,文字コード(→10.5 文字コード)で使用されています.

2進数,10進数,16進数の対応表
10進数2進数16進数
000000
100011
200102
300113
401004
501015
601106
701117
810008
910019
101010A
111011B
121100C
131101D
141110E
151111F

16進数は16の累乗で桁上がりを起こしますが,0から9までの10個の数だけでは不足なので,これに加えてA〜Fの6個の英大文字を使って数を表しています.そのため,10進法の10は16進法のA,10進法の15は16進法のFとなります.16進数の位取りの考え方は次のようになっています.

16進法の位取り

16進法における位取りの考え方

2進数と16進数の変換

2進法と16進法の相互変換は次のように簡単に行うことができます.たとえば,2進法の10011100110を16進数にする場合,以下の手順で変換します.

  1. 与えられた2進数を,下の位から順に4つずつのグループに分ける.→100 1110 0110
  2. 各グループを,対応表を基に16進数で置き換える.100→4 1110→E 0110→6
  3. 答え4E6

16進数から2進数に変換するには,逆の操作を行います.

情報量の単位

情報量の単位としては,上で説明したビット以外にもバイトという単位がよく使われます.256個の情報を区別するためにはLog2・256=8ビット必要で,これを1バイトと呼ぶことになっています.さらに,1,024バイト(約1,000バイト)を1キロ(1KB)バイト,1,048,576バイト(約1,000キロバイト)を1メガバイト(1MB),1,073,741,824バイト(約1,000MB)を1ギガバイト(1GB)と呼びます.「このファイルは3メガバイトもある」という表現は,「このファイルは3メガバイト=3,000キロバイト=3,000,000バイト=24,000,000ビットの情報量を持つ」ということを意味しています.そして,24,000,000ビットの情報量をもつとは,2の24,000,000乗個のものを区別できるということを意味しています.

● 練習問題

  1. 5桁(00000から11111まで)の2進数はいくつのものを区別することができるでしょうか.
  2. 慶應には,法・文・経済・商・理工・医学・総合政策・環境情報・看護医療の9学部が存在します.自分の所属学部を表すとすると情報量は何ビット必要になりますか.
  3. 表が白,裏が黒のカード64枚を平面上に配置することによって表される画像の情報量は何ビットになるでしょうか.
  4. 2進法の101101を16進法で書き直すとどうなるでしょうか.
  5. 3メガバイトのファイルをダウンロードするとします.ダウンロードのスピードは,平均して1秒間に5キロビット(5Kbps)であるとします.この時,ダウンロードにかかる時間はおよそどれくらいでしょうか?計算してみましょう.

4.3 コンピュータの構成要素とその働き

みなさんが,特別教室で目にするコンピュータは様々な部品から構成されています.最初にそれらの部品がどのような外観をしていて,どのような機能を持っているかを見ていくことにしましょう.これから紹介するようなコンピュータを構成する機器の事をハードウェアと呼びます.コンピュータを物理的に構成しているのはハードウェアですが,ハードウェアだけではコンピュータは仕事をする事はできません.コンピュータが仕事をする上で欠かせないソフトウェアについては,4.4 ソフトウェアとコンピュータの特徴で詳しく解説することにします.

コンピュータの構成要素

コンピュータの内部を覗いてみると以下のようになっています.

コンピュータ内部の写真1コンピュータ内部の写真2

コンピュータの中には演算をつかさどるCPUと,記憶をつかさどるメモリ,ハードディスクがあります.これらの要素が相互に協調しあってコンピュータの機能を実現しています.各構成要素について少し詳しく見てみましょう.

記憶装置

コンピュータの記憶装置には,主記憶装置(メモリ)二次記憶装置(補助記憶装置,ハードディスクやCD-ROMなど)があります.両者の特徴は以下の通りです.

主記憶装置
  • データの読み込み速度・書き込み速度が速い
  • 電源を切るとデータが全て消えてしまう
二次記憶装置(補助記憶装置)
  • データの読み込み速度・書き込み速度が(主記憶装置と比べて)遅い
  • 電源が切れてもデータは消えない

テキストエディタを使った文書編集を例に,記憶装置の役割について見てみましょう.emacsを使って文章を編集するとします.

保存前  保存前

このように「文章を書きます。」という文章を入力しました.この段階では,入力された情報(文章)は主記憶装置であるメモリに保存されています.これは,編集中の文章は変更される可能性が高く,情報を高速に読み書きできる必要があるためです.

保存後  保存後

しかし,メモリ上に保存された文章情報はコンピュータの電源が切られると消失してしまいます.そのため,書き終えた文章はファイルに保存します.ファイルに保存するとは,メモリ上に存在している文章情報を二次記憶装置にコピーすることです.これによって,コンピュータの電源が切れても文章が消失してしまうことはありません.

● 練習問題

  1. (二次記憶装置である)ハードディスクと(主記憶装置である)メモリの利点と欠点をそれぞれ1つずつあげてみよう.

主記憶装置の外観

主記憶装置はコンピュータ内部にあり,通常メモリと呼ばれます.メモリは,以下のようなスティック状の形をしています.

メモリ表面写真メモリ裏面写真

メモリ横面写真

二次記憶装置(補助記憶装置)の外観

二次記憶装置には以下のようなものがあります.ハードディスク以外はすべてコンピュータ外部の記憶装置です.

ここでは二次記憶装置の例としてハードディスクを紹介します.ハードディスクはコンピュータ内部にあり,その概観は以下のような四角い箱となっています.

ハードディスク表面写真ハードディスク裏面写真

ハードディスク上部にある銀色の板をはがして,ハードディスクの中身を見てみましょう.

ハードディスク内部写真

中には鏡のような円盤が2枚入っています(写真の例は分解の過程で上側の円盤1枚が割れてしまったものになっています).この円盤に磁気を帯びさせる事で,情報が保存されます.一連の情報は同心円状に配置されたトラック(円周)に記録されています.電源が入っているときにはこの円盤は常に回転しています.

銀色の三角形の形をした突起の先がヘッドと言われる部位で,これが円盤の上を移動することで情報を読み書きするトラックを変えることができます.

記憶装置の容量

主記憶装置も二次記憶装置も一定の容量の情報しか記憶できません.詳現在市販されている主記憶装置(メモリ)では,一本で64メガバイト,128メガバイト,256メガバイト,512メガバイトのいずれかのデータ容量を持つメモリが一般的です.また,二次記憶装置は主記憶装置と比較して記憶容量が格段に大きく,例えばハードディスクは現在では数十ギガバイト(GB)の容量を持ちます.

1GBは10億バイト,80億ビットになります。半角英字1文字を表すための情報量が1バイトなので,10億個の文字が保存できる事になります.
もし,この授業で目標とされているタイピングスピード(毎分120字)で英文字を入力して,1GBのハードディスクをいっぱいにするには,1,000,000,000 / 24 / 60 / 120 = 約5,787日(約16年)かかることになります.

CPU

CPU(Central Processing Unit)は演算機能を持ち,コンピュータの頭脳に相当します.まずはCPUの外観を見てみましょう.

CPU表面写真CPU裏面写真

CPUななめからの写真

CPUは,主記憶装置上のプログラム(コンピュータに実行させたい仕事の手順を記述したもの,詳しくは4.4 ソフトウェアとコンピュータの特徴で解説します)から一つ一つ命令を読み出して実行する装置です.CPUは,演算ユニット(Arithmetic and Logic Unit)とレジスタという部品から構成されています.レジスタは,CPU内部で情報を保存するユニットです.演算ユニットは,レジスタの情報を使って計算(四則演算や論理演算)を行います.

CPUは基本的に以下の三つの仕事しかしていません.

コンピュータはこれらの単純な動作の積み重ねによって,様々な機能を実現しているのです.

クロック

クロックとは,CPUの各部分の基本動作のタイミングを合わせるために,一定の時間間隔で発生している信号です.CPUが行う様々な処理はクロック信号にタイミングを合わせて行われます.従ってクロック信号が発生する間隔が短ければ短いほど,CPUの動作が速いことになります.クロックが1秒間に何回発生するかを示す数値としてクロック周波数が使われます.一般にその周波数が高ければCPUの動作速度も高いということができます.

例えば端末ウィンドウに皆さんが「a」という文字を入力しそれをコンピュータが表示する時を考えて見ましょう.

CPUが行うこれらの処理はそれぞれ数クロックの時間がかかります.

コンピュータの販売広告などで「1GHzのCPU」と言った文句を聞いた事はないでしょうか?この1ギガヘルツとは,クロック数を示しています.1ギガヘルツの場合,1秒間に1ギガ(1,000,000,000)回ものクロック数の処理を実行する事ができます.この数が増えれば増えるほど,CPUの処理速度が高速であると考える事ができます.1GHzのCPUの場合,先ほどの例で示したような4つの処理は,一つの処理が3クロックずつかかると仮定すると,4 * 3 / 1,000,000,000 = 0.000000012秒で済んでしまうことになります.

4.4 ソフトウェアとコンピュータの特徴

4.3 コンピュータの構成要素とその働きでは,コンピュータを構成する要素であるCPU,記憶装置について見てきました.今週の冒頭でも述べたように,これからはソフトウェアについて解説していきます.また,ソフトウェアがこれまで解説してきたハードウェアとどのように関係しているかを見ていくことにしましょう.

プログラム

コンピュータにさせたい仕事を実行させるためには,プログラムと呼ばれるものが必要となります.逆に,プログラムがなければコンピュータは動作しません.プログラムとは,コンピュータに実行させたい仕事の手順をコンピュータが理解できる形式で記述したものです.プログラムは予め人間によって記述され,コンピュータに与えられている必要があります.プログラムを記述することをプログラミングと呼び,その際に用いる言語をプログラミング言語と呼びます.プログラミング言語は,コンピュータに与える命令を厳密に記述できるように人工的に作られた言語です(私たちが日常利用している日本語などの言語は自然言語と呼ばれます).

プログラムとデータ

プログラムは情報を処理する命令の集合です.しかし,コンピュータの内部ではそのプログラム自体も情報として扱う事が出来ます.情報処理では,「処理内容を表す情報」と「処理対象となる情報」の2つの異なった情報があることになり,とくにこれらを区別する際には,前者をプログラム,後者をデータと呼びます.例えば,Windowsではプログラム自体のファイルは,〜.exeというファイル名で保存するという決まりごとがあります.Unixにはこのような決まりごとはありません.どちらの場合もプログラムであってもデータと同じようにファイルとして扱う事は共通しています.

プログラムとデータ

コンピュータの特徴

機械としてのコンピュータをハードウェアと呼ぶのに対し,そのハードウェアに仕事をさせ,様々な目的に利用する技術を総称してソフトウェアと呼びます.これは通常プログラムの形をとります.このソフトウェアという言葉は,ハードウェアという言葉と対応して使われることが普通です.プログラムもソフトウェアという概念の一部であり,この教材の中ではほぼ同義として使用します.

コンピュータは入力された情報を加工,処理し,その結果を出力する機械です.同じコンピュータに対して,異なる内容の命令が記述されたソフトウェアを与えて実行させることで,そのコンピュータは様々な仕事をすることが可能です.4.3 コンピュータの構成要素とその働きで見たように,ハードウェアは記憶や演算などの使用目的ごとに存在しています.これに対して,メールの送受信やWebの閲覧,文書処理などのサービスは用途別に開発されたソフトウェアを共通のハードウェアに与える事で実現しています.

このように汎用のハードウェアを持ち,ソフトウェアを入れ替えることで様々な情報を様々な方法で処理ができるという事がコンピュータの特徴です.

様々な用途に使われるコンピュータ

● 練習問題

  1. 普段我々が使用しているソフトウェアにはどのようなものがあるだろうか?それぞれのソフトウェアの用途も考え,以下のような表を作ってみよう.
  2. ソフトウェアの名前 用途
    各自で記入しよう 各自で記入しよう

  3. 「コンピュータは使用目的を告げずに販売される商品である」といわれることもあるが,これはどういった意味だろうか?また我々の身近に他にそういった商品があるだろうか?考えてみよう.

基本ソフトウェアと応用ソフトウェア

コンピュータで利用できるソフトウェアは,その果たす役割の違いによって基本ソフトウェアと応用ソフトウェアの2種類に大別する事が出来ます.

応用ソフトウェアはアプリケーションとも呼ばれ,特定の作業や業務を行う為に使用されるソフトウェアのことです.前に述べたように,利用者は異なるソフトウェアをコンピュータで実行して操作することで,文書作成,表計算,電子メール,Webページの閲覧など,コンピュータを様々な用途に使うことができます.

基本ソフトウェアとして,OS(Operating System)があげられます.私たちがアプリケーションを用いてコンピュータに仕事をさせる時,アプリケーションはキーボード,ディスプレイなどの入出力装置や本体内部のメモリやハードディスクなどの様々な装置を利用して仕事を行っています.この時,コンピュータを構成するこれらの装置を効率よく使うために働くソフトウェアがOS(Operating System)と呼ばれるものです.

OSは様々な装置やアプリケーションの間に立ち,コンピュータが行う基本的な仕事を管理しています.これが基本ソフトウェアと言われる理由です.OS自身もソフトウェアであるためハードディスク上に書き込まれています.たいていのコンピュータでは,電源を入れると自動的にOSがメモリに読み込まれて実行される仕組みが備わっています.この仕組みによって,利用者は電源を入れる操作だけでOSが起動した状態からコンピュータを使う事ができ,すぐにアプリケーションを起動してスムーズに作業ができるわけです.OSが起動するとアプリケーションをすぐに使う事ができる仕組みに関しては,この後解説します.代表的なOSとしては,Unix,Windows,MacOSなどがあります.

以後はOSが説明に加わってくるので,区別を明確にするために応用ソフトウェアをアプリケーションに呼び換えて説明していきます.以下はこれまでの用語を整理した図です.

用語の系統樹

OSの役割

OSの具体的な役割には様々なものがありますが,その中でも以下の3点について説明していきます.

  • アプリケーションとハードウェアの仲介
  • ユーザーインターフェースの提供
  • 資源の管理
  • アプリケーションとハードウェアの仲介

    コンピュータを構成する様々な装置(入出力装置や本体内部の記憶装置などのハードウェア)は非常に複雑な機械であり,アプリケーションがこれらの装置を直接制御することは面倒です.OSはこれらの装置とアプリケーションの仲介役を果たしています.ハードウェアの制御をOSに任せることによって,アプリケーションはOSとだけやり取りをすればよくなります.それによって,同じOS上であれば,コンピュータのハードウェアの違いに関係なく同一のアプリケーションを利用することができます.逆に,特定のアプリケーションはそのアプリケーションが対応しているOS上でしか動作しません.従って,Unix環境だけで動作するように作られたアプリケーションをWindows環境で利用することはできません.

    OSとアプリケーションとハードウェアの階層構造

    ユーザーインターフェースの提供

    ユーザーインターフェースとは,コンピュータがユーザに対して情報を表示したり操作を促すための仕組みのことを意味しています.現在ではアイコンなどを利用したGUI(Graphical User Interface)が主流となっています.OSがユーザーインターフェースを提供することによって,私たちはコンピュータ内部での複雑な処理を意識せずにコンピュータを利用することができます.また,個別のアプリケーションソフトウェアで使用するユーザーインターフェースも共通でないと,使い勝手が良くありません.よって共通のユーザーインターフェースを提供して,それぞれのアプリケーションの使い勝手を向上させる役割も担っています.

    資源の管理

    二次記憶装置と主記憶装置の領域やCPU(の演算時間)などのように,利用できる量に限りがあるものをコンピュータの資源とよびます.これは1つのコンピュータを多数の人が利用する時にも適用される考え方です.OSはこれらの資源を効率的に使用するための機能を持っています.

    OSはデータが二次記憶装置のどの場所に記憶されているかを管理しています.この機能と前に説明したGUIによる操作を組み合わせる事で,ファイルのアイコンをダブルクリックするだけで,そのデータの中身を見ることができるわけです.例えば,私達はファイルに名前を付けて保存していますが,OSがない状態ではハードディスクに格納されている番地等でファイルを管理しなければいけなくなります.ハードディスクに格納されている場所と,ファイルの名前を対応付けているのがOSなのです.

    メモリには様々な情報が書き込まれます.しかし,メモリ上に好き勝手に情報を書き込んでしまうと,元々あった必要な情報が上書きされてしまい,コンピュータが正常に動作しなくなってしまいます.そのような事態を避けるため,OSはメモリの番地(情報を保管する区画に割り振られた数字)を管理しています.

    CPUは同時に2つ以上の処理を実行することができません.必ずどれか1つの処理が占有する事になります.しかし,コンピュータを普段使っているときは,CDプレーヤーで音楽を再生しながら,文書の作成などをしたことのある人も多いはずです.これはOSがCPUに対して,時間を細かく区切って処理する内容を割り振っている為です.この切り替えが高速に行われている為に同時に2つのアプリケーションを動かしているように見えるのです.CPUによって現在実行されているプログラム(アプリケーションおよびOS)を特にプロセス(process)と言います.

    それではみなさんが使っているコンピュータで,実際に現在どういったプロセスがあるのかをみてみましょう.

    端末ウィンドウで ps と入力すると以下のようになります.

    % ps
       PID TT       S  TIME COMMAND
      2842 pts/1    S  0:00 tcsh
      2844 pts/2    R  0:00 -tcsh
    
    	  

    ここで左上に PID というものが出ています.これはプロセスごとに割り当てられている番号です.この番号をプロセスID(process id)といいます.

    emacsやMozillaは,終了のキーやメニューが用意されています.しかし,時にはアプリケーションに欠陥があって,実行が止まらなくなったり,何をしても反応がなくなったりします.そのような時には,そのプロセスを強制終了させなければなりません.

    まず,ps コマンドで終了したいプロセスの pid を調べます.
    その後,次のように入力します.

    % kill -9 (終了したいプロセスの pid)
    	

    そうするとプロセスが強制的に終了されます.

    ここで kill のオプションとしてついている -9 というのは,SIGKILL という種類のシグナルを送ることを指示しています.このオプションをつけることによってコンピュータに負荷を与えることなく,プロセスの強制終了を行う事ができます.

    ● 練習問題

  • xclock & を実行し,ps コマンドの表示を確認しなさい.
  • kill コマンドで上の xclock を終了させなさい.
  • アプリケーションが実行される仕組み

    コンピュータはどのような仕組みでアプリケーションを実行しているのでしょうか.emacsでファイルを開いて編集し保存する過程を例に見てみましょう.

    1. まず,利用者がキーボードやマウスを用いてアプリケーション(emacs)を実行する命令を入力します.
    2. OSは入力を解釈し,起動したいアプリケーション(emacs)のプログラムデータが主記憶装置(ハードディスク)のどこに記憶されているかを探し出し,メモリ(二次記憶装置)に読み込むという処理をCPUにやらせます.
      アプリケーションの実行1
      さらに「ipl」というファイルをemacsで開くとすると,OSはiplというファイルのデータもハードディスクから探してきて,メモリに読み込むという処理をCPUにやらせます.
      アプリケーションの実行2
      この時,コンピュータに搭載されているメモリに記憶できる情報量よりも,大きな情報量を持つアプリケーションが実行の為にメモリに移される可能性もあります.するとメモリがいっぱいになって,アプリケーションが実行できなくなってしまいます.そこでOSはメモリだけではなく,ハードディスクを併用し,実際より多くのメモリの容量があるように振舞えるように働きます.しかしハードディスクはメモリと比べてデータを読み書きする速度が遅いので,アプリケーションの動作が遅くなります.またOSからの指示に従って,CPUはどのデータをメモリとハードディスクの間で入れ替えるかを判断する処理も行わなくてはいけなくなります.OSが適切にデータの入れ替えの指示を出しそこなったりして,コンピュータが不安定になる事もあります.
    3. OSはメモリに呼び出したプログラム(emacs)に記述された命令を一つ一つCPUに転送し処理を行わせます.このときアプリケーションがプロセスに加わったことになります.
      アプリケーションの実行3
    4. キーボードなどからファイル編集をするための命令を打ち込むと,この命令はOSを介してアプリケーションに伝わり,アプリケーションが処理の命令をOSを介してCPUに伝えます.CPUはメモリからファイルのデータを取り出しては,命令に従った処理を行い,その結果をメモリに書き込みます.
      アプリケーションの実行3
    5. データに処理を加えた途中経過や結果は,ディスプレイ上に表示されます.この表示の作業もOSとアプリケーションが連携して行います.また,結果をプリンタなどに出力することもできます.
    6. 4.3 コンピュータの構成要素とその働きで述べたように,主記憶装置であるメモリは,電源が切れると記憶した情報が消えてしまいます.このままでは困るので二次記憶装置にデータを記録する必要があります.編集を加えたiplというファイルを保存すると,OSはiplというファイルのデータをメモリからハードディスクに移して保存する処理をCPUにやらせます.
      アプリケーションの実行3

    ● 練習問題

    1. あるコンピュータには64メガバイトのメモリが搭載されています.このコンピュータのOSの実行には合計で25メガバイトのメモリが必要です.ここで仮に,それぞれのアプリケーションの実行に必要なメモリの量は以下のとおりであるとします.これらのアプリケーションの中から,同時に2つのアプリケーションを実行しようとした時,二次記憶装置を併用せずに実行できる組み合わせを全て挙げなさい.
    2. アプリケーション名 実行に必要なメモリの量
      emacs 8メガバイト
      Mozzila 33メガバイト
      xpaint 4メガバイト

    3. 1の問題では計算を簡単にする為に,メモリの消費量は実際のコンピュータの場合とは異なるモデルケースで出題しました.では実際はどうなのでしょう?WindowsではメモリやCPUの使用状況,プロセスなどを確認できるタスクマネージャというものがあります.Ctrl,Delete,Altキーを同時に押して,タスクマネージャーを確認してみましょう.またアプリケーションを起動させたり,作業をしてみたりして変化を観察してみましょう.
    4. タスクマネージャー

    5. Windowsのメモ帳というアプリケーションを起動し,「hello.txt」というファイルを開いて,「こんにちは」と入力して保存する作業過程を考えてみましょう.以下の空欄を埋めてください.
    6. ユーザからの命令OSがCPUにやらせる処理ハードディスクからメモリに移されるデータメモリからハードディスクに移されるデータ
      メモ帳の起動     ----
      hello.txtを開く     ----
      「こんにちは」と入力 メモ帳の実行処理 ---- ----
      hello.txtを保存 ----