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


4.1 今週の学習内容と目的

学習内容

  1. コンピュータを構成する機器の外観を把握し,それぞれの機器がどのような役割を果たしているかを理解する
  2. コンピュータのハードウェアとソフトウェアの関係性を理解する.
  3. コンピュータがプログラムを実行する仕組みを理解する

学習目的

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

はじめに,コンピュータを構成する主要要素はどのようなものであるかを学び,同時にそれらの個々の役割を理解します.これはハードウェアとソフトウェアの関係性を理解するための前提知識となるためです.

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

キーワード

主記憶装置(メモリ),二次記憶装置(補助記憶装置,ハードディスク,CD-ROMなど),CPU(Central Processing Unit),プログラム,データ,OS(Operating System),プロセス(process)

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

ハードウェアとは

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

コンピュータの構成要素

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

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

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

記憶装置

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

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

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

保存前  保存前

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

保存後  保存後

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

● 練習問題

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

主記憶装置の外観

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

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

メモリ横面写真

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

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

  • ハードディスク
  • フロッピーディスク
  • CD-ROM / CD-R / CD-RW
  • DVD

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

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

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

ハードディスク内部写真

中には鏡のような円盤が2枚入っています.(写真の例は分解の過程で上側の円盤1枚が割れてしまったものになっています)
この円盤の上に磁気を載せる事で,情報が保存されます.電源が入っているときには,この円盤は回転しています.

銀色の三角形の形をした突起がヘッドと言われる部位で,これが上下に移動することで情報の読み書きが行われます.

記憶装置の容量

主記憶装置も二次記憶装置も情報を記憶するための容量を持ちます.情報の量を表す単位としてはビットやバイトという単位が使われます(情報量の目安として,コンピュータ上で漢字一文字が持つ情報量は,一般的に2バイトです.また,画像データや音声データなどは文字と比較するとより大きな情報量を持ちます.詳しくは,10.4 情報量を参照して下さい).現在市販されているメモリは,一本で64メガバイト,128メガバイト,256メガバイト,512メガバイトのいずれかのデータ容量を持つメモリが一般的です.また,二次記憶装置は主記憶装置と比較して記憶容量が格段に大きく,例えばハードディスクは現在では数十ギガバイトの容量を持ちます(ギガはメガの1000倍を意味します).

CPU

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

CPU表面写真CPU裏面写真

CPUななめからの写真

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

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

  • メモリやその他の部品から,レジスタにデータを転送する
  • レジスタに記憶されているデータに対して演算を行う
  • レジスタからメモリやその他の部品にデータを転送する

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

クロック

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

コンピュータの販売広告などで「1GHzのCPU」と言った歌い文句を聞いた事はないでしょうか?この1ギガヘルツとは,クロック数を示しています.1ギガヘルツの場合,1秒間に1ギガ(1,000,000,000)回ものクロック数の処理を実行する事ができます.この数が増えれば増えるほど,CPUの処理速度が高速であると考える事ができます.Pentium IIIというCPUでは,一回の加算,除算にかかる時間は1クロックです.仮に,クロック数が1ギガヘルツである場合,このCPUは1秒間に10億回の加算を実行することができます.

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

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

プログラム

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

プログラムとデータ

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

プログラムとデータ

コンピュータの特徴

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

コンピュータは入力された情報を加工,処理し,その結果を出力する機械です.同じコンピュータに対して,異なる内容の命令が記述されたソフトウェアを与えて実行させることで,そのコンピュータは様々な仕事をすることが可能です.私達はコンピュータを様々な用途に使用していますが,4.2 コンピュータの構成要素とその働きで見たように,それぞれの使用目的ごとにハードウェアが個別に存在しているわけではありません.メールの送受信や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 を終了させなさい.
  • アプリケーションが実行される仕組み

      それでは,コンピュータはどのような仕組みでアプリケーションを実行しているのでしょうか.OSが起動している状態でアプリケーションが実行される仕組みを見てみましょう.

    1. まず,利用者がキーボードやマウスを用いてアプリケーションを実行する命令をOSに対して入力します.
    2. OSは利用者に指定されたアプリケーションがハードディスクのどの部分に格納されているかを管理しています.命令は実行されているOSによって解釈され,指定されたアプリケーションがハードディスクなどの二次記憶装置から主記憶装置であるメモリに読み込まれます.
    3. 次にメモリに移動したアプリケーション本体に記述された処理がOSによってCPUに転送され,処理が始まります.つまりアプリケーションの実行が始まります.この状態が,アプリケーションがプロセスに加わるという意味です.処理対象となるデータもOSの管理している情報を元にしてメモリ上に移されます(文書処理などを行う際には文書などのデータもメモリに置かれます).

      この時,コンピュータに搭載されているメモリに記憶できる情報量よりも,大きな情報量を持つアプリケーションが実行の為にメモリに移される可能性もあります.するとメモリがいっぱいになって,アプリケーションが実行できなくなってしまいます.そこでOSはメモリだけではなく,ハードディスクを併用し,実際より多くのメモリの容量があるように振舞えるように働きます.しかしハードディスクはメモリと比べてデータを読み書きする速度が遅いので,アプリケーションの動作が遅くなったりします.またOSからの指示に従って,CPUはどのデータをメモリとハードディスクの間で入れ替えるかを判断する処理も行わなくてはいけなくなります.OSが適切にデータの入れ替えの指示を出しそこなったりして,コンピュータが不安定になる事もあります.

    4. キーボードなどからデータを作成編集するための命令を打ち込むと,この命令は実行されているOSを介してアプリケーションに伝わり,アプリケーションが処理の命令をOSを介してCPUに伝えます.CPUは処理対象であるデータをメモリから呼び出し,データに対して命令に従った処理を行い,その結果をメモリに書き込みます.
    5. データに処理を加えた途中経過や結果は,ディスプレイ上に表示されます.この表示の作業もOSとアプリケーションが連携して行います.また,結果をプリンタなどに出力することもできます.
    6. 4.2 コンピュータの構成要素とその働きで述べたように,主記憶装置であるメモリは,電源が切れると記憶した情報が消えてしまいます.そのため,作成編集がすんだデータを保存する場合は,データをメモリから二次記憶装置にうつして保存します.保存された場所はOSが管理しているので,再度アプリケーションからデータを読み出すことも可能です.

    1から3の手順

    4から6の手順

    ● 練習問題

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

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

    5. emacsを起動し,iplというファイルを開き,"A"という文字を入力して保存する作業過程を考えることにしよう.以下の表の?の部分を選択肢から語句を選んで埋めてみよう.語句は同じものを何度使っても良い.なお以下の表は上から下に向かって時間が進むとし,OSの実行に関しては表に含めないとする.
      • 選択語句:「emacsの実行処理」,「iplというファイルのデータ」,「emacsのアプリケーション自体のデータ」

    入力装置からの入力 CPUで行われる処理 ハードディスクからメモリに移されるデータ メモリからハードディスクに移されるデータ
    なし なし なし なし
    emacsの起動コマンド なし
    iplというファイルを開くというコマンド なし
    "A"とタイピング なし なし
    iplというファイルを保存するコマンド なし