Top Banner
理学部数理学科計算機 1 1 序論 1.1 コンピュータとは コンピュータ , り「 をする あった. しかし がら, するだけ , 」を する して コンピュータ 割が びている. また, コンピュータ ころに われている. 々が にするディスプレ , キーボード えたコンピュータだけ , CPU いつくか LSI だけから れるよう コンピュータが まわりにたくさんあるこ がつく. , うために コンピュータが されている. また, ゲーム (ファミコン, スー パーファミコン, Nintendo64, PlayStation 1 されるよう , われるコン ピュータ 大き げている 2 . さらに って, ネットワークを したコンピュータ んに , コンピュータが よう げる , よう がされる かについて , わかってい ある. 1.1.1 コンピュータの分類 からコンピュータ , によって れてきた. , じた ある. しかし 格帯における った , よう ってきている. 規模による分類 スーパーコンピュータ めて プロセッサを ぐこ により, った コンピュータ. うため けれ , ランニングコス . スパコン. スーパーコンピュータを うほ いが, される わせるため されたコンピュータ. コンピュータ により, れている. ミニコンピュータ オフィスコンピュータ われていた. あま され . ミニコン. マイクロコンピュータ マイクロプロセッサを したコンピュータ. にパー ソナルコンピュータ して される. マイコン. 1 ファミコン, スーパーファミコン, Nintendo64 . PlayStation SONY Computer Entertainment . 2 いた 1996 ある. , バスが128 ット ある CPU した PlayStation2 (これ SONY Computer Entertainment )が され, Pentium3 1GHz クロックを ってし まった. れる ある. Id: joron.tex,v 1.3 2000/04/16 06:19:00 naito Exp
22

1章序論 - math.nagoya-u.ac.jpnaito/lecture/2000_SS/notes/note_1.pdf ·...

Sep 06, 2019

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 1章序論 - math.nagoya-u.ac.jpnaito/lecture/2000_SS/notes/note_1.pdf · unixはマルチユーザ,マルチタスクのosであるので,同時に複数のプログラムを実行できる.これは,

理学部数理学科計算機 1

第1章 序論

1.1 コンピュータとは

以前はコンピュータとは, その名前の通り「計算をする道具」であった. しかしながら, 近年単に計算を

するだけではなく, 各種の「情報」を処理する道具としてのコンピュータの役割が脚光を浴びている.

また, 我々の生活の中でもコンピュータは色々なところに使われている. 通常我々が目にするディスプレ

イ, キーボードなどを兼ね備えたコンピュータだけではなく, 単に CPU といつくかの LSI だけから構成さ

れるようなコンピュータが我々のまわりにたくさんあることに気がつく. 例えば, 炊飯器にも各種の制御を

行なうために小規模なコンピュータが搭載されている. また, 一方では家庭用ゲーム機(ファミコン, スー

パーファミコン, Nintendo64, PlayStation など1 に代表されるような, 特別の用途に専用に使われるコン

ピュータも大きな発展を遂げている2 .

さらに近年になって, ネットワークを利用したコンピュータの利用が盛んになり, 将来コンピュータがど

のような変化を遂げるのか, どのような利用法がされるのかについては, 誰もわかっていないのが現状で

ある.

1.1.1 コンピュータの分類

昔からコンピュータはその規模, 用途などによって様々な名前で呼ばれてきた. 以下の二つの表は規模,

用途に応じた分類である. しかし低価格帯における処理能力の格差が少なくなった現在では, このような分

類は意味をなさなくなってきている.

規模による分類

名 称 特 徴

スーパーコンピュータ 極めて高速なプロセッサを並列で継ぐことにより, 処理能力の向上を図った高価なコンピュータ. 高速演算を行なうため常に冷却しなければならなく, ランニングコストは非常に高い. 通称スパコン.

大型計算機 スーパーコンピュータを使うほどではないが, 相当の処理能力が要求される科学技術計算などを行なわせるために開発されたコンピュータ. 小型で高速なコンピュータの出現により, その存在意義は薄れている.

ミニコンピュータ オフィスコンピュータの類に使われていた. 現在はあまり使用されない. 通称ミニコン.

マイクロコンピュータ マイクロプロセッサを使用したコンピュータ. 主にパーソナルコンピュータとして使用される. 通称マイコン.

1 ファミコン, スーパーファミコン, Nintendo64 は任天堂の登録商標です. PlayStation は SONY Computer Entertainmentの登録商標です.2 この原稿の初版を書いたのは1996年頃の話である. 既に, 内部バスが128ビットである CPU を搭載した PlayStation2

(これも SONY Computer Entertainment の登録商標)が発売され, Pentium3 なども 1GHz のクロックを持つ時代となってしまった. 時代の流れるのは速いものである.

Id: joron.tex,v 1.3 2000/04/16 06:19:00 naito Exp

Page 2: 1章序論 - math.nagoya-u.ac.jpnaito/lecture/2000_SS/notes/note_1.pdf · unixはマルチユーザ,マルチタスクのosであるので,同時に複数のプログラムを実行できる.これは,

2 理学部数理学科計算機

用途別の分類

名 称 特 徴

汎用フレーム 大型計算機とほぼ同義. OS は各社独自 (IBM 系が多い).プログラミング言語は FORTRAN が主流である. かなりの量の科学計算用ライブラリが蓄積されている.

ワークステーション 小人数で共有するマシンを複数台持つことで処理能力を上げようという思想に基づいた開発用コンピュータ. 汎用フレームより圧倒的に安価. 主に UNIX やそれに準ずる OS で動作する. プログラミング言語は C が主流である.

オフィスコンピュータ OA 用に開発されたコンピュータ. 基本的に業者の提供したプログラムを使うだけのもので, 開発環境ではない.通称オフコン.

パーソナルコンピュータ 個人向けに設計されたコンピュータ. マイクロコンピュータが多い. 近年は処理能力の向上により開発環境としても多用される. OSは MS-DOS, Windows95 , MacOSなど様々. DOS/V, Macintosh などがこれに該当する. 通称パソコン.

1.2 コンピュータの動作

コンピュータは CPU(Central Processing Unit: 中央演算処理装置) と呼ばれる演算装置が中心となって

いる. 今日我々が目にするコンピュータはモニタ, キーボード ,ディスク装置, マウスなどの周辺装置を持っ

たものが多いが3 , 古くは CPU, 少量の記憶装置(メモリ)と極めて簡単な入出力装置だけを持ったもの

から始まっている.

CPU は外部から与えられた命令にしたがって, メモリ内のデータをレジスタと呼ばれる演算装置に格

納し, しかるべき演算を行なった後, そのデータをメモリに格納する操作を行なっている. 一方,(何らか

の)入出力装置を動作させるためには, それらを制御しているコントローラと呼ばれる LSI(Large-Scale

Integration: 大規模集積回路) に CPU から命令を出すことが必要となる. 古くは, これらの動作をすべて

それぞれの LSI が直接理解可能なコードで記述していた.

CPU

コントローラ�

ディスプレイ�

コントローラ�

メモリ�

コントローラ�キーボード� コントローラ� ディスク�

しかしながら, 入出力装置が複雑になってくると, そのようなコードを利用者が直接与えることが困難に

なってきた. そのため, コンピュータを動作させる基本的なソフトウェアとして OS(Operating System) が

開発された.

3 Plam に代表されるような PDA(携帯情報端末)が世間を席巻し, このような形のコンピュータは早晩滅びてしまうのかもしれない.

Id: joron.tex,v 1.3 2000/04/16 06:19:00 naito Exp

Page 3: 1章序論 - math.nagoya-u.ac.jpnaito/lecture/2000_SS/notes/note_1.pdf · unixはマルチユーザ,マルチタスクのosであるので,同時に複数のプログラムを実行できる.これは,

理学部数理学科計算機 3

1.2.1 OS とは

OS とはコンピュータのもっとも基本となるソフトウェアで, CPU,ディスクシステム(ファイルシステ

ム), キーボード , マウス,ディスプレイなどのハードウェアとそれを利用するユーザとの間をとり持つも

のである. 実際, OS を利用すると, ディスクへのデータの書き込みはディスクコントローラーの種類によ

らず, 特定の命令を与えることによって実現できる.

OS には色々な種類があり, そのコンピュータの利用目的によって必要な機能を持ったものが利用される.

特に, UNIX と呼ばれる OS は以下のような特徴を持つ.

• マルチユーザ(同時に1人以上が利用できる)

• マルチタスク(同時に1つ以上のプログラムを実行でき, それらの間に十分な関係を持たせることが

できる)

• ネットワーク機能(他のコンピュータとの高速な通信ができる)

UNIX はマルチユーザ, マルチタスクの OS であるので, 同時に複数のプログラムを実行できる. これは,

OS(UNIX) が複数のプログラムを管理し, 適当に CPU を利用する時間を順に割り当てることにより, 同時

に複数のプログラムを動作させている.

また, OS にはシェル (Shell) と呼ばれるコマンド入出力のためのプログラムが用意されていることが多

い. シェルはユーザが入力したコマンドを受けとり, それを解釈して OS にその命令を実行するように要請

する. OS はシェルからの命令を受けとると, しかるべき方法でコマンドを実行し,(必要なら)その出力

を再びシェルに返す. OS からの出力を受けとったシェルはユーザに対してその結果を出力する.

このように, コンピュータは OS によって, その動作を制御され, ユーザはシェルを介して OS を利用す

るという仕組みになっている.

1.2.2 プログラム言語とは

プログラム言語とは, コンピュータを動作させるために必要な方法を(わかりやすい)文法にしたがって

記述する言語体系である.

1.2.3 言語処理系

それぞれの言語には, その言語を実現するためのプログラムが存在する. そのプログラムのことを言語処

理系と呼ぶ. それぞれの言語処理系は, それぞれの言語の(もし存在すれば)標準仕様を実現している. 例え

ば, C では当初 B. W. Kernighan, D. Ritchie 著「Programing Language C」の初版4 に書かれた内容が標

準的な仕様であった. これを K&R の規格と呼ぶ. しかし, 1983年に ANSI(American National Standards

Institute: アメリカ国内標準規格協会) によって, 新しく C の標準的な仕様が定められた. これを ANSI 規

格と呼ぶ.

一方, LISP には ANSI, OSI などによって決められた標準的な規格は存在しないが, Common Lisp と呼

ばれる極めて標準的と考えられている処理系が存在する.

また, C などのように, プログラム言語としての文法は機種や OS に依存しない定義がされているもの

と, アセンブラのように, すべての命令が機種, OS に依存しているものがある. 前者の場合は, その処理系

が機種依存性のほとんどすべてを吸収する仕組みになっている.

4 K&R の第 2 版は ANSI 規格準拠.

Id: joron.tex,v 1.3 2000/04/16 06:19:00 naito Exp

Page 4: 1章序論 - math.nagoya-u.ac.jpnaito/lecture/2000_SS/notes/note_1.pdf · unixはマルチユーザ,マルチタスクのosであるので,同時に複数のプログラムを実行できる.これは,

4 理学部数理学科計算機

1.3 コンピュータの基礎知識

1.3.1 データの表現と演算

多くのコンピュータでは, その内部でのデータは2進数によって表現されている. しかしながら, 2進数

ではその表現が冗長になるので, 16進数で書くことが多い.

2進数1桁の情報を1ビット (bit) と呼び, 8ビットを1バイト (byte) と呼ぶ5 . 1バイトの情報は明ら

かに2桁の16進数で表現できる. また, その計算機内部において自然な長さのバイトの単位を1ワード

(word) と呼ぶことがある6 . 例えば, 16ビットが自然な長さ(標準的な演算レジスタ長)である計算機

においては, 1ワードは2バイトである.

コンピュータ内部ではすべての情報はビット単位, バイト単位もしくはワード単位で処理される. すなわ

ち, コンピュータ内部では, すべての数値, 文字等は2進数で表現され, バイト単位でメモリ, レジスタ等に

格納され, 計算が実行される.

はじめにコンピュータ内部でビット単位で行なわれる演算のもっとも基本的なものを確認しておこう.

ビット単位のデータとは, 0 または 1 で表現されるデータであり, これらに対する基本演算には, AND, OR,

NOT, XOR がある.

AND とは論理積と呼ばれる2項演算であり, 次の演算規則を持つ.

AND 0 1

0 0 0

1 0 1

OR とは論理和と呼ばれる2項演算であり, 次の演算規則を持つ.

OR 0 1

0 0 1

1 1 1

NOT とは否定と呼ばれる単項演算であり, 0 の NOT は 1, 1 の NOT は 0 である. すなわち, ビット反

転のことである.

XOR とは排他的論理和 (exclusive or)と呼ばれる2項演算であり, 次の演算規則を持つ.

XOR 0 1

0 0 1

1 1 0

これは, EOR と書かれることもある. XOR の規則は, 各ビットの値を Z2 の元と見た時に, Z2 の通常の和

を与える演算であることに注意.

コンピュータにおけるすべての演算は, 遡っていくと, 各 bit の論理演算から生成されている.

1.3.2 文字の表現

英数字, 漢字等の文字は(英数字の場合)(通常)ASCII コードと呼ばれる表現によって符号化されて

いる7 . 英数字の ASCII コードは, 8ビット(実際には7ビット)で表現され, それを2桁の16進数で書

く. 例えば, 以下の表のように表現されている.

5 1バイトのビット数は, その計算機の “自然”な長さと定義されている. 我々が通常目にする計算機は(大型計算機を除くと) 1byte = 8 bits である.6 正確には,(多分)次のような定義と考えられる. 1バイトとは, CPU が直接メモリにアクセスできる最小の単位のことであり,

1ワードとは, 標準的な演算レジスタの長さである.7 1 byte �= 8 bits の機械では ASCII コード以外のコード体系が利用されることが多い.

Id: joron.tex,v 1.3 2000/04/16 06:19:00 naito Exp

Page 5: 1章序論 - math.nagoya-u.ac.jpnaito/lecture/2000_SS/notes/note_1.pdf · unixはマルチユーザ,マルチタスクのosであるので,同時に複数のプログラムを実行できる.これは,

理学部数理学科計算機 5

0x20 0x2f 0x41 0x42 0x43 0x61 0x62

空白 / A B C a b

ASCII コードで定義された英数字の最上位ビットは必ず 0 である. ASCII コードの 0x20 未満の部分は,

ファイル制御のためのコードに指定されている. 例えば, 0x08 は TAB と呼ばれるコードである.

Exercise 1.3.1 1バイトの情報で表現できる文字の数はいくつか?

しかし, 日本語の文字を表現しようとした時には, 1バイトでは足りないことがわかる. そこで, 日本語

などの多くの文字を表現する場合には, 2バイトを利用して表現する. 日本語の場合, そのコード体系には

(基本的に)3種類ある8 .

• EUC 漢字コード . UNIX などで多く使われる. (8ビット系).

• MS 漢字コード (シフト JIS コード ) . パーソナルコンピュータで利用されている. (8ビット系)

• JIS 漢字コード . “ここから日本語”, “ここまで日本語” というコードを利用する. (7ビット系).

ここで, 8ビット系という意味は, それぞれの文字の各バイトを表現するには8ビットが必要な体系である

ことを意味する. 今回の講義で利用するワークステーションの漢字コードは EUC 漢字コードである.

実際に “あ” という文字は, それぞれのコード系で次のように表現される.

EUC 漢字コード 0xa4a2

MS 漢字コード 0x82a0

JIS 漢字コード9 0x2422

しかしながら, 1ワードの情報をどのバイトを先にして(上位にして)表現するかは, CPU によって異

なり, 上位バイトを先にするものを little endian, 逆のものを big endian と呼ぶ.

大量の情報量を表現する時には, 次のようないい方もする.

1K bytes = 1024 bytes 1キロ

1M bytes = 1024K bytes 1メガ

1G bytes = 1024M bytes 1ギガ

1T bytes = 1024G bytes 1テラ

1P bytes = 1024T bytes 1ペタ

1E bytes = 1024P bytes 1エクサ

Exercise 1.3.2 日本語の新聞1ページを格納するために必要なデータ量はどれだけか?ただし, 1ページ

は15段からなり, 各段は82行, 各行は12文字からなる. また, 1日の新聞は20ページからなる時, 新

聞1年分(365日分)はどのくらいのデータ量になるか?

1.3.3 実際の演算

コンピュータ内部で, 実際に演算が行なわれる様子をもっとも簡単な場合に見ていこう.

CPU から見たメモリは, バイト単位でアクセス可能であり, 一意的にメモリ上の場所を指定する方法が

与えられている10 . その場所のことをメモリのアドレスとよぶ. この時, 次のような演算を考えよう.

• 2つ(ここでは整数)のデータをメモリから読みだし, その和を計算して, 違うメモリ上の場所に格

納する.

この演算を行なうために, CPU が知っているべき情報としては,8 日本語コード等に関しては, ソフトバンクから出版されている,「日本語情報処理」 [22] が詳しい.10 実際には, バンク切替えなどの方法により, アドレスとして指定可能なメモリ量よりも多くのメモリ量を扱う技術がある.

Id: joron.tex,v 1.3 2000/04/16 06:19:00 naito Exp

Page 6: 1章序論 - math.nagoya-u.ac.jpnaito/lecture/2000_SS/notes/note_1.pdf · unixはマルチユーザ,マルチタスクのosであるので,同時に複数のプログラムを実行できる.これは,

6 理学部数理学科計算機

• 読み出すべきデータの入っているメモリのアドレスとその種類,

• データを書き出すべきメモリのアドレスとその種類.

が必要である. データの種類とは, それが整数のデータであるのか, 浮動小数点数のデータであるのかとい

うことであり, それによって, 和をとる演算,データを読み出したり, 書き出したりする命令が異なる. また,

それによって,データの長さが決まっている.

ここでは, 読み出すデータのアドレスを a, b とし, その長さを l とする. さらに,データを書き出すべき

アドレスを c とする. (簡単のために, a < b < c とする.)すると,データが重ならないためには a+ l ≤ b,

b+ l ≤ c が必要になる.

この時, CPU はこの演算を行なうために, 次のようなことを行なう.

• メモリの a 番地から(例えば整数の)データを読みだし, レジスタ X に格納する.

• メモリの b 番地から(例えば整数の)データを読みだし, レジスタ Y に格納する.

• レジスタ X にレジスタ Y の内容を加える. この時, 結果は再びレジスタ X に格納される.

• レジスタ X の値をメモリの c 番地に格納する.

ここで, レジスタとは, CPU に置かれた, 演算を実際に実行するための場所であり, すべての演算はレジス

タ上で行なわれる.

この演算を行なうプログラムを C 言語で書けば, 次のようになる.

#include <stdio.h>

int main(){int a,b,c ;

c = a + b ;return 0 ;

}

コンピュータ内部での CPU の動きを忠実に表しているものは, アセンブラと呼ばれる言語であり, アセ

ンブラでこのプログラムを書けば, 次のようになる.

ld [%fp-8],%l0ld [%fp-12],%l1add %l0,%l1,%l0st %l0,[%fp-16]

これは, 上の演算をそのまま書いたものである. 一行目は, [%fp-8] という番地から, レジスタ %l0 に

データを読み込む命令である. このアセンブラコードによると,(この計算機では)整数のデータの長さは

4バイトであることがわかる.

C 言語で書いたプログラムは, どの計算機上でも動作するが, アセンブラは, その CPU の種類に依存し

たコードであり, CPU の種類が違えば, 異なった書式のコードとなる.

実際に CPU が実行するコードは, このアセンブラコードを機械語と呼ばれるコードにさらに翻訳して実

行される.

1.3.4 テキストファイルとバイナリファイル

通常ユーザが作成する ASCII コードや漢字コードに基づいたファイルをテキストファイルという.

しかし,データや実行可能なプログラムコードなどは,データの場合それぞれのソフトウェアに合わせた

表現がとられてたり, 実行可能コードは CPU のコードに合わせた表現がとられているので, ASCII コード

などで表現されているわけではない. このようなファイルをバイナリファイルと呼ぶ.

Id: joron.tex,v 1.3 2000/04/16 06:19:00 naito Exp

Page 7: 1章序論 - math.nagoya-u.ac.jpnaito/lecture/2000_SS/notes/note_1.pdf · unixはマルチユーザ,マルチタスクのosであるので,同時に複数のプログラムを実行できる.これは,

理学部数理学科計算機 7

テキストファイルでは行末や改行, TAB などを表すコードが入っていて, それらのコードはファイル中

で特別な役割を果たしている. しかしながら, バイナリファイル中では, 同じコードが違う役割を果たして

いることになるので, そのファイルがテキストなのかバイナリなのかはそれなりに区別しなくてはならな

い. また, どのようなコードが改行コードになっているかは OS によって異なるので, 同じテキストファイ

ルでも, 違う OS のものは違うコードで表現されている可能性がある.

バイナリファイルの典型的な例は, 上で述べたアセンブラコードを機械語に翻訳したものであり, すなわ

ち, 実行形式となっているプログラムのほとんどはバイナリファイルである.

Exercise 1.3.3 排他的論理和には次のような性質がある:

nビットの情報 {ai}ni=1のすべてのXORをとった値を a0とする. この時,いずれか一つの ak, k = 1, · · · , n

の値が失われたとき, a0 と失われていない {ai} たちの値を利用して, ak の値を復元することができる.

失われた情報を復元するための方法を考え, それが元の値を復元していることを証明せよ.

このように, データのすべてのビットの XOR をとった値をそのデータのパリティ (parity) と呼び, その

ビットをパリティ・ビット (parity bit) と呼ぶ. また, パリティ・ビットのような, 冗長な(余分な)データ

を付け加えて,データの一部が失われても, 元のデータを復元できるようにすることを誤り訂正と呼ぶ.

1.4 コンピュータ内部でのデータの表現

コンピュータ内部では文字コードにより, 文字も数値として扱われることがわかった. ここでは, コン

ピュータ内部において, それらの数がどのように扱われているかを考えよう.

コンピュータ内部で表現される数には(一般に)「整数」と「浮動小数点数」の2種類が存在し11 , それ

ぞれに対して異なった演算規則を用いるのが普通である. 各種の文字なども「整数」として認識されてい

るため, コンピュータ内部の演算ルーチンのうち「整数」に対するものが最も基本的となる.

1.4.1 整数の内部表現

コンピュータ内部において,「整数」を表すためのデータ構造を考えてみよう. データを格納する領域は,

演算レジスタの長さに依存するのは明らかであるが, ここでは1バイトで表現される「整数」の内部表現を

考える. 以下では 1 byte = M bits と仮定しよう.

以下では「整数」として, 符号を持つものと符号なしのものの2通りを考えるが, 容易にわかるように,

どちらと考えてもその演算回路は一致する.

1.4.1.1 符号を持つ整数の表現

符号を持つ整数の表現方法は, 簡単に思いつくのは次の2通りが考えられる. はじめに, n を −2k + 1 ≤

n ≤ 2k − 1 を満たす任意の整数とする. すると, n は

n = (−1)bkk−1∑

i=0

bi2i

と一意に書けるので, ここで現れる bi を並べて, k + 1 桁の2進数 bkbk−1 · · · b1b0 と書く. ここで, M = 8

と仮定すると, −127 ≤ n ≤ 127 であるので, 0 ≤ k ≤ 7 である.

ここで, 最上位ビット (MSB) は, n ≥ 0 の時は 0 であり, n < 0 の時には 1 となる. このように用いら

れるビットのことを符号ビットと呼ぶ.

11 それぞれが通常の「整数」と「実数」に対応している.

Id: joron.tex,v 1.3 2000/04/16 06:19:00 naito Exp

Page 8: 1章序論 - math.nagoya-u.ac.jpnaito/lecture/2000_SS/notes/note_1.pdf · unixはマルチユーザ,マルチタスクのosであるので,同時に複数のプログラムを実行できる.これは,

8 理学部数理学科計算機

これに対して, もう一つの方法は, 2の補数による表現であり, −2k ≤ n ≤ 2k − 1 であるような整数 n に

対して,

n = −2kbk +k−1∑

i=0

bi2i

で表される. この表現によると,

0 = (0000 0000)2

127 = (0111 1111)2

−1 = (1111 1111)2

−128 = (1000 0000)2

となる. このことより, 負の数を, 2の補数で表現すると, 最上位ビットは必ず 1 になる. この表現による

と, 負の数を含む加算が, 単なる加算として計算できることがわかる. すなわち, 次に述べる符号なしの整

数の演算と同一の回路で演算回路を実現することができる.

このようにして, 整数を表現しておくと, N バイト( = NM ビット)の記憶領域では

−2NM−1 ≤ n ≤ 2NM−1 − 1

の範囲の数を表現できることがわかる.

1.4.1.2 符号なしの整数

コンピュータ内部では, 0または正の整数のみを用いて演算を行う方が都合が良いことがある. そのよう

な整数を符号なしの整数と呼ぶ. 符号無しの型は, 2進数展開で表現されているのが普通である. したがっ

て, N バイトの記憶領域では,

0 ≤ n ≤ 2MN − 1

の範囲の数を表現できることがわかる.

Exercise 1.4.1 整数の加算を論理演算を利用して表現せよ. すなわち, 2つのビット a0, a1 と下からの繰

り上がり (carry) b が入力されたとき, その加算の結果 c と繰り上がり d を求める論理演算を示せ.

1.4.2 浮動小数点数の内部表現

コンピュータ内部で「実数」に対応する数の表現として, 「浮動小数点数」と呼ばれるものが存在する12 . 浮動小数点数とは, 底と呼ばれる正の整数 k, 仮数部と呼ばれる数 a, 指数部と呼ばれる整数 � を用い

て a× k� と表現した数のことであり, a は 0 ≤ a < k を満たすようにとられる. この表現を k を底とする

浮動小数点表示と呼ぶ.

浮動小数点数をメモリ内に表現するには以下のような方法をとることが多い. ここでは, 1バイト=8

ビットであり, 4バイト=32ビットの幅で2を底とする浮動小数点数を表現することを考えよう13 14 . こ

の時, 4バイトのデータを次のように分解する.

S e1 ~ e7 e8 b1 ~ b7 b8 ~ b15 b16 ~ b23

12 古くは演算回路を単純にするため,「固定小数点数」と呼ばれる表現が存在した. 固定小数点数とは, 常に指数部を固定した小数点表示を行うものである.13 ここに述べる方法は IEEE (Institute of Electrical and Electronics’ Engineers) の標準規格と呼ばれるものである.14 4バイト浮動小数点数は単精度浮動小数点数とも呼ばれる.

Id: joron.tex,v 1.3 2000/04/16 06:19:00 naito Exp

Page 9: 1章序論 - math.nagoya-u.ac.jpnaito/lecture/2000_SS/notes/note_1.pdf · unixはマルチユーザ,マルチタスクのosであるので,同時に複数のプログラムを実行できる.これは,

理学部数理学科計算機 9

ここで, S は符号ビットと呼ばれ, 正ならば 0, 負ならば 1 が入る. e1 から e8 は指数部を表し, b1 から b23が仮数部を表す15 この時, 仮数部は

(1.b1b2 · · · b23)2

または,

(0.b1b2 · · · b23)2

の形である. 上の形を正規数, 下の形を非正規数と呼ぶ.

指数部は 2 のベキを表し,以下のように表現されている.(指数部が 0でない限り,正規数を表している.)

e1 ~ e8 2 のベキになる数

FF オーバーフローしたことを示す

FE 127...

...

80 1

7F 0

7E −1...

...

01 −126

00 この時, 非正規数

さらに, 指数部 0, 仮数部 0 の時には, 符号つきの 0 を表している. このことより, 単精度浮動小数点数の

最大値は,

(1.111 · · · 1)2 × 2127

これより大きな数は単精度浮動小数点数では扱えず,オーバーフローと呼ぶ. 絶対値の最小の 0 でない数は,

(0.000 · · · 01)2 × 2−126

であることがわかる.

これより小さな数は単精度浮動小数点数では扱えず,アンダーフローと呼ぶ. 演算途中や結果がオーバー

フローまたはアンダーフローになった場合には, 例外処理が行われる. 一般に, 例外処理が行われると, そ

の演算結果は保証されない.

それでは, いくつかの数を2進数の浮動小数点数として表現してみよう.

Example 1.4.1 もっとも簡単な浮動小数点数は 0.0 である.

0.0 : S = 0, (ei) = (0)2, (bi) = (0)2

−0.0 : S = 1, (ei) = (0)2, (bi) = (0)2

2.0, 0.5 = 2.0× 10−1 などは, 次のような表現を持つ.

2.0 : S = 0, (ei) = (1000 0000)2 = 80H, (bi) = (0)2

1.0 : S = 0, (ei) = (0111 1111)2 = 7FH, (bi) = (0)2

0.5 : S = 0, (ei) = (0111 1110)2 = 7EH, (bi) = (0)2

15 8バイト=64ビット浮動小数点数の場合には, 0 ~ 51 ビットが仮数部であり, 52 ~ 63 ビットが指数部となる. また, 指数部は 1023 のバイアスで表現されている. 8バイト浮動小数点数は倍精度扶桑小数点数と呼ばれる.

Id: joron.tex,v 1.3 2000/04/16 06:19:00 naito Exp

Page 10: 1章序論 - math.nagoya-u.ac.jpnaito/lecture/2000_SS/notes/note_1.pdf · unixはマルチユーザ,マルチタスクのosであるので,同時に複数のプログラムを実行できる.これは,

10 理学部数理学科計算機

ところが, 0.2, 0.1 は2進数では有限桁では正確に表現できない. したがって, 5 ∗ 0.1 よりも 0.5 の方が

精度が高い.

0.1 : S = 0, (ei) = (0111 1011)2 = 7BH, (bi) = (100 1100 1100 1100 1100 1101)2

0.2 : S = 0, (ei) = (0111 1100)2 = 7CH, (bi) = (100 1100 1100 1100 1100 1101)2

これらをまとめると, 次のようになる.

数値 指数部 仮数部 符号 意味

(符号つきの) 0 0 0 任意

正規数 0 より大きく 0 でない 任意 (−1)sign ∗ 21−bias ∗ 1.f

255 より小さい

非正規数 0 0 でない 任意 (−1)sign ∗ 2−126 ∗ 0.f

+INF 255 0 0 正の無限大

−INF 255 0 1 負の無限大

NaN (Not a Number) 255 0 でない 任意 Over flow した状態.

値 32ビット浮動小数点数 64ビット浮動小数点数

+0.0 00000000 00000000 00000000

−0.0 80000000 80000000 00000000

+1.0 3F800000 3FF00000 00000000

−1.0 BF800000 BFF00000 00000000

+2.0 40000000 40000000 00000000

+3.0 40400000 40080000 00000000

最大正規数 7F7FFFFF 7FEFFFFF FFFFFFFF

正の最小正規数 00800000 00100000 00000000

最大非正規数 007FFFFF 000FFFFF FFFFFFFF

正の最小非正規数 00000001 00000000 00000001

+∞ 7F800000 7FF00000 00000000

−∞ FF800000 FFF00000 00000000

NaN 7Fxxxxxx 7FFxxxxx xxxxxxxx

この表現を見ると, 仮数部, 指数部がバイト単位で区切られていないため, その演算回路は非常に複雑にな

る. そのため, 最近の CPU では浮動小数点演算のためのプロセッサを別に持ったり, 浮動小数点演算は異

なったレジスタを用いて演算を行うなどの工夫がされている16 .

Exercise 1.4.2 単精度浮動小数点数で表現できる数を数直線上に目盛ってみよ. また, 2を底とし, 指数

部 −1 であるような固定小数点数を数直線上に目盛ってみよ.

16 Pentium MMX の “MMX” と呼ばれるユニット, PlayStation2 に搭載された emotion engine などは, 浮動小数点演算を大量に高速に行うためのユニットである.

Id: joron.tex,v 1.3 2000/04/16 06:19:00 naito Exp

Page 11: 1章序論 - math.nagoya-u.ac.jpnaito/lecture/2000_SS/notes/note_1.pdf · unixはマルチユーザ,マルチタスクのosであるので,同時に複数のプログラムを実行できる.これは,

理学部数理学科計算機 11

第2章 UNIX とネットワーク

2.1 UNIX とは

コンピュータは CPU, メモリ, コントローラなどの LSI, ハードディスク, フロッピーディスクなどの外

部記憶装置, キーボード , マウス, ディスプレイなどの入出力装置などからなっている. 外部記憶装置, 入

出力装置は, CPU を中心に, コントローラと呼ばれる LSI を介して利用することができる. しかしながら,

CPU とコントローラを直接扱うのは非常な困難を必要とする. そのために, これらの制御を司るためのプロ

グラムを利用することによって, 適切な方法で扱うことができるようにしたものが OS(Operating System)

である.

ワークステーションでは UNIX と呼ばれる OS を利用することが多い. UNIX は 1969 年に AT&T の

ベル研究所で Dennis Ritchie などによって, DEC PDP-7 にはじめて搭載された. その後, 1973 年には

Ritchie たちは, UNIX の基本的な部分を C 言語によって記述し, それまでは OS はアセンブラで書かれる

という常識をうち破り, 現在の UNIX の基礎を築いた. このように, UNIX は C 言語によって記述されて

いるので, 広範囲のシステムに移植可能であり, それによって, 多くのシステムの上で実際に UNIX が動い

ているのである.

UNIX の基本的な特徴の一つは, タイムシェアリング (Time Sharing: 時分割) による, 複数のユーザの

CPU の利用を核とした, マルチタスクの OS であるということである. また, 外部記憶装置, 入出力装置な

どをデバイスという概念によって統一したことによって, それらの装置の扱いが容易になったばかりではな

く,デバイスの追加という単純な操作で, 新しい装置を追加することができるという可搬性も特徴になって

いる.

実際に UNIX を利用するためには, キーボードからの入力を UNIX のカーネル(UNIX の最も基本的な

部分)に伝える方法が必要となる. UNIX のカーネルは複数のユーザそれぞれに対して, 端末と呼ばれるデ

バイスを割り当てる. 端末からの入力, 端末への出力と UNIX カーネルとの仲介をとっているプログラム

がシェルである. シェルとは, キーボードからの入力の各行を解釈して, コマンドとして UNIX のカーネル

に渡したり, 入力されたコマンドの出力をディスプレイに出力したりする役割を持っている. UNIX では

標準的には sh と呼ばれるものと, csh と呼ばれるものの2つが用意されている. それぞれのシェルは対話

モードと非対話モードの2つのモードがあり, 通常利用するのは対話モードである. どちらのモードでも,

プログラミング可能である. 非対話モードに関しては, シェルスクリプトに言及することができれば, そこ

で説明する. 対話モードでは, シェルはプロンプトと呼ばれる記号を出力し,プロンプトがある場合に限っ

て, コマンドを入力することができる.

2.2 UNIX のコマンド

ここでは, ファイルディレクトリの概念と, シェルによるワイルドカードの展開の方法を見ていこう.

Id: unix.tex,v 1.2 2000/04/15 01:29:47 naito Exp

Page 12: 1章序論 - math.nagoya-u.ac.jpnaito/lecture/2000_SS/notes/note_1.pdf · unixはマルチユーザ,マルチタスクのosであるので,同時に複数のプログラムを実行できる.これは,

12 理学部数理学科計算機

2.2.1 ファイルとは

ファイルとはディスクに保存した名前の付けられたデータの集合の単位のことである. UNIX は一つ一

つのファイルをその名前を利用してアクセスする. ファイルの名前には, / を除く全ての英数字・記号・漢

字などの日本語などが利用できる. しかし, 変な記号(/, \, *, ?, &, 空白)や日本語を利用することは

余り良いことではない. また, ファイルの名前の長さは, 1文字以上255文字以下であるが, 極端に長い

名前をつけるのも関心しない.

コンピュータを使う上での常識として, ファイルの名前は, それを見てどのようなファイルであるかすぐ

にわかるような短い名前をつけるのが良い. また, XXXX.YYY というように, . で区切って YYY の部分にそ

れが何のファイルであるかを示すような文字列(拡張子と呼ぶ)をつけることが多い. 例えば, 以下のよう

な付け方をする.

• XXXX.p PASCAL の Program のファイル.

• XXXX.c C の Program のファイル.

• XXXX.tex TEX のファイル.

2.2.2 ディレクトリとは

ディレクトリとは, ファイルを格納する単位になるもので, 階層構造を持っている. UNIX のファイルシ

ステムではルートディレクトリと呼ばれる, 階層構造の一番上にあるディレクトリから木構造をなしている.

例えば, ルートディレクトリの下には /bin, /usr, /dev などのディレクトリがあり, その下にもいく

つものディレクトリがあるという構造である. このようなものをサブディレクトリと呼び, サブディレクト

リから見てすぐ上のディレクトリを親ディレクトリと呼ぶ. ここで, ルートディレクトリを / という文字

で表現した. ルートディレクトリには親ディレクトリは存在しない.

ルートディレクトリを除く全てのディレクトリには, 親ディレクトリと自分自身を示す特別なディレクト

リエントリが存在する. (ディレクトリエントリとは, ディレクトリを指し示す1 ファイルである. UNIX

ではディレクトリもディレクトリエントリを利用してファイルと見倣していることに注意.)各ディレクト

リでは, それ自身を指し示すディレクトリエントリは . で, 親ディレクトリを指し示すディレクトリエン

トリは .. で表現されている.

シェルは(それが対話モードであっても, 非対話モードであっても)いつでも現在いるディレクトリを

知ることができる. それをカレントディレクトリと呼ぶ. また, ログイン時にカレントディレクトリとなる

ディレクトリをホームディレクトリと呼ぶ.

異なるディレクトリにある同じ名前のファイルは, 異なるファイルとして見倣される.

それでは, 色々なディレクトリにあるファイルをどのように指定できるかを見てみよう. まず, カレント

ディレクトリにある A という名前のファイルは, 単純に A で指定できる. しかし, それ以外にも指定の方

法がある. カレントディレクトリがルートディレクトリの下の home というディレクトリのまた下の you

というディレクトリである場合, A は

/home/you/A

と表現できる. これをファイルの絶対パスと呼ぶ.

一方, 次のような指定もできる.

./A

これは, . がカレントディレクトリを示しているので, カレントディレクトリの下の A というファイルを指

定したことになる. これをファイルの(カレントディレクトリからの)相対パスと呼ぶ. このように, / と

いう記号はディレクトリの区切りを表している.1 このようなものをポインタと呼ぶ.

Id: unix.tex,v 1.2 2000/04/15 01:29:47 naito Exp

Page 13: 1章序論 - math.nagoya-u.ac.jpnaito/lecture/2000_SS/notes/note_1.pdf · unixはマルチユーザ,マルチタスクのosであるので,同時に複数のプログラムを実行できる.これは,

理学部数理学科計算機 13

/

home usr dev

bin libA

Exercise 2.2.1 カレントディレクトリがルートディレクトリの下の home というディレクトリのまた下の

you というディレクトリである場合, home の下の my というディレクトリにある X というファイルを絶対

パスと相対パスで表現せよ.

2.2.3 Shell によるワイルドカードの展開

Shell からコマンドを入力する際には,ファイル名を指定しなくてはならないことが多い. その際に,ファ

イルの名前のパターンを指定して, 複数のファイルにマッチさせることができる. そのようなファイルの指

定の方法をワイルドカードによるファイルの指定と呼ぶ. ワイルドカードは正規表現とは異なるので注意

すること.

ワイルドカードによる指定の方法は MS-DOS2 とは異なり, シェルによるファイル名の置換という形で

行なわれる. 実際, 次のような規則でファイル名の置換が行なわれる.

*, ?, [, { のいずれかの文字を含んでいるか、あるいは ~ で始まるワードで, 引用符で囲まれていない

ものはアルファベット順にソートしたファイル名のリストに展開される.

* (0個以上の)いずれかの文字に一致.

? いずれかの 1つの文字に一致.

[...] 囲まれたリストまたは範囲内のいずれかの 1 つの文字に一致. リストは文字列. 範囲は負の符号

(-)で区切った2つの文字で, すべての ASCII 文字を含む.

{str, ...} コンマで区切ったリスト内で各文字列(またはファイル名の一致するパターン)に展開する.

前述のパターンを一致させる式とは異なり, この展開結果はソートされない. たとえば, {b, a} は

‘b’ ‘a’ に展開されます(‘a’ ‘b’ ではない). 特殊な場合として, 文字 { と } は文字列 {} とと

もにそのまま渡される.

[user] 変数 home の値によって示されるホームディレクトリ, または user のパスワードエントリによっ

て示されるそのパターン *, ?, [...] だけがパターンの一致を暗示的に示す.

ファイル名がこれらを含むパターンに一致しなければ, エラーとなる. ピリオド (.)がファイル名かパ

ス名の最初の文字である場合, 明示的に一致しなければならない. スラッシュ(/)も明示的に一致し

なければならない.

2 MS-DOS におけるワイルドカードは, コマンドインタープリタ (command.com) ではなく, システムコールで展開される.

Id: unix.tex,v 1.2 2000/04/15 01:29:47 naito Exp

Page 14: 1章序論 - math.nagoya-u.ac.jpnaito/lecture/2000_SS/notes/note_1.pdf · unixはマルチユーザ,マルチタスクのosであるので,同時に複数のプログラムを実行できる.これは,

14 理学部数理学科計算機

2.2.4 リダイレクトとパイプ

端末に接続されたシェルは3 標準入力, 標準出力, 標準エラー出力の3つのデバイスを持っている(と考

えよう). 標準入力とは, 普通キーボードからの入力を指し, 標準出力と標準エラー出力は普通端末に結び

付いている. しかし, それら標準入出力を切替えることによって, より便利な使い方ができる.

それら, それら標準入出力を切替える方法が, リダイレクトとパイプである. ここでは, 簡単のため, 標準

エラー出力を除く2つのデバイスの切替を csh の場合に限って説明する. 標準エラー出力の切替の方法は

オンラインマニュアルを見よ.

2.2.4.1 リダイレクト

リダイレクトとは, 標準入出力をファイルに割り当てる方法である. 標準入力をファイルに割り当てるに

は < を, 標準出力をファイルに割り当てるには > を使う. 次の例はファイル file1 の内容を file2 に

出力している.

cat < file1 > file2

この際, 既に file2 が存在している時には, file2 の内容はリダイレクトによって上書きされる. もし,

file2 の末尾に追加したい時には, > の代わりに >> を用いる.

2.2.4.2 パイプ

パイプとは, 標準出力の内容を他のコマンドの標準入力に連結する方法で, これによって余分な操作を省

くことができる. 次の例は, ファイルの内容を表示して, その結果を uniq というコマンドに渡している例

である.

cat file1 | uniq

このように, 入出力のパイプには | を用いる.

2.2.4.3 バックグラウンドでの実行

UNIX では shell から入力したコマンドをバックグラウンドで実行することができる. 即ち, 入力などを

要求しないコマンドに対しては,その終了を待つこと無しに, 次のコマンドを入力できる. 次の例は, xclock

をバックグラウンドで実行した例である.

xclock &

このように, バックグラウンドでの実行には & を指定すれば良い.

Exercise 2.2.2 [この問題は, ここに書いてあるだけの知識では解答できない. csh のオンラインマニュア

ルを参照.] XXXX というコマンドは標準出力と標準エラー出力の両方に結果を書き出す. この時, 標準出力

の内容を file.out に, 標準エラー出力の結果を file.err に保存したい. どのようにすれば良いか?

2.3 UNIX の基本的なコマンド

以下では, UNIX の最も基本と思われるコマンドのいくつかを簡単に解説する. 詳しい解説はオンライン

マニュアルを参照せよ. わからないことがあった場合には, まずマニュアルを見るという習慣をつけること

が重要である.3 端末に接続されていない時でもいいのだが.

Id: unix-command.tex,v 1.4 2000/04/16 06:17:50 naito Exp

Page 15: 1章序論 - math.nagoya-u.ac.jpnaito/lecture/2000_SS/notes/note_1.pdf · unixはマルチユーザ,マルチタスクのosであるので,同時に複数のプログラムを実行できる.これは,

理学部数理学科計算機 15

以下では, <...> となっている部分は, ファイル, ディレクトリなどを指定することを示し, [...] は省

略可能な指定を表す. ファイルなどを指定する時には, 複数のファイルを指定することができるが, 注意が

必要である. また, a|b という表現は, a または b のどちらかか両方を指定できることを表す.

2.3.1 ディレクトリの操作

ディレクトリを操作するコマンドとしては, cd, pwd, mkdir, rmdir などがある.

2.3.1.1 カレントディレクトリの変更

【利用法】 cd [<directory>]

カレントディレクトリを <directory> に変更する. <directory> の指定を省略した場合4 , ホームディ

レクトリを指定したことになる.

2.3.1.2 カレントディレクトリの表示

【利用法】 pwd

カレントディレクトリを表示するためのコマンドである.

2.3.1.3 新規ディレクトリの作成

【利用法】 mkdir <directory>

指定する <directory> は既に存在するものであってはならない.

2.3.1.4 ディレクトリの削除

【利用法】 rmdir <directory>

削除するディレクトリは空でなくてはならない. 空でないディレクトリを削除するには rm を使う.

2.3.2 ファイルの操作

ファイルの操作, 表示などを行うコマンドには, ls, cp, rm, mv, cat, more などがある.

2.3.2.1 ディレクトリの内容の表示

【利用法】 ls [ -aAcCdfFgilLqrRstu1 ] [<filename>]

<filename> を省略した場合には, カレントディレクトリのファイルの一覧を見ることができる.

-aAcCdfFgilLqrRstu1 の部分はオプションと呼ばれ, 何を指定するかによって, ls の出力結果が異な

る. 例えば, -l を指定した場合は, ファイルの属性, サイズなどの詳しい情報を得ることができる. しかし,

全てのオプションを同時に指定できるわけではなく, 排他的なものもあるので注意すること.

4 MS-DOS では, cd とだけ入力すると, カレントディレクトリを表示することとなる. UNIX ではそのためには pwd を使う.

Id: unix-command.tex,v 1.4 2000/04/16 06:17:50 naito Exp

Page 16: 1章序論 - math.nagoya-u.ac.jpnaito/lecture/2000_SS/notes/note_1.pdf · unixはマルチユーザ,マルチタスクのosであるので,同時に複数のプログラムを実行できる.これは,

16 理学部数理学科計算機

. からはじまる名前のファイルを表示させるには a オプションが必要である. <filename> として,ディ

レクトリを指定すると, そのディレクトリの中のファイルの一覧が表示される.

また, ls は BSD 系のOSと SYSV 系のOSでは, オプションの取り扱いが微妙に異なる.

2.3.2.2 ファイルをコピーする

【利用法】  

【1】cp [ -i ] <filename1> <filename2>

【2】cp -r|R [ -i ] <directory1> <directory2>

【3】cp [ -i(r|R) ] <filename> <directory>

1の使用法の場合, cp は <filename1> の内容を <filename2> にコピーする. 2の使用法の場合は,

<directory1> のファイルを再帰的に <directory2> にコピーする. 3の使用法の場合は, <filename> (複

数指定可能) を <directory> にコピーする.

2.3.2.3 ファイルまたはディレクトリの削除

【利用法】 rm [ -fir ] <filename>

<filename> で指定した1つまたは複数のファイルを削除する. ディレクトリを削除する場合は r オプ

ションが必要.

2.3.2.4 ファイルの移動またはファイル名の変更

【利用法】 mv [ -i ] <filename1> <filename2>

mv はファイル名の変更や, ファイルの移動を行なう. ファイルとしてディレクトリも指定可能だが, ファ

イルシステムを跨がるディレクトリの移動はできない.

2.3.2.5 ファイルの出力

【利用法】 cat [<filename>]

cat は指定したファイルを内容を標準出力に書き出す. <filename> が省略された場合は, 標準入力から

読みとる. <filename> には複数を指定することができる.

2.3.2.6 テキストファイルの表示

【利用法】 more <filename>

more はテキストファイルの内容を端末に1画面ずつ表示する.

2.3.3 プロセス

UNIX 上で動作している各アプリケーションなどはプロセスと呼ばれ, UNIX カーネルでプロセス・テー

ブルと呼ばれる表によって管理されている. 何らかの理由によって, 不必要なプロセスが残ってしまうこと

があるが, それらをユーザが制御するためのコマンドとして, ps, kill がある.

Id: unix-command.tex,v 1.4 2000/04/16 06:17:50 naito Exp

Page 17: 1章序論 - math.nagoya-u.ac.jpnaito/lecture/2000_SS/notes/note_1.pdf · unixはマルチユーザ,マルチタスクのosであるので,同時に複数のプログラムを実行できる.これは,

理学部数理学科計算機 17

2.3.3.1 プロセス・テーブルの表示

【利用法】 ps [-aAcdefjlLPy]

ps によって, 現在のプロセス・テーブルを表示させることができる. オプションを何も与えなければ, ps

を発行した端末に結び付いたプロセスのみを表示する.

すべてのプロセスを表示させるには, psI-ef とするのが最も単純である. この場合,

UID PID PPID C STIME TTY TIME CMD

root 0 0 0 Mar 31 ? 0:02 sched

root 1 0 0 Mar 31 ? 1:21 /etc/init -

root 2 0 0 Mar 31 ? 0:00 pageout

root 3 0 1 Mar 31 ? 135:29 fsflush

naito 10346 28588 0 09:25:10 ? 0:00 twm

naito 10370 10346 0 09:25:11 ? 0:01 xscreensaver

などという表が出力されるが, UID とは, そのプロセスを実行しているユーザ, PID とは, そのプロセスI

Dを示している.

ps は BSD 系OSと SYSV 系OSとでは, 全く異なったオプション体系を持つ.

2.3.3.2 プロセスにシグナルを送る

【利用法】 kill [-signal] pid

UNIX の各プロセスは他のプロセスに対してシグナルと呼ばれるイベントを送ることができる. シグナ

ルを受け取ったプロセスは, そのプロセス内またはOSで規定された動作を実行する. シグナルには KILL,

HUP, INT など数十種類があり, 一般にはハング・アップしたプロセスに対して KILL シグナルを送ると, そ

のプロセスは停止する.

具体的には, ps で得られたプロセスID pid を利用して, killI-KILLIpid とすることにより, プロセ

スID pid を持つプロセスを停止させることができる. しかし, KILL シグナルを受け取ったプロセスは一

切の停止処理を行わない可能性があるため, 一般には「これは最後の手段」と認識されている. KILL シグ

ナルを送る前に, HUP, INT などのシグナルを送り,(可能ならば)それで停止させる方が良い.

端末から実行しているプロセスに対しては, Control��������+ C� を入力することにより,プロセスを停止させ

ることができることがあるが, これは,プロセスに対して INT シグナルを送ることに等しい.

2.3.4 オンラインマニュアル

オンラインマニュアルを参照するには, man というコマンドを使う.5 例えば, cp のオンラインマニュア

ルを見るには, manIcp とする.

オンラインマニュアルは, UNIX のコマンドばかりではなく, システムコール, C の関数などの内容も含

まれる. したがって, 目的によっては, 同じ名前のコマンドまたはシステムコールなどが存在するので, それ

らを区別する必要が出てくる. そのために, オンラインマニュアルはいくつかのセクションにわかれている.

1. ユーザコマンド

2. システムコール

3. ライブラリ

4. 装置とネットワークインターフェース

5. ファイルの形式

5 man man としてみよ.

Id: unix-command.tex,v 1.4 2000/04/16 06:17:50 naito Exp

Page 18: 1章序論 - math.nagoya-u.ac.jpnaito/lecture/2000_SS/notes/note_1.pdf · unixはマルチユーザ,マルチタスクのosであるので,同時に複数のプログラムを実行できる.これは,

18 理学部数理学科計算機

6. ゲームとデモ

7. 環境,表と troff のコマンド

8. 保守用コマンド

このようなセクションにわかれているコマンドまたは関数などのオンラインマニュアルを見るためには,

【利用法】 man [-s <section>] <command>

という使い方をする.

Example 2.3.1 manIprintf とすると, printf コマンドのオンラインマニュアルが出てくるので, C の

関数 printf のオンラインマニュアルを見るためには, manI-sI3sIprintf とする.

詳しいセクションの分類に関しては, 各セクションの intro のオンラインマニュアルを参照すれば良い.

なお, オンラインマニュアルをプリントすることは, 著作権法に触れる恐れがあるので, 注意すること.

Exercise 2.3.1 カレントディレクトリにある file1.c, file2.c というファイルを, それぞれ file1.cc,

file2.cc というファイルに名前を変更したい. この際,

mvI*.cI*.cc

としようとしたが, エラーがでた. 何故かを考えよ.

Exercise 2.3.2 カレントディレクトリにあるファイルの一覧を得ようとして,

lsI*

としようとした. 望むような結果が得られるか?もし, 得られないのなら, 何故かを考えよ.

Exercise 2.3.3 UNIX のファイルシステムの仕組みを調べ,ファイルシステムを跨がるディレクトリの mv

ができない(mv コマンドでサポートしない)理由を考えよ.

2.4 コンピュータネットワーク

ごく最近になって,「インターネット」という言葉が世間で話題になるようになった. しかし, インター

ネットが実際にどのようなものであるかを知る人は少ないのではないだろうか?ここでは, インターネット

とはどのようなものか, その内容について簡単に解説をする.

2.4.1 コンピュータネットワーク

古くは大型計算機, UNIX ワークステーションなど, 最近ではパーソナルコンピュータまで, それらがコ

ンピュータ同士を接続するネットワークに接続されている.

それらのネットワークは, 例えば大学内, 企業内において, 内部のネットワークが構成されている. これら

のネットワークは, 実際にネットワーク専用のケーブルを引くことによって実現され, その速度は, 少し以前

までは 10Mbps6 , 最近は 100Mbps で実現されていることが多い. さらに, このような local area network

(LAN) は, それらのケーブル, 接続機器等によって決まる規格の範囲内であれば, どのような通信でも実

現することが可能である. 例えば, 名古屋大学のネットワーク (NICE II) は, 622Mbps の ATM 交換網を

中心とし, 各建物には 100Mbps の FDDI と 10Mbps の 10Base-5 Ethernet で実現され, NICE II 上には

UNIX だけではなく, Apple (Macintosh), Netware, Windows NT などのネットワークが実現されている.

6 Mbps とは Mega bits per second. 一般にバイトを省略する記号として “B” を使い, ビットを省略する記号として “b” を使う.

Id: network.tex,v 1.3 2000/04/16 06:21:13 naito Exp

Page 19: 1章序論 - math.nagoya-u.ac.jpnaito/lecture/2000_SS/notes/note_1.pdf · unixはマルチユーザ,マルチタスクのosであるので,同時に複数のプログラムを実行できる.これは,

理学部数理学科計算機 19

FDDI

622Mbps

100Mbps

100Mbps/10Mbps

ATM ATM

ATM ATM

ATM

大型計算機センター�

このようにして実現された LAN 同士, gateway と呼ばれる接続装置を利用して, 互いに接続されているこ

とが多い. その場合, そこに利用されるケーブルは(日本国内においては)NTT のネットワーク専用線を

利用することが多い. したがって, その通信速度, 接続距離などに応じた料金を NTT などに支払う必要が

出てくる. そのような理由から, LAN 同士を接続するネットワークの速度は, GIGA 単位の速度のものか

ら, 極めて低速なものまで, 必要性と財源によって決定されている. また, このような LAN 外部のネット

ワークは, それ自身単独で運営されている(基幹ネットワーク, バックボーン)ものや, 特定の2箇所をお

互いの合意の上に接続していたりする. 名古屋大学の NICE II は, 文部省の学術ネットワーク (SINET) を

利用して外部に接続されている. また, それ以外のバックボーンで有名なものには WIDE ネットワークが

ある. そのようなバックボーン同時も互いに接続され, また, 海外へも, 海底ケーブル, 衛星通信などを利用

して接続されている.

このような LAN 同士から始まるネットワーク同士の接続をインターネットと呼んでいる. ここで, 少し

考えればわかるのだが, インターネット上では, 互いに利用している規格等がことなることが多いので, イ

ンターネット全体で利用できる通信規格 (protocol)には制限が出てくる. 実際, インターネット上で普遍的

に利用できるプロトコルは TCP/IP と呼ばれるものに限られている. また, バックボーン同士を接続して

いるのは単一のコンピュータであることが多い. しかし, 各バックボーン上をながれるデータは非常に大量

のものであるので, バックボーンの接続点の負荷は非常に大きくなる.

したがって, 我々がネットワークを利用する際には, 世界中のネットワークに対して大きな負荷をかけて

いること, ネットワークの利用は決して無料ではないこと, また, ネットワークの維持には大量の人手がか

かり, それらの人の努力によってネットワークが維持されていることを理解しなくてはならない.

2.4.2 ネットワークアドレスとプロトコル

ネットワークを利用できるコンピュータ同士は, 互いにプロトコルを利用して通信をしているのだが, お

互いを認識するためには, ネットワーク上のコンピュータを一意的に識別するものが必要である. それを実

現しているものの一つが, FQDN (Fully Qualified Domain Name) である.

世界中に散らばる local network (LAN) には,ドメイン名と呼ばれる LAN を識別する名前が与えられ

Id: network.tex,v 1.3 2000/04/16 06:21:13 naito Exp

Page 20: 1章序論 - math.nagoya-u.ac.jpnaito/lecture/2000_SS/notes/note_1.pdf · unixはマルチユーザ,マルチタスクのosであるので,同時に複数のプログラムを実行できる.これは,

20 理学部数理学科計算機

ている. 例えば, 名古屋大学の場合,

nagoya-u.ac.jp

がそうである. ドメイン名は, jp が日本のネットワークを表し, ac が学術研究機関を表すといったように

階層的に構成されている. また, 各ドメイン内にはそれらを分割するサブドメインがあることが多い. 例え

ば, 情報メディア教育センターの教育用ワークステーションには

media.nagoya-u.ac.jp

が与えられている. しかし,ドメイン名の階層と, ネットワークの階層とは必ずしも一致しないことが多い.

FQDN とは,ドメイン名の前に, 各コンピュータの名前(ホスト名)をつけたものである.

一方, お互いを名前で識別できても, それらの間の通信を実現する方法がなくてはいけない. そのために

利用されているのが TCP/IP と呼ばれるプロトコルで, これはその媒体(どのようなケーブルを利用して

いるかなど)がある一定の規格を満たせば, その上に実現できるように定義されている. 実際には, ネット

ワーク・プロトコルは OSI の7層モデルと呼ばれる方法によって定義され, 媒体に対する定義は, 最下位の

物理層で定義され, TCP/IP は第3層から第5層で定義されている. このような layer model は, 他の層で

定義されているものには関係なく, 各層で通信規格が定義される構造を持っているので, 各ネットワークは,

適当な方法によって, 低位層を実現すれば, その上に上位のネットワーク・プロトコルを流すことができる.

このような規格で定義された TCP/IP を利用して, 実際に離れた2台のコンピュータ同士の通信経路を

決定したり, 電子メールを配送したりという手続きが実現されている.

7:アプリケーション層�

6:プレゼンテーション層�

5:セッション層�

4:トランスポート層�

3:ネットワーク層�

2:データリンク層�

1:物理層� 10Base-5 10Base-2 10Base-T

EtherNet PPP

IP

UDP TCP

Socket

telnet ftp rlogin

smtp nntp http X11

3:ネットワーク層�

2:データリンク層�

1:物理層�

4:トランスポート層�

2.4.3 ネットワークサービス

TCP/IP のネットワーク上で利用できるサービス (protocol) のうちのいくつかと, それらの問題点を挙

げよう.

2.4.3.1 電子メール

電子メールは, TCP/IP の上位層で SMTP (simple mail transfer protocol) として定義されているサー

ビスである.

実際には, ユーザ名とドメイン名から決まる, 電子メール・アドレスによって指定されたユーザに対して,

テキストからなるデータを送付する方法である.

Id: network.tex,v 1.3 2000/04/16 06:21:13 naito Exp

Page 21: 1章序論 - math.nagoya-u.ac.jpnaito/lecture/2000_SS/notes/note_1.pdf · unixはマルチユーザ,マルチタスクのosであるので,同時に複数のプログラムを実行できる.これは,

理学部数理学科計算機 21

2.4.3.1.1 電子メールの問題点 近年, 音声・画像等の大量のデータからなる電子メールを送付すること

が行なわれるようになった. これらの非テキストデータは, 実際にはテキストデータに変換され電子メール

として送られるのだが, そのデータ量が大量になることで, 通信路の多くを利用してしまうこと, また, 電子

メールを保存する領域 (mail spool) の不足等の問題を引きおこしている.

一方, 通信路上で通信の秘密が保証されているわけではないので, 暗号化メール等の実験も始まっている.

2.4.3.1.2 電子メールの配送方法 実際に電子メールを送る(配送する)場合に, ワークステーションは

何をやっているかを考えよう. 例えば, [email protected] という宛先に電子メールを送る時に

行なわれる手順を見てみる.

一般的に, ユーザは何らかの電子メールを書いたり,読んだり送ったりというプログラムを利用する. これ

を電子メールのユーザ・エージェントと呼ぶ. ユーザ・エージェントは, ユーザによって利用され, ここで書

かれたメールは, 実際に配送を行なうプログラム(配送エージェント)に渡される. ほとんどの UNIX ワー

クステーションの場合, 配送エージェントは sendmail と呼ばれるプログラムであり, sendmail は, その

宛先から network 上のどのホストにメールを送れば良いかを調べる. この部分は, 現在では, 電子メールの

宛先のドメイン部分(上の例では math.nagoya-u.ac.jp )から, 電子メールを受けとるホストの FQDN

を得る手段(DNS: Domain Name Service)があり, それを利用して配送先を決定できる. この段階で, 配

送先が見つからないメールは, domain not found として, ユーザに返送される.

配送先が決定できると, sendmail は実際に配送先と通信を行ない, メールの配送を試みる. この時,

network, 相手ホストなどの事情により, 配送ができない場合が起きる. この場合には, sendmail は一旦配

送をあきらめ, sendmail の起動時に指定された一定時間後に, 再び配送を試みる. (通常, この手順を何度

か行なっても配送ができない場合には, 発信者にメールを返送する.)

この段階で, 相手ホストがそのメールを受けとれないことがありうる. それは, 例えば存在しないユーザ

名に対してメールを送った場合などである. このような場合には, 相手ホストから user unknown として,

エラーが返され, sendmail は発信者に対してエラーであることを通知し, メールはユーザに返送される.

大学間など, 相手ホストと直接通信できる場合は, ここまでの手順で送付先の相手ホストにメールが届い

たことになる. 一方で企業等, 実際にユーザが利用しているホストには直接通信ができない場合もあり, こ

のような場合には, メール等を中継するホストに対してメールを送ることになり, その後の配送は, 中継ホ

ストの配送エージェントが担当する. その途中でエラーが発生すれば, やはり送ったのと逆の順序で発信者

に対してメールが返送される.

相手ホストにメールが届いた際に, メールのデータが置かれる場所は, メール・スプールと呼ばれる, シ

ステム領域であり, ユーザがメールを読む際には, 最初はメール・スプールからメールを取り出すこととな

る. 一般に, メール・スプールの容量がいっぱいの時には, メールの着信が不可能になる.

また, パーソナル・コンピュータ上のユーザ・エージェントを利用している場合には, 各ユーザは, POP ま

たは IMAP と呼ばれるプロトコルを利用して, メール・スプールからメールを取り出すという操作を行なっ

ている. このような場合も, メールの発信時はワークステーションの配送エージェントに対して通信を行な

い, ワークステーションの sendmail が実際の配送を行なっていることが多い.

2.4.3.2 ネットワークニュース

ネットワークニュースは TCP/IP の上位層で NNTP (network news transfer protocol) として定義され

ている.

ネットワークニュースは, 不特定多数のユーザとのやりとりであり, そのデータは, 近隣の host 同士で,

いわゆるバケツリレー方式で受け渡されている.

Id: network.tex,v 1.3 2000/04/16 06:21:13 naito Exp

Page 22: 1章序論 - math.nagoya-u.ac.jpnaito/lecture/2000_SS/notes/note_1.pdf · unixはマルチユーザ,マルチタスクのosであるので,同時に複数のプログラムを実行できる.これは,

22 理学部数理学科計算機

2.4.3.2.1 ネットワークニュースの問題点 近年, ネットワークニュースにながれるデータ量は爆発的に

増加している. 例えば, あるサイトでの1日に届くニュースの量は1Gバイトといわれている. 実際, 1日

に1Gのデータを交信・保存するためには, 保存するためのディスクだけではなく, 通信路さえも埋めつく

してしまう可能性が高い.

2.4.3.2.2 ネットワークニュースの配送方法 ネットワークニュースは電子メールと異なり, 不特定多数

のホストに対して配送を行なわなければならない. しかしながら, 実際にはニュースを handing(扱う)ホ

ストには, いくつかの特定の配送先があり, その配送先に対して, 定期的に相手ホストが持っていないニュー

スを送付するという手続きによって, 世界中に(いわゆるバケツ・リレー方式で)配送されている.

2.4.3.3 World Wide Web

WWW を実現するプロトコルは, TCP/IP の上位層で HTTP (hyper text transfer protocol) として定

義されている.

HTTP は, そのデータが必ずしもテキストである必要もなく, SMTP, NNTP などの旧来の TCP/IPプ

ロトコルとは異なり, on demand(必要に応じて) connection を設定するという特徴を持っている.

2.4.3.3.1 WWWの問題点 WWW を利用すると, 画像などの大量のデータを転送することが多くな

る. 例えば, 海外まで画像を何度もとりにいくなど, 通信路に対して大きな圧迫を与えている.

2.4.3.3.2 WWWのデータの転送方法 WWW では相手のデータの場所を示すものとして, URL が用

いられる. 例えば,

http://www.math.nagoya-u.ac.jp/~naito/

URLは,そのリソース(資源)の取得プロトコル(上の例では http),そのホスト名(www.math.nagoya-u.ac.jp),

ホスト内の場所( /~naito/ )に区別することができる. すなわち, 上の URL に対してアクセスをする時

には, http を利用して, www.math.nagoya-u.ac.jp と通信を行ない, そこの http における /~naito/ を

受けとるという方法である.

2.4.3.4 一般的な問題点

これらの TCP/IP サービスに共通する問題点は, 通信の秘密の確保(いわゆる通信のセキュリティ), 通

信データの増加である. (その他にも問題はたくさんあるのだが.)もちろん, これらの問題点を解決する

努力は行なわれているのだが, 技術的な解決だけではなく, ネットワークユーザのネットワークを利用する

モラル等が問われているのは事実である. したがって, ネットワークユーザは, 常にこれらの問題点を意識

し, それらの問題点の上にサービスが実現されていることや, これらに起因するトラブルが十分に起こり得

ることを理解した上でネットワークを利用することが望まれる.

Id: network.tex,v 1.3 2000/04/16 06:21:13 naito Exp