Katsuo Pages

Katsuoのサイト

View My GitHub Profile

応用情報の勉強メモ|2ページ目

1ページのボリュームが増えたのでノートの2ページ目。

1ページ目のノート

プログラムの基本制御構造

手続き型プログラムは基本制御構造でプログラミングを作成できる。基本制御構造とは、”連接(連続)、選択、繰り返し”のこと。
手続き型のプログラムはこの3つの組み合わせからできていることが多い。

手続き型のプログラムとは、プログラムの書き方のひとつで、実行すべき命令や手続きを
上から順に従って書いていくことで構成されているプログラムのこと。 例)c言語、perl、cobol

手続き型プログラムのメリット
上から順に書くので記述しやすい、学習コストが低い、コードが読みやすい

連接とは、上から逐次的に実行されること。選択は条件分岐のことで、分岐された条件から選択すること。繰り返しはループのこと。
※連接という単語は普段使わないので忘れやすい。”つながり続くこと”という意味。


プログラム構造

再帰(リカーシブ)、再使用可能(リユーサブル)、再配置可能(リロケータブル)などをプログラム構造とよぶ。
プログラム構造という言葉が抽象的で分かりづらい。上記と結びつきにくいイメージ。

プログラム構造というよりも、プログラムの性質のことを言っている。

再帰

再帰構造のプログラムは、呼び出すごとに同じ名前の変数に別々の値が格納されるので、格納庫としてスタックを使う。
一つの変数の箱に値がスタックされているイメージ。


再使用可能

再使用可能とは、プログラムがメインメモリに読み込まれCPUによって実行された後、そのまま再び先頭から同じように
実行し直すことができる性質のプログラムのこと。
プログラムを使用後、メインメモリから開放してしまうと、再び使うときにメインメモリにプログラムを再ロードする無駄を防止。

主記憶に再ロードしなくても複数のタスクから使用可能なプログラムを再使用可能なプログラムと呼ぶ。
再使用可能なプログラムの分類として、再入可能な性質と、再入可能な性質とは反対に、逐次再使用可能という性質に分かれる。

再入可能とは、プログラムの実行中に割り込みが入り実行が中断されて待ちになっても、正常に再開されて実行できること。
また、同時に複数のプログラムで使用可能という意味。逐次再使用可能とは、複数のプログラムから同時には使用不可能だけど、
逐次的には再使用可能という意味で、使用可能になるまで複数のプログラムが待ち行列を作って待つという形態で再使用可能という意味。

再使用可能なプログラムは、再入可能で再帰的という特徴がある。この説明だとパッと思い浮かびにくい。
ー>メインプログラムに読み込まれたプログラムをメモリから開放することなく、複数のプログラムから同時に使用可能で、さらに
そのプログラム実行中にそのプログラム自体を呼び出し実行することが可能。という特徴。

再入可能(リエントラント)とは、同時に複数のプログラムで使用可能な性質のプログラムのこと。
逐次再使用可能とは、複数のプログラムから使用できるが、同時には使用不可能なので、待ち行列を作る性質のプログラムのこと。

再入可能な性質にするために、静的変数やグローバル変数を保持しない、自分のコードを書き換えない、
リエントラントではないプログラムやサブルーチンを呼び出さないといった条件が必要となる。
ローカル変数の場合は、関数の内部のスコープだけで使われるので他からの複数の使用であっても状態が乱されることはない。


再配置可能

再配置可能とは、プログラムを主記憶上のどの位置に置いても正しく実行できる性質のプログラムのこと。
プログラム実行中に主記憶の格納位置を動的に変更できる。
命令が参照するメモリ上の位置の指定を、その命令が置かれている現在の位置からの相対位置やプログラム先頭からの
相対位置などで指定するようにしておくことで、プログラムをメモリのどこに置いても正常に動作する。


プログラムのメモリ領域の確保

プログラムを格納するメモリ領域の確保の方法として、”静的割当て”と”動的割当て”がある。 静的割当てはプログラムが起動されたときに確保され、実行が終わるまでメモリが解放されない。
動的割当は、ブロックやモジュールが起動されたときに確保され、ブロックやモジュールの処理が終わったら開放される。
メインプログラムからサブプログラムを呼び出したらメモリが確保されサブプログラムが実行されるような動作なので動的割当てと呼ぶ。


逆ポーランド記法

後置記法という。コンパイルするときに、数式を機械語に変換する過程で使う、数式の内部表現のこと。
演算子を変数の後ろに置くことから後置記法という。一方、ポーランド記法は演算子を変数の前に置くので前置記法とよぶ。

逆ポーランド記法で1+2は、12+と表現する。

(a+b) * (c-d)を逆ポーランド記法で表すと、ab+cd-xとなる。


式を逆ポーランド記法で表現する手順

まずかっこの中の(A+B)に逆ポーランド記法を適用する。
$x=(A+B) \times C$ -> $x=AB+ \times C$
これでは逆ポーランド記法を適用していくのは、そのままでは難しいので
AB+をPとおく。

すると、$x = P \times C$ -> $PC\times$
ここで、$PC\times$をQとおく。

すると、$x = Q$ -> $xQ=$これが逆ポーランド記法の最終的な表現となる。ここで、置き換えたものを元に戻す。

$xQ=$ -> $xPC\times=$ -> $xAB+C\times=$


逆ポーランド記法を式に戻す手順

逆ポーランド記法で表現された式をもとの式に戻すには、逆ポーランド記法で書かれた式の左側から演算子を探し、
その演算子の直前の2つの変数に対して演算子が指定する計算をする。

例)
$XAB + C\times=$ 左から見ていくと、最初の演算子は+なので、
A+BをPとおくと、$XPC\times=$ 左から見ていくと、最初の演算子は$\times$なので、
$P \times C$をQとおくと、$XP \times C=$より$XQ=$ 最初の演算子は=なので、
$X = Q$となる。ここで、置き換えたQ、Pを順に元に戻してくと完成。

$X = Q$ -> $X = (P \times C)$ -> $X = ((A + B) \times C)$
不要なかっこを外して、$(A + B) \times C$
以上で逆ポーランド記法の式を普通の式に戻すことが完了。


文字列検索アルゴリズム

応用情報の試験で出題頻度は低いので軽く理解しておく程度でよい。 文字列検索アルゴリズムは、何種類かあるけど、大きなやり方としては同じで、
検索対象の文字列の配列に対し検索文字を比較して1文字ずつ一致するかを比較する。

ナイーブ法 | 力まかせでの検索

もとの文字列に対し検索する文字をもとの文字列の先頭(左側)から順番に比較する。 もっともシンプルなアルゴリズム。javaのメソッドに使われている。

例) 検索対象の文字列
“あいうえおかきくけこ” に対し、検索文字が “おかき” の場合、

検索対象の文字列の左側から順に、検索文字も左側から順に比較する。
なので、最初は”あ” と “お” を比較する。不一致なので、”い” と “お”を比較…のように行う。

KMP法

ナイーブ法と同じ検索方法だけど、一度一致した文字を記憶しており、不要な比較をしなくて済むので、 ナイーブ法よりも処理が速い。

BM法

ナイーブ法と同じだけど、検索対象は一番左側から、検索文字は一番右側から比較する。
比較して不一致でも、検索対象の文字列に検索文字列が途中で含まれていたら、そこに移動して
再度比較するため、1文字ずつの移動で比較じゃないので合理的。

例) 検索対象の文字列
“あいうえおかきくけこ” に対し、検索文字列が “おかき” の場合、  

“あいう” の “う” と、 “おかき” の “き” を比較する。不一致なので、検索文字の文字数である3文字分移動し、
“えおか” の “か” と、 “おかき” の “き” を比較。不一致だが、”おか” が含まれるので、1文字分移動し、
“おかき” と “おかき” の “き” を比較する。一致しており、ほかの文字も一致しているのでここで検索が完了となる。


プロセッサの高速化のための方式

プロセッサを開発するときのアプローチとして、CISCとRISCがある。
どちらもVLSIを搭載して高速化する。

VLSI(Very Large Scale Integration):
素子の集積度が10万〜1000万個くらい。

CISC(Complex Instruction Set Computer):
複雑な命令をVLSIに集約して一つのチップにする。
VLSIに搭載した命令群をマイクロプログラム(ストアドロジック)とよぶ。
マイクロプログラム制御は、一部の基本的な命令だけを結線論理(ワイヤードロジック)で実行して、
複雑な部分の命令はマイクロプログラムで実行する。

結線論理(ワイヤードロジック):
演算や処理を物理的な素子や配線を組み合わせた論理回路で実行すること。

RISC(Reduced Instruction Set Computer):
使用頻度が高い基本的で簡単な命令群だけにして、各命令の実行速度を速くさせる方式。
結線論理を利用する。単純な命令だけで構成されプログラムの容量がCISCよりも大きくなることが多いので、
コンパイラ最適化で効率化することが重要。


マルチプロセッサ

命令の並行度とデータの並行度に着目したコンピュータ・アーキテクチャの分類として4種類がある。
SISD,SIMD,MISD,MIMDの4つで、この分類方法はフリンの分類(フリンは名付けたひとの名前)と呼ばれている。

この記事がわかりやすかったので参照する。

SISD

SISDはSingle Instruction, Single Data streamの略。
命令にもデータにも並列性がない、逐次処理をするコンピュータ。
SISDの例は、シングルプロセッサのコンピュータ。

SIMD

SIMDはSingle Instruction, Multiple Data streamsの略。
複数のデータを1つの命令で処理する。
画像、音声、動画などマルチメディア処理に使われることが多い。

MISD

MISDはMultiple Instruction, Single Data streamの略。
パイプライン処理が例。1つのデータを複数の命令で処理する。
採用している実例が少ないアーキテクチャ。
多数の機能ユニットが同じデータに対して異なる操作を同時にする。

MIMD

MIMDはMultiple Instruction, Multiple Data streamsの略。
複数のデータを複数の命令で処理する。マルチプロセッサなどが例。同時並行処理。
複数のSISDが同時並行で動いているイメージ。
最近のマルチコアPCは、マルチコアをアプリケーション単位に分散させることで同時処理している。


論理回路

論理回路は記憶や論理演算をするための回路のこと。
論理回路の記号がいつも覚えられない。覚えるくらい繰り返し見るしかない。
NOT(否定)は論理回路の記号に○が付くことを覚えておく。

加算器

加算器は2進数の和を計算する回路のことで、加算器は半加算器と全加算器で構成されている。
半加算器は2つの2進数の足し算をする。一番最初に足し算する1番目の桁の足し算は、
2進数の1+1=1で桁上がりしても関係ないので、2つの2進数の足し算をする。

2桁目の足し算では、1桁目の足し算で桁上がりした場合は、桁上がりした数を入れて3つの2進数を足し算する必要がある。 この3つの2進数の足し算をするのが全加算器。 そのため、2進数の足し算では、1桁目の計算用に半加算器、2桁目以降は全加算器で構成されている。

引き算、割り算、掛け算は足し算に変換できるので、加算器についての問題が出題される。

加算器の記事がとてもわかりやすいので参照。

2進数の足し算の桁上がりの結果にちょうど合致する論理演算が論理積のANDなので、桁上がりの計算にはAND回路が使われている。
例)1+1=1, 1+0=0

また、2進数2つの足し算の結果にちょうど合致するのが排他的論理和のXORなので、2つの2進数の足し算にはXOR回路が使われている。
例)1+0=1, 0+0=0, 1+1=0

→例えば1+1を計算するとき、AND回路では1+1=1でこの1が桁上がりを意味している。また、XOR回路では1+1=0で1桁の和の結果となる。
このように、1+1など、ある足し算を半加算器(AND回路)と全加算器(XOR回路)に通すことで、桁上がりを考慮した足し算ができることが分かる。


フリップフロップ

フリップフロップ回路とは、1ビットの情報を0または1として一時的に保持できる論理回路のこと。


ハミング符号

すぐ忘れるのでしっかりと理解する。ハミング符号について概念をしっかりと理解する。

例題(平成20年春):

ハミング符号とは,データに冗長ビットを付加して, 1ビットの誤りを訂正できるようにしたものである。
ここでは,X1,X2,X3,X4の4ビットから成るデータに,3ビットの冗長ビットP3,P2,P1を>付加したハミング符号 X1X2X3P3X4P2P1 を考える。付加ビットP1,P2,P3は,それぞれ
X1⊕X3⊕X4⊕P1=0
X1⊕X2⊕X4⊕P2=0
X1⊕X2⊕X3⊕P3=0
となるように決める。ここで⊕は排他的論理和を表す。
ハミング符号 1110011 には1ビットの誤りが存在する。誤りビットを訂正したハミング符号はどれか。 ア:0110011 イ:1010011 ウ:1100011 エ:1110111

解説:
ハミング符号1110011をデータビットと冗長ビットに分ける。
ハミング符号はX1X2X3P3X4P2P1の順に並べられているので、

 X1=1,X2=1,X3=1,X4=0,  P1=1,P2=1,P3=0

各ビットを問題中の3つの式に当てはめて誤りを検証する。
最初、3つの式はそれぞれ排他的論理和が0の状態でデータビットに誤りが無い状態を定義している。
なので、データビットまたは冗長ビットのいずれかに誤りが1ビット発生すると、排他的論理和が1となる。
これを利用して3つの式の排他的論理和をそれぞれ検証する。

X1⊕X3⊕X4⊕P1=1⊕1⊕0⊕1=1 X1⊕X2⊕X4⊕P2=1⊕1⊕0⊕1=1 X1⊕X2⊕X3⊕P3=1⊕1⊕1⊕0=1

上記のように、存在する誤りが1ビットであり、すべての式の結果が0ではないということは、唯一すべての式に含まれている”X1”が誤りビットで、
X1=0が正しいビットであると判断できる。

よって、訂正前のハミング符号1110011のX1を0に反転させたアの0110011が正解。


RAID

RAIDはRedundant Arrays of Inexpensive Disksの略。
実際使われるのはRAID0,1,5で、RAID2,3,4はあまり使われない。

RAIDは複数の補助記憶装置を並列に構成したもので、それを1つの補助記憶装置とみなして使うこと。
データを同時に複数のディスクに分散させて書き込むことで、読み書きを高速化させたり、冗長性データを一緒に書き込むことで
障害が起こった時に復旧ができるようにし、補助記憶の信頼性を高めるために利用するのがRAIDの目的。

RAIDの種類によって、目的が若干異なる。高速化だけをするRAIDや、信頼性だけを高めるRAIDや、高速化と信頼性の両方をするRAIDがある。
また、RAIDの種類によって、障害復旧のために採用する技術が違う。ハミング符号を採用したり、パリティを採用したり、データの分割単位も違ったりと、細かな違いがある。

RAIDについてのわかりやすい記事が参考になった。

RAID0|ストライピング:
書き込みたい1つのブロックのデータを、特定のサイズごとに分割し、複数のディスクに同時に書き込む ので、処理が高速化される。高速化されるけど冗長化じゃないので、例えば2台のディスクに書き込んでいて、
1台が故障すると故障したディスクのデータは復旧できないデータの信頼性は高くはならない。

1つのブロックを特定サイズに分割することをストライピングと呼ぶ。

RAID1|ミラーリング:
RAID1は最低2台のディスクに対し、同時に同じデータを書き込むことで、冗長化するので信頼性が高くなる。
2台以上のディスクに対し同じデータを保存することをミラーリングと呼ぶ。
ただ冗長化するだけなので、データ処理の高速化はされない。

RAID5:
RAID5はRAID0の機能にパリティ(誤り訂正補正)を持たせたもの。それぞれのディスクに他のディスクのパリティを書き込む
ことで、データが破損したときにパリティを使って壊れたデータの復旧ができるので、データの耐障害性が高くなる。
RAID5についての分かりやすい記事も参照する。


RAID2,3,4はパリティ用のディスク(冗長ディスク)を固定した方式。

RAID2|ストライピングとハミングコード:
RAID2はストライピングによって高速化をしつつ、ハミングコードによって、データの回復が可能。
何台かのディスクを1つのグループ単位として、1グループにつき1台のディスクをハミング用にする。
1台のディスクに障害が起こっても処理を続けることができ、データの復旧もできる構成。
ハミングコード保存用だけのディスクが何台も必要になり、最低でも5台のディスクが必要になってくるので、
実用性に乏しいのであまり利用されていない方式。

最低でもデータ保存用に2台のディスクと、ハミング保存用に3台のディスクが必要となる。

RAID3|ストライピングとパリティコード:
RAID3はパリティ方式で、エラーの検出が可能。データをビットまたはバイト単位で分割し、
ストライピングでディスクに分散して書き込む。
何台かのディスクを1つのグループ単位として、1グループにつき1台のディスクをエラー検出のためのパリティ
用にする。1台のディスクに障害が起こっても処理を続けることができる構成。

最小構成では、ストライピングするための2台のデータ用ディスクと1台のパリティ用ディスクとなるので、RAID2よりも少なくて済む。

RAID4:
データをブロック単位に分割してディスクに分散して書き込む。その他はRAID3と同じ機能。


相乗平均

本のシステムの性能と信頼性についての章での過去問でコンピューターの性能を相乗平均して性能の高い順に並べたものを解答するという問題があって、
相乗平均についてわからなかったのでメモ。

とりあえずこのわかりやすい記事を読んでおけば理解できたので参照する。


仮想記憶

基本だけどちゃんと理解するのが難しく、説明されている記事も分かりにくいものが多い中、わかりやすい記事を見つけたので参照する。
仮想記憶は苦手だったので、しっかりと復習をする。


データベース

概念データモデル、論理データモデル、物理データモデルがある。

単体で覚えようとしても抽象的ですぐにわすれる。システム開発の工程と結びつけると、下記のような関係になり覚えやすい。

概念データモデル:要件定義工程
論理データモデル:基本設計工程
物理データモデル:詳細設計工程

システム開発工程についてわかりやすい図を使った記事を参照する。
データモデルについての記事も参照する。

データはそのままだと扱いにくいので、データを構造化することでコンピュータで処理しやすくし、人間にとってもわかりやすくなる。
それを行うのがデータモデリングという方法。

データモデリングは、構造化されていない非構造化データをある意味のあるまとまりごとにエンティティとしてまとめ、エンティティごとの関係を示すことから始まる。
これが概念データモデル。

概念データモデルはDBMSを使う前の段階で使われるデータモデル。DBMSとかよりも前の段階のデータベースのもとになるもの。 概念データモデルは要件定義の時点で検討され、データベースのもとになり、ER図によって各エンティティごとの関係を表す、データベース設計を行うためのもの。

論理データモデルは、概念データモデルをより具体的に表現したもの。各エンティティごとに主キーと属性名まで詳細にし、エンティティごとの関係を例えば1対多のように
表現したもの。

物理データモデルは、論理データモデルをさらにデータベースの仕様に合わせて表現したものとなる。論理データモデルのエンティティ名はテーブル名に対応し、
属性名は列のカラム名に対応する。また、各項目のデータ型やデータの長さ(サイズ)も定義する。ここまでくると、そのままRDBに展開できる内容まで深堀り整理したものになる。

データベースの正規化

正規化とは、データベースの表(テーブル)を整えていくこと。なにも手を加えていない状態を非正規形といい、
整えていく段階をレベルに分けていて、第一正規化、第二正規化、第三正規化(第4、第5もあるが応用情報では不要)がある。

データベースに保存されてるデータを使いやすくするために、ルールに基づいて整理および変形する。
正規化することで、データの追加や更新や削除に伴う不整合や喪失の発生を防ぐことができる。

通常は第三正規化まで整理する。

第一正規化とは

テーブルの横方向に繰り返しの項目が存在する非正規形のテーブルから、繰り返し部分を取り除くこと。
この繰り返しとは、表に横方向に同じ項目があることを意味している。

注文No. 注文日 顧客名 商品コード 顧客名 商品コード 顧客名 商品コード
1 22-04-22 kachuo 12345 kachuo 23456 kachuo 45678

上記の例では、繰り返し出現している顧客名、商品コードの部分を切り離して分けて2つの表を作る。

第二正規化とは

第1正規形テーブルから、部分関数従属している列を切り出したテーブルを第2正規形という。
切り出す際は、部分関数従属している主キーとセットで切り出す。

例)
テーブルの列a,b,c,d,e,f,g,hがあって、主キーがa,eの2つあり、主キーaの値で値が一意に定まる列がb,c,dで、
主キーeの値で値が一意に定まる列がf,gの場合、列a,b,c,d,e,f,gからなる一つのテーブルを列a,b,c,dのテーブルと列e,f,gのテーブルに分離する。
また、主キーa,eの2つで一意に定まる列がhの場合、列a,e,hからなるテーブルに分離する。以上で3つのテーブルに分離となった。

上記のように、一つのテーブルを部分関数従属のテーブルおよび完全関数従属のテーブルに分離することを第二正規化と呼び、分離されたテーブルを第二正規形という。

第一正規化したテーブルに主キーが2種項目あるとすると、主キーの1項目だけに従属している主キー以外の項目を部分関数従属と呼ぶ。
すべての種類の主キー項目(主キーが2項目あるとすると2項目の主キー)に従属している主キー以外の項目を完全関数従属と呼ぶ。
主キーがA,Bとする。項目Cがある場合、主キー項目Aと主キー項目Bの組み合わせによって項目Cの値が特定できるといった場合を
完全関数従属と呼ぶ(項目cの値を特定するために、すべての主キーが必要となるもの)。

A B C
1 aa kachuo

主キーAの値1と主キーBの値aaを組み合わせることでkachuoが特定できるので完全関数従属と呼ぶ。といった感じ。

第三正規化とは

第2正規形のテーブルから主キー以外の列に関数従属している列を切り出して整理したテーブルを第3正規形という。
関数従属している列をセットで切り出す。
主キー以外のx列が、主キー以外のy列の値で特定できているとすると、x列とy列をセットで切り出し別のテーブルに分けるイメージ。

主キー以外の列に関数従属していることを、推移的関数従属と呼ぶ。

参照制約とは

データベースの参照制約とは、テーブルのある列を外部キーとして定義するときに、特定の制約を設けること。4桁の数字、重複はだめなど。
参照制約にした外部キーは、外部のテーブルで外部キーを使って値を参照する。外部キーは外部のテーブル内で外部キーの値を変更したりできない。
変更できないので参照しかできない。そのため、参照制約という。

外部キーは、関係データベースにおいて、1対多の1の方の主キーを外部キーとして、多の方のテーブルに設定することで、多の方で1の方のテーブルの値を
他の方と一意に結びつけることができる。


DDLとDML

関係データベース言語としてSQL(Structured Query Language)がある。
SQLはDDLとDMLで構成されている。

DDL(Data Definition Languege:データ定義言語)は、データベースの構造や概念スキーマ、外部スキーマなどを定義する
DDLがある。

DML(Data Manipulation Language:データ操作言語)は、データベースにアクセスするためのデータベース言語。
DMLには親言語方式と独立言語方式がある。親言語方式にはプログラムに直接DMLを書く埋め込み方式とサブルーチンとして作成した
DMLを親プログラムからCALL文で呼び出すモジュール言語方式がある。

独立言語方式は会話型でコマンドを入力しながら実行をする。

親言語方式はコンパイラを利用するので、コンパイル方式で実行する。
独立言語方式はコマンドを解釈しながら実行するので、インタプリタ方式で実行する。

親言語方式は、APIを利用している。APIは、アプリケーションからOSの各種機能を利用するためのインターフェース。
APIはプログラムの互換性を維持する上でとても重要。

SQL-DDL

SQL-DDLを使ってスキーマや表の定義やビューの定義をする。

SQL-DML

SQL-DMLを使って表に対する操作をする。

カーソル機能

カーソルは関係データベースの行(レコード)を手続き型のプログラム言語で処理するときに使う機能。
問い合わせから得られる導出表を1行ずつ、親言語(手続き型プログラム言語)のプログラムに渡すことができる。

SQLのメモ

SQLについては別途本で基礎について勉強を進め、MYSQLで実際に抽出の練習もする。

group by句を使うときは、group by以下に、select句で記述した列名をすべて書かないといけない。
group byでまとめたい列だけを書きがちだけど、それは間違いなので注意。正しい書き方を選ぶ問題の選択肢としてひっかけで出る。

select文について、in句はorと同等の機能、betweenはandと同等の機能であることをしっかりと覚えておく。
なので、inで抽出される場合は、inの中ではどちらか一方が抽出される。betweenで抽出される場合は、
aからbの範囲など、where句のandで指定された範囲と同じ範囲が抽出される。

例)
where 単価 in(1000, 3000)は、where 単価=1000 or 単価=3000と同等。 -> 1000、3000のうち条件を満たすどちらかまたは両方が抽出される。

where 単価 between(1000 and 3000)は、where 単価>=1000 and 単価<=3000と同様

分散データベース

物理的に離れた複数のデータベースを1つの論理データベースとしているデータベースを分散データベースという。

2相コミットメント

分散データベースのデータの整合性を保つために2相コミットメントという処理がされる。
データベースの操作処理をするときに、物理的に分散している各データベースに操作処理についてしてもいいか可否を問い合わせて、各データベースが
OKと返事がきたら操作処理をすることで、データの整合性を保つ。これを2段階に分けることで、各データベース間の整合性を保てる仕組みとなっている。

2相コミットメントの文字通り、2相に分けることで2段階で処理がされる。

まずデータを操作したいひとが更新要求・コミット要求を出す(データを操作したい人とデータベースの間に調停者とよばれるインターフェースに要求が伝わる)。

※2相コミットメントにおけるロールバックとは、データベース更新要求を否決し更新をしないという意味。

ネットワーク

OSIとは:
OSI(Open System Interconnection)はISOが定めたネットワークアーキテクチャ。7層ある。

第1層~7層:物理層、データリンク層、ネットワーク層、トランスポート層、セッション層、プレゼンテーション層、アプリケーション層

覚え方のアイデア:物理層は1層、アプリケーション層は7層だとは忘れにくい。あいだが覚えにくいので次のように覚えると覚えやすい気がした。

第2層~7層の頭文字を語呂合わせにする。→デネトセプア。

OSI参照モデルについてのとてもわかりやすい記事を参照する。各層の役割が理解しやすい。

物理層

DTEとDCEとは:
DTEは、Data terminating equipmentの略。データ終端装置。

DCEは、Data Circuit terminating Equipmentの略。データ回線終端装置。

DTEは、ネットワークの終端で使う接続デバイスのことで、物理層に存在する端末やコンピュータ、WANと接続を介して通信するルータのこと。
DTEが通信するための直接的な手段はないので、通信するために、いくつかの仲介装置を通じて通信をする。

DCEによって、物理層でDCEはDTEによって生成されたデータを取得し、適切な信号に変換する。DCEは、ネットワーク内でデジタルまたはアナログ信号の形でデータを転送、
または受信する動作ユニットもDCE。DCEは光ファイバー回線ではONUなどが具体的な機器の例で、たいていはDCEは通信キャリアからレンタルする機器となる。

DTEは、バイナリデータの情報ソースまたは情報シンクとして機能するデバイス。 DCEはDTE間のインタフェースとして使用されるデバイスで、
ネットワーク内でデジタルまたはアナログ信号の形式でデータを送受信する。

DTEはデータを生成し、制御文字を使用してこれらをDCEに送信する。DCEは信号を伝送媒体に適したフォーマットに変換し、ネットワーク回線に送る。

通信はDCEでは送信側と受信側の両方のDCEが同じ変調方式を使用する必要があるので、送信側と受信側のDCEをお互いに同期調整する必要がある。

イメージとしては2つの㍶で通信する場合、2つの㍶がDTEで、DCEを利用して通信をする感じ。

DTEとDCEを接続するためのインターフェース(コネクター、ケーブル)としてv.24、x.21などがある。

データリンク層

データリンク層とは、OSIの第2層(レイヤ2とも呼ぶ)。データリンク層についての分かりやすい記事を参照する.。

データリンク層では、扱うデータをフレームと呼ぶ。フレームとは、データリンク層を流れるパケットのこと。
データリンク層の役割は、隣接機器間の通信を可能にすること。データリンク層のルールに従ってデータを送受信する。

データリンク層では、データを転送するための機能や手順を提供している。

データ転送時に発生するエラーの検出方法や誤りを訂正する方法も提供している。

隣接したノード間の伝送制御の手順を規定し、隣接ノード間のフレーム単位の伝送を保証している。

フレームの伝送制御手順としてHDLCやCSMA/CD、トークンパッシングなどの伝送制御手順がある。

パソコンをネットワークにつなぐときに一般的に利用されるプロトコルとなっているイーサネット(有線LAN)は、データリンク層のプロトコル。

データリンク層で使われる通信プロトコル

イーサネット、無線LAN、PPP(Point-to-Point Protocol:電話回線などを利用して1対1で通信する)、
HDLC(High-Level Data Link Control:ISOが標準化したデータリンク層のプロトコル)

データリンク層で使われる機器

ネットワーク層

ネットワーク層とは、OSIの第3層(レイヤ3)。エンドノード間において、目的地までデータを届けることがネットワーク層の役割。
IPアドレスという目的地に対し、ルーティングで最適な経路を導き出す。

ネットワーク層について分かりやすい記事を参照する。

データをルータに送り、ルータが記憶しているルーティングテーブルで宛先の有無を確認する。宛先がなければデフォルトゲートウェイにデータを送る。
別のルータにデータを送り、ルーティングテーブルに登録されていれば、そこにデータを送る。これを最適な経路で行う。

ネットワーク層で使われる通信プロトコル

IP、ICMP、IPsecなど。

トランスポート層

トランスポート層では、扱うデータの単位をセグメントと呼ぶ。トランポート層の役割はデータ送受信に関しての信頼性の定義をすること。 TCPヘッダが頭に付いたものをセグメント、UDPヘッダが頭に付いたものをデータグラムと呼ぶ。 トランスポート層は、アプリケーションレベルでの通信を確立することなので、ポート番号を利用して制御をしている。
トランスポート層はTCPとUDPというプロトコルを利用する。

TCP、UDPプロトコルの両方ともそれぞれのヘッダに送信先、送信元のポート番号を付与してアプリケーションの制御を実施している。
TCP、UDPの違いは、コネクション型かコネクションレス型かという違い。

通信を確立するためにお互いが連絡を取りあって制御する方法をコネクション型と呼ぶ。
TCPはコネクション型のプロトコル。データを受信したら受信したことを送信側に伝えている。
データを送信して返信が返ってこなかったら、一定時間待機してデータを再送する。

連絡を取り合っての制御はしないで、送信先が受け取る準備ができているかに関係なくデータを送信する方法をコネクションレス型と呼ぶ。
UDPはコネクションレス型のプロトコル。制御がないので余計なオーバーヘッドがないので速度優先という特徴がある。

セッション層

セッション層は最近はあまり利用されていない。
セッション層は会話単位の制御をする。セッション層は、コネクションの確立から切断までの一連の手順を管理する。
送信権の制御、再送、同期制御などの制御をする。
通信の開始や終了など、エンドユーザ間の会話をちゃんとできるように、回線の接続や切断などの制御方法を取り決める。
セッション層は、一つ上の階層のプレゼンテーション層からのサービス要求に応じ、一つ下の階層のトランスポート層に対してサービス要求をする。

セッション層はエンドユーザのアプリケーションプロセス間におけるセッション(通信)の開始、終了、管理の機構、つまり半永続的な対話を提供している。
通信セッションはアプリケーション間で発生する要求(リクエスト)と応答(レスポンス)で構成されている。
セッション層は普通はリモートプロシージャコール(RPC)を利用するアプリケーションの環境で利用されている。

セッション層はアプリケーション間でコネクションを作成し通信ができる状態にするが、
TCP/IPプロトコルでは特にこの層に相当する部分はなく、普通はアプリケーションプログラム自身でセッションをしている。

セッション層では、最上位層のアプリケーション層プロトコルでエンドユーザがお互いに通信できるように、実際にデータを送信し始める前に、通信を開始します
といった内容を相手に伝えることで、論理的な通信路を確立している。

全二重通信または半二十通信を使う。
2つのコンピュータaとb間で通信をする場合、a->bの片方向の通信路とb->aの片方向の通信路の2つの片方向の通信路を使って
通信する方式を全二重通信と呼ぶ。
一つの通信路で双方向の通信をできるようにした通信方式を半二重通信と呼ぶ。
半二重通信では同時に送受信できないけど、ケーブルを長くしたいときは全二重に比べてメリットがある。

プレゼンテーション層

プレゼンテーション層は、送受信するデータの文字コードや形式や暗号化や圧縮などのデータの表現形式のルールを取り決めている。

コンピュータ側(エンドユーザ側・多様で固有なもの)とネットワーク側(パブリックな領域)の間の表現形式のルールを定めている。 エンドユーザ側は多種多様なのでそのままだと通信できないけど、パブリックな場所であるネットワーク側で通じるようにするためのルールを定めている。

アプリケーション層

アプリケーション層は、通信するソフトウェア間の約束事を規定している。データのレコードの形式や内容を規定している。
アプリケーション層は、OSIの窓口として応用プログラムや端末の利用者に対して
通信機能を提供している。

通信するソフトウェアの分かりやすい例として、ウェブブラウザというソフトウェアと、ウェブサーバーというソフトウェアの関係。
このようなペアの約束事を定めているのがアプリケーション層で、HTTPSやFTPなどがある。

IPアドレス

IPアドレスはIPネットワーク内のコンピュータなどを識別するための論理アドレス。
IPアドレスを32bitで表記するIPv4という形式と、IPアドレスを128bitで表記するIPv6という形式がある。
IPv4で32bitでIPアドレスを表記することが主流となっている。

IPv4では、IPアドレスをネットワーク部分とホスト部分で構成されていて、IPアドレスは2進数で合計が32bitとなる。

ネットワーク部はどのネットワークかを示すための情報で、ホスト部はそのネットワークに属しているどのコンピュータかを示すための情報。

IPアドレスはネットワークの規模で分類されている。
大規模なネットワークはクラスAと呼び、先頭の1bitは0で固定、ネットワーク部を7bitで表記し、ホスト部を24bitで表記する。
中規模なネットワークはクラスBと呼び、先頭の2bitは10で固定、ネットワーク部を14bitで表記し、ホスト部を16bitで表記する。
小規模なネットワークはクラスCと呼び、先頭の3bitは110で固定、ネットワーク部は21bitで表記し、ホスト部を8bitで表記する。

あと、マルチキャストと呼ばれるクラスDでは、先頭の4bitは1110で固定、残り28bitはマルチキャストアドレスと呼ぶ。
このマルチキャストアドレスは、宛先アドレスとしてのみ使用する。送信元アドレスはユニキャストアドレスを使用する。
UDPを使用するので、信頼性を確保したいときは信頼性を確保するためのアプリケーションを利用する。
マルチキャストアドレスにデータを送ると、アドレスに紐づいた複数の機器にデータが届く。

サブネットマスク

サブネットマスクとは、IPアドレスのネットワーク部とホスト部を一目で分かるように分けるためのビットパターンのこと。 そのままだと、10進数で表記したIPアドレスはどこまでがネットワーク部で、どこまでがホスト部かがわかりにくいので、
サブネットマスクを利用することで分かりやすくなる。

サブネットマスクは、IPアドレスのネットワーク部とそれに続く何個かのbitを2進数の1に設定し、残りのbitを0に設定する。

例)クラスCのIPアドレスにサブネットマスクを適用する場合
クラスCのIPアドレスを10進数表記で210.30.35.78としたとき、2進数表記では11010010.00011110.00100011.01001110
で、先頭の24ビット(210.30.35)がネットワーク部となり、78の8ビットがホスト部となる。

サブネットマスクでサブネット分割をし、10進数表記で255.255.255.240とすると、2進数表記では11111111.11111111.11111111.11110000

以上から、IPアドレスとサブネットマスクを照らし合わせると、
11010010.00011110.00100011.01001110
11111111.11111111.11111111.11110000

次にサブネットマスクを見ると、78の01001110の0100の部分までサブネットマスクがかぶっていることがわかる。
よって、ホスト部は1110、10進数で14となる。

以上から、サブネットマスクによって、ホスト部の4ビット0100の部分をさらにネットワーク部として細分化している。

ネットワーク

LANとWANの特徴:WANは広範囲をカバーするけど、通信速度や伝送品質がLANよりも劣っている。LANはOSI基本参照モデルの
データリンク層までを、IEEE802委員会が標準化して規定している。

LANの接続形態をトポロジと呼ぶ。リング型、スター型、バス型の接続形態があり、それぞれ長所もあれば短所もある。

イーサネットとは、IEEE802.3委員会で定めたLANの規格のことで、CSMA/CDを採用したバス型またはスター型LANを指す。

伝送媒体(ケーブル)の種類として、同軸ケーブルやより対線、光ファイバーケーブルがある。

LANのアクセス制御方式には、CSMA/CD、トークンパッシング方式、TDMAなどがある。

TDMAとは、Time Division Multiple Accessの略で、タイムスロットを設けて、送信要求端末に割り当てる方式。
タイムスロットとは、1本の伝送路で複数の回線の信号を同時に送信するとき、1つの回線に割り当てられた短い時間間隔のこと。 ラウンドロビンみたいなイメージ。

CSMA/CDは、データを送信しようとする端末は、バス型またはスター型の伝送路上にデータがないことを確認した上でデータを送信する方式。
もし伝送路上に他の端末や装置のデータが流れていたら、一定時間待ったあとに再送する方式。

トークンパッシング方式は、トークンを常にLAN上に循環させ、各装置はトークンを得ることで送信権を得てデータを送信する方式。
そのため、他の端末や装置のデータとの衝突がそもそもないので、ネットワークのトラフィックが増えても、再送が発生しない。

CSMA/CDとトークンパッシング方式のトラフィックが多いときの伝送遅延の比較:
CSMA/CDの場合、トラフィックが増えると、他のデータとの衝突が増えるため、伝送遅延が急激に増える。
トークンパッシングの場合、トラフィックが増えると、トークンを得ることができる確率が低くなるので、伝送遅延が増える。

LAN間の接続装置

LAN間には接続装置が必要。
複数のLANの相互接続、幹線LANと支線LANの接続、プロトコルが異なるネットワーク間を接続するための装置が必要。

接続装置として、リピータ、ブリッジ、ルータ、ゲートウェイ、ハブがある。

リピーター:
物理層で使用する。LANの伝送距離をのばすために使われる。最大4台まで接続できる。
制御方式が同じLANじゃないと使えない。

ブリッジ:
データリンク層で使用する。宛先のMACアドレスを見てフィルタリングをするために使われる。
制御方式が同じLANじゃないと使えない。接続したLANは理論的に1つとみなされる。

ルーター:
ネットワーク層で使用する。IPアドレスによって通信経路を選択し、フィルタリングもする。
制御方式が違うLANでも接続できる。 高速にルーティングすることに特化したルーターをレイヤ3スイッチと呼ぶ。

ゲートウェイ:
OSI基本参照モデルの全層で使用する。プロトコルの異なるLANを接続する装置やソフトウェアのこと。
通信サーバーとも呼ぶ。

ハブ:
スイッチングハブ(レイヤ2スイッチ)はブリッジと同じ。リピーターハブはリピーターと同じ。

LANの規格

LANの規格として、IEEE802委員会の規格がある。
規格名として10BASE2,10BASE5,~1000BASE-SXなどのケーブルがある。

無線LAN

無線なので近くで傍受される危険があるので、アクセス制御、暗号化通信機能などが重要となってくる。

アクセスポイントとは、無線端末を相互に接続したり、他のネットワークに接続する無線中継装置のこと。
アクセスポイントは、ブリッジと似たような機能のブリッジタイプとルータと似たような機能のルータタイプ がある。ブリッジタイプは、登録されたMACアドレスを持つ無線LANカードだけ接続を許可することで接続を制限できる。

無線LANの電波は2.4GHz帯、5GHz帯があり、無線LANに限らず2.4GHzを使う機器が多いので、
電波干渉で接続が不安定になったり、通信速度が低下したりしやすい。一方、5GHzは無線LAN専用の帯域なので
電波干渉を受けにくく、接続が安定し速度も低下しにくいといった特徴がある。

無線LANでは有線LANのCSMA/CDとほぼ同じ仕組みの、衝突を避けるためのCMSA/CA方式でデータの送受信をする。
回線が空いているかどうかを、送信先からのACK信号の有無で判断する。データが送信先に届いていたら、ACK信号が
返ってくる。

PCから無線LANアクセスポイントにデータを送信するとき、無線LANアクセスポイントは同時に1台のPCしかデータの 受信をできない。そのため、pcからデータを送信したとき、無事に送信できた場合はACK信号(Acknowledge)が返ってくる。
もし送信できていない場合は、ACK信号は返ってこないので、時間を開けてデータを再送することになる。

IPSecとは

通信プロトコル。Security Architecture for Internet Protocolの略。
通信プロトコルであるIP(Internet Protocol)にセキュリティの機能を加えたプロトコルのこと。

安全性を高めるプロトコルには他にもいろいろあるけど、そのうちの一つのプロトコルがIPSec。

LAN間のIP送信

LAN1とLAN2があって、LAN1とLAN2はルータで接続されているとき、LAN1からLAN2にデータを送信する場合の、
IPデータグラムの宛先とパケット内のイーサネットフレームの宛先(要は宛先の機器)の組み合わせを選ぶ問題がよく出る。

IPデータグラムの宛先とは、宛先のIPアドレスのこと。イーサネットフレームの宛先とは、宛先のMACアドレスのこと。

注意が必要なのは、MACアドレスは一つのLAN内でだけ有効なので、LAN1からLAN2の宛先機器のMACアドレスを指定できない。

なので、IPデータグラムについては、LAN2の宛先の機器のIPデータグラムを指定し、MACアドレスについては、中継となるルータの
MACアドレスを指定する必要がある。そうすると、ルータがちゃんとLAN2の宛先IPデータグラムにちゃんとデータを送信してくれる。

ベアラ速度とは

通常、通信回線は、データを圧縮することで、通信回線に流せるデータの容量を大きくしている。
これに対し通信回線を通るデータを圧縮してない素の状態で通すサービスをベアラと呼ぶ。

データ部分は圧縮されるのに対し、ベアラ信号の方は最小限のデータ量となっているので、圧縮された通常の通信回線に流すデータ部分よりも通信速度が速い。

PCM(Pulse Code Modulation)

PCMとは、アナログ信号をデジタル信号に変換すること。標本化、量子化、符号化という順番に操作をすることで、アナログ信号をデジタル信号に変換する。

アナログ信号をサンプリングして、アナログ信号をデジタル信号(数値)で表すとき、どのくらいの密度のデジタル信号でサンプリングをすればアナログ信号
が表現するデータに近づけるかは、標本化定理という法則がある。

アナログ信号に対して一定周期でデジタル信号をどのくらいの密度でサンプルするかについて標本化定理では、アナログ信号(音声)が表す最大周波数の 2倍の周波数でサンプリングすると、アナログ信号をデジタル信号で再現できるとのこと。

PCMについての分かりやすい記事を参照する。

CRCによる誤り検出

計算のやり方についてはざっくりどんなものかについて本で紹介されているけど、詳しくはわからないし、少し記事をネットで探しても逆に
難しくてわかりにくいが、

CRCについて分かりやすい記事があったので参照する。

デジタル署名と証明書

デジタル署名とデジタル証明書の関係が一見すると違いが似ていて同じように勘違いしがちなので、定義をしっかり読んで混同しないよう
注意する。

デジタル署名の署名者本人だと証明するものが、デジタル証明書になる。署名と証明書をセットにして第3者に渡すことになる。
署名と証明書を受け取った側は、信用できるか、偽物とかじゃないかを調べるために、署名と証明書についてちゃんとしたもので信用できるかを検証する。

理解を助ける記事を参照する。


3DCGのレンダリング技術

テクノロジ系のマルチメディア技術として3DCGのレンダリングについての問題が出題されている。午前対策等の本では取り上げられていないので、
自分で勉強する必要がある。

3DCGのレンダリング技術について記事を参照し勉強をしておく。