1 - 1.コンピュータ原理

2進数/16進数、論理演算など

1.1. n進数

1.1.1. コンピュータ内部のデータ

コンピュータは通常、0と1、つまりオフとオンであらゆるデータを表現する。 そのため2進数をベースに、8進数、16進数などが情報工学で用いられる。

10進数2進数8進数16進数
0000
1111
21022
31133
410044
510155
611066
711177
81000108
91001119
1010101210

1.1.2. 2進数と10進数

2進数から10進数への変換

1101.011(2)の10進数への変換

2進数1101.011
重み2^32^22^11+1/(2^1)1/(2^2)1/(2^3)
計算値8421+1/21/41/8

計算: 8x1+4x1+2x0+1x1+1/2x0+1/4x1+1/8x1 = 13.375

10進数から2進数への変換

13.25(10)の2進数への変換

2)13 2) 6 … 1 2) 3 … 0 2) 1 … 1

上記式より、1101が抽出。

0.25×2=0.5 0.5×2 =1.0

上記式より、0.10が抽出。

よって解は1101.01

1.1.3. 8進数と16進数

8進数、16進数から10進数への変換

512(8)、1FB(16)の10進数への変換

8進数512
重み8^28^18^0
計算値64×58×11×2

計算: 64×5 + 8 + 2 = 330

16進数1FB
重み16^216^116^0
計算値256×116×151×11

計算: 256 + 16×15 + 11 = 507

2進数から8進数、16進数に変換

1010.01(2)の8進数と16進数への変換

2進数001010.010
重み002^002^1002^10
計算値12.2

計算: 12.2(8)

| 2進数 | | 1 | 0 | 1 | 0 | .0 | 1 | 0 | 0 | | — | — | — | — | — | — | — | — | — | | 重み | 2^3 | 0 | 2^1 | 0 | 0 | 2^2 | 0 | 0 | | 計算値 | 6 | | 2 | | | 4 | | |

計算: 6+2.4 = 8.4 = A.4(16)

8進数、16進数から2進数に変換

12.2(8)、A.4(16)の2進数への変換。

8進数12.2
2進数001010.010

計算: 1010.01(2)

16進数A.4
2進数1010.0100

計算: 1010.01(2)

1.1.4. ビットとバイト

ビット(bit)はコンピュータで扱うデータの最小単位(データ量)のこと。 ビット列はビットを並べたものを示し、ビット列が長いほど多くの情報を表現できる。 また、8bitは1Byteとして扱われる。

1.2. 負数の表現

1.2.1. 負数の表現方法

コンピュータでは負の数を最上位ビットを符号ビットとして扱うという方法がとられる。 符号用ビットがあるデータは符号ありデータと呼ばれる。

符号ありデータには絶対値表現補数表現の2通りある。

絶対値表現

絶対値表現は最上位を符号ビットとして、残りのビットで数値の絶対値を表現する方法

補数表現

補数表現は符号ビットも含めて計算できる負数の表現方法のこと。 補数の1の補数2の補数がある。

1の補数は絶対値のビットを反転したもの。 2の補数は1の補数に1を足したもの

1.3. シフト演算

シフト演算はビットを左右にずらすことで積や商を行う方法のこと。 シフト演算には符号考慮する算術シフト、符号を考慮しない論理シフトがある。

1.3.1. 論理シフト

論理シフトは符号を考慮しないシフト演算のこと。

論理左シフト

2進数のビット列を左にずらすと2のn乗倍になる。

0001000 => 0010000

論理右シフト

2進数のビット列を右にずらすと2の-n乗倍になる。

0001000 => 0000100

1.3.2. 算術シフト

算術シフトは符号を考慮するシフト演算のこと。

算術左シフト

符号ビットは固定したまま動かさず、他のビットを左にずらすシフト演算。

算術右シフト

符号ビットは固定したまま動かさず、他のビットを右にずらすシフト演算。 なお右の空いたビットには符号ビットと同じ数字が入る

1.3.3. シフト演算と加算の演算

シフト演算は2のn乗倍の掛け算と割り算のみ計算できる。 それ以外はシフト演算と足し算を組み合わせて計算を行う

1.4. 小数表現

1.4.1. 固定小数点と浮動小数点

固定小数点数

固定小数点はビット列のどの位置に小数点があるかを暗黙的に決めて扱う小数表現

0.00000014

浮動小数点数

浮動小数点は指数表記を用いて小数点以下を表現する手法

コンピュータはメモリに符号と指数部と仮数部に値を分け値を保持する。 符号には+-の情報を、指数部には累乗の情報を、仮数部には値本体を保存する。

0.14 × 10^-6

1.4.2. 浮動小数点数の正規化

正規化は小数点のすぐ右側に0以外の数字が来るようにするもの

正規化を行うことで有効な桁数を多くとることができる。 そうすることで誤差分が減り、値の精度を高めることが可能。

1.5. 誤差

誤差は実際の数値とコンピュータが扱う数値に生じる差のこと。

1.5.1. 誤差の種類

丸め誤差

丸め誤差は表現可能な桁数(値域)を超えてしまったため、最小桁より小さい数字が四捨五入や切り上げ、切り捨てなどを行うことで生じる誤差のこと。

打切り誤差

打切り誤差は計算処理を終わるまで待たずに途中で打ち切ることで生じる誤差のこと。

情報落ち

情報落ちは絶対値の大きい数と小さい数の加減算を行ったときに、絶対値の小さい値が計算結果に反映されないことで生じる誤差のこと。

桁落ち

桁落ちは絶対値のほぼ等しい2つの数値の引き算を行った際に、有効桁数が減少するために発生する誤差のこと。

桁あふれ

桁あふれは計算結果の桁数がコンピュータの扱えるビット数を超えることで生じる誤差のこと。

1.6. 論理演算/論理回路

1.6.1. 論理演算

論理回路は入力値に対し論理演算を行い結果を出力する装置のこと。 論理演算はMIL記号と呼ばれる図により表現される。

記号類

1.6.2. 基本的な論理回路

OR回路(論理和)

Y = A+B

ABY
000
011
101
111

AND回路(論理積)

Y = A・B

ABY
000
010
100
111

NOT回路(否定)

Y = /A

AY
01
10

1.6.3. 基本回路を組み合わせた回路

XOR回路(排他的論理和)

XOR回路はNOT回路とAND回路を接続したもののNOTがない側を並列誘引し、AND出力側をOR回路で組み合わせた回路

Y = A⊕B

ABY
000
011
101
110

XOR

NOR回路(否定論理和)

NOR回路はOR回路とNOT回路を直列に組み合わせた回路

Y = /(A+B)

ABY
001
010
100
110

NOR

NAND回路(否定論理積)

NAND回路はAND回路とNOT回路を直列に組み合わせた回路

Y = /(A・B)

ABY
001
011
101
110

NAND

1.7. 半加算器/全加算器

1.7.1. 加算器

加算器には半加算器全加算器がある。

半加算器

半加算器は2進数の1桁の足し算をする回路のこと。 AND回路とXOR回路を並列誘引接続し組み合わせた回路で作られる。

半加算器

全加算器

全加算器は半加算器とOR回路を並列接続で組み合わせた回路。 OR回路側の出力を上位桁、2つ目以降の半加算器の出力を下位桁として扱える。

全加算器

1.8. ビットの操作と反転

1.8.1. ビットの反転

ビットの反転にはXOR回路を用いる。 反転方法は以下の通り。

  1. 反転したいビット列を用意
  2. 反転させたい位置のみを1それ以外を0にしたビット列を用意
  3. 上記2つのビット列でXORをとる

1.8.2. ビットの取り出し

ビットの取り出しにはAND回路を用いる。 取り出し方法は以下の通り。

  1. ビットを取り出したいビット列を用意
  2. ビットを取り出したい位置に1それ以外を0にしたビット列を用意
  3. 上記2つのビット列でANDをとる

2 - 2.ハードウェア

ハードウェア原理/ノイマン型コンピュータの詳細に関して

2.1. ハードウェア原理

2.1.1. コンピュータの構成要素

コンピュータの構成要素にはハードウェアソフトウェアがある。

  • ハードウェア … 物理的なもの
  • ソフトウェア … コンピュータ内部で動作するプログラムなど

2.1.2. ハードウェア5大装置

コンピュータのハードウェアは入力装置記憶装置制御装置演算装置出力装置の5つの装置が連携して動作する。

5大装置

2.1.3. コンピュータの処理の流れ

コンピュータの処理は「入力」=>「演算」=>「出力」の順に処理が行われる。

  1. 入力内容を記憶装置に読み込む
  2. プログラム内の命令を制御装置に送る
  3. プログラム内のデータを演算装置に送りCPUで処理実行する
  4. 実行結果を記憶装置に書き出す
  5. 出力装置に結果を表示する

処理

2.1.4. ノイマン型コンピュータ

ノイマン型コンピュータは以下の特徴を持つコンピュータであり、現在のほとんどのコンピュータがノイマン型である。

  • プログラム内蔵方式 … プログラム実行時にプログラムを予め主記憶装置上に読み込んでおく方式
  • 逐次制御方式 … 命令を1つずつ取り出し順番に実行していく方式

2.2. 入出力装置

2.2.1. 入力装置

コンピュータに入力信号やデータを入力するための装置。

キーボードとポインティングデバイス

装置説明
キーボード数字や文字を入力するための装置
マウスマウスの移動情報を入力し画面上の位置を示す装置
トラックパッド画面を触れることで移動情報を指し示す装置
タッチパネル画面を触れることで画面の位置を指し示す装置
タブレットパネル上でペン等を動かすことで位置情報を入力する装置
ジョイスティックスティックを傾けることで位置情報を入力する装置

読み取り装置とバーコード

バーコードには2種類あり、商品用にはJANコード、2次元コードにはQRコードがある。

装置説明
イメージスキャナ絵や画像をデータとして読み取る装置
OCR印字された文字や手書き文字などを読み取る装置
OMRマークシートの読み取り位置を認識する装置
キャプチャカードビデオデッキなどの映像装置から、映像をデジタルデータとして取り込む装置
デジタルカメラフィルムの代わりにCCDを用いて画像をデジタルデータとして記憶する装置
バーコードリーダバーコードを読み取る装置

2.2.2. 出力装置

コンピュータの処理結果を表示する装置。

ディスプレイ

ディスプレイはコンピュータ出力を画面に表示する。 例としてブラウン管型のCRTディスプレイや液晶で薄型の液晶ディスプレイなどがある。

またディスプレイが表示されるきめ細かさは解像度と呼ばれる。 1ドット当たりRGBの光を重ねて表現される。

VRAM(ビデオRAM)

コンピュータは画面に表示される内容はVRAMと呼ばれる専用のメモリに保持する。 VRAMの容量によって扱える解像度と色数が異なる。

例えば、1024x768ドットの表示能力を持つディスプレイがある場合、16bit(65536色)を表示させたい場合のVRAMの容量は以下の通り。

1024x768x16=12582912bit, 1byte=8bitなため、12582912bit/8 ≒1.6MByte

ディスプレイの種類

装置説明
CRTディスプレイブラウン管を用いたディスプレイ、奥行きが必要であり消費電力も大きい
液晶ディスプレイ電圧により液晶を制御しているディスプレイ、薄型で消費電力も小さい
有機ELディスプレイ有機化合物に電圧を加えることで発光する仕組みを用いたディスプレイ、バックライトが不要である
プラズマディスプレイプラズマ放電による発行を用いたディスプレイ、高電圧が必要である

プリンタの種類

装置説明
ドットインパクトプリンタ印字ヘッドに多数のピンが内蔵され、このピンでインクリボンを打ち付け印字するプリンタ、印字品質は高くない
インクジェットプリンタ印字ヘッドノズルより用紙に直接インクを吹き付け印刷するプリンタ、高速である
レーザプリンタレーザ光線を照射することで感光体に印刷イメージを作成しそこに付着したトナーを紙に転写することで印刷するプリンタ、主にビジネス用

プリンタの性能指標

  • プリンタの解像度 … プリンタの解像度は1inchあたりのドット数を示すdpiを用いて表される
  • プリンタの印刷速度 … プリンタの印字速度は一秒間に何文字印字できるかを示すcpsと一秒間に何ページ印刷できるかを示すppmの2つがある

2.2.3. アナログデータの制御

センサとアクチュエータ

コンピュータはセンサやアクチュエータを用いて、アナログ情報の取得や機械的動作を実現している。

  • センサ … 熱、光などの自然界の情報を電気信号に変換し、A/D変換しコンピュータに伝える
  • アクチュエータ … 電気信号を物理的な動作量に変換する装置。モータやアームなどが例

制御方式

  • シーケンス制御 … 定められた順序や条件に従い、逐次処理を進めていく制御方式
  • フィードバック制御 … 現在の状況を定期的に計測し、目標値とのずれを入力に戻し、出力結果を目標値と一致させようとする制御方式

2.3. 入出力インターフェイス

入出力インターフェイスはコンピュータと周辺機器を接続するために定めた規格のこと。 コンピュータの入出力インターフェスにはさまざまあり、最もポピュラーなのはUSBである。

2.3.1. データ転送方式による分類

入出力インターフェイスはデータの転送方式で以下のように分類される。

方式区分説明
シリアルインターフェイス有線1本の信号線でデータを送る。現在の主流
パラレルインターフェイス有線複数の信号線を同時に使用してデータを送る
ワイヤレスインターフェイス無線有線ではなく無線でデータを送る

2.3.2. 入出力インターフェイスの種類

USB(Universal Serial Bus)

パソコンと各機器を繋ぐ際のもっとも一般的なインターフェスである。 最大127台まで周辺機器を接続でき、ホットプラグ機能に対応している。

USBハブを通してツリー状に接続されます。またUSBには複数の規格がある。

USB

IDE

IDEは内蔵ハードディスクを接続するために規格として使われていたpパラレルインターフェスである。 元々は最大2台までのハードディスクを接続できるという規格であったが、4CD-ROMなどの接続も対応したEIDEとして拡張された。

IDEでは最大4台までの機器を接続が可能。

HDMI

HDMIはケーブル一本で映像/音声/制御データを転送できる規格。

SCSI

SCSIはハードディスクやCD-ROM、MOドライブやイメージスキャナなどの様々な周辺機器の接続に使われていたパラレルインターフェスのこと。

デイジーチェーンと呼ばれる数珠つなぎに機器を接続する方式をとる。 また終端にはターミネータ(終端末抵抗)が必要である。

接続できるのはコンピュータ本体含め最大8台までである。また識別のために機器にID番号を割り当てる。

IEEE1394

i.LinkやFireWireという名前でも呼ばれ、ハードディスクレコーダなどの情報家電、ビデオカメラなどの機器に使われるインターフェス。

リピータハブを用いてツリー状の接続やディジーチェーン方式での接続が可能。

2.3.3. 無線の入出力インターフェイス

BlueTooth

BlueToothは2.4GHz帯の電波を用いて無線通信を行う規格であり、コードレスイヤホンや携帯電話、マウスなど様々な周辺機器をワイヤレスに接続可能である。

通信距離は10mほどであり、障害物があっても関係がない。

IrDA

IrDAは赤外線を用いて無線通信を行う規格であり、携帯電話やノートPC等に使われている。

なおテレビのリモコンは同じく赤外線を用いますがIrDAではない。 また、障害物があると通信できない特徴がある。

2.4. 補助記憶

2.4.1. 主記憶と補助記憶

コンピュータで使うデータを記憶しておく装置には主記憶装置補助記憶装置がある。

  • 主記憶装置 … CPUと直接データがやり取りできる高速記憶装置、電源が切れるとデータが消えてしまう
  • 補助記憶装置 … 電源がなくてもデータを記憶し続けることができる装置

2.4.2. 補助記憶装置の種類

補助記憶装置には磁気ディスク光ディスクフラッシュメモリがある。

種類特徴
磁気ディスク磁性体を塗ったディスクを使用してデータを読み書きするハードディスク(HDD)
光ディスク薄い円盤にレーザ光を当てることでデータを読み書きするCD,DVD,BD
フラッシュメモリ電気でデータの消去、書き込みを行うメモリ、アクセス速度が速いSDカード, USBメモリ、SSD

2.4.3. 磁気ディスク

磁気ディスクは薄い円盤に磁性体を塗った装置のこと。 以下の部品で構成される。

  • 磁気ヘッド … データの読み書きを行う部品
  • アーム … 磁気ヘッドを磁気ディスクの特定カ所へ移動させる部品

磁気ディスクの記録単位

磁気ディスクはセクタトラックシリンダという単位でデータ位置を管理する。

  • セクタ … データを記録する最小単位
  • トラック … セクタをつないでディスクを1周する領域
  • シリンダ … 各ディスクの中心から同じ距離にあるトラックをすべてまとめた領域

セクタ

また以下のHDDの総容量を求めてみる。

パラメータ
シリンダ数1500
1シリンダあたりのトラック数20
1トラックあたりのセクタ数40
1セクタあたりのバイト数512

{(512x4)x20}x1500 = 6.144x10^8 Byte

データの書き込み

磁気ディスクへデータを書き込みする際はセクタ単位で行わる。 また、システムがファイルなどのデータを扱う際は複数のセクタを1つとみなしたブロック単位で書き込むことが一般的となる。

磁気ディスクまでのアクセス時間

アクセス時間は制御装置から磁気ディスクにデータ書き込み命令が出てから、読み書きが終わるまでの時間のこと。 アクセスは以下のステップで行われる。

  1. アームを動かしデータのあるトラックまで移動する(シーク時間)
  2. 磁気ディスクを回転させデータのあるセクタまで移動する(サーチ時間)
  3. アクセスアームの先端についている磁気ヘッドからデータを読み書きする

また磁気ディスク御アクセス時間は以下式で求まる。

アクセス時間 = 位置決め時間 + 回転待ち時間 + データ転送時間

以下のパラメータを用いてアクセス時間を算出を行う。

パラメータ
回転速度5000t/m
平均シーク時間20ms
1トラックあたりの記憶容量15000Byte

平均サーチ時間は{60x1000)ms/5000=12ms, 12ms/2=6ms データ転送時間は15000Byte/12ms = 1250Byte/ms, 5000/1250=4ms より 20ms + 6ms + 4ms = 30ms

フラグメンテーションとデフラグ

ハードディスク上でデータの書き込みと消去を繰り返すと、プラッタの空き容量は分散化される。 また、その状態で新しく書き込みを行うと、書き込み箇所が離散化される。 このようにファイルがあちこちの領域に分けられ断片化する状態フラグメンテーション(断片化) と呼ばれる。

  • フラグメンテーション(断片化) … ファイルがあちこちの領域に分けられ断片化する状態
  • デフラグメンテーション(デフラグ) … 断片化したファイルデータを連続した領域に並べ直してフラグメンテーションを解決するもの

RAID

複数のハードディスクを組み合わせ用いて、仮想的なハードディスクを構築運用する技術がRAIDである。

これらの用途はハードディスクの高速化や信頼性向上に用いられる。 RAIDはRAID0からRAID6までの7種類あり、求める速度や信頼性に応じて各種類を組み合わせて使用できる。

RAIDの種類説明
RAID0(ストライピング)RAID0は一つのデータを2台以上のディスク分散させて書き込む。
RAID1(ミラーリング)RAID1は2台以上のディスクに対して常に同じデータを書き込む。
RAID5RAID5は3台以上のディスクを使って、データと同時にパリティと呼ばれる誤り訂正符号も分散させて書き込む。

2.4.4. フラッシュメモリ

フラッシュメモリは電源を切っても内容を保持できる半導体メモリのこと。 ただし、書き込み回数に制限があるのが特徴。

  • SD/microSDカード … カード型のフラッシュメモリ
  • USBメモリ … USBポートに刺して使うフラッシュメモリ
  • SSD … 衝撃に強く、HDDの代わりに使用される

SSD(Solid State Drive)

SSDは近年HDDの代替として注目を集めてる。 SSDはフラッシュメモリを記憶媒体として内蔵する装置である。

機会的な駆動部分がなく、省電力で衝撃にも強い。また高速に読み書きが可能。 ただしSSDには書き込み回数に上限がある。

2.5. 主記憶装置とキャッシュメモリ

2.5.1. 主記憶の仕組み

主記憶はCPUから直接アクセスできる記憶装置のこと。 主記憶では一定の区画ごとに番号が割り当てられており、その杭区でデータを出し入れする仕組みとなっている。

データを保存する区画番号はアドレスと呼ばれる。

2.5.2. メモリの種類

メモリはコンピュータの動作に必要なデータを記憶する装置である。 半導体メモリには2種類あり、それぞれRAMとROMと呼ばれる。

メモリの種類

2.5.3. RAMの種類

種類リフレッシュ動作速度集積度価格用途
DRAM必要低速安価主記憶装置
SRAM不要高速高価キャッシュメモリ

DRAM

安価で容量が大きい、主記憶装置に用いられるメモリでコンデンサで構成される読み書き速度はSRAMよりも低速であり、記憶内容の維持のためには定期的に再書き込みするリフレッシュ動作が必要である。

SRAM

DRAMよりも非常に高速であるが高価でフリップフロップで構成される。小規模のキャッシュメモリとして用いられる。 記憶内容の維持にリフレッシュ動作は不要である。

2.5.4. リフレッシュとフリップフロップ

リフレッシュ

リフレッシュはDRAMのデータが失われないように電化を補充すること。 これはDRAMがコンデンサに電化を蓄えることでデータを保持することに由来する。 そのため、定期的にDRAMはリフレッシュする必要がある。

フリップフロップ

フリップフロップはSRAMで使用される記憶ができる電気回路のこと。 回路で記憶されるためリフレッシュは必要がない。

2.5.5. ROMの種類

  • マスクROM … 読み出し専用のメモリであり、製造時にデータが書き込まれている
  • PROM … ユーザの手でプログラミングし書き換えれるROMである
    • EPROM … 紫外線でデータを消去し書き換えられる
    • EEPROM … 電気的にデータを消去し書き換えられる
    • フラッシュメモリ … ブロック単位でデータを消去し書き換えられる

2.5.6. キャッシュメモリ

主記憶として使用されるDRAMはCPUと比較すると低速な読み書き速度なためCPUと主記憶の間に高速なSRAMを介在させる、これはキャッシュメモリと呼ばれる。 このキャッシュメモリを複数使うことでCPUがデータやり取りする速度を高速化することができる。

キャッシュメモリ

2.5.7. 実行アクセス時間

実行アクセス時間はキャッシュメモリを使用した場合の平均的なデータへのアクセス時間のこと。また目的のデータがキャッシュメモリに保存されている確率はヒット率と呼ばれる。

実行アクセス時間 = キャッシュメモリのアクセス時間×ヒット率 + 主記憶のアクセス時間 × (1-ヒット率)

2.5.8. 主記憶への書き込み方式

CPUがキャッシュメモリを使用して主記憶にデータを書き込む方式にはライトスルー方式ライトバック方式がある。

ライトスルー方式

ライトスルー方式ではキャッシュメモリへの書き込みと同時に主記憶装置にも同じデータを書き込む

ライトバック方式

ライトバック方式では通常はキャッシュメモリにのみ書き込みを行い、キャッシュメモリから追い出されるデータが発生するとそれを主記憶装置に書き込み更新する

メモリインタリープ

主記憶装置へのアクセスを高速化する技術にメモリインタリーブがある。

この手法では主記憶装置中を複数の区画に分け、複数の区画に同時アクセスすることで連続した番地のデータを一気に読み出す。

2.6. CPU

2.6.1. CPUの性能指標

CPUの性能はクロック周波数、CPI、MIPS等の指標値を用い評価される。

クロック周波数

CPUはクロック周波数に合わせて動作を行い、クロック周波数が大きいほど高性能であると言える。 1周期で命令を1実行できるため、クロック周波数が1GHz、CPIが1クロックである場合10^9の命令を1秒で実行できることを表す。 またクロック周波数を1で割ったものはクロックサイクル時間と呼ばれ、クロック当たりの所要時間を示す。

MIPS

MIPS(Million Instruction Per Second)は1秒間に実行できる命令の数を表したものである。

CPI

CPI(Clock Per Instruction)は1命令当たり何クロック必要かを表すものである。

2.6.2. CPUのアーキテクチャ

CPUのアーキテクチャには高機能な命令を持つCISCと単純な命令のみで構成されるRISCがある。

CISC

CISCはCPUに高機能な命令を持たせることで、一つの命令で複数な処理を実現するアーキテクチャである。 マイクロプログラムをCPU内部に記憶させることで高機能な命令が実現可能。

RISC

RISCはCPU内部に単純な命令しか持たない代わりに、それらをハードウェアの実で実装し、一つ一つの命令を高速に処理するアーキテクチャである。 ワイヤドロジックによりすべての命令をハードウェア的に実装される。

2.6.3. レジスタの種類

CPUには取り出した命令や実行結果を一時的に保存しておくための小さな記憶装置がある。 それはレジスタと呼ばれ、以下のような種類がある。

  • プログラムカウンタ次に実行する命令のメモリ番地を記憶する
  • 命令レジスタ(アキュムレータ) … 主記憶から読みだされた命令を記憶する
  • 汎用レジスタ … アキュムレータの代わりに使用される

2.6.4. CPUの命令実行手順

CPUが解釈する命令は命令部アドレス部から構成され、オペランドと呼ばれるアドレス部に処理対象となるデータの格納場所がアドレス部に指定されている。

またCPUの命令実行手順は以下の通り。

  1. 命令の取り出し(フェッチ)
  2. 命令の解読(デコード)
  3. 実行アドレス計算(オペランド格納場所を求める)
  4. オペランド呼び出し
  5. 命令実行

CPUはこれらの動作を繰り返す。

命令取り出し(フェッチ)

プログラムカウンタが取り出す命令のメモリアドレスを持つ。 プログラムカウンタに従ってアドレスを参照し命令を取り出し、命令レジスタにそれを記憶させる。 それが終わった後プログラムカウンタの値をインクリメントする。

命令解読

命令レジスタに登録された命令は命令部オペランド部で構成される。 命令部は命令の種類を示すコードが、オペランド部には処理対象となるデータを収めたメモリアドレスが格納される。

命令部の中身は命令デコーダへ送られます。 また、命令デコーダは命令部のコードを解読し、制御信号を必要な装置に通知する。

オペランド読み出し

オペランド(処理対象データ)は読み出しデータのメモリアドレスなどが格納され、 これを参照することでデータを読み出し、汎用レジスタに記憶させる。

命令実行

汎用レジスタからALUに処理データを読み出し演算し、その結果を汎用レジスタに書き戻す。

2.6.5. アドレス指定方式

コンピュータは機械語と呼ばれる0と1で構成された命令語を理解し処理する。

命令レジスタに登録された命令のオペランド部には必ずメモリアドレスが入っているとは限らず、基準値からの差分や、メモリアドレスが入っているメモリアドレスなど複雑なものが入っていることもある。

このように何かしらの計算によりアドレスを求める方式は**アドレス修飾(アドレス指定)**と呼ばれる。

即値アドレス指定方式

アドレス部に対象データそのものが入っている方式。

直接アドレス指定方式

アドレス部に対象データの場所を示すアドレス番地が入っている方式。

間接アドレス指定方式

アドレス部の値が指定するアドレス番地に対象データの場所を示すアドレス番地が入っている方式。

指標アドレス指定方式

アドレス部に指標レジスタ番号とアドレス定数を指定する部分がある。

インデックスアドレス指定方式

オペランド部の値にインデックス(指標)レジスタの値を加算することで実効アドレスを求める。

ベースアドレス指定方式

オペランド部の値にベースレジスタの値を加算することで実効アドレスを求める。

相対アドレス指定方式

オペランド部の値にプログラムカウンタの値を加算することで実効アドレスを求める。

2.7. CPUの高速化技術

2.7.1. 並列処理によるCPUの高速化

パイプライン処理

パイプライン処理は複数の命令を並列して実行する処理であり、全体の処理効率が高い処理のこと。 具体的には命令実行サイクルをステージ単位ごとに分け独立実行させ、流れ作業的に命令サイクルが終わる前に新しい命令サイクルを始める方式。

この処理では次々と命令を先読みしていってるため分岐命令が出た際に先読み分が無駄になることがあり、それは分岐ハザードと呼ばれる。

スーパーパイプライン

スーパーパイプラインは処理のレーンのステージをさらに細かいステージに分割することでパイプライン処理の効率アップを図るものである。

スーパースカラ

スーパースカラはパイプライン処理を行う回路を複数持たせることで全く同時に複数の命令を実行できるようにしたものである。

2.7.2. マルチプロセッサによるCPUの高速化

1台のコンピュータに1つのCPUが搭載されているものはシングルプロセッサ、1つのCPUの中に処理を行うコアを複数搭載したものはマルチコアプロセッサと呼ばれる。

2.7.3. CPUの投機実行による高速化

パイプライン処理では分岐処理(ex:if)が発生する。この結果が明確になるまで次の命令を処理できないという問題がある。

そのため分岐予測と呼ばれる、次の命令はどれかを予想して無駄な待ち時間を発生させないようにする処理がある。 この処理に基づいて分岐先の命令を実行する手法が投機実行である。

3 - 3.ソフトウェア

ソフトウェア/メモリ管理など

3.1. ソフトウェアとOS

3.1.1. ソフトウェアの分類

ソフトウェアはコンピュータ内の果たす役割により基本ソフトウェア応用ソフトウェアミドルウェアに分類できる。

基本ソフトウェア

基本ソフトウェアはコンピュータを動作させるための基本機能を提供するソフトウェア。OSとも呼ばれる。

  • 基本ソフトウェア
    • 制御プログラム … ハードウェアを管理しコンピュータを効率管理できるように働くソフトウェア
    • 言語処理プログラム … C言語、Javaなどのプログラム言語で書かれたプログラムを機械語に翻訳するプログラム
    • サービスプログラム … コンピュータの機能を補う補助的なプログラムでユーティリティと呼ばれ、ファイル圧縮プログラムなどがある

応用ソフトウェア

応用ソフトウェアはアプリケーションとも呼ばれるユーザに近い作業を実現するソフトウェアのこと。

ミドルウェア

ミドルウェアは基本ソフトウェアと応用ソフトウェアの間に位置し、応用ソフトウェアが共通に利用する専門機能を提供するソフトウェアのこと。DBMSなどがある。

3.1.2. OS

OSの役割

OSが果たす役割は以下の通り。

  1. ハードウェアの管理
  2. ファイルの管理
  3. 周辺機器の管理

代表的なOS

種類説明
WindowsMicrosoft社製のOS、GUIによる画面操作でコンピュータに命令を行う
Mac OSApple社製のクリエイティブな作業によく用いられるOS、GUIを先駆けで導入したことで有名
MS-DOSWindows普及前に使われていたMicrosoft社製のOSであり、CUI入力であったことで有名
UNIXサーバに使われることが多いOS、大勢のユーザが同時利用できるように考えられている
LINUXUNIX互換のOSであり、オープンソースで無償で利用可能

OSの操作性

コンピュータを操作するインターフェスとしてGUIとCUIがある。 GUIは画面を視覚的に操作することで命令を伝える操作方式でCUIはコマンドで操作する方式。

API

API(Application Program Interface)はOSが含み持つ各機能をアプリケーションから呼び出せる仕組みである、

RPA

RPAはソフトウェアによる自動化のことを指す。

3.2. ジョブ管理

ユーザからみて処理させたい一連の作業のかたまり単位がジョブであり、OSはそれを効率よく処理していけるように実行スケジュールを管理する。

ジョブ管理にはバッチ処理と呼ばれる処理に時間のかかる作業をコンピュータに登録しまとめて処理する仕組みがある。

3.2.1. ジョブ管理フロー

ジョブ管理はカーネルが持つ機能の1つであり、この機能でユーザとの間に橋渡しを行うマスタスケジューラという管理プログラムがある。

ユーザはこの管理プログラムにジョブの実行を依頼する。 また、マスタスケジューラはジョブの実行をジョブスケジューラに依頼し、マスタスケジューラは実行の監視に努め、ジョブスケジューラがジョブを実行する。

3.3. タスク管理

コンピュータから見た仕事の単位がタスクである。 タスクはシステムによってはプロセスと呼ばれる。

3.3.1. タスクの状態遷移

OSはタスクの使用権を適切の割り当てるため3つの状態に分けて管理を行う。 実行可能なタスクにCPUの使用権を割り当てることはディスパッチと呼ばれる。

  • 実行可能状態(Ready) … いつでも実行可能でCPUの使用権が回るのを待機する状態、生成直後のタスクは待ち行列になりこの状態となる
  • 実行状態(Run) … CPUの使用権が与えられ実行中の状態
  • 待機状態(Wait) … 入出力処理が発生したので終了を待っている状態

3.3.2. タスクスケジューリング方式

タスクスケジューリングは択巣が複数存在する場合にどういう順番でタスクを実行すべきか決めるもののこと。2つの方式がある

プリエンプティブ方式

OSが強制的にタスクを切り替えるスケジューリング方法

方式の種類説明
優先式方式タスクに優先度を設定し、優先度が高いものから実行していく方式。実行中のタスクよりも優先度が高いものが待ち行列に追加されると実行途中でCPUの使用権が奪われる(プリエンプション方式)
ラウンドロビン方式CPUの使用権を一定時間ごとに切り替える方式。実行可能状態になった順番でタスクにCPU使用権が割り当てられるが、規定時間に終わらなかった場合は待ち行列の最後に回される。

ノンプリエンプティブ方式

プログラムがタスクを切り替えるスケジューリング方式

方式の種類説明
到着順序方式実行可能となったタスク順にCPUの使用権を割り当てる方式。タスクに優先順位がないため、実行途中でCPUの使用権が奪われることはない(ノンプリエンプション)

3.3.3. マルチプログラミング

マルチプログラミングは複数のプログラムを見かけ上、同時に実行させることにより遊休時間を削減しCPuの使用効率を高めるものである。

3.3.4. 割り込み処理

実行中のタスクを中断し別の処理に切り替え、そちらが終了すると再び元のタスクに再帰する処理は割り込み処理と呼ばれる。

割り込み処理には下記のような種類がある。

内部割込み

内部割込みはタスク自体にエラーが発生しておこるもの

種類説明
プログラム割込み記憶保護例外などの場合に生じる割り込み
SVC割り込み入出力処理の要求などのカーネル呼出し命令が生じた際に生じる割り込み
外部割込み

外部割込みはハードウェア故障などタスク以外が原因となって起こるもの

種類説明
入出力割込み入出力装置の動作完了時や中断時に生じる割り込み
機械チェック割込み電源異常や主記憶装置障害などのハードウェアの異常時に生じる割り込み
コンソール割込みユーザによる介入が行われた際に生じる割り込み
タイマ割込み規定の時間を過ぎたときに生じる割り込み

3.3.5. スプーリング

CPUと入出力装置には処理速度に大きな差が存在する。 スプーリングと呼ばれる、低速な装置とのデータやり取りを高速な磁気ディスクを介して行い処理効率を高める手法が導入されている。

スプーリングを用いるとCPUの待ち時間を削減できるため、単位時間あたりに処理できる仕事量を増やすことが可能。

3.4. 記憶管理

3.4.1. 実記憶管理と仮想記憶管理

記憶管理には主記憶そのものを使用する実記憶管理と、補助記憶を一部使用して実際の主記憶より大きな記憶空間を作り出し、主記憶より大きな容量のプログラムを実行できるようにする補助記憶管理がある。

3.4.2. 実記憶管理

限られた主記憶空間を効率よく使われるようにプログラムに割り当てるのが実記憶管理の役割となる。実記憶管理の方式には区画方式スワッピング方式などがある。

区画方式

固定方式は主記憶をいくつかの区域に分割してプログラムを割り当てる管理方式のこと。

  • 固定区画方式 … 決まったサイズに区画を分割する方式。メモリの獲得や返却などの処理時間は一定となる。
  • 可変区画方式 … プログラムをロードするタイミングで必要なサイズに区切る管理方式。固定区画方式よりも主記憶の利用効率は良い。

フラグメンテーションとガーベジコレクション

可変区画方式の場合プログラムを主記憶上に隙間なく埋め込んで実行するとができるが、必ず詰め込んだ順番にプログラムが終了するとは限らないため連続した状態で主記憶の空き容量を確保することができない。 この現象はフラグメンテーション(断片化) と呼ばれる。

フラグメンテーションの解消のためにはロードされているプログラムを再配置することにより、細切れ状態の空き領域を連続したひとつの領域する必要がある。 この操作はメモリコンパクションまたはガーベジコレクションと呼ばれる。

スワッピング方式

スワッピング方式は優先度の低いプログラムを一時中断して補助記憶に退避させ優先度の高いプログラムを実行させる方式のこと。

スワッピングはプログラムを補助記憶に退避させる(スワップアウト)、**主記憶に戻す(スワップイン)**することを指す。

スワッピング

オーバレイ方式

区画を効率よく配置できるようにしても実行したプログラムのサイズが主記憶の容量を超えていたらロードができない。 これを可能にするような工夫がオーバレイ方式である。

この方式ではプログラムをセグメントという単位に分割しておいて、そのときに必要なセグメントだけを主記憶上にロードして実行される。

オーバレイ

3.4.3. 仮想記憶管理

仮想記憶は主記憶や補助記憶の存在を隠蔽し、広大なメモリ空間を自由に扱えるようにするもの。 実記憶上の配置のような物理的制約を意識する必要がないのが特徴。

また仮想アドレスから実アドレスへ変化する処理はメモリ交換ユニット(MMU)が行う。またこの仕組みは動的アドレス変換機構(DAT) と呼ばれる。

また仮想記憶に置かれたデータは主記憶装置を超えても補助記憶装置もメモリの一部として扱うことにより主記憶装置よりも大きなサイズの記憶空間を提供できる。

ページング方式

仮想記憶の実装方式には仮想アドレス空間を固定長の領域に区切って管理するページング方式可変長の領域に区切って管理するセグメント方式がある。

ページング方式ではプログラムをページと呼ばれる単位で分割管理する。現在のOSでは実行に必要なページだけを実記憶に読み込ませる方式が主流である。

またこの方式では仮想記憶と実記憶の対応付けはページテーブルという表により管理され、これにより仮想記憶上と実記憶上のどのページが結びついている確認できる。

補助記憶から実記憶へのページ読み込みはページインと呼ばれます。またページインしようとしても実記憶がいっぱいの場合いずれかのページを補助記憶に追い出して空きを作る必要がある。実記憶から補助記憶へとページを追い出すことはページアウトと呼ばれる。

実記憶の容量が少ないとページの置き換えをする頻度が高くなりシステム利用効率が極端に低下する。この現象はスラッシングと呼ばれる。

ページ置き換えアルゴリズム

方式説明
FIFO最初にページインしたページを追い出し対象にする
LIFO最後にページインしたページを追い出し対象にする
LRU最も長い時間参照されていないページを追い出し対象にする
LFU最も参照回数の少ないページを追い出し対象にする

3.5. ファイル管理

3.5.1. OSのファイル管理

OSはデータをファイルという単位で管理する。 ファイルはカテゴリごとにディレクトリ(フォルダ)という入れ物を使って整理する。

ルートディレクトリとサブディレクトリ

ディレクトリ中にはファイルだけではなく他のディレクトリも入れられる。 補助記憶装置全体に階層構造を持たせて管理することが可能である。

  • ルートディレクトリ … 階層の一番上位に位置するディレクトリ
  • サブディレクトリ … 他のディレクトリに含まれるディレクトリ

カレントディレクトリ

コンピュータが現在開いて作業しているディレクトリはカレントディレクトリと呼ばれる。 また、カレントディレクトリの1階層上のディレクトリは親ディレクトリと呼ばれる。

3.5.2. パスの指定

ファイルの場所はファイルパスを用いて示す。このファイルまでの場所を示す経路はパスと呼ばれる。

パスにはルートディレクトリからの経路を示す絶対パスとカレントディレクトリからの経路を示す相対パスが存在する。

絶対パスの表記

  1. ルートディレクトリは「/」or「\」で表す
  2. ディレクトリの次の階層は「/」or「\」で区分する

相対パスの表記

  1. ディレクトリの次の階層は「/」or「\」で区分する
  2. カレントディレクトリは「.」で表す
  3. 親ディレクトリは「..」で表す

3.5.3. コンピュータにおけるファイルの扱われ方

コンピュータにとってのファイルは一連のデータをまとめたものであり、レコードの集合がファイルである。

コンピュータのOSがどのようにレコードを格納するかを定義づけたファイル構成法をいくつか用意している。

ファイルへのアクセス方法

アクセス方式説明
順次アクセス先頭レコードから順番にアクセスする方法であり、シーケンシャルアクセスと呼ばれる。
直接アクセス任意のレコードに直接アクセスする方法であり、ランダムアクセスと呼ばれる。
動的アクセス順次アクセスと直接アクセスを組み合わせた方法で、任意のレコードに直接アクセスした後以降、順次アクセスで順番に処理する。

3.5.4. 順編成ファイル

先頭から順番にレコードを記録していくのが順編成ファイル。もっとも単純な編成法で順次アクセスのみが可能である。

3.5.5. 直接編成ファイル

レコード中のキーとなる値を利用することで任意のレコードを指定した直接アクセスを可能となる編成法。

直接アクセス方式と間接アクセス方式があり、キー値から格納アドレスを求める方法が異なる。

直接アクセス方式

キー値の内容をそのまま格納アドレスとして用いる方式。

間接アドレス方式

ハッシュ関数という計算式によりキー値から格納アドレスを算出して用いる方式。

またハッシュ関数での計算値が一致し異なるレコードが同じアドレスで衝突する現象はシノニムと呼ばれそれが起こるレコードはシノニムレコードと呼ばれる。

3.5.6. 索引編成ファイル

索引を格納する索引域とレコードを格納する基本データ域、そこからあふれたレコードを格納する溢れ域の3つの領域から構成される。

索引による直接アクセスと先頭からの順次アクセスに対応した編成法である。

3.5.7. 区分編成ファイル

メンバと呼ばれる順編成ファイルを複数持ち、それらを格納するメンバ域と各メンバのアドレスを管理するディレクトリ域で構成される編成法。

これはプログラムやライブラリを保存する用途によく使われる。

4 - 4.マルチメディア

文字/画像、音声などのマルチメディアデータに関して

4.1. ディジタルデータの表記

4.1.1. ビット(Bit)とバイト(Byte)の関係と単位

8bitをひとまとまりにした単位をByteとしている。 記憶容量等はByteを用いて表記される。

Image1

またByteの各単位系は以下の通りです。

記憶容量などの大きい数値を表す単位系

bit乗数単位
キロ(K)31KB=1024B
メガ(M)61MB=1024KB
ギガ(G)81GB=1024MB
テラ(T)121TB=1024GB

情報速度など小さい数値を表す単位系

bit乗数単位
ミリ(m)-3-
マイクロ(μ)-6-
ナノ(n)-8-
ピコ(p)-12-

4.2. 文字データの表現

4.2.1. 文字コード

文字コードは文字1つ1つにコードを振った一覧表のこと。 文字コードの種類には以下のような種類がある。

  • ASCII … 米国規格会が定めた基本的な文字コード、アルファベットと数字といくつかに記号のみを表し1文字7bitです
  • EBCDIC … IBMが定めた文字コードで1文字8bitで表し、大型コンピュータで用いられる
  • Shift-JIS … ASCIIの文字と混在させて使える日本語文字コード表。ひらがなや漢字、カタカナが使えます。windowsで使われており、1文字2Byteです
  • EUC … 拡張UNIXと呼ばれ、UNIX系のOSで使われる日本語文字コード表、1文字基本2Byte、補助漢字は3Byteで表される
  • Unicode … 全世界の文字コードを1つにしようとして作成された文字コード、現在は1文字4Byteで、ISOにより標準化された

4.2.2. フォントの種類

フォントは文字を統一されたデザインで表現できる余蘊強いた書体データのこと。

フォント

4.2.3. 文字の大きさを表す単位

ポイントは文字の大きさを指定するときに使う単位のこと。 1ポイントは1/72inchとなる。

4.2.4. ビットマップフォントの文字データ

ビットマップフォントはピクセル(画素)の集まりにより表現する。 画素の個数は画素数と呼ばれる。

解像度は一領域に対し画素をどれだけ表示できるかを示す単位のこと。 単位はdpiで表現され1inch(2.54cm)の中に画素が並んでいるかを表した数字となる。

4.3. 画像データの表現

4.3.1. 画像データの形式

ラスタ形式ベクタ形式がある。

形式

4.3.2. 画像データで表現できる色数

色数画像
2色白黒画像、1ドットにつき1bit
16色1ドットにつき4bit
256色1ドットにつき8bit
65535色1ドットにつき16bit
2^24(25ビット)フルカラー画像、1ドット24bit

4.3.3. 画像データの圧縮

画像データの圧縮には圧縮する前の情報に戻せる可逆圧縮と、元の状態には戻せない不可逆圧縮がある。

種類説明
BMP画像を圧縮せずにそのまま保存するファイル形式
JPEG画像圧縮保存形式、フルカラーが扱え圧縮率が高く、不可逆圧縮なため画質が劣化する
GIF画像圧縮保存形式、可逆圧縮であり、扱える色数が256色という制限がある
PNG画像圧縮保存形式、フルカラーが扱え可逆圧縮であり画像の劣化もない、圧縮率はJPEGが良い

4.4. 音声データの表現

4.4.1. アナログデータとディジタルデータ

アナログデータは波形一続きのデータで、ディジタルデータは波を数値で区切ったデータのこと。

4.4.2. 音声データのディジタルデータ

音声データはアナログ波形のデータであり、ディジタル化して数値表現する方式はPCMと呼ばれる。

PCMでは以下のステップでディジタル化を行う

  1. 標本化(サンプリング)
  2. 量子化
  3. 符号化

標本化

標本化はアナログデータを一定の単位時間で区切り、時間ごとの信号を標本として抽出する処理のこと。 サンプリング周波数はどの間隔で標本を得るか示すものである。

例:CDのサンプリング周波数が44100Hz,量子化ビット数が16ビットだとするとサンプリング周期は?

Ts = 1/44100

量子化

量子化はサンプリングしたデータを段階数に当てはめ整数値に置き換える処理のこと。 このときの量子化した段階の数を量子化ビット数と呼ぶ。

符号化

符号化は量子化で得たデータを2進数に直す処理のこと。

4.4.3. 音声データのファイル形式

種類説明
MP3音声を圧縮し保存する形式、人に聞こえないレベルの音を削減するなどをして不可逆の圧縮を行う
WAV録音したそのままの状態と同じ音質を保ったファイル形式、非圧縮
MIDIデジタル楽器の演奏データを保存できるファイル形式

4.5. 動画データの表現

4.5.1. クリッピング

クリッピングは特定の範囲を定義しそこからはみ出た範囲を表示しないようにする処理のこと。

4.5.2. 動画データの圧縮技術

動画等のマルチメディアデータはそのままであると膨大なデータ量となる。そのため通常は圧縮技術を用いてデータサイズを小さくし保存されるのが一般的である。

動画でよく用いられる圧縮方法はH.264/MPEG-4 AVCという圧縮方法で動画の変化した部分だけを送信することで少ないデータを送信できるというものである。

4.5.3. 動画データのファイル形式

種類説明
MPEG不可逆圧縮で動画を保存するファイル形式、ビデオCDにはMPEG-1、DVDにはMPEG-2、コンテンツ配信にはMPEG-4が用いられる
MP4MP4はMPEG4と音声のMP3を結合して格納しているファイルである

4.6. 3DCGデータの表現

3Dモデリングはコンピュータを使用して立体物データを計算して形成する技術のこと。

4.6.1. 3Dモデリングの用語

モーフィング

モーフィングはある状態からある状態に変化していく様子を表現するCG技法のこと。

ポリゴン

ポリゴンは立体の表面を形作る小さな多角形のことで、局面の最小単位のこと。3DCGではポリゴンの集まりで立体的な局面を表現する。

モーションキャプチャ

モーションキャプチャはセンサやカメラなどで人間などの動きをデータ化してコンピュータに取り込むこと。

5 - 5.ネットワーク

ネットワークの基本中のキホン

5.1. LANとWAN

5.1.1. LANとLANのアクセス制御方式

LAN

LANは狭い空間に構成される小さな構成のネットワークを指す。

CSMA/CD方式

CSMA/CD方式は回線が使用中か調べ、使用中でなければ送信する方式のこと。

CSMACD

LANの接続方式(トポロジ)

ネットワークトポロジー

トークンリングとトークンパッシング

リング型のLANの代表であるトークンリングはアクセス制御方式にトークンパッシングが採用されている。

トークンパッシング

無線LAN

物理的なケーブルを用いず、電波を用いて無線で通信を行うLANは無線LANであり、IEEE802.11として規格化されている。

電波が届く範囲であればどこでも繋げられますが、電波は盗聴される恐れがあるため暗号化などのセキュリティ対策が重要である。

5.1.2. WANとWANの技術

WAN

WANはLAN同士をつなぐ広域ネットワークのこと。 WANの利用にはNTTやKDDIといった電気通信事業者により提供されるサービスを利用する。

回線交換方式

回線交換方式では回線自体を交換機が繋ぎ通信路が固定される

パケット交換方式

パケット交換方式ではパケットという単位分割された通信データを交換機が回線へ送り出すことで通信路を形成する

5.1.3. WANの接続方式

種類説明
専用線拠点間を専用線で結ぶもの、高セキュリティだが高価
フレームリレ方式パケット交換方式をもとに伝送中の誤り制御を簡素化し高速化したもの。データ伝送単位は可変長フレームである
ATM交換方式パケット交換方式をもとにデータ転送単位を固定長のセル(53バイト)にすることで高速化を目指したもの、伝送遅延は小さい
広域イーサネットLANで使われるイーサネット技術を用いて接続するもの。高速かつコスト面のメリット大。近年主流の方式

5.2. 通信プロトコル

通信プロトコルはどのような手順で通信するかという取り決めのこと。 コンピュータ同士がやり取りするための規定プロコトルとも呼ばれる。

またプロコトルはたくさんの種類があり、7階層に分けたものはOSI基本参照モデルと呼ばれる。

5.2.1. OSI参照モデル

OSI

LAN装置とOSI参照モデル

LAN

ネットワークの伝送速度

ネットワークの伝送にかかる時間は下記式で求まる。

伝送時間 = データ量 / 回線速度

5.2.2. NIC

NIC(Network Interface Card)はコンピュータをネットワークに接続するための拡張カードでありLANボードとも呼ばれる。

役割としてはデータを電気信号に変換しケーブル上に流すことと受け取ることである。 また、IEEEにより規格化されたMACアドレスが振られており、世界中で自由重複しない番号で保障される。

MACアドレスは16進数表記で48バイトあり、先頭の24ビットが製造メーカ番号で、後ろの24ビットが製造番号を表す。

5.3. LAN間接続装置

5.3.1. LANで使用するネットワーク機器

リピータ

リピータは第1層(物理層)の中継機能を実現する装置である。 ケーブル中を流れる電気信号を増幅し、LANの延長距離を延ばす。

また、ネットワーク中につながっていてデータの流される範囲はセグメントであり、1つのセグメントに大量のコンピュータが繋がっている場合、パケット衝突が多発するようになり回線利用効率が低下する。

ブリッジ

ブリッジは第2層(データリンク層)の中継機能を実現する装置である。 セグメントの中継役として、流れてきたパケットのMACアドレス情報の確認と他方へのセグメントへパケットを伝送する。

ブリッジから転送される中継パケットはCSMA/CD方式であるため、衝突の発生が抑制されネットワーク使用効率が向上する。

ハブ

ハブはLANケーブルのポートを複数持つ集線装置である。

  • リピータハブ … リピータを複数束ねたものであり、パケットは無条件でポートへ流される
  • スイッチングハブ … ブリッジを複数束ねたものであり、パケットは宛先MACアドレスに該当するCPが繋がるポートのみに流される

ルータ

ルータは第3層(ネットワーク層)の中継機能を実現する装置である。 異なるネットワーク同士の中継役として、流れてきたパケットのIPアドレスを確認した後最適経路へパケットを転送する。

ルータは経路表(ルーティングテーブル)に基づいて、最適な転送先を選択する。これはルーティングと呼ばれる。

ゲートウェイ

ゲートウェイは第4層(トランスポート層)以上で異なるネットワーク間においてプロコトル変換による中継機能を提供する装置である。 ネットワーク間で使われるプロコトルの差異をこの装置が変換することで互いの接続を可能とする。

5.4. インターネットとプロトコル

5.4.1. TCP/IP

TCP/IPは第4層(トランスポート層)のTCPと第3層(ネットワーク層)のIPというプロトコルを組み合わせたものである。インターネットのデフォルトスタンダードとなっている。

IP

IPは経路制御を行い、ネットワーク間のパケット転送を行う。 なおコネクションレス(接続確認をとらない)型の通信であるため、通信品質は第4層プロトコルであるTCPやUDPに依存する。

5.4.2. TCPとUDP

TCP

TCP(Transmission Control Protocol)は通信相手とのコネクションを確立してデータを送受信するコネクション型のプロトコルである。 パケット順序や送信エラー時の再送などを制御し、送受信のデータの信頼性を保証する

UDP

UDP(User Datagram Protocol)は通信相手と事前に接続確認を取らずに一方的にパケットを送り付けるコネクションレス型の通信プロトコルである。 信頼性は欠けるが高速であり、映像配信サービスなどのリアルタイム性を重視する用途に適している。

5.4.2. TCP/IPのプロトコル

ネットワークの様々なサービスは第5層以降のプロコトルが提供する。 またそれらはプロコトルを処理するサーバにより提供される。

ポート番号

5.4.3. 電子メールの仕組み

電子メールはネットワーク上のメールサーバをポスト兼私書箱に見立て、テキストやファイルをやりとりする。 MIME(Multipurpose Internet Mail Extentions)という規格により、メールに様々なファイルを添付できるようになりました。

メールアドレス

メールアドレスはユーザ名とドメイン名で構成される。 ユーザ名とドメイン名は@で区切られる。

例:[email protected]

  • ドメイン名 ・・・ 住所にあたる情報
  • ユーザ名 ・・・ 名前にあたる情報

メール宛先の種類

電子メールは目的に応じて3種類の宛先を使い分けできる。

種類説明
TO宛先である相手のメールアドレスを記載する
CC一応見てほしい(返信不要)な相手のメールアドレスを記載する
BCC他者にわからない状態で一応見てほしい相手のメールアドレスを記載する

電子メールのプロトコル

  • SMTP … 電子メールを送信するプロコトル。SMTPに対応したサーバはSMTPサーバと呼ばれ、郵便ポストとメールの送信の役割を持つ
  • POPは … 電子メールをユーザが受信する際に使われるプロコトル。POPに対応したサーバはPOPサーバと呼ばれ、現在はPOP3がよく使われている。
  • IMAP … はPOPと同じく電子メールをユーザが受信する際に使われるプロコトル。POPと異なるのは送受信データはサーバで管理されるため、どのコンピュータからでも同じデータを参照できる。

MIME

MIMEは日本語などの2バイト文字や画像データなどのファイルの添付を行えるように、電子メールの機能を拡張したもの。 MIMEには暗号化や電子署名の機能を加えたS/MIMEという規格がある。

電子メールの文字化け

特定のコンピュータでしか表示できない文字は機種依存文字と呼ばれる。 メールなどでは機種依存文字の使用は避けられる。

5.5. WEB

5.5.1 WWW

WWW(World Wide Web)は多くの人が用いるサービスであり、「http://~」とアドレスを打ち込んだりして見るサービスのこと。 このサービスはWEBブラウザを用いて世界中にあるWEBサーバから文字や画像、音声、動画などを得ることができる。

5.5.2. HTTP

WEBの送受信にはHTTPが使用される。

インターネット

5.5.3. Webページの構成

URL

URL(Uniform Resource Locator)という表記を用いる。

url

HTML

WebページはHTML(HyperText Markup Language)により記述されている。

CSS

CSS(Cascade Style Sheat)はWebページのデザインやレイアウトを定義する言語。

5.5.4. Webの構成技術

CGI

CGI(Common Gateway Interface)はWebブラウザからの要求に応じ、Webサーバで外部プログラムを実行するために用いる仕組み。

CGI

Javaサーブレット

JavaサーブレットはJavaで書かれたプログラムを使用するWebアプリケーションのこと。

Javaアプレット

Javaアプレットはユーザのブラウザ上で動作するJavaで書かれたプログラムのこと。

JavaScript

JavaScriptは一般的にはWeb上に様々な動きを付けることができる言語のこと。

Ajax

AjaxはWebブラウザとWebページが非同期通信を行い、ページを更新することなく画面を更新する技術のこと。

5.6. IPアドレス

5.6.1. IPアドレス

IPv4アドレスは32ビットで表されるネットワーク上の住所であり、グローバルIPプライベートIP(ローカルIP)がある。この2つの関係は電話の外線と内線に似ている。

5.6.2. グローバルアドレスとプライベートアドレス

グローバルIPアドレス

グローバルIPアドレスはインターネットで用いるIPアドレスであり、NIC(Network Information Center)により管理される。

プライベートIPアドレス

プライベートIPアドレスはLAN内で用いれるIPアドレスであり、LAN内での重複が発生しなければシステム管理者が自由に割り当て可能。

5.6.3. IPアドレスの構成

IPアドレスの内容はネットワークアドレス部ホストアドレス部に分けられ、それぞれの関係は住所と名前に似ている。

  • ネットワークアドレス ・・・ どのネットワーク化を示す
  • ホストアドレス ・・・ どのコンピュータか示す

5.6.4. IPアドレスのクラス

IPアドレスはクラスA、クラスB、クラスCの3クラスに分かれており、それぞれ32ビットの内何ビットをネットワークアドレス部に振るかの規定となっている。

区分説明
クラスA0.0.0.0 ~ 127.255.255.255: 大規模ネットワーク用
クラスB128.0.0.0 ~ 191.255.255.255: 中規模ネットワーク用
クラスC192.0.0.0 ~ 223.255.255.255: 小規模ネットワーク用

5.6.5. ポート番号

IPアドレスではコンピュータの識別はできても、そのサーバプログラムに宛てたものかまでは特定できない。

そこでその接続口としてポート番号という0~65535までの接続口をプログラム上で用意される。

ウェルノウンポート

ウェルノウンポートは0~1023までのポートでよく使用されるサービスのため予約されているポート番号のこと。

5.6.6. ブロードキャスト

同一ネットワーク内の全てのホストに一斉に同じデータを送信することはブロードキャストと呼ばれる。

また特定の一台に送信することはユニキャスト、複数でなお且つ決められた範囲の複数ホストに送信する場合はマルチキャストと呼ばれる。

5.6.7. サブネットマスクによるネットワーク分割

小規模ネットワークのクラスCにおいては最大254台のホストを扱えます。そこまでホストがいらず、部門ごとにネットワークを分割するにはサブネットマスクを用います。

5.6.8. MACアドレスとIPアドレスの違い

データの配送はイーサネットが行い、近距離を繋ぐのに用いられるのがMACアドレス、中継はIPアドレスが行います。

MAC

5.6.9. DHCPの仕組み

DHCP(Dynamic Host Configuration Protocol) を用いるとIPアドレスの割り当てと言ったネットワークの設定作業を自動化することができる。

5.6.10. NATとIPマスカレード

NATやIPマスカレードはプライベートIPをグローバルIPに変換する技術であり、ルータに実装されている。

NAT

グローバルIPとプライベートIPを対で結び付けて相互に変換を行う。また同時にインターネット接続できるのはグローバルIPの数分のみである。

IPマスカレード(NAPT)

グローバルIPに複数のプライベートIPを結び付け、一対複数の変換を行う。IPアドレス変換時にポート番号を合わせ書き換えることで、1つのグローバルIPアドレスで複数のコンピュータが同時にインターネットに接続可能。

5.6.11. ドメイン名とDNS

ドメイン名はIPアドレスを文字で別名を付けたものである。 「www.yahoo.co.jp」などと記載される。

ドメイン名とIPアドレスを関連付け管理しているのがDNSサーバであり、ブラウザなどではドメイン名やIPアドレスをDNSサーバに尋ねると、それに応じたIPアドレスやドメイン名が返る。

5.7. ネットワーク伝送速度

5.7.1. データ伝送速度

通信速度は1秒間に何Bitのデータを送れるかを示したもの。 単位は**Bit/s(bps)**で示される。

5.7.2. データ伝送時間の計算方法

データ伝送時間 = データ伝送量 / (回線速度×回線利用率)

5.8. 誤り制御

5.8.1. データの誤り制御

データ誤りはビットがノイズや歪により、異なる値となることである。 データや誤りを確実に防ぐ方法はなく、パリティチェックやCRC(巡回冗長検査) などの手法により誤りを検出し訂正を行う。

5.8.2. パリティチェック

パリティチェックでは送信するビット列に対しパリティビットと呼ばれる検査用のビットを付加することでデータや誤りを検出する。

特徴として1ビットの誤りを検出することができるだけである。誤り訂正ができないという問題もある。

パリティ

5.8.3. 偶数パリティと奇数パリティ

偶数パリティ

ビット列中の1の数が偶数になるようにパリティビットをセットする。

奇数パリティ

ビット列中の1の数が奇数になるようにパリティビットをセットする。

5.8.4. 垂直パリティと水平パリティ

パリティビットはどの方向に付加するかにより、水平パリティと垂直パリティに分かれる。

垂直水平パリティチェック

垂直水平パリティチェックであればどのビット位置が誤りであるか検出することができる。ただし2Bit以上のビット誤りが発生いs多場合は誤りが検出できない場合がある。

垂直

5.8.5. CRC(巡回冗長検査)

CRCはビット列を特定の式(生成多項式)で割り、余りをチェック用のデータとして付加する手法。 この方式ではデータ誤り訂正はできないが、連続したビット誤りなどを検出することが可能である。

5.8.6. ハミング符号方式

ハミング符号方式は同一データに複数の方法でチェックコードを付ける方法のこと。

5.8.7. チェックディジット

チェックディジットは元のコードに負荷される数字や文字のことでコードの入力値が間違っていないか確かめるために使用される。

6 - 6.セキュリティ

情報セキュリティのキホン

6.1. 情報セキュリティ

6.1.1. セキュリティマネジメントの3要素

情報セキュリティでは3つの要素を管理してうまくバランスさせることが必要とされる。

  • 機密性 … 情報が漏洩しないようにする
  • 完全性 … 情報が書き換えられず完全な状態を保つようにする
  • 可用性 … 利用者が必要なときに必要な情報を使用できるようにする

6.1.2. 情報セキュリティマネジメントシステム

情報セキュリティマネジメントシステムはJIS Q 27000として用語を定義したもの。

  • 真正性 … 利用者やシステムの振る舞いが明確であり、なりすましや偽情報でないことを証明すること
  • 信頼性 … システムが意図したとおりに確実に動くこと
  • 責任追跡性 … 情報資産に行われた操作について、ユーザと動作を一意に特定でき過去に遡って追跡できること
  • 否認防止 … ある活動または出来事が発生したとき、操作が行われた事実や発生した事象を証明できること

6.1.3. セキュリティポリシ

組織としてセキュリティに関してどう取り組むかを周知するものはセキュリティポリシとなる。

  • 基本方針 … 情報セキュリティに対して組織での基本方針を定める
  • 対策基準 … 基本方針を実現するために行う対策や基準を定める
  • 実行手順 … 日々の業務でどのように実施するか具体的な手順を定める

6.2. 情報資産における脅威

情報資産を取り巻く脅威には技術的脅威人的脅威物理的脅威の3種類がある。

6.2.1. 技術的脅威

種類説明
パスワードリスト攻撃どこかから入手したIDとパスワードのリストを用いて他のサイトへのログインを試みる手法
ブルートフォース攻撃特定のIDに対し、パスワードとして使える文字の組み合わせを片っ端から試す手法で、総当たり攻撃と言われます
リバースブルートフォースト攻撃ブルートフォース攻撃の逆でパスワードが固定でIDを片っ端から試す手法です
レインボー攻撃ハッシュ値から元のパスワード文字列を解析する手法
SQLインジェクションユーザの入力をデータベースに問い合わせ処理を行うWebサイトで悪意あのある問い合わせや操作を行うSQL文を埋め込みデータベースのデータの改ざんや不正取得を行う手法
DNSキャッシュポイズニングDNSのキャッシュ機能を悪用し偽のドメインを覚えさせることで、偽装サイトへ誘導する手法

人的脅威

種類説明
ソーシャルエンジニアリング人間の心理の隙をついて情報を盗む行為のこと
なりすまし盗んだIDやパスワードを使用して、ネットワーク上でその人のふりをすること
サラミ法不正行為が表面化しない程度に多数の資産から少しづつ詐取する方法

物理的脅威

物理的脅威は天候や地震などの災害、またはコンピュータの故障など、コンピュータが物理的に損害を受けて情報を失う脅威のこと。

6.3. リスクアセスメント

6.3.1. リスクとリスクアセスメント

  • リスク … 様々な脅威が発生する可能性のこと
  • リスクアセスメント … どんなリスクがあるのか洗い出し、発生する可能性のある損害を明らかにしたうえで対応策を考えること

6.3.2. リスク対策

リスクの対策には以下の方法がある。

種類説明
リスク回避リスクの原因を排除すること
リスク移転(リスク共有)リスクを他人に肩代わりしてもらうこと
リスク軽減リスクによる損失を許容範囲内に軽減させること
リスク保有対策をしないでリスクをそのままにしておくこと

6.3.3. セキュリティパイデザイン

セキュリティパイデザインはシステムの規格/設計の段階からセキュリティを確保するためのセキュリティ対策を検討すること

6.3.4. 情報セキュリティマネジメントシステム(ISMS)

情報セキュリティマネジメントシステム(ISMS)は情報セキュリティ維持のため、組織が情報を適切に管理し機密を守るための仕組みを確立し、継続的な運用/改善をしていくこと。 ISMSの確立手順は以下の流れで行う。

  1. リスクの分割
  2. リスクの評価
  3. リスク対応のための管理目的/管理策の選択
  4. 適用宣言書の作成

6.4. コンピュータウィルス

6.4.1. コンピュータウィルスの定義

コンピュータウィルスは以下の3つの基準のうち1つを満たすとコンピュータウィルスと定義づけられる。(経産省基準)

  • 自己伝染機能
  • 潜伏機能
  • 発病機能

6.4.2. コンピュータウィルスの種類

種類説明
狭義のウィルス他のプログラムに寄生し、その機能を利用する際に発病するもの
マクロウィルスアプリケーションのもつマクロ機能を悪用したものでデータファイルに寄生し感染を広げる
ワーム事故単身で複製を生成し、ネットワークを介し感染を広めるものであり作成が容易である
トロイの木馬有用なプログラムであるように見せかけて、実行をユーザに促しその裏で不正な処理を行うもの

マルウェア

種類説明
スパイウェア情報収集を目的としたプログラムで、個人情報を収集し外部に送信する
ボット感染したコンピュータをボット制作者の指示通りに動かすものである

C&Cサーバ

C&Cサーバはボットネットは以下にあるコンピュータに指令を送るサーバのこと。ボットネットはウィルスに感染したコンピュータ群で構成されたネットワークのこと。

6.4.3. コンピュータウィルスへの対策

ウィルス対策ソフト

ウィルス対策ソフトはコンピュータに入ったデータをスキャンし、データに問題がないかをチエックする。

ウィルス対策ソフトがウィルスを検出するためには既知のウィルス情報を記したウィルス定義ファイルが必要であり、これを常に最新状態に保つことが重要である。

パターンマッチング方式

既知のウィルス情報(シグネチャーコード)を使用してウィルスの検知や駆除を行う方法はパターンマッチング方式と呼ばれる。

ビヘイビア法(動的ヒューリスティック法)

ビヘイビア法は実行中のプログラムの挙動を監視して、不審な処理が行われていないか検査する方法であり、未知のウィルスを検出できる。

方法としては監視下で直接実行させて不審な動きがあるプログラムは即座に停止させ、仮想環境でも実行させて危険な行動か監視する。

6.5. 暗号化と認証

6.5.1. データの暗号化

暗号化はデータを第三者に解読できない暗号文に変換する方法のこと。 復号は暗号化したデータをもとに戻すことをいう。

6.5.2. 共通鍵暗号方式と公開鍵暗号方式

共通鍵暗号方式

共通鍵暗号方式は送り手と受け手が同じ鍵を用いる暗号化方式

公開暗号化方式

公開鍵暗号方式は公開鍵という公用の鍵を持ち、公用鍵は公開して暗号化し、複合には秘密鍵を用いる方式

共通鍵暗号方式よりも暗号化や復号に大変時間がかかる特徴がある。

6.5.3. ディジタル署名

暗号化にはデータ全体を暗号化するのではなく、ハッシュ化という手法で短い要約データ(メッセージダイジェスト)を作成しそれを暗号化することでディジタル署名とする。

元データが同じ場合、ハッシュ関数は必ず同じメッセージダイジェストを生成するため、復号結果と受信したデータから新たに取得したメッセージダイジェストを比較して一緒であれば改ざんしていないと言える。

6.5.4. CA(認証局)

認証局(CA)は公開鍵がその本人のものであるか証明する機関のこと。

認証局に公開鍵を登録し、登録した鍵によりその身分を保証するという仕組みとなる。 この認証機関と公開鍵暗号技術を用いて通信の安全性を保証する仕組みは公開鍵基盤(PKI) と呼ばれる。

6.5.5. SSL

SSLはサーバとクライアント間の通信を暗号化するプロトコルのこと。

6.6.6. IPSec

IPsecはインターネットで暗号通信を行うためのネットワーク層で動作するプロトコルの総称AHESPの2種類がある。

種類説明
AHパケットが改ざんされていないか認証を行う
ESPペイロードと呼ばれる通信内容部分を暗号化し認証や暗号化情報を付与する

6.6.7. S/MIME

S/MIMEは電子メールの公開鍵暗号方式による暗号化とディジタル署名について定めた規格。この仕組みにより確かな送信者からのメールであることと改ざんされていないことを保証できる。

6.6. ネットワークセキュリティ

6.6.1. ユーザ認証

コンピュータシステムの利用にあたりユーザ認証を行うことでセキュリティを保つ。

ユーザ認証をパスしてシステムを利用可能な状態にすることはログイン、システムの利用を終了しログイン状態を打ち切ることはログアウトと呼ばれる。

ユーザ認識の手法

認証手法説明
ユーザIDとパスワードによる認証ユーザIDとパスワードの組み合わせを用いて個人を識別する認識方法である。
CAPTCHA認証一部をゆがめた画像から文字を認識して入力させる技術
バイオメトリクス認証指紋や声帯や虹彩などの身体的特徴を使って個人を認証する方法であり、生体認証とも呼ばれる。
ワンタイムパスワード一度限り有効な使い捨てのパスワードを用いる認証方法。
コールバックサーバに接続する場合、いったんアクセスした後に回線を切り、逆にサーバからコールバックさせることでアクセス権を確認する認証方法。

6.6.2. ネットワークのセキュリティ対策

ファイヤーウォール

LANの中と外を仕切る役割をするのがファイヤーウォールであり、機能のことを指すため定まった設置方法はない。 ファイヤウォールを設置するとDMZと呼ばれる内部ネットワークと外部ネットワークの間にどちらからも隔離されたネットワークができる。

実現方法にはパケットフィルタリングアプリケーションゲートウェイがある。

パケットフィルタリング

パケットフィルタリングではパケットのヘッダ情報を見て、通過の可否を判定する。 通常アプリケーションが提供するサービスはプロコトルとポート番号で区別されるため、通過させるサービスを選択することとなる。

アプリケーションゲートウェイ

アプリケーションゲートウェイはプロキシサーバとも呼ばれ外部とのやり取りを代行して行う機能である。

通信する側から見るとプロキシサーバしか見えないため、LAN内のコンピュータにが不正アクセスの標的になることを防ぐことができます。

アプリケーションゲートウェイ型のファイヤーウォールにはWAF(Web Application Firewall) があり、Webアプリケーションに対する外部アクセスを監視するもので、パケットフィルタリングと異なり、通信データの中身までチェックすることで悪意を持った攻撃を検知する。

ペネトレーションテスト

ペネトレーションテストは既存手法を用いて実際に攻撃を行い、これによりシステムのセキュリティホールや設定ミスと言った脆弱性の有無を確認するテストのこと。

侵入検知システム

侵入検知システムはIDSとも呼ばれ、コンピュータやネットワークに対する不正行為を検出し通知するシステム。

rootkit

rootkit(ルートキット) は攻撃者が不正アクセスに成功したコンピュータを制御できるようにするソフトウェアの集合のこと。

rootkitには侵入の痕跡を隠蔽するログ改ざんツールや、リモートからの侵入を簡単にするバックドアツール、改ざんされたシステムツール群などが含まれる。

SIEM

SIEM(Security Information and Event Management)はファイヤウォールやIDS、プロキシなどからログを集めて総合的に分析すること。

SIEMツールは異常を自動検知し、管理者が迅速に対応できるようにする支援する仕組みのこと。

7 - 7.データベース

データベースのキホン

7.1. データベースの基礎

7.1.1. DBMSと関係データベース

DBMSはデータベース管理システムのことであり、データベースの定義や操作制御などの機能を持つミドルウェアである。

データベースには関係型階層型ネットワーク型の3種類があり、関係型が現在の主流である。

階層型データベース

階層型データベースはデータを木のような形の階層構造で表す

関係型データベース

関係型データベースはデータを行と列による二次元表で表し福栖の表を組み合わせてデータを管理するもの。**リレーショナルデータベース(RDB)**とも呼ばれる。

ネットワーク型データベース

ネットワーク型データベースはデータを網目のような構造で表す

7.2. 関係データベース

7.2.1. 関係型データベース

関係データベースは表の形でデータを管理するデータベースであり、表で構成される。 また関係データベースはリレーショナルデータベース(RDB) と呼ばれる。

種類説明
表(テーブル)複数のデータを収容する場所
行(レコード)1件分のデータを表す
列(フィールド)データを構成する項目を表す

7.2.2. 主キーと外部キー

主キー

主キーは行を一意に識別するための列のこと。 また、値が空でなく他の行と重複しないことは主キー制約と呼ばれる。

外部キー

外部キーは表の列のうち他の表の主キーとして使われている列のこと。

外部キー

7.3. 表の操作

7.3.1. 関係演算

関係演算は表の中から特定の行や列を取り出したり、表と表をくっつけ新しい表を作り出したりする演算のことである。

関係演算には選択、射影、結合などがある。

  • 選択 ・・・ 行を取り出す演算
  • 射影 ・・・ 列を取り出す演算
  • 結合 ・・・ 表同士を結合する演算

7.3.2. ソートマージ結合法

ソートマージ結合法は結合する列の値で並べ替えたそれぞれの表の行を先頭から準備結合する方法のこと。

7.4. データの正規化

7.4.1. 正規化とは

関係データベースにおいて蓄積データの重複や矛盾が発生しないように最適化するのが一般的である。

同じ内容を表のあちらこちらに書かないように表を分割するなどすることは正規化と呼ばれる。

データ

7.4.2. 第N正規化

非正規形(正規化を行っていない元の形の表)を何回か正規化を行い最適化行う。

正規化説明
非正規形正規化されていない繰り返し部分を持つ表
第1正規形繰り返し部分を分離させ独立したレコードを持つ表
第2正規形部分関数従属しているところを切り出した表
第3正規形主キー以外の列に関数従属している列を切り出した表

第1正規形

非正規形の表から繰り返し部分を取り除いたものは第1正規形となる。

第2正規形

第1正規形の表から部分関数従属している列を分離した表が第2正規形の表である。

第3正規形

第2正規形の表から主キー以外の列に関数従属している列を分離した表が第3正規形の表である。

7.4.3. 関数従属と部分関数従属

  • 関数従属 ・・・ 主キーが決まったとき列が一意に定まる関係
  • 部分関数従属 ・・・ 複合キー日舞の項目のみで列の値が一意に定まる関係

関数

7.5. SQL

7.5.1. SQLによるデータベース操作

SQL(Structured Query Language)はDBMSへ指示を伝えるために用いる言語である。 SQLには表の定義(CREATE)やレコードの挿入(INSERT)、削除(DELETE)、レコードの一部を更新(UPDATE)する命令がある。

これらの命令はスキーマ定義や表の作成を担当するデータ定義言語(DDL) とデータの抽出や挿入、更新、削除といった操作を担当するデータ操作言語(DML) に区別できる。

7.5.2. SELECT文

SELECT文の基本書式は以下の通り。

SELECT 列名 FROM 表名 WHERE 条件

特定の列の抽出(射影)

SELECT 列名 FROM 表名

特定の行の抽出(選択)

SELECT * FROM 表名 WHERE 条件式

なお条件式には比較演算子や論理演算子を用いる。

表同士の結合(結合)

SELECT * FROM 表名1, 表名2 WHERE 表名1.ID = 表名2.ID

7.5.3. ORDER文

ORDER文は抽出結果を整列させておきたい場合に用いる。

ORDER BY 列名 ASC(or DESC)

ASC:昇順、DESC:降順

例)商品表の価格順に商品表を並べる場合

SELECT * FROM 商品表 ORDER BY 単価

7.5.4. 関数を使った集計

SQLにはデータを取り出す際に集計を行う様々な関数が用意されている。

関数説明
MAX(列名)列の最大値を求める
MIN(列名)列の最小値を求める
AVG(列名)列の平均値を求める
SUM(列名)列の合計を求める
COUNT(*)行数を求める
COUNT(列名)列の値が入っている行の数を求める

例)扱う商品の数を取り出す場合 SELECT COUNT(*) FROM 表

7.5.5. GROUP文

グループ化は特定の列が一致する項目をまとめて1つにすることを指す。

グループ化には以下文を用いる。

GROUP BY 列名

グループの条件絞り込み

グループ化なおかつそこから条件を絞り込む場合はHAVINGを用いる。

GROUP BY 列名 HAVING 絞り込み条件

7.6. データベース管理システム

7.6.1. データベース管理システム(DBMS)

7.6.2. トランザクション管理機能

トランザクションはデータベースにおいて一連の処理をひとまとめにしたもの。複数人がデータベースにアクセスし同時変更などをした際にデータ内容に不整合が生じる問題からデータベースを守る処理の1つ。

7.6.3. 排他制御機能

排他制御は処理中のデータをロックし、他の人が読み書きできないようにする機能である。複数人がデータベースにアクセスし同時変更などをした際にデータ内容に不整合が生じる問題からデータベースを守る処理の1つ。

ロックする方法には共有ロックと専有ロックがある。

共有ロック

各ユーザはデータを読むことはできるが、書き込みができない状態。 データベースを参照する際にかけるロックのこと。

専有ロック

他ユーザはデータを読み書きすることができない。 データベースを更新する際にかけるロックのこと。

7.6.4. デットロック

デットロックはロック機能を使いすぎると起こる可能性があるもの。

デットロック

7.6.5. ACID特性

DBMSではトランザクション処理に対して4つの特性(ACID特性)が必要とされる。

ACID

7.6.6. データベースのリカバリ機能

ロールフォワード

データベース自体が突然障害に見舞われた場合、ロールフォワードと呼ばれるバックアップ以降の更新ジャーナルから更新情報を取得し、データベースを障害発生直前の状態に復旧させる一連の処理を行う。

ロールバック

トランザクション処理中に障害が発生し更新に失敗した場合、データベース更新前の状態を更新前ジャーナルから取得し、ロールバックと呼ばれるデータベースをトランザクション処理直前の状態に戻す処理を行う。

7.6.7. 再編成機能

再編成機能はアクセス効率を向上させるための機能で、データベースが頻繁に更新されるとデータの物理的な格納位置が不規則になるといったものを修復するものである。

7.6.8. インデックス機能

DBMSはインデックスを用いてデータ検索を高速化する機能がある。

オプティマイザ

オプティマイザはSQLを実行するときに実行時間を最小化するように処理の方法を決める機能のこと。データ検索などのときにテーブル全体にアクセスするのとインデックスを使用して探すのどちらが効率が良いか予測して選択する。

7.7. データベースの応用技術

7.7.1. 分散データベースと2相コミット

物理的に分かれている複数のデータベースを見かけ上1つのデータベースとして扱えるようにしたシステムは分散データベースシステムと呼ばれる。

これはトランザクション処理が各サイトにわたり行われるので、全体の同期をとりコミット、ロールバックを取らないと、データの整合性が取れなくなる恐れがある。 そのため全サイトに問い合わせを行い、その結果を見てコミット、ロールバックを行う。この処理は2相コミットと呼ばれる。

8 - 8.アルゴリズムとデータ構造

各種アルゴリズム

8. アルゴリズムとデータ構造

8.1. アルゴリズム

8.1.1. アルゴリズムとは

アルゴリズムは問題を解決したり目標を達成するまでの一連の手順のことを指す。 データをどのような単位で扱い、どのようなタイミングで処理するかといったアルゴリズムの工夫により無駄のない効率の良いプログラムを作成できる。

8.1.2. フローチャート

アルゴリズムの作成にはフローチャートを用いて視覚化する。 フローチャートの処理には順次・選択・繰り返しがある。

フローチャート

8.1.3. 変数と代入

変数はプログラムで称する文字や数字を格納する入れ物のこと。 また、変数にデータを入れる処理は代入と呼ばれる。

8.1.4. トレース

トレースは処理を順番にたどって変数の値や実行結果を確認し、プログラムが正しく動作しているか確認すること

8.1.5. 擬似言語

擬似言語はアルゴリズムを記述する方法でフローチャートのような図形を使わず文章や記号でアルゴリズムを記述する方法

疑似言語

8.2. 配列

8.2.1. データ構造

データ構造は扱うデータをどのような方法で保持するか決めたもののこと。 主なデータ構造には配列・キュー・スタック・リスト構造・木構造がある。 なおどの構造を用いるかにより処理効率が大きく変わる。

8.2.2. 配列

配列は同じ型のデータの集まりを順番に並べたデータ構造のこと。 配列はデータを整理したり探したりするときによく使用され、データの場所を表す添え字はインデックス、配列データの各入れ物は要素と呼ばれる。

8.3. キューとスタック

8.3.1. キュー

キューは待ち行列が前から順番にさばくように1次元配列で1列に格納されたデータを入れた順番に取り出すデータ構造のこと。 このデータの取り出し方はFIFO(First In First Out)を呼ばれる。 データを入れることはエンキュー、取り出すことはデキューと言われる。

キュー

8.3.2. スタック

スタックは最後に入れたデータから先に取り出す、新しいデータから順番に使う構造のこと。 このデータの取り出し方はLIFO(Last In First Out)を呼ばれる。 データを入れることはプッシュ、取り出すことはホップと言われる。

スタック

8.4. リスト構造

8.4.1. リスト構造

リスト構造はデータの格納場所が書かれたポインタを使い、離れた場所にあるデータ同士をつないで順番に並べたデータ構造のこと。線形リストや結合リストとも呼ばれる。

リスト構造ではデータとポインタをセットにして扱い、先頭から順にポインタをたどることで各データにアクセスする。 途中のデータ追加や削除が多い処理はリスト構造が配列よりも適している。

リスト構造

リスト構造の特徴

リスト構造ではデータ間をポイントで繋いでいるため、データの追加や削除がポインタだけで済み、要素戸数や位置によらず短期間で処理できる特徴がある。

また、リストの特徴として、ポインタ順にデータをたどるため、配列のように添え字を使い各データに直接アクセスする使い方はできない。

8.4.2. リスト構造の種類

単方向連結リスト

単方向連結リストはデータの後ろにポインタを1つだけ持つリスト構造のこと。

単方向連結リスト

双方向連結リスト

双方向連結リストは前後のデータへのポインタを持つリスト構造のこと。

双方向連結リスト

循環連結リスト

循環連結リストは単方向リストと同じで次のデータへのポインタを持つリストのこと。 単方向リストとの違いは最後尾のデータが先頭データへのポインタを持っているところにある。

循環連結リスト

8.5. 木構造

8.5.1. 木構造とは

木構造はデータ同紙に階層的な親子関係や主従関係を持たせたデータ構造のこと。OSのファイル管理構成などは木構造になっている。

木構造

木構造の各データは節(ノード)、木構造の根っこ部分を根(ルート)、一番下の部分はと呼ばれる。また各データは枝でつながっている。

木構造ではデータは親子関係になっており、結ばれた上の節を親、下の節を子と呼ぶ。

8.5.2. 2分木

2分木は根やそれぞれの節から出る枝がすべて2本以下の木のこと。 また、根から葉までの枝の数がすべて一緒の2分木は完全2分木という。

2分木

8.5.3. 2分探索木

2分探索木はどの節においても常に「親のデータが左部分木のデータより大きく、右部分木のデータよりも小さい」条件を満たした状態の木(「左<親<右」)のこと。

2分探索木

2分探索木のデータ探索

2分探索木の中にあるデータを最短で探し出すには、探しているデータの根の値を比較する。この探索ではデータが見つかるか、データが見つからず節がなくなるまで繰り返すことでデータを探索できる。

節の追加や削除による2分探索木の再構成

新たな節を追加する場合はデータ探索と同様の方法で正しい地に追加できる。 また、2分探索木から節を削除する場合は節の削除により2分探索木の性質を失わないように、2分探索木を再構成する必要がある。

8.5.4. ヒープ

ヒープは2分木のうち全ての節で「親>子」が成り立つ状態の木のこと。

8.6. 探索アルゴリズム

8.6.1. 探索とは

探索(サーチ)は沢山のデータから目的のデータを見つける事を指す。 データの探索にはデータ構造の特徴にあったアルゴリズムを使う必要があり、代表的なものには線形探索法2分探索法ハッシュ探索法がある。

8.6.2. 線形探索法

線形探索法(リニアサーチ)は先頭から順に探索していく方法のこと。 線形探索法では番兵と呼ばれる目的のデータを配列最後尾につけることでフロー処理の簡素化を行える。

特徴は以下の通り。

  • 整列されていないデータの探索に向いている
  • 総当たり探索になる
  • 大量のデータ探索には不向き

なお平均比較回数(平均探索回数)は(n+1)/2回(nはデータ範囲の最大値)となる。

線形探索法

8.6.3. 2分探索法

2分探索法(バイナリサーチ)はあらかじめデータが小さい順か大きい順に整列されている際に使用されるアルゴリズム。手順は以下の通り。

  1. データ構造の真ん中のデータを求めているデータと比較する
  2. 求めているデータに近い方の範囲(右か左)を絞り込む
  3. 絞り込んだ範囲の真ん中のデータと求めているデータを比較する
  4. 1から3を繰り返すと求めたいデータが求まる

なお平均比較回数(平均探索回数)はlog2N回(nはデータ範囲の最大値)となる。

2分探索法

8.6.4. ハッシュ探索法

ハッシュ探索法はデータの格納場所のアドレス値をあらかじめ関数を使った計算で決めておくアルゴリズムのこと。また格納先を決めるために用いられる関数はハッシュ関数、ハッシュ関数により求められるアドレスの値をハッシュ値という。

特徴として、衝突(シノニム)が発生しない限りハッシュ探索法では検索データは1回で見つかる

なお衝突が起こった際は各配列の各要素をリスト構造にして新しい場所に格納する

ハッシュ

8.7. 整列アルゴリズム

データを小さい順(昇順)または大きい順(降順)に並べることは整列と呼ばれる。

8.7.1. 交換法(バブルソート)

バブルソートでは隣接するデータの大小を比較し、必要に応じて入れ替えることで全体を整列させる

データ比較回数はn(n-1)/2回となる。

def bubble_sort(lst):
    n = len(lst)
    for i in range(n):
        for j in range(n-1):
            if lst[j] >= lst[j+1]:
                lst[j], lst[j+1] = lst[j+1], lst[j]
    return lst

8.7.2. 選択法(選択ソート)

選択ソートでは対象とするデータの中から最小値(or最大値)のデータを取り出し、先頭データと交換しこれを1つずつずらして繰り返すことで整列させる

データ比較回数はn(n-1)/2回となる。

def selection_sort(lst):
    n = len(lst)
    for i in range(0, n-1):
        min = i
        for j in range(i+1, n):
            if lst[j] < lst[min]:
                min = j
        lst[i], lst[min] = lst[min], lst[i] 
    return lst

8.7.3. 挿入法(挿入ソート)

挿入ソートではデータ列を「整列済みのもの」と「未整列なもの」に分け、未整列の側からひとつずつ整列済みの列の適切な位置に挿入し、全体を整列させる手法。

def insertion_sort(lst):
    for i in range(1, len(lst)):
        tmp = lst[i]
        j = i - 1

        while j >= 0 and lst[j] > tmp:
            lst[j+1] = lst[j]
            j -= 1
        lst[j+1] = tmp
    return lst

8.7.4. 高度な整列アルゴリズム

シェルソート

シェルソートは挿入ソートを改造したもので、ある一定間隔おきに取り出した要素からなる部分列を整列しさらに間隔を詰めて同様の操作を行い、間隔が1になるまで繰り返して整列させる手法。

シェルソート

クイックソート

中間的な基準値を決めてそれよりも大きな値を集めた区分と小さな値を集めた区分に要素を振り分けてこれを繰り返すことで整列する手法。

クイックソート

ヒープソート

未整列データを順序木(ヒープ)に構成し、そこから最大値(or最小値)を取り出して既整列に移す。これを繰り返して未整列部分をなくしていって整列する手法。

8.8. 再帰アルゴリズム

再帰アルゴリズムはある処理を定義した関数Aの中で同じ関数Aを呼び出して処理する再帰呼び出しを用いたアルゴリズムのこと。

8.9. アルゴリズムの実行時間

8.9.1. オーダ記法(O記法)

オーダ記法はアルゴリズムの計算量(実行時間)をO(式) の形で表すこと。

各アルゴリズムのオーダ

平均計算時間≒オーダ

Image

9 - 9.システム構成と故障対策

システムの信頼性/耐障害性を高めるための工夫

9.1. システムの処理形態

9.1.1. システムの構成方法

集中処理

集中処理は1台のコンピュータに処理をさせる方式。 特徴は以下の通り。

  • 管理しやすい
  • システムがダウンしたら全体が落ちる

分散処理

分散処理は複数のコンピュータに分散して処理させる方式。 特徴は以下の通り。

  • いずれかのコンピュータで障害が発生してもシステム維持できる
  • メンテナンスにコストがかかる

9.1.2. システムの処理タイミング

リアルタイム処理(オンライントランザクション処理)

リアルタイム処理は要求された処理をすぐに行う方法のこと。 リアルタイム処理を行うシステムは決められた時刻までに処理を終了することを要求されるが、その厳密性により2つの種類に分けられる。

  • ハードリアルタイムシステム
    • 決められた時刻までに処理を終了できない場合に、システムや使う人に対し致命的なダメージが発生する
  • ソフトリアルタイムシステム
    • 決められた時刻までに終了できなくても致命的な問題は発生しない

バッチ処理

バッチ処理はまとまったデータを一括で処理すること。 リアルタイムにすぐに反映する必要のない処理の場合、一定期間ごとに処理をまとめて実行する。

9.2. クライアントサーバシステム

9.2.1. クライアントサーバシステムの構成

クライアントサーバシステムは現在の主流の処理形態。 これは基本的には分散処理を行い、ネットワーク上の役割を2つに分け集中して管理や処理を行う部分をサーバとして残すことが特徴

9.2.2. 3層クライアントサーバシステム

クライアントサーバシステムの機能をプレゼンテーション層、ファンクション層(アプリケーション層)、データ層の3つに分けて構成するシステムのこと。 これに対し通常のクライアントサーバシステムのことは2層クライアントサーバシステムと呼ばれている。

3層クライアントサーバシステムでは各層の役割が独立しており、クライアントの環境が異なっても同じ機能を提供できる特徴がある。

9.2.3. シンクライアントシステムとP2P

シンクライアント

シンクライアントにおけるクライアント側の端末は入力や表示部分を担当するだけで情報の処理や保管はすべてサーバに任せる。

ピアツーピア(P2P)

ピアツーピアは完全分散処理型のシステム。これはネットワーク上で協調動作するコンピュータ同士が対等な関係でやり取りをするものでサーバなどの一次元的に管理するものが必要としない。

9.3. 高信頼化システムの構成

9.3.1. 2系統のシステム構成

デュアルシステム

デュアルシステムは2組のシステムを使って信頼性を高めるもの

このシステムでは2組のシステムが同じ処理を行いながら、処理結果を互いに突き合わせて誤動作していないかを監視する。

いずれかが故障した場合に異常の発生したシステムを切り離し、残る片方だけでそのままの処理を継続する。

デュプレックスシステム

デュプレックスシステムは2組のシステムを用意するのはデュアルシステムと同じである。

このシステムでは主系が正常に動作している間、従系ではリアルタイム性の求められないバッチ処理などの作業を担当する。また主系が故障した場合には従系が主系の処理を代替するように切り替わる

方式説明
ホットスタンバイあらかじめ主系の処理を引き継ぐために必要なプログラムを起動しておくことで瞬時に切り替える待機方法
コールドスタンバイ従系は出番が来るまで別の作業をしていたり電源がOFFだったりして、切り替え時に時間がかかる。なおその分コストダウンが可能

9.3.2. 負荷分散のシステム構成

マルチプロセッサシステム

マルチプロセッサシステムは複数のCPUを用意するシステムのこと。 これにより処理を分散させ、システム全体の処理時間を短縮する。

マルチプロセッサシステムは主記憶を共有するかしないかにより2種類に分かれる。

方式説明
密結合マルチプロセッサシステム複数のCPUが1つの主記憶を共有し、単一のOSで制御される方式
疎結合マルチプロセッサシステムCPU毎に自分専用の主記憶をもち、それぞれが独立したOSで制御される方式

クラスタリング

クラスタリングは複数のコンピュータを組み合わせて信頼性の高いシステムを構築する手法のこと。

9.4. システムの信頼性設計

9.4.1. 故障対策の基準

フェールトアホイダンス

フェールトアホイダンスは障害そのものを回避するために事前に対策をする考え方。

フェールトトレランス

フォールトトレラントは障害が発生してもシステムを稼働できるように対策を図る考え方。

9.4.2. フェールトトレランスの3つの考え方

フェールセーフ

故障が発生した際に、安全性を確保する方向で壊れるように仕向ける方法

故障の場合は安全性が最優先とする考え方。

フェールソフト

故障が発生した場合にシステム全体を停止させるのではなく機能を一部停止するなどして動作の継続を図る方法

故障の場合は継続性が最優先とする考え方。

フールプルーフ

意図しない使われ方をしても故障しないようにするという考え方

9.4.3. 磁気ディスクの信頼性を上げるRAID

RAIDは複数台のHDDを組み合わせて、あたかも1台のHDDのように扱う手法のこと。これによりHDDの故障などにも備えることができる。

9.5. システムの性能評価

システムの性能を評価する指標にはスループット、レスポンスタイム、ターンアラウンドタイムがある。

これらを評価する手法にはベンチマークテストがある。これは性能測定用のソフトウェアを使って、システムの各処理性能を数値化するものである。

9.5.1. レスポンスタイムとターンアラウンドタイム

レスポンスタイム

レスポンスタイムはコンピュータに処理を依頼し終えてから実際に何か応答が返されるまでの時間を示する。

ターンアラウンドタイム

ターンアラウンドタイムはコンピュータに処理を依頼し始めてその応答がすべて返されるまでに時間を示す。

9.5.2. スループット

スループットは単位時間あたりに処理できる仕事量を表す。

Image

9.6. 信頼性の基準と指標

9.6.1. 信頼性の基準(RASIS)

RASISはシステムの信頼性を評価する概念

Image

9.6.2. システムの信頼性と稼働率

稼働率はトラブルに内部時に使えていた期間を割合として示すものである。 この計算に用いる指標には平均故障間隔(MTBF)平均修理時間(MTTR) などが信頼性などを表す指標として用いられる。

平均故障間隔(MTBF)と平均修理時間(MTTR)とシステム稼働率

Image

9.6.3. 直列システムと並列システムの稼働率

直列システムの稼働率

直列システムの稼働率 = 稼働率A × 稼働率B

並列システムの稼働率

並列システムの稼働率 = 1 - ((1-故障率A) × (1-故障率B))

9.6.4. バスタブ曲線

故障の発生頻度と時間の関係をグラフにしたものはバスタブ曲線と呼ばれる。

Image

9.6.5. システムに必要な経費

システムに必要となるすべてのコストはTCO(Total Cost of Ownership) と呼ばれる。

TCO = 初期コスト + 運用コスト

9.7. バックアップ

バックアップを行う際には以下のような点に注意する。

  1. 定期的にバックアップを行う
  2. バックアップを行う媒体を分ける
  3. 業務作業中にバックアップをしない

バックアップの方法

バックアップには3種類の方法があり、これらを組み合わせることで効率よくバックアップを行うことができる。

フルバックアップ

保存されているすべてのデータをバックアップするのがフルバックアップである。 障害発生時に直前のバックアップだけで元の状態に戻せる。

差分バックアップ

前回のフルバックアップ以降に作成変更されたファイルだけをバックアップするのが差分バックアップである。 障害発生時に直近のフルバックアップと差分バックアップを使い元の状態に戻す。

増分バックアップ

バックアップの種類の関係なく、前回のフルバックアップ以降に作成変更されたファイルだけをバックアップするのが増分バックアップである。 障害発生時は元の状態に復元するために直近となるフルバックアップ以降のバックアップ全てが必要となる。

10 - 10.システム/アプリ開発

まあ基本中の基本

10.1. システム開発の流れ

システムは企画→要件定義→開発→運用→保守というフェーズでシステムの一生は表せられ、ソフトウェアライフサイクルと呼ばれる。

開発フロー

10.1.1. 要件定義

この工程は作成するシステムにどんな機能が求められているか明らかにする。 要件を取りまとめた結果について要件定義書という形で文書に残する。

10.1.2. 機能要件と非機能要件

機能要件

業務要件を実現するために必要な機能に関する要件。

非機能要件

システムが満たすべき品質要件、技術要件、運用/操作要件など。

10.1.3. システム設計

要件定義の内容を具体的なシステムの仕様に落とし込む作業のこと。 システム設計は主に3つの段階に分かれる。

外部設計

「利用者から見た」設計を行う。ユーザインターフェスなどの利用者が直接手を触れる部分の設計を行う

内部設計

「開発者から見た」設計を行いう。外部設計を実現するための実装方法やデータ設計などを行う

プログラム設計

プログラムをどう作るかという視点で設計を行う。プログラムの構造化設計やモジュール同士のインターフェス仕様がこれにあたる。

10.2. システム開発手法

System

10.2.1. ウォータフォールモデル

ウォーターフォール

10.2.2. プロトタイピングモデル

プロトタイプ

10.2.3. スパイラルモデル

スパイラル

10.2.4. RAD(Rapid Application Development)

RADは迅速なアプリケーション開発という意味であり、エンドユーザと開発者による少数構成のチームを組み、開発支援ツールを活用するなどして、とにかく短期間で開発することを重要視した開発手法のこと。

RADツールとして有名なのはVIsual Basicのビジュアル開発環境などが該当する。 RADではプロトタイプを作成しそれを評価するサイクルを繰り返すことで完成度を高める。このフェーズが無限に繰り返されないように開発の期限を設けます。これはタイムボックスと呼ばれる。

10.2.5. アジャイル開発とXP(extreme Programming)

アジャイル開発はスパイラルモデルの派生型であり、より短い反復単位を用いて迅速に開発を行う手法である。この開発手法では1つの反復で1つの機能を開発し、反復を終えた時点で機能追加されたソフトウェアをリリースする。

アジャイル開発の一種であるXPは少人数の開発に適用しやすいとされ、既存の開発手法が仕様を固めて行う方式であったのに対し、XPは変更を許容する柔軟性を実現する。

XPでは5つの価値と19のプラクティスが定義されており、そのうち開発プラクティスとして定められているのは以下6つである。

プラクティス説明
テスト駆動開発実装前にテストを定め、テストをパスするように実装を行う。テストは自動テストであることが望まれる
ペアプログラミング2人1組でプログラミングを行う。1人がコードを書きもう1人がコードの検証役になり、互いの役割を入れ替えながら作業を進める
リファクタリング完成したプログラムでも内部のコードを随時改造する。冗長コードを改めるに留める。
ソースコードの共有所有コードの制作者に断りなく、チーム内の誰もが修正を行うことができる。チーム全員がコードの責任を負う
継続的インテグレーション単体テストを終えたプログラムはすぐに結合し結合テストを行う
YAGNI今必要とされるシンプル機能だけの実装に留める

10.3. 業務のモデル化

モデル化は現状のプロセスを抽象化し視覚的に表すことであり、システムが実現すべき機能の洗い出しのために行われる。

代表的なものにDEFER図状態遷移図がある。

10.3.1. DED(Data Flow Diagram)

DEFはデータの流れを図として表したもの。

DFD

DFDの例

DFDEXE

10.3.2. ER図(Entity-Relationship)

ER図は実体関係という概念を用いてデータ構造を図に表したものである。

Image

10.3.3. 状態遷移図

状態遷移図は状態の移り変わりを矢印で表した図のこと。

状態遷移図

10.4. 外部設計

10.4.1. CUIとGUI

CUIは文字を打ち込むことでコンピュータに命令を伝えて処理させる方式。マウスなどは一切用いない。

GUIは画面にアイコンやボタンを表示してそれをマウスなどのデバイスで操作し命令を伝えるグラフィカルな操作方式であり、現在の主流である。

10.4.2. GUIで用いられる部品

部品説明
メニューバアプリケーションの基本領域であり、ここに各コンポーネントが配置される
ウィンドウアプリケーションを操作するための項目が並んだメニュー
プルダウンメニュクリックすると垂れ下がり表示されるメニュー
テキストボックス文字入力用の短形領域である
チェックボックス選択肢を複数選択したり特定の項目をON/OFFさせる用途に用いられる
ラジオボタン複数ある選択肢から1つだけを選ばせるのに用いる

10.5. 詳細設計

各プログラムをモジュール単位に分解・階層化させることはプログラムの構造化設計と言う。

シンプルで保守性に優れたプログラムを作るための構造化設計のためのモジュール分割法には「データの流れに注目した技法」と「データの構造に注目した技法」がある。

10.5.1. モジュール分けの利点と留意点

モジュール分けのメリットとして以下のような点があげらる。

  • 作業の分担が可能
  • 再利用が簡単
  • 修正が一部で済む

モジュール分けした後の作業は3つの制御構造を用いてプログラミングする構造化プログラミングへと移る。

10.5.2. モジュール分割技法

「データの流れ」に着目した技法は以下の3種類。

STS分割法

入力処理変換処理出力処理という3つのモジュール構造に分割する手法

トランザクション分割法

プログラムを一連の処理(トランザクション)単位に分割する方法

共通機能分割法

プログラム中の共通機能をモジュール分割する方法

10.5.3. モジュール独立性を測る尺度

モジュールの独立性を測る尺度として用いられるのはモジュール強度モジュール結合度である。

モジュール強度

強度

モジュール結合度

結合度

10.6. プログラミング

10.6.1. プログラム言語

プログラム言語には低水準言語高水準言語の2種類がある。

低水準言語

コンピュータが理解しやすいプログラム言語のこと。 機械語やアセンブラがある。

高水準言語

人間が理解しやすいプログラム言語のこと。 COBOL、C、C++、Javaなどがある。

10.6.2. 言語プロセッサ

言語プロセッサは人間が記述したプログラム(ソースプログラム)を機械語のプログラムに変換するプログラムのこと。

翻訳の仕方によって、アセンブラコンパイラインタプリタの3種類に分けられる。

アセンブラ

アセンブラ言語で書かれたソースプログラムを機械語に翻訳するもの。

コンパイラ

ソースコードの内容を最初に全て機械語に翻訳するもの。 作成途中で確認のため動かすと言った手法は用いれない。

インタプリタ

ソースコードに書かれた命令を1つずつ機械語に翻訳しながら実行する。逐次翻訳するため動作を確認しながら作っていくことが容易に行える。

10.6.3. コンパイラ方式でのプログラムの実行手順

コンパイラ方式のプログラムの場合、その過程でコンパイラ以外にリンカとローダが使われる。

コンパイラの仕事

Image

リンカの仕事

リンク(連係編集)はプログラムは自分で分割したモジュールやライブラリとしてあらかじめ提供されている関数や共通モジュールなどすべてつなぎ合わせる作業のこと。リンクを行うプログラムはリンカと呼ばれる。

あらかじめリンクさせておく手法は静的リンキングと呼ばれる。またこの時点ではリンクさせず、プログラムの実行時にロードしてリンクする手法は動的リンキングと呼ばれる。

種類説明
静的リンクプログラムを実行する前にリンカによって必要な目的プログラムやライブラリモジュールをリンクする方法
動的リンクプログラム実行中に別のプログラムモジュールの機能が必要になった時にあらかじめ必要なプログラムやライブラリをリンクする方法

ローダの仕事

ロードはロードモジュールを主記憶装置に読み込ませる作業のこと。これを担当するプログラムがローダである。

10.6.4. リバースエンジニアリング

リバースエンジニアリングは既存のソフトウェアの動作を解析することで、プログラムの仕様やソースコードを導き出す手法

目的は既にあるソフトウェアを再利用することで、新規開発を手助けすることである。 これによって得られた仕様をもとに新しいソフトウェアを開発する手法はフォワードエンジニアリングと言う。

フォワードエンジニアリングはオブジェクトコードを逆コンパイルしてソースコードを取り出したりする。 これを元となるソフトウェア権利者の許諾なく行うと知的財産権の侵害にあたるため注意が必要である。

10.7. オブジェクト指向プログラミング

処理の対象をオブジェクトという概念でとらえ、オブジェクトの集まりとしてシステムの設計開発を行うことはオブジェクト指向プログラミングと呼ばれる。

詳細に説明するとオブジェクトはデータ(属性)とそれに対するメソッド(手続き)を一つにまとめた概念である。

オブジェクト指向でプログラムを設計するとモジュールの独立性が高く保守しやすいプログラムの作成が可能。

10.7.1. カプセル化

オブジェクト指向プログラミングではカプセル化できることが大きな特徴。 カプセル化することでオブジェクト内部の構造は外部から知ることができなくなる。つまり、情報隠蔽ができることがカプセル化の利点である。

カプセル化を用いるとオブジェクトの実装方法に修正を加えてもその影響を最小限にとどめることができる。

10.7.2. クラスとインスタンス

オブジェクトはデータとメソッドを定義したものでした。この「オブジェクトがもつ性質」を定義したものはクラスと呼ばれる。

言い換えると、オブジェクトの設計図がクラスであり、データやメソッドを持っている。 この設計図に対して具体的な属性値を与えメモリ上に実体化させたものはインスタンスと呼ばれる。

Image

10.7.3. クラスの階層構造

クラスの基本的な考え方はオブジェクトを抽象化し定義すること。 クラスの階層化というのはクラスに上位、下位の階層を持たせることができるというもの

下位クラスは上位クラスのデータやメソッドの構造を受け継ぐことができます。 上位クラスはスーパクラス(基底クラス) 、下位クラスはサブクラス(派生クラス) と呼ばれます。 サブクラスがスーパクラスの特性を引き継ぐことは継承(インヘリタンス) と呼ばれる。

汎化と特化

汎化は下位クラスが持つ共通性質を抽出し上位クラスとして定義することをさす。 特化は抽象的な上位クラスをより具体的なクラスとして定義すること。 それぞれの関係は下記図のようになる。

Image

集約と分解

下位クラスは上位クラスの特性を分化して定義したもの。上位クラスは下位クラスを集約して定義したものという関係。

Image

多態性(ポリモーフィズム)

多態性は同じメッセージを複数のオブジェクトに送ると、それぞれが独立した固有の処理を行うというもののこと。

10.7.4. UML(Unified Modeling Language)

UMLはオブジェクト指向分析・設計において用いられる統一モデリング言語である。

またこれは複数人で設計モデルを共有してコミュニケーションをとるための手段。 UMLでは13種類の図が規定されている。これらはダイヤグラムと呼ばれる。

UMLのダイヤグラム

UMLの図は構造図振る舞い図に分類できる。

Image

10.7.5. クラス図

クラスの定義や関連付けを示す図である。 クラス内の属性と操作を記述し、クラス同士を線でつないで互いの関係を表する。

Image

10.7.6. ユースケース図

利用者視点でシステムが要求に対してどう振る舞うかを示す図である。

Image

10.7.7. アクティビティ図

業務や処理のフローを表す図である。

Image

10.7.8. シーケンス図

オブジェクト間のやり取りをし系列に沿って表す図である。 オブジェクト同士の相互作用を表すもので、オブジェクト下の点線で生成から消滅までを表しそこで行われるメッセージのやり取りを矢印で表す。

Image

10.8. テスト

10.8.1. 単体テスト

単体テストでは各モジュールごとにテストを個なって誤りがないかを検証する。 この手法ではブラックボックステストホワイトボックステストという手法を用いて検証を行う。

10.8.2. 結合テスト

結合テストでは複数のモジュールを繋ぎ合わせて検証を行い、モジュール間のインターフェスが正常に機能しているかを確認する

結合テストではテストする順番によりボトムアップテストトップダウンテストがある。

ボトムアップテスト

下位のモジュールから上位のモジュールへ順にテストする方法。 上位にはドライバと呼ばれるダミーモジュールを用意する。

トップダウンテスト

上位のモジュールから下位のモジュールへ順にテストする方法。 下位にはスタブと呼ばれるダミーモジュールを用意する。

その他のテスト

トップダウンテストとボトムアップテストを組み合わせて行う折衷テストやすべてのモジュールを一気につなげるビッグバンテストがある。

10.8.3. ブラックボックステストとホワイトボックステスト

ブラックボックステスト

モジュールの内部構造は意識せず入力に対して適切な出力が仕様通りに得られるかを確認する。

ホワイトボックステスト

モジュール内部構造が正しく作られているかを検証する。入出力は構造をテストするためだけに過ぎない。

10.8.4. テストデータの決めごと

ブラックボックステストを行う際に入力値をしっかり定義づけることが大切となる。その入力テストデータを作成する基準として用いらるのは同値分割限界値分析である。

同値分割

データ範囲を種類ごとのグループに分け、それぞれから代表的な値を抜き出してテストデータとして用いる。

限界値分析

限界値分析では上記グループの境目部分を重点的にチェックする。境界前後の値をテストデータに用い、境界値分析と言う。

10.8.5. リグレッションテスト

リグレッションテスト(退行テスト)はプログラムを修正した時にその修正内容が正常に動作していた部分まで悪影響を与えていないかを確認するテスト

10.9. レビュー手法

10.0.1. レビューの種類

デザインレビュー

デザインレビューは要件定義/外部設計/内部設計で行われるレビューで、使用の不備や誤りを早い段階で見つけるために行われるもの

コードレビュー

コードレビューはプログラミングの段階で行われるものでプログラムのミスを発見するために行われるもの

10.1.2. レビューの手法

ウォークスルー

ウォークスルーはレビューの対象物の作成者が主催者となり他の関係者に説明する手法のこと。

インスペクション

インスペクションはモデレータと呼ばれる第3者が議長になり行うレビューのこと。

11 - 11.マネジメント

いろいろ(蛇足)

11.1. プロジェクトマネジメント

11.1.1. マネージャの役割

用語説明
プロジェクトマネジメントプロジェクトを管理すること
プロジェクトマネージャープロジェクトを管理する人
ステークホルダープロジェクト活動により利害が生じる可能性のある人
スコープマネジメントプロジェクトの目的や範囲を明確にしたうえで何をするのか、しないのかを決め必要な作業を洗い出すこと

コストの見積もり

システムの開発工数や費用を見積もる方法にはファンクションポイント法と呼ばれる、画面数といった入出力のシステム機能に着目し、すべての機能に処理の難易度に応じ、「ファンクションポイント」という点数を杖、機能の個数と点数を計算して見積もる

スケジュール管理

システム開発全体のスケジュールを管理するのは大変なのでWBSと呼ばれるトップダウン方式で作業を細分化し階層のように管理する方法がとられる。

11.2. アローダイアグラム

11.2.1. アローダイアグラム

アローダイアグラム(PERT)は1つ1つの作業を「→」で表し、矢印の上に作業名、下に所要日数を記載し、作業同士の結合点は「○」で表す手法。 スケジュール管理を見積もるときに使用される。

アローダイアグラム

11.2.2. クリティカルパス

クリティカルパスは作業開始から作業終了まで複数の経路がある中で、最も時間のかかる経路のこと。 また、ダミー作業は実際の作業は存在せず、作業前後関係だけを表す作業のことで「- - >」で表される

クリティカルパス

11.2.3. 最早結合点時刻と最遅結合点時刻

最早結合点時刻

最早結合点時刻はもっとも作業を早く開始できる日時のことで「いつから次の作業に取り掛かれるか」という最短所要日数を表す。

最遅結合点時刻

最遅結合点時刻はプロジェクト全体に影響を与えない範囲で最も作業を遅らせて開始した場合の日時のこと。「いつまでに作業をすれば全体の進捗に影響が出ないかを逆算する。

11.2.4. トレンドチャート

トレンドチャートはプロジェクト全体の進捗管理に用いられるグラフで、作業の進捗状況と予算の消費状況を関連付けて折れ線グラフで表す

トレンドチャート

11.3. サービスマネジメント

11.3.1. サービスマネジメント

サービスマネジメントはサービス利用者に満足してもらうための自社サービスを適切に提供できるようにするための取り組みのこと。 また、サービスマネジメントシステムは企業が組織的にサービスを管理するための仕組みのこと。

ITサービスマネジメント

ITサービスマネジメントはITを用いてサービスを改善していく取り組みのこと。

11.3.2. ITILとJIS Q 20000

ITILはITサービスを提供するにあたっての管理・運用規則に関するベストプラクティスが体系的にまとめられたガイドラインのこと。

JIS Q 20000はITサービスマネジメントの国際規格(ISO/IEC 20000)を翻訳したもののこと。サービスマネジメントシステムの要件、設計/実装/運用/改善に関するプロセスやリソース、ドキュメントなどの記述がある。

  • サービス提供プロセス * サービスレベル管理 * キャパシティ管理 * 可用性管理
  • 解決プロセス * インシデント管理 * 問題管理

SLA(Service Level Agreement)

サービスレベルアグリーメント(SLA)はサービスレベル合意書であり、サービスの利用者と提供者の間で「どのようなサービスをどういった品質で提供するか」を取り決めて明文化したものである。

設定した目標を達成するために、計画-実行-確認-改善というPDCAサイクルを構築し、サービス水準の維持・向上に努める活動はサービスレベルマネージメント(SLM) と呼ばれる。

11.3.3. サービスデスク

サービスデスクは両者からの問い合わせに対応する窓口のこと。

ローカル・サービスデスク

ユーザの拠点内、もしくは物理的に近い場所に設けられたサービスデスクである。

中央サービスデスク

1か所に窓口を集約させたサービスデスクである。

バーチャル・サービスデスク

インターネットなどの通信技術を利用することで、実際には各地に分散しているスタッフを疑似的に1か所で対応しているように見せかけるサービスデスクである。

11.4. システム監査

11.4.1. システム監査とは

システム監査はシステムに関する様々なリスクに対し、きちんと対策が整備/運用できているあどうか評価/検証すること

システム監査の流れ

システム監査の流れは以下の通り

  1. 計画 : 監査項目一覧の作成
  2. 実施 : 予備調査/本調査の実施
  3. 報告 : 被監査部門と意見交換し監査内容に事実誤認がないか確認

システム監査

11.4.2. システム監査基準

システム監査人が行うべき手順や内容をまとめたシステム監査基準を公表している。

システム監査人の独立性

種類内容
外観上の独立性監査対象からシステム監査人が独立していること
精神上の独立性公正かつ客観的に監査判断を行う

システム監査手続きの手法

手法内容
ウォークスルー法データの生成から入力処理出力活用までの工程や組み込まれている制御の動きを追跡
インタビュー法直接関係者に口頭で問い合わせて回答を入手
ドキュメントレビュー法関連する資料や文書を入手し内容を点検
コンピュータ支援監査技法用意したテスト用データを監査対象プログラムで処理し、期待通りの結果が出るか確認

12 - 12.企業活動と経営戦略

いろいろ(蛇足)

12. 企業活動と経営戦略

12.1. 企業活動

12.1.1. 企業の経営活動

  • アカウンタビリティ … 経営活動に関する説明責任のこと
  • ステークホルダ … 企業に対する利害関係者のこと

コーポレートガバナンス

コーポレートガバナンスは企業経営の透明性を確保するためにステークホルダが企業活動を監督/監視する仕組みのこと。

内部統制

内部統制は企業の内部組織で不正行為やミスが発生しないように各業務で基準や手続きを定めチェックする体制や仕組みを取り入れる事

BCP

BCP(Business Continuity Plan)は災害など予期せぬ事態が発生した場合でも重要な業務が活動できるように事前に規定しておく方針や行動手順のこと。

12.2.2. 業務プロセスの改善

業務プロセスは業務の流れのことで改善手法にはBPRBPMがある。

項目BPRBPM
定義業務プロセスを根本的に見直し企業の体質や構造を改革業務プロセスの可視化をして無駄や非効率店を発見し改善
視点トップダウンボトムアップ
範囲全社現場ごと
回数1回限りPDCAを回して継続改善

ベンチマーキング

ベンチマーキングは他の優良企業の経営や業務のやり方を比較して自社業務のプロセスを定量的に把握し改善していく手法のこと。

12.2. 組織の形

12.2.1. 組織の種類

事業部組織

事業部組織は商品や市場、地域ごとに組織分けしてそれぞれが独立したしごとぉ行い責任を負う

職能別組織

職能別組織は同じ専門知識を持ったスタッフごとにチームを編成する

マトリックス組織

マトリックス組織は事業部制組織、職能別組織など異なる組織構造をミックスした組織のこと。

プロジェクト組織

プロジェクト組織は特定の目的のために各部門から必要な専門家を集めて組織し一定期間活動する組織のこと。

社内カンパニー制

社内カンパニー制は事業分野ごとに編成した独立採算制の組織のこと。 別会社とは異なる。

12.2.2. 組織の責任者

  • CEO … 最高経営責任者、企業経営に関して最大責任を持つ
  • COO … 最高執行責任者、CEOが決定したことを実践する業務上最高責任者
  • CFO … 最高財務責任者、企業の財務面に責任を持つ
  • CTO … 最高技術責任者、企業の技術戦略や開発に関して責任を持つ
  • CIO … 最高情報責任者、企業の情報化戦略を立案し実行することに責任を持つ

12.3. 経営戦略

12.3.1. 経営戦略とは

経営戦略は企業が目的を達成するために、人やモノ、金、情報といった資源を動のように配分し、行動していくかを決める中長期低名方針や計画のこと。

  • ニッチ戦略 * 他に企業が参入していない隙間となっている市場を開拓する戦略 * ニッチ戦略を取っている企業はマーケットニッチャと呼ばれる
  • コアコンピタンス * 他社にまねできない独自のノウハウや技術のこと
  • アンゾフの成長マトリックス * 事業の成長を考える際に使用される * 「製品」「市場」の2軸をそれぞれ「既存」「新規」に分け企業がどのような成長戦略を取るべきかを示す

12.3.2. 経営資源の調達

  • BPO * BPOはじぎゃの業務の一部を専門業者に委託する経営戦略のこと * 業務プロセス全般御委託する
  • EMS * 他のメーカから受注した電子機器などの委託生産を行うサービスのこと
  • アライアンス * 複数の企業が連携すること
  • グリーン購入(調達) * 製品を製造するための原材料や製品を環境負荷の軽減に努める企業から優先購入すること
  • CSR調達 * 自然環境や人権などの拝領を調達基準として示し、調達先に遵守を求める事

12.3.3. 現状分析

SWOT分析

SWOT分析は企業に対し影響を与える環境を「強み」「弱み」「機会」「脅威」の4要素に分けて分析する手法

PPM

PPMは企業が扱う製品や事業が市場でそのような位置にあるかを把握し、経営資源を効率分配するための分析手法のこと。

分類内容
花形市場が成長してるためさらなる投資を行う
金のなる木投資を必要最低限に抑えて得た利益を他の事業の資金にする
問題児早いうちに集中投資を行い「花形」にするか「負け犬」にならないうちに撤退する
負け犬速撤退や売却が必要

ITポートフォリオ

ITポートフォリオは情報システム導入の投資リスクや投資価値が似たシステムを区分けし、それを組み合わせて最適な資源配分をする手法

プロダクトサイクル

プロダクトサイクルは製品が市場で販売され普及しやがて売れなくなり姿を消すまでのライフサイクルのこと。

プロダクトサイクル

バリューチェーン分析

バリューチェーン分析は各工程でどのような価値が生み出されているか分析する手法のこと。

バランススコアカード

バランススコアカードは財務の視点/顧客の視点/業務プロセスの視点/学習と成長の4つの視点から業務目標と業績評価の指標値を定め、経営戦略を管理する手法。 業務評価のための指標はKPIと呼ばれる。

戦略マップ

戦略マップはバランススコアカードの4つの視点から課題/施策/目的の因果関係を図式化したもの

ナレッジマネジメント

ナレッジマネジメントは社員が仕事で得たノウハウや知識を文書化したり、ナレッジDBを使い組織全体で共有し有効活用する手法

12.4. 効率的なIT投資

12.4.1. ITサービスの種類

  • ハウジングサービス * サーバや通信機器などの設置する場所を提供するサービスのこと
  • ホスティングサービス * サーバや通信機器を貸し出すサービスのこと
  • ASP(Application Service Provider) * インターネットを通じて利用者にソフトウェア機能を提供する事業者やサービスのこと
  • SaaS * インターネットを通じて利用者にソフトウェア機能を提供するサービスのこと * ASPは利用者ごとにサーバやDBを用意するが、SaaSは共有する
  • PaaS * アプリケーションが稼働するためのハードウェアやOS/開発環境などをインターネットを通じて提供するサービスのこと
  • IaaS * 情報システムをご架すために必要なサーバやストレージ、ネットワークなどのITインフラをインターネットを通じて提供するサービスのこと

12.4.2. クラウドコンピューティング

クラウドコンピューティングはインターネットを通じてサーバやミドルウェア、ソフトウェアなどを利用する仕組みのこと。

種類説明
パブリッククラウド不特定多数が共同で利用するクラウドサービス
プライベートクラウド専用に使用するクラウドサービス
ハイブリッドクラウド機密性の高い部分はプライベートクラウド、それ以外はパブリッククラウドと組み合わせる

12.4.3. BYOD

BYODは従業員が個人で所有するPCやスマートフォンを業務のために使用すること

12.4.4. SOA

SOAは既存のアプリケーションソフトウェアを部品化しサービス単位で組み合わせて新しいシステムを作る手法

12.5. データ分析ツール