UDAUDA.BLOG

うだうだしながらIT関連の記事を書いていきます!

応用情報技術者

CPU

コンピュータはプログラムという名のソフトウェアがハードウェアに「こう動け」と命令することで動く機会。その命令を理解して必要が演算をしたり実際の処理を行うのはCPUの役割。

5大装置とそれぞれの役割

  • 制御装置:プログラムの命令を解釈してコンピュータ全体の動作を制御(CPU)
  • 演算装置:四則演算をはじめとする計算や、データの演算処理を行う。(CPU)
  • 記憶装置
    • 主記憶装置:動作をするために必要なプログラムやデータを一時的に記憶する装置(メモリ)。コンピュータの電源を切るとその内容は消える
    • 補助記憶装置:プログラムやデータを長期に渡り記憶する装置。長期保存を前提としているので主記憶装置のようにコンピュータの電源をきることで内容が破壊されたりすることはない。(ドライブ) 入力装置:コンピュータにデータを入力するための装置。(マウス、キーボード) 出力装置:コンピュータのデータを出力するための装置(ディスプレイなど)

ノイマン型コンピュータ

補助記憶装置 → 主記憶装置 → CPUで実行

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

CPUの命令実行手順とレジスタ

CPUが命令を実行するために取り出した情報はレジスタと呼ばれるCPU内部の記憶装置に保持する

レジスタの種類とそれぞれの役割

名称 役割
プログラムカウンタ 次に実行する命令が入っているアドレスを記憶するレジスタ
命令レジスタ 取り出した命令を一時的に記憶するためのレジスタ
インデックス(指標)レジスタ 取り出した命令を一時的に記憶するためのレジスタ
ベージレジスタ アドレス修飾に用いるためのレジスタで連続したデータの取り出しに使うための増分値を保持する
アキュムレータ 演算の対象となる数や、演算結果を記憶するレジスタ
汎用レジスタ 特に機能していないレジスタ。一時的なアタイの保持や、アキュムレータなどの代用に使用する

命令の実行手順①「命令の取り出し(フェッチ)」

最初に行われるのは命令の取り出し(フェッチ)作業

  • 取り出すべき命令がどこにあるかは、プログラムカウンタが知っている
  • プログラムカウンタの示すアドレスを参照して命令を取り出し、それを命令レジスタに記憶させる
  • 取り出し終わったら次の命令に備えてプログラムカウンタの値を1つ増加させる

命令の実行手順②「命令の解読」

先ほど取り出した命令の解読作業に入る

命令レジスタに取り出した命令は次の構成でできている

  • 命令部:実行させたい命令の種類を示すコード番号が入っているところ
  • オペランド部:処理対象となるデータを納めたメモリアドレスなどが入っているところ

  • 命令部の中身が命令デコーダと送られる。

  • 命令デコーダは命令部のコードを解読して必要な装置に制御信号を送る(例えば命令が演算処理とかだった場合は、「加算処理がきたよー」などと演算装置(ALU)に伝えたりする)

命令の実行手順③「対象データ(オペランド)読み出し」

仮に命令が加算などの演算処理だったとするとその演算の元となる数値が必要。それを読み取ってくる作業。

  1. 処理の対象となるデータ(オペランド)は命令レジスタオペランド部を見ると、在りかがわかるようになっている。

  2. この手順でオペランド部を参照して対象データを読み出し、それを汎用レジスタに記憶させる。

命令の実行手順④「命令実行」

あとは命令を実行するだけ。仮に命令が演算処理だったとすると、演算装置がえいやと計算して終了

  1. 汎用レジスタから処理対象のデータを取り出した演算
  2. その後、演算結果を書き戻して終了
  3. 終わったら実行手順①に戻って一連の手順を繰り返す

機械語のアドレス指定方式

  • 計算によって求めた主記憶装置上のアドレスを実効アドレス(もしくは有効アドレス)と呼ぶ.
  • コンピュータの理解できる言葉が機械語であり、0と1で構成されている。
  • 命令レジスタに取り出しいてた命令も機械語
  • 命令は「命令部」「オペランド語」で構成されており、「何を(オペランド部)どうしろ(命令部)」という記述になっている
  • オペランド部」の部分は必ずしも「メモリのアドレス」が入っているとは限らない。何らかの計算によって入っている可能性もある。
  • 何らかの計算によってアドレスを求める方式をアドレス修飾と呼ぶ
    • 即値アドレス指定方式
      • オペランド部に対象となるデータそのものが入っている方式を即値アドレス指定方式と呼ぶ
    • 直接アドレス指定方式
      • オペランド部に記載してあるアドレスが、そのまま実効アドレスとして使える方式を直接アドレス指定方式と呼ぶ
    • 間接アドレス指定方式
      • オペランド部に「対象となるデータが入っている箇所を示すメモリアドレス」が記載してある。間接的に指定している。
    • インデックス(指標)アドレス指定方式
    • ベースアドレス指定方式
      • オペランド部の値にベースレジスタの値を加算することで実効アドレスを求める
      • ベースレジスタとはプログラムがメモリ上にロードされた時の、先頭アドレスを記憶しているレジスタ
      • ベースアドレス指定方式はプログラム先頭アドレスからの差分をオペランド部で指定している
    • 相対アドレス指定方式
      • オペランド部の値に、プログラムカウンタの値を加算することで実効アドレスを求める
      • プログラムカウンタに入っているのは次に実効される命令のメモリアドレス
      • メモリ上にロードされたプログラムの中の、命令位置を基準としてそこからの差分をオペランド部で指定する

CPUの性能指標

CPUの性能をあらわすための指標値に以下がある

  • クロック周波数
    • 周期信号の繰り返し数。コンピュータには同調をとるための周期信号があるが、これが一秒間に何回チクタクできるかを表している。
  • CPI(Clock cycles Per Instruction)
    • 信号何周期分で1つの命令が実行できるかをあらわしている
  • MIPS(Million Instruction Per Second)
    • 1秒間に実行できる命令の数。

クロック周波数は頭の回転速度

  • コンピュータには色んな装置が入っているが、そればバラバラに動いていてはまともに動作しない
  • 「クロック」と呼ばれる周期的な信号に合わせて動くのが決まり事になっており、装置同士がタイミングを同調できるようになっている
  • CPUもクロックという周期信号に合わせて動作を行う
  • チクタクチクタクの繰り返される信号に合わせて動くからチクタクという1周期の時間が短ければ短いほど、より多くの処理ができる
  • クロックが1秒間に繰り返される回数のことをクロック周波数と呼ぶ。単位はHz

CPUの高速化技術

複数の命令を並行して実行させることができれば回路の遊び時間をなくし、処理効率を高めることができる

パイプライン処理
  • パイプライン処理
    • 次から次へと命令を先読みし並行で処理する
    • 分岐命令などが出てきた場合は先読み分が無駄になってしまうこうともある

パイプラインをより高速化をさらに推し進める手法として以下がある

  • スーパーパイプライン
    • 各ステージ(命令実行順序の単位)の中身をさらに細かいステージに分割することにより、パイプライン処理の効率アップを図るもの
  • スーパースカラ
    • パイプライン処理を行う回路を複数持たせることで全く同時に複数の命令を実行できるようにする
VLIW
  • VLIW(Very Long Instruction World)
    • ソフトウェア処理に重点をおいた高速化処理手法がVLIW
    • VLIWは同時に実行可能な複数の動作をまとめて1つの命令にすることで複数の命令を同時に実行させる手法
    • プログラムのコンパイル時にプログラム中にある依存関係のない複数の命令をあらかじめコンパイラ(言語プロセッサ)が一つの命令語にまとめる
      • コンパイラとは特定の開発言語で書かれたプログラムを機械語へと翻訳して実行形式にする作業
    • CPUの負担は軽減されるが、その分ソフトウェア側が「いかに効率の良いコードを吐き出せるか」にかかってくるため、コンパイラの設計は難しくなる
CISCRISC

CPUには高機能な命令を持つCISCと、単純な命令のみで構成されるRISCという2つのアーキテクチャがある。アーキテクチャというのは基本設計とか設計思想という意味の言葉。

  • CISC(Complex Instruction Set Computer)
    • CISCはCPUに高機能な命令を持たせることによってひとつの命令で複雑な処理を実現するアーキテクチャ
    • マイクロプログラムを内部に記憶させることで高機能な命令が実現できる
      • マイクロプラグラムとはコンピュータの命令の解読・実行を行う電子回路を制御するために用いられるプログラム
    • 命令の追加や変更が容易
    • 便利な命令が揃っているので機械語のプログラム作成がラク
    • 命令の実行速度は遅い
    • 命令の長さや実行速度がバラバラ
  • RISC(Reduced Instruction Set Computer)
    • RISCはCPU内部に単純な命令しか持たない代わりに、それらをハードウェアのみで実装して一つ一つの命令を高速に処理するアーキテクチャ
    • ワイヤードロジックによって全ての命令をハードウェア的実装
      • ワイヤードロジックとは、マイクロプロセッサ(CPU/MPU)などの内部で命令を実行する際、演算や処理を物理的な素子や配線を組み合わせた論理回路によって直に行うこと。
    • 単純な命令があるでけなので手作業による機械語のプログラム作成は困難
    • 命令の実行速度ははやい
    • 命令の長さや実行速度がほとんど等しい ⇨ パイプライン処理の実行効率が高くなる

http://seskillup.jp/risc-cisc-cpu/

並列処理

  • 複数のプロセッサ(CPU)を協調して処理にあたらせる技術のことを並列処理と呼ぶ。
  • 単独のCPU内で果たすことができる性能向上には限界が近づきつつあり、複数のCPUを協調させて動作を行う並列処理の重要度は増す一方
  • ひとつのコンピュータシステム上に複数のCPUを搭載するマルチプロセッサシステムは各CPUに対して処理を分散させることでCPU単独ではなくシステム全体でパフォーマンスの向上を図る
  • 処理を分散させる方式として以下がある
  • マルチコアプロセッサ
    • CPUパッケージ内に複数のコア(CPUの中核で実際に処理を担当するところ)を持たせたもの

マルチプロセッサと主記憶装置

複数のCPUが強調動作を行うにあたり、主記憶装置との関係は重要な問題。(入手力がぶつかる恐れがあるから) この主記憶装置との結合方法によってマルチプロセッサシステムを分類したものが、密結合型と疎結合型。

  • 密結合マルチプロセッサ
    • 複数のプロセッサが主記憶装置を共有し、それを単一のOSが制御する方式。
    • OSによってタスクが分散され処理能力の向上が図れるが、共有した主記憶装置へのアクセルが競合した場合、処理効率が低下する
  • 疎結合マルチプロセッサ
    • 複数のプロセッサそれぞれに対して独立した主記憶を割り当てる方式。各プロセッサ毎にOSが必要となる。
    • クラスタシステムと言われるものがこの1種で多くの場合は独立したコンピュータ同士を通信路でつなぎ、その全体を一つのシステムとして稼働させる

メモリ

メモリの分類

メモリはコンピュータの動作に必要がデータを記憶する装置。 RAMは読み書き可で揮発性、ROMは読み出し専用で不揮発性が特徴。

  • 半導体メモリ
    • RAM  - 特徴
      • 電源を切ると中身が消えてしまう(揮発性)
      • 読み書き両方可
      • 種類
    • ROM
      • 特徴
        • 電源を切っても中身が消えたりしない
        • 読み出しだけ可

RAMの種類いろいろ

RAMとはその名の通り「ランダムに読み書きできるメモリ」のこと。 RAMはさらに主記憶装置に使われるDRAMキャッシュメモリに使われるSRAMの2種類に分かれる。

  • DRAM(Dynamic RAM)
    • 安価で容量が大きく、主記憶装置に用いられるメモリ。
    • 読み書きはSRAMに比べて低速。
    • 記憶内容を保つためには、定期的に内容を再書き込みするためリフレッシュ動作が欠かせない
  • SRAM(Static RAM)
    • DRAMに比べて非常に高速だが、価格も高い。
    • 小容量のキャッシュメモリとして用いられる
    • 記憶内容を保持するのに、リフレッシュ動作は必要ない

mh.rgr.jp

ROMの種類いろいろ

ROMもその名の通り「リードオンリー(読み出しだけ)なメモリ」のこと。ただ「基本的には読み出しだけ」というだけで実は専用の機器を使うと記憶内容の消去と書き込みができるPROMという種類も存在する。 デジタルカメラなどで利用されているメモリカード(SDカードなどは)この一種。フラッシュメモリとも呼ばれる。

主記憶装置と高速化手法

記憶装置間の速度ギャップを埋めて待ち時間によるロスを防ぐための手法がキャッシュ。

  • レジスタとメモリ、メモリとハードディスクの間には「越えられない壁」といっても良いくらいの速度差がある
  • 装置間の速度ギャップを緩和させるために用いる手法でレジスタとメモリの間に設けるキャッシュメモリや、メモリとハードディスクの間に設けるディスクキャッシュなどがある。

キャッシュメモリ

  • CPUはコンピュータの動作に必要なデータやプログラミムをメモリ(主記憶装置)との間でやりとりをする。
  • しかし、CPUと比べるとメモリは非常に遅いので読み書きの度にメモリへアクセスすると待ち時間ばかり発生する。
  • メモリとCPUの間により高速に読み書きできるメモリを置いて速度差によるロスを吸収させる。これをキャッシュメモリと呼ぶ。
  • キャッシュメモリはCPUの中に存在する
  • CPUに内蔵できる容量はごく小さいものになるから「それよりも低速だけど、その分容量を大きく持てる」メモリをCPUの外側にキャッシュとして増設したりすると、よりキャッシュ効果が期待できる。この時用いるのがSRAM

ディスクキャッシュ

  • このキャッシュメモリと同じ役割を主記憶装置と磁気ディスク装置の間で担うのがディスクキャッシュ。
  • ディスクキャッシュは専用に半導体メモリを搭載したり、主記憶装置の一部を間借りするなどして実装。

プログラムの局所参照性

局所参照性とは、資源への参照やアクセスが一部分に偏ったり集中すること。プログラムに局所参照性があるからキャッシュが有用であること言える。

  • 時間的局所性
    • 最近使われたデータほど、再度アクセスされる可能性が高い
  • 空間的局所性
    • 使われたデータの近くにあるデータは再度アクセスされる可能性が高い
  • 逐次的局所性
    • 使われたデータの隣は逐次アクセス(シーケンシャルアクセス)される可能性が高い

主記憶装置への書き込み方式

  • キャッシュメモリは読み出しだけでなく、書き込みでも使用される。
  • ただし、読み出しと違って書き込みの場合は、更新した内容をどこかのタイミングで主記憶装置にも反映する必要がある
  • 主記憶装置を書き換える方式にはライトスルー方式とライトバック方式の2つがある
    • ライトスルー方式
    • ライトバック方式

ヒット率と実行アクセス時間

キャッシュメモリの容量は小さなものなので、目的とするデータが必ずそこに入っているとは限らない。この「目的とするデータがキャッシュメモリに入っている確率」のことをヒット率と呼ぶ。

キャッシュメモリの割り当て方式

主記憶上のデータはブロックという一定長の単位ごとにキャッシュメモリへの割り当てが行われる。この時ブロックをどの場所に格納するか管理する方式として次の3つがある

  • ダイレクトマッピング方式
    • 1つのメモリブロックをキャッシュ内の単一のロケーションに割り当てる方式。
    • 具体的にはハッシュ演算と呼ばれる一定の計算式によって主記憶のブロック番号からキャッシュ内のロケーションを求め、データの割り当てを行う
  • フルアソシアティブ方式
    • メモリブロックをキャッシュ内の任意のロケーションに割り当てる方式
    • 演算によって機械的に割り当て先を決めるのではなく、キャッシュメモリの空いている場所を任意に使用することができる
    • そのため管理は複雑のものとなり、読み出す度に全体を検索する必要があることから速度に難がある
  • セットアソシアティブ方式
    • メモリブロックをキャッシュ内の2つ以上の配置可能なロケーションに割り当てる方式
    • キャッシュメモリとメモリブロックと対応付された複数のセットにわけ、そのセット内ならどこへでも空いている場所を使用することができる
    • 前述の2方式の折衷案的な割り当て方法で、現在一般的に用いられている手法

ハードディスクとその他の補助記憶装置

ハードディスクの構造と記録方法

ハードディスク(磁気ディスク装置)は高速回転しているディスクに磁気ヘッドを使って情報を読み書きしている。

  • ハードディスクの中身
    • ディスク
      • 金属やガラスでできている硬い円盤
      • 表面に磁性体が塗布されていて、これを磁化することで情報を記録
    • アクセスアーム
      • 先端に磁気ヘッドがついてるアーム
      • ディスク上の目的地まで磁気ヘッドを運ぶのがお仕事
    • 磁気ヘッド
      • アクセスアームの先端についてる微笑な電磁コイル
      • ディスク表面の磁性体を磁化させたり読み取ったりする。

セクタとトラック

https://wa3.i-3-i.info/diff139data.html

フラグメンテーション

ハードディスクに書き込みや消去を繰り返していくと、連続した空き領域が減り、ファイルが断片化していく。

  1. ハードディスクの空きが十分にあれば、ファイルは通常連続した領域に固まって記録される
  2. ファイルの書き込みと消去を繰り返すとプラッタ上の空き領域はどんどん確保できないから途中からあちこち離れが場所に書くようになる
  3. こうなるとファイルを一つ読み書きするだけでもあちこちのトラックへ磁気ヘッドを移動させなきゃいけない

「ファイルがあちこちに分かれて断片化してしまう」状態のことをフラグメンテーション(断片化)と呼ぶ。

デフラグで再整理

バスと入出力デバイス

バスアーキテクチャ

  • コンピュータの中でデータが運ばれる経路のことを「バス」と呼ぶ。
    • 内部バス
      • CPU内部の機器を接続するバス(ALU、レジスタ
    • 外部バス
      • 外部の機器を接続するバス
      • CPUとメモリやHDDを接続する高速なもの、キーボードやマウス、ディスプレイといった入出力装置を接続する低速なもの両方ある
      • 上述の2つはブリッジというコントローラによって接続

パラレル(並列)とシリアル(直列)

バスはデータを転送する方式によってパラレルバスとシリアルバスに分かれる。 複数の信号を1回で送れるパラレルバスが高速とされていたが、高速化を突き進めていくにつれ信号間のタイミングを取ることが難しくなり、現在はシリアルバスで高速化を図るのが主流。

入出力制御方式

コンピュータは様々な機器とデータのやりとりを行う。この時の入出力を制御するやり方が入出力制御方式

  • プログラム制御方式(直接制御方式)
    • 入出力装置からメモリへのデータ転送をCPUが直接制御する方式
    • データの転送は随時CPUのレジスタを経由して行われる
    • 低速な入出力処理にCPUがかかりっきりになってしまうと処理効率の面でよろしくない。
  • DMA(Direct Memory Access)制御方式
    • 入出力装置からメモリへのデータ転送をCPUを介さずに行う制御方式
    • DMA制御方式は専用の制御回路(DMAコントローラ)がメモリと入出力装置間のデータ転送を行う
    • CPUがDMAに命令を行い、DMAがストレージとメモリの間のデータ転送を管理する
  • チャネル制御方式
    • DMA制御方式をさらに拡張したもの。
    • 入出力制御用のCPUなどを備えたチャネルという専用装置がメモリと入出力装置間のデータ転送を自律的に行う

オペレーティングシステム

OSの仕事

  • OSとはオペレーティングシステムの略。コンピュータの基本動作を実現するソフトウェア。
  • OSはコンピュータ内部のハードウェアや様々な周辺機器を管理する他、メモリ管理、ファイル管理、そしてワープロなどのアプリケーションに実行機械を与えるタスク管理などをしている

ソフトウェアの分類

ソフトウェアの分類は以下である

  • システムソフトウェア
    • 基本ソフトウェア
      • OSや言語プロセッサ、各種サービスプログラムどなど
    • ミドルウェア
      • データベース管理ソフトウェアや各種開発支援用ソフトウェアなど
      • ミドルウェアとはある特定の用途に特化して基本ソフトウェアと応用ソフトウェアとの間の橋渡しをするためのソフトウェア
  • 応用ソフトウェア

基本ソフトウェアは3種類のプログラム

基本ソフトウェア

  • 制御プログラム
    • ハードウェアを管理して応用ソフトウェアやミドルウェアからコンピュータを効率的利用できるようにしているソフトウェア
    • 一般にこのプログラムのことをカーネルと呼ぶ
    • カーネルにはメモリ管理やプロセス管理などに機能を限定したマイクロカーネルと多くの機能を網羅したモノシリックカーネルがある
    • ジョブ管理、タスク管理、記憶管理、データ管理などを行う
  • 言語処理プログラム(言語プロセッサ)
  • サービスプログラム
    • コンピュータの機能を補う、補助的なプログラムのことでユーティリティ
    • ファイル圧縮プログラムなどが該当

ジョブ管理

利用者から見た仕事の単位がジョブ。ジョブを効率よく処理していけるようにOSは実行スケジュールを管理する

  • バッチ処理で複数のジョブを登録してコンピュータに空き時間を作らず次々と働かせる仕組み、それがジョブ管理という
  • 主な役割は複数のジョブをスケジューリングし、実行単位であるジョブステップに分解して個々の実行を監視・制御するというものなる。

ジョブ管理の流れ

ジョブ管理はカーネルが持つ機能のひとつ。この機能で利用者との橋渡しをするのがマスタスケジュールという管理プログラム。利用者はこの管理プラグラムに対してジョブの実行を依頼する。

  • マスタスケジュール
    • ジョブの実行をジョブスケジューラに依頼
    • 自身は実行状態の監視に努め、必要に応じて各種メッセージを利用者に届ける
  • ジョブスケジューラ
    1. リーダ:依頼されたジョブを入力して、ジョブ待ち行列に登録する
    2. イニシエータ:優先度の高いジョブを持ってきて、ジョブステップ(ジョブの実行単位)に分解し、CPUや主記憶装置などハードウェア資源が空くのを待ってジョブステップを割り当てその実行をタスク管理に依頼する
    3. ターミネータ:実行を終えたジョブに割り当てられていたハードウェア資源を解放して、ジョブの結果を、出力待ち行列に登録する
    4. ライタ:優先度の高いものから順に、ジョブ結果を出力する

スプーリング

  • CPUと入出力装置(印刷機など)とは処理速度に大きな差がある。
  • 間に高速な磁気ディスクを蓄えるようにしCPUは入出力装置を待たなくても済むようにする。
  • 「低速装置とのデータのやりとりを、高速な磁気ディスクを介して行うことで処理効率を高める方法」をスプーリングと呼ぶ。

タスク管理

  • コンピュータから見た仕事の単位がタスク
  • ジョブステップの実行準備が整うことでタスクが生成
  • タスクはコンピュータが「実行中のプログラムである」と識別する仕事
  • プロセスとも呼ばれる(厳密に言うと両者は違う)
  • 単純に言うとタスクというのはコンピュータでコマンドを叩いたりアプリケーションアイコンをダブルクリックしたりして、プログラムがメモリにロードされて実行状態に入ること

タスクの状態移遷

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

ディスパッチャとタスクスケジューリング

  • ディスパッチャ

    • 実行可能状態に順番待ちしているタスクに「次が出番」とCPUに使用権を割り当てるの管理プログラム
    • ディスパッチャは日本語で「派遣する人」「配車係」
  • タスクスケジューリング

    • 「どのタスクに使用権を割り当てるのか」を決めるための順序
    • 以下のものがある
      • 到着順方式
        • 実行可能状態になったタスク順にCPUの使用権を割り当てる方式
        • タスクに優先度の概念がないので、実行の途中でCPU使用権が奪われることはない(ノンプリエンプションと言う)
      • 優先度順方式
        • タスクにそれぞれ優先度を設定し、その優先度が高いものから実行していく方式
        • 実行中のタスクよりも優先度の高いものが待ち行列に追加されると実行の途中でCPU使用権が奪われる(プリエンプションと言う)
      • 動的優先順位方式
        • 基本的な動きは上記優先度順方式と同じ
        • タスクがCPU使用権の割り当てを受けるまでの待ち時間の長さによってその優先度を徐々に上げていく
        • タスクの優先度を引き上げて実行の可能性を調整することをエージングと呼ぶ
      • ラウンドロビン方式
        • CPUの使用権を一定時間ごとに切り替える方式
        • 実行可能状態になった順番でタスクにCPUが与えられるが、規定の時間内になっても処理が終わらない場合次のタスクに使用権が与えられ、実行中だったタスクは一番後回しにされる
      • 多重待ち行列
      • 処理時間順方式
        • タスクの処理時間がより短いものから順に処理をしていく方式
      • イベントドリブン方式
        • マウスによる入力など環境の変化をタスクに切り替えのきっかけとしてCPUの使用権を切り替える方式

マルチプログラミング

タスク管理の役割はCPUの有効活用に尽きる。つまり、CPUの遊休時間を最小限にとどめることが大事

割込み処理

実行中のタスクを中断して別の処理に切り替え、そちらが終わるとまた元のタスクに復帰するという処理のことを割込み処理と呼ぶ。マルチプログラミングには必須の仕組み

  • 割込み処理は2つに分かれる
    • 内部割込み
      • 実行中のプログラムが原因で生じる
        • プログラム割込み
          • ゼロによる除算や桁あふれ、書き込みできないなどの例外などの場合に生じる割込み
        • SVC(Super Visor Call)割込み
          • 入出力処理を要求するなど、カーネル呼び出し命令が発行された時に生じる割込み(「Super Visor」とはカーネルの意味)
        • ページフォルト
          • 仮想記憶において存在しないページへのアクセルが生じた場合に生じる割込み
    • 外部割込み
      • 入出力割込み
        • 入出力装置の動作完了時や中断時に生じる割込み
      • 機械チェック割込み
        • 電源の異常や主記憶装置の障害など、ハードウェアの異常発見時に生じる割込み
      • コンソール割込み
        • オペレータ(利用者)による介入が行われる時に生じる割込み
        • SVC

リアルタイムOS

時間的制約を守ることを最優先とした、組み込み用途向けの処理を行うOS - 例えば、自動車のABS(アンチロックブレーキングシステム)などに使われている

タスクの排他/同期制御

タスクが複数同時実行される環境では互いの干渉を避ける排他制御や、強調動作のための同期制御が欠かせない

  • タスクはその生成時にOSから独立した記憶領域に割り当てられて動作
  • この記憶領域には以下が含まれる(詳しくはプログラムの作り方で解説)
    • そのプログラム自身を格納するための領域
    • タスク内で用いられる変数や関数呼び出しに必要な情報などを格納するスタック領域
    • メモリを確保する命令を用いることで都度必要に応じて動的に確保するヒープ領域が含まれる

排他制御が必要な理由

2つタスクが同時に進んでおり、同じ値を参照し更新したら不都合が起きるため排他制御が必要。 片方の処理が終了してからもう片方が処理を行う

値を読む ⇨ 処理をする ⇨ 値を更新する

セマフォ

  • クリティカルセクション
    • 一連の処理の中で2つ以上のタスクが同時に資源を奪い会うことで処理に不整合が生じる箇所
    • 値を読む ⇨ 処理をする ⇨ 値を更新するの流れ
  • セマフォ(概念)

デッドロック

  • 排他制御において、複数の資源をそれぞれのタスクが無秩序にロックしていくと互いに相手のロックしている資源の解除もちに入り処理が進行しなくなる現象
  • これを避けるためには資源のロックを順序を両方のタスクで同じに揃えることが必要

同期制御とイベントフラグ

  • タスク同士が互いに依存関係を持ち、一方の処理を待って他方が実行を再開するといった強調動作も行われる
  • このようなタスク同士を強調させるために実行タイミングを図る仕組みを同期制御と呼ぶ
  • タスク間の同期方法としてもっとも基本的な手法がイベントフラグ
  • イベントフラグはカーネルの監視下に置かれたビットの集合で1つのビットが1つのイベントを表すフラグとなっている

タスク間の通信

タスク間の通信用いられる代表的な手段は以下のものがある

  • 共有メモリ
    • メモリ上に複数のタスクから利用できる記憶領域を設けてデータ交換を行う
  • メッセージキュー
  • キューというのは簡単に言えば待ち行列のこと
  • メッセージ処理用のキューにタスクからのデータをメッセージとして送信し、受信側はこのキューを介してデータを受け取る
  • パイプ
    • 仮想的なパイプを通してデータをやり取りする仕組み
    • あるタスクの出力をもう一方のタスクに入力して接続し、データを転送

実記憶管理

限られた主記憶空間を、効率良く使えるようプログラムに割り当てるのが実記憶管理の役割

  • プログラムを主記憶装置(メモリ)にロードする際に、プログラムをロードした時の割り当て方がへっぽこだと主記憶の容量が十分にあったとしても容量が活用できなくなる

固定区画方式

  • 固定区画方式は主記憶に固定長の区画(パーティション)を設けて、そこにプログラムを読込む管理方式
  • 単一区画方式と多重区画方式がある
    • 単一区画方式
      • ひとつのプログラムしかロードできないのでマルチプログラミングには使えない
    • 多重区画方式
      • 区画ごとにプログラムをロードすることができる
  • 単純な仕組みなので記憶管理は簡単
  • 区画のスペースが決められている(8MBなど)
  • 区画内に生じた余りスペースは使用できず、区画サイズ以上のプログラムを読込むこともできない
  • 主記憶の利用効率はあまりよくない

可変区画方式

主記憶を最初に固定長に区切ってしまうのではなく、プログラムをロードするタイミングで必要なサイズに区切る管理方式が可変区画方式

  • プログラムが必要とする大きさで区画を作り、そこにプログラムをロードする
  • 固定区画方式より主記憶の利用効率はよくなる

フラグメンテーションとメモリコンパクション

  • 可変区画方式だと主記憶上にプログラムを隙間なく詰め込んで実行することができるが、必ずしも順番にプログラムが終了するとは限らない
  • 主記憶の空き容量自体がプログラムの実行に足るサイズでもそれを連続した状態で確保することはできない
  • ↑の現象をフラグメンテーション(断片化)と呼ぶ
  • フラグメンテーションを解消するにはロードされているプログラムを再配置することによって細切れ状態にある空き領域を連続したひとつの領域にしてやる必要がある
  • この操作をメモリコンパクション、ガーベージコンパクションと呼ぶ

オーバーレイ方式

  • 実行したいプログラムのサイズが主記憶の容量を超えていたらロードしようがない
  • これを可能にするための工夫がオーバーレイ方式
  • プログラムをセグメントという単位に分割しておいて、その時に必要なセグメントだけを主記憶上にロードして実行する
    • プログラムは複数の機能が組み合わさった集合体
    • しかし常にその全機能が使われているわけではない
    • なので処理の過程で必要とされる機能だけを主記憶上へロードすることにしてやれば、占有する場所を減らすことができる

スワッピング方式

  • マルチプログラミング環境では優先度の高いプログラムによる割込みなどが発生した場合に現在実行中のものを一旦中断させて切り替えを行う
  • このような時は優先度の低いプログラムが使っていた主記憶領域の内容を一旦補助記憶装置に丸ごと退避させることで空き領域を作る(スワップアウトと呼ぶ)
  • 退避させたプログラムに再びCPUの使用権を与えられる時は、退避させた内容を補助記憶装置から主記憶へとロードし直して中断箇所から処理を再開する(スワップインと呼ぶ)
  • スワップアウトとスワップインを合わせた、このような処理ことをスワッピングを呼ぶ
  • スワッピングが発生すると主記憶の代用として低速な補助記憶装置へのアクセスを行うことになるので処理速度が極端に低下

再配置可能プログラムとプログラムの4つの性質

再配置可能プログラミングなら主記憶上のどこに配置しても問題なく実行できる

  • ベースアドレス方式「プログラムが主記憶上にロードされた時の先頭アドレスからの差分」を使って命令やデータの位置を指定している
  • このような性質を持つプログラミングを再配置可能プログラムと呼ぶ

再配置可能(リロケータブル)

  • 主記憶上のどこに配置しても実行することができる性質
  • ベースアドレス指定方式を用いることによってロードされた位置に応じてメモリアドレスの情報を補正

再使用可能(リユーザブル)

  • 主記憶上にロードされて処理を終えたプログラムを再ロードすることなく、繰り返し実行(毎回正しい結果が得られる)できるという性質
  • 使用した変数の値をプログラムの最初か最後に初期化しておくことで繰り返しの実行に備えている

再入可能(リエントラント)

  • 再ロードすることなく繰り返し実行できる再使用可能プログラムにおいて複数のタスクから呼び出しても互いに干渉することなく同時実行できるという性質
  • プログラムの中が処理の手順を定義した手続き部分とそこで用いるデータ部分に分かれている
  • このデータ部分をタスクごとに持つことで互いに干渉せず並行して動作できる

再帰的(リカーシブ)

  • 実行中に自分自身を呼ぶ出すことができるという性質

仮想記憶管理

仮想記憶は、主記憶や補助記憶の存在を隠蔽することで広大なメモリ空間を自由に扱えるようにする

  • 仮想的なメモリ空間を作ってプログラムに使わせるのが仮想記憶
  • その実体は主記憶装置と補助記憶装置を合わせて作ったメモリ空間だが、プログラムからは大量の主記憶装置があるのように見える

なんで仮想記憶だと自由なの?

  • 実記憶管理だとフラグメーションなどが起きてロードスペースがなくなることがあったりする
  • 仮想記憶では仮想的な記憶領域なので物理的な実体というものがない
    • 実際のデータは実記憶上に記憶される
    • 仮想記憶というのは「実記憶などの物理的な存在を隠蔽して、仮想空間にマッピング(対応付けとか割り当てという意味)してみせる」ための技術
    • つまり仮想記憶でロードした8MBを実記憶上で4MB, 4MBに分けることでロードすることも可能
    • 仮想アドレスから実アドレスへの変換処理はメモリ変換ユニットというハードウェアが担当する
    • この仕組みを動的アドレス変換機構と呼ぶ

実記憶の容量よりも大きなサイズを提供する仕組み

  • 仮想記憶に置かれたデータは実際にはその裏で実記憶へと記憶される(これだと実記憶の容量を超えるサイズのデータは扱えない)
  • 実は実記憶だけでなく、補助記憶(ストレージ)にもマッピングすることができる
  • 仮想記憶では補助記憶装置もメモリの一部と見なすことで実記憶の容量よりも大きなサイズの記憶空間を提供できる

仮想記憶を実現している仕組み

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

  • ページング方式
    • ページング方式ではプログラムを「ページ」という単位に分割して管理する
    • プログラムというのはいろんな機能があるのでいつも全てを必要とされるわけではない
    • 現在のOSではデマンドページという「実行に必要なページだけを実記憶に読込ませる」方式が主流
    • 仮想記憶と実記憶との対応付はページテーブルという表によって管理される
      • ページテーブルを確認して「実記憶に存在しない」となった場合は実記憶へのページ読み込みが発生
        • ページイン:補助記憶から実記憶への読み込み
        • ページアウト:実記憶から補助記憶へとページを追い出すこと
      • 実記憶の容量が少ないとページの置き換えを必要とする頻度が高くなり、システムの処理効率が極端に低下する。これをスラッシングと呼ぶ

プログラムの作り方

言語プロセッサ

翻訳作業を行うプログラムを総称して言語プロセッサと呼ぶ

インタプリタコンパイラ

インタプリタ方式

  • ソースコードに書かれた命令を1つずつ機械語に翻訳しながら実行
  • 逐次翻訳していく形であるため、作成途中のプログラムもその箇所まで実行させることができるなど「動作を確認しながら作成する」といったことが容易に行える
  • ただし、実行速度はそれなりに遅い

コンパイラ方式

  • ソースコードの内容を最初に全て翻訳し機械語のプログラムを作成
  • ソースコード全体を解釈して機械語化するため、効率の良い翻訳結果を得ることができる
  • 「作成途中で確認のために動かす」といった手法が使えない

特殊な言語プロセッサ

  • プリコンパイラ
    • 高水準言語で付加的に定義された機能と文法に従ってコーディングされたプログラムを元の高水準言語を使用したプログラムへと変換するもの
    • コンパイルの前処理として行う
  • ロスコンパイラ
  • コンパイラが動作している環境とは異なるプラットフォーム向けの目的プログラムを生成
  • 例:windows OS上でコンパイルして、スマホのOS上で動かすための目的プログラムを作ったりする
  • エミュレータ
    • システム上で他のOSやCPUの機能を模倣する環境を実現するプログラム
    • 異なるプラットフォーム向けのプログラムをその命令を解読しながらそのまま実行させる
  • ジェネレータ
    • パラメータを与えるだけで自動的にプログラムを生成

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

リンカというプログラムが実行に必要なファイルを全てくっつけることで実行可能なファイルは生成される

コンパイラの仕事

コンパライの仕事はプログラミング言語を使って書いたソースコードを翻訳して機械語のプログラムファイルにすること

コンパイラの中ではソースコードを次のように処理することで目的プログラムを生成する

  1. 字句解析
  2. ソースコードに書かれているプログラムコードを字句(トークン)単位に分解
    • 変数A = 変数B + 10 という文があったら 変数A = 変数B + 10と分ける
  3. 構文解析
  4. 分解したトークンをプログラム言語の構文規則に従って解析
    • 解析して構文木と呼ばれるデータ構造を生成
  5. 意味解析
  6. 変数の型や文がプログラム言語の仕様に沿っているかチェック、構文木を元に中間コードを生成
  7. 最適化
  8. 処理効率の向上を目的として、より良いプログラミングコードの再編成を検討
  9. 目的プログラムを生成

コンパイラの最適化手法

コンパイラの行う最適化手法にはコードサイズからみた最適化と実行速度から見た最適化という2つのアプローチ

  • コードサイズから見た最適化
    • 生成される目的プログラムのサイズが小さくなる
  • 実行速度から見た最適化
    • 実行速度が速くなることで処理に要する時間が小さくなる

具体的にやること

  • 関数のインライン展開
    • 本来はサブルーチンとして切り分けている関数を丸ごと呼び出し位置に展開
    • 関数呼び出しに要する時間を削減でき実行速度は上がるが、コードを展開する分サイズは増加
  • ループ内不変式の移動
    • 繰り返し処理であるループの中で値の変化がない式をループの外へと追い出す
    • ループ中に行う処理の量が減るので実行速度が上がる
    • コードサイズは変わらない
  • ループのアンローリング
    • ループ処理によって繰り返し部分をその繰り返し回数だけ展開したコードに差し替える
    • その分コード量は増えるがループ判定の処理がなくなるので実行速度は上がる
  • レジスタへの変数割付け
    • 変数は主記憶上ではなく、CPU内部のレジスタに割付ける
    • コードサイズは小さくなり実行速度も上がる -定数の畳込み
    • 定数だけの計算式をコンパイル時点であらかじめ計算する
    • サイズは小さくなり、計算量を削減した分実行速度も上がる

リンカの仕事

  • プログラムは自分で分割したモジュールやライブラリを全てつなぎ合わせることで実行に必要な機能がそろったプログラムファイルになる
  • 「つなぎ合わせる」作業をリンク(連携編集)と呼ぶ
  • これがリンカ(連携編集)の仕事
  • 「あらかじめリンクしておく手法」を静的リンクと呼ぶ
  • 「プログラムの実行時に、共有ライブラリやシステムライブラリをロードしてリンクする手法」は動的リンクと呼ぶ

ローダの仕事

  • ロードモジュールを主記憶装置に読込ませる作業をロードと呼ぶ

構造化プログラミング

構造化プログラミングはプログラムを機能単位の部品に分けて、その組み合わせによって全体を形作る考え方

制御構造として使う3つの約束

構造化プログラムでは原則的に3つの制御構造だけを使ってプログラミングを行う

  • 順次構造
    • 上から順に処理を実行
  • 選択構造
    • 何らかの条件によって分岐させいずれかの処理を実行
  • 繰り返し構造
  • ある条件が満たされるまで一定の処理を繰り返す

変数は入れ物として使う箱

プログラムは主記憶上に任意の箱を設けて自由に値を出し入れすることができる 変数はメモリの許す限りいくつでも使うことができる。個々の変数には名前をつけて管理

データ造構

「プログラムの中でどのようにデータを保持するか」はアルゴリズムを考える上で欠かせない検討項目。「データを配置する方法」を指してデータ構造と呼ぶ

  • 配列
    • メモリ上に連続した領域にデータを並べて管理する
    • 配列では同じサイズのデータを連続して並べることになる
    • ただし、最初に固定サイズでまとめてごっそり領域を確保してしまうためデータの挿入や削除などは不得意
  • リスト
    • データとデータを数珠繋ぎにして管理するのがポイント
    • リストを扱うデータにはポインタと呼ばれる番号がセットになってくっついてくる
    • ポインタさえ書き換えれば、いくらでもデータを繋ぎ換えることができるのでデータの追加・挿入、削除などが簡単
    • ただし、リストはポインタを順位辿らなければ行けないので配列みたいに「添え字を使って個々のデータに直接アクセスする」
    • 単方向リスト
      • 次のデータへのポインタを持つリスト
    • 双方向リスト
      • 次のデータのポイントと、前のデータへのポインタを持つリスト
    • 循環リスト
      • 次へのデータへのポインタを持つリスト
      • 最後尾データは先頭データへのポインタを持つ
  • キュー
    • キューは待ち行列とも言われ、最初に格納したデータから順に処理を行う、先入れ先出し方式のデータ構造
    • キューは入力されたデータがその順番通りに処理されなければ困る状況で使われる
  • スタック -スタックはキューの逆で最後に格納したデータから順に処理を行う、後入れ先だし方式のデータ構造

ネットワーク

LANとWAN

事業所など局地的な狭い範囲のネットワークをLAN(Local Area Network)、LAN同士をつなぐ広域ネットワークをWAN(Wide Area Network)と呼ぶ

データを運ぶ通信路の方式とWAN通信技術

  • コンピュータがデータをやりとりするためには互いを結ぶ通信路が必要
  • もっともシンプルな形は互いを直接1本の回線で結んでしまうこと。これを専用回線方式
  • 複数のコンピュータが繋がることできるようにしたのが交換機が回線の選択を行って必要に応じた通信路が確立される方式を交換方式という
  • 交換方式には2種類ある
    • 回線交換方式
      • 送信元から送信先にまで至る経路を交換機が繋ぎ、通信路として固定する
      • 通信路に選ばれた回線は使用中のペアに占有されるので、他の端末がその回線を使うことができない
    • パケット交換方式
      • パケット(小包の意)という単位に分割された通信データを交換機が適切な回線へと送り出すことで通信路を形成
        • コンピュータ側
          • 送信データをバラバラに分割してパケットにする
          • パケットにしたものを回線に送り出す
        • 交換機側
          • パケットを受け取り宛先を確認して適切な回線へと送る
      • 回線が使用中になるのはパケットという小さなデータが送られる短時間だけ
      • しかもその間の次のパケットを交換機が蓄積してくれるので、複数の端末で回線を共有して使うことができる
      • WANの構築で拠点間を接続する場合などを除いては現在のコンピュタネットワークで用いられるのは基本的には全てパケット交換方式

LANの接続形態(トポロジー

LANを構築する時に各コンピュータをどのようにつなぐか。その接続形態のことをトポロジーと呼ぶ

  • スター型
    • ハブを中心として放射状に各コンピュータを接続する形態
  • バス型
    • 1本の基幹となるケーブルに各コンピュータを接続する形態
  • リング型
    • リング状にコンピュータを接続する形態

現在のLANはイーサネットがスタンダード

  • LANの規格としては現在もっとも普及しているのはイーサネット
  • IEEE米国電気電子技術者協会)によって標準化されており、接続形態や伝送速度ごとに規格が分かれている
  • 伝送速度に使われているbps(Bite per Second)という単位は1秒間ごとに送ることのできるデータ量(ビット数)を表している

イーサネットCSMA/CD方式でネットワークを監視する

イーサネットはアクセス制御方式としてCSMA/CD方式を採用している。

  • CSMA/CD方式ではネットワーク上の通信状況を監視して、他に送信を行っていう者がいない場合に限ってデータを送信する
  • それでも同時に送信してしまし、通信ポケットの衝突(コリジョン)が発生した場合各々ランダムに求めた時間分待機してから再度送信する
  • このように通信を行うことで1本のケーブルを複数のコンピュータで共有することができる

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

リング型LANの代表格であるトークンリングではアクセス制御方式にトークンパッシング方式を用いる

  • トークンパッシング方式
  • 送信の権利を表すトークンという小さなデータがネットワーク上をバケツリレーされながら一方向で流れている
  • 平常時はトークンだけでネットワークをぐるぐる流れている
  • データを送信したい時はこのトークンにデータをくっつけて次へ流す
  • 「自分宛じゃない」場合はそのまま次へ流し、「自分宛」の場合はデータを受け取ってから「受信した」マークをつけて再度ネットワークに流す
  • マークが付加されたトークンが送信元に到着すると、送信元はトークンをフリートークンに戻してからネットワークに放流し、平常時の状態へと戻る

線がいらない無線LAN

ケーブルを必要とせず、電波などを使って無線で通信を行うLANが無線LAN

クライアントとサーバ

ネットワークにより複数のコンピュータが組み合わさって働く処理の形態にはいくつか種類がある

  • 集中処理
    • ホストコンピュータが集中的に処理をして他のコンピュータはそれにぶら下がる構成
    • 長所
      • ホストコンピュータに集中して対策を施すことで
        • データの一貫性を維持・管理しやすい
        • セキュリティの確保や運用管理が簡単
    • 短所
      • システムの拡張が大変
      • ホストコンピュータが壊れると全体が止まる
  • 分散処理
    • 複数のコンピュータに負荷を分散させて、それぞれで処理を行うようにした構成
    • 長所
      • システムの拡張が簡単
      • ホストコンピュータが壊れても全体には影響しない
    • 短所
    • データの一貫性を維持・管理しづらい
    • セキュリティの確保や運用管理が大変

昔は大型のコンピュータが処理をする「集中管理」が主流だったが、コンピュータの性能が上がったことにより分散処理ではあるが集中処理のいいところも取り込んだようなシステム形態である「クライアントサーバシステム」が出てきた

  • クライアントサーバシステム 集中的に処理した方が良い資源(プリンタやハードディスク領域など)やサービス(メールやデータベースなど)を提供するサーバと、必要に応じてリクエストを投げるクライアントという2種類のコンピュータで処理を行う構成が現在の主流

it-biz.online

プロトコルとパケット

コンピュータは色んな約束事にのっとって、ネットワークを介したデータのやり取りを行う

プロトコルOSI基本参照モデル

  • プロトコル
    • ネットワークを通じてコンピュータ同士がやり取りするための約束事
    • プロトコルには様々な種類があり「どんなケーブルを使って」「どんなデータ形式で」といったことが事細かに決まっている
    • それらを7階層に分けたのがOSI基本参照モデル
    • 基本的にはこの第1階層から第7階層までの全てを組み合わせることでコンピュータ同士のコミュニケーションが成立している
何階層 階層名 説明
第7階層 アプリケーション層 具体的にどんなサービスを提供するのか
第6階層 プレゼンテーション層 データはどんな形式にするか
第5階層 セッション層 通信の開始から終了までどう管理するか
第4階層 トランスポート層 通信の信頼性はどう確保するか
第3階層 ネットワーク層 ネットワークとネットワークをどう中継するか
第2階層 データリンク層 同一ネットワーク内(直で繋がっている)でどう通信するか
第1階層 物理層 物理的にどう繋ぐか

なんで「パケット」に分けるのか

TCP/IPというプロトコルを使うネットワークでは通信データをパケットに分割して通信路へ流す

  • パケットは通信データを小さく分割したひとかたまり
  • パケットには「通信元IPアドレス」「宛先IPアドレス」「ポート番号」などがヘッダ情報として付加されている
  • 分割して流す理由は通信路上を流せるデータ量は有限だから

ネットワークの伝送速度

  • 実行速度
    • 一般的な使用法で実際に出る速度のこと
  • 伝送効率
    • 理論値に対して実際に出る速度の割合

ネットワークを構成する装置

ネットワークの世界で働く装置にはルータやハブ、ブリッジ、リピータなどがある

LANの装置とOSI基本参照モデルの関係

ネットワークで用いる各装置は「どの層に属するか」「なにを中継するのか」を知ることでより理解しやすくなる

何階層 階層名 装置
第7階層 アプリケーション層 ゲートウェイ
第6階層 プレゼンテーション層 ゲートウェイ
第5階層 セッション層 ゲートウェイ
第4階層 トランスポート層 ゲートウェイ
第3階層 ネットワーク層 ルータ
第2階層 データリンク層 ブリッジ
第1階層 物理層 LANケーブル、NIC、リピータ

www.itmanage.co.jp

  • ゲートウェイ
  • ルータ
  • ブリッジ
    • データリンク(第2層)に位置する装置
    • パケットのMACアドレス情報を使ってネットワーク内のセグメント間を中継する
  • LANケーブル、NIC、リピータ
    • 物理層(第一層)に位置していて電気的な信号を送ったり受けたり増幅したりする

NIC(Network Interface Card)

コンピュータをネットワークに接続するための拡張カード。LANボードとも呼ばれる

  • NICの役割はデータを電気信号に変換してケーブル上に流すこと。そして受け取ること
  • 要するにコンピュータがネットワークでやり取りしようと思ったら欠かすことのできない部品がNIC
  • NICをはじめとするネットワーク機器には製造段階でMACアドレスという番号が割り振られている
  • イーサネットではこのMACアドレスを使って各機器を選別する

リピータ

  • リピータは物理層(第一層)の中継機能を提供する装置
  • ケーブルを流れる電気信号を増幅して、LANの総延長距離を伸ばす
  • パケットの中身を解さず、ただ電気信号を増幅するだけなので不要なパケットも中継する
  • ネットワークに流したパケットは宛先が誰かに依らずにとにかく全員にわたされる。この「無条件にデータが流される範囲(論理的に1本のケーブルでつながっている範囲)」をセグメントと呼ぶ

ブリッジ

  • ブリッジはデータリンク層(第2層)の中継機能を提供する装置
  • セグメント間の中継役として流れてきたパケットのMACアドレス情報を確認、必要であれば他方のセグメントとパケットを流す
  • ブリッジは流れてきたパケットを監視することで最初に「それぞれのセグメントに属するMACアドレスの一覧」を記憶する
  • 以降はその一覧に従ってセグメント間を橋渡しする必要があるパケットだけ中継を行う

ハブ

  • ハブはLANケーブルの接続口(ポート)を複数持つ集線装置

ルータ

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

  • ルータの役割はそれぞれの地域(LAN)を担当する郵便屋さんみたいなもの
  • 自分の担当地域外宛のパケットが流れてきたらその地域を担当するルータに配送を依頼する
  • ブリッジが行う転送はあくまでMACアドレスが確認できる範囲のみ有効であり外のネットワーク宛のパケットを中継することはできない
  • ルータはパケットに書かれた宛先IPアドレスを確認し最適な転送先を選ぶ。これを経路選択(ルーティング)と呼ぶ
    • IPアドレスは「どのネットワークに属する何番のコンピュータか」という内容を示す情報

ゲートウェイ

データの誤り制御

データの誤りとはビットの内容が「0→1」「1→0」とノイズやひずみによって異なる値に化けてしまうこと

  • ケーブル上を流れるのはあくまで単なる電気信号のみ
  • この信号の波形を「この範囲の波形は0」「この範囲の波形は1」と値に置き換えることでビットの内容をやり取りしている
  • データの誤りを100%確実に防ぐことはない
  • そこでパリティチェックやCRC(巡回冗長検査:Cyclic Redundancy Check) などの手法を用いて誤りを検出したり訂正したりする

パリティチェック

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

ただしバリティチェックで可能なのは「1ビットの誤り」を検出するだけしかできない

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

パリティビットは「どの方向に付加するか」によって垂直パリティと水平パリティに分かれる

  • 全体をブロックとみなしてその垂直方向と水平方向のパリティに分ける
  • データを並べた時の各ビット位置単位で付加するのが水平パリティ
  • データ単位(この場合は文字)で付加するのが垂直パリティ f:id:RyoheUdagawa:20210705230725p:plain

CRC(巡回冗長検査)

CRC(Cyclic Redundancy Check)はビット列を特定の式でわりその余りをチェック用のデータとして付加する方法

  1. ビット数を特定の式でわる
  2. 余りをくっつけて、1の特定の式で割ったら余りが出ない状態にする
  3. 余りが出たらビットが狂ったことがわかる

TCP/IPを使ったネットワーク

TCPとIPという2つのプロトコルの組み合わせがインターネットにおけるデファクトスタンダード

  • IPは「複数のネットワークを繋いで、その上をパケットが流れる仕組み」を規定
  • TCPはそのネットワーク上で「正しくデータが送られたことを保証する仕組み」を定めたもの
  • 両者が組みあわさることで「複数のネットワークを渡り歩きながらパケットを正しく相手に送り届けることができる」
  • こうしたインターネットの技術をそのまま企業内LANなどに転用したネットワークのことをイントラネットと呼ぶ
  • 下の表のトランスポート層TCPネットワーク層がIP
何階層 階層名 説明
第7階層 アプリケーション層 具体的にどんなサービスを提供するのか
第6階層 プレゼンテーション層 データはどんな形式にするか
第5階層 セッション層 通信の開始から終了までどう管理するか
第4階層 トランスポート層 通信の信頼性はどう確保するか
第3階層 ネットワーク層 ネットワークとネットワークをどう中継するか
第2階層 データリンク層 同一ネットワーク内(直で繋がっている)でどう通信するか
第1階層 物理層 物理的にどう繋ぐか

TCP/IPの中核プロトコル

ネットワーク層のIPが網としての経路機能を担当し、その上のTCPUDPが「ではその経路で小包(パケット)をどのように運ぶのか」という約束事を担当

  • IP(Internet Protocol)

    • 経路制御を行い、ネットワークからネットワークへとパケットを運んで相手に送り届ける
    • コネクションレス型の通信(事前に送信相手と接続確認を取ることなく一方的にパケットを送りつける)であるため通信品質の保証については上位層に任す
  • TCP(Transmission Control Protocol)

    • 3ウェイハンドシェイクという手順によって通信相手とコネクションを確立し、データを送受信するコネクション型の通信プロトコル
    • パケットの手順や送信エラー時の再送などを制御して、送受信するデータの信頼性を担保 f:id:RyoheUdagawa:20210709231310p:plain

www.infraexpert.com

  • UDP(User Datagram Protocol)

IPアドレスはネットワークの住所なり

  • IPで構成されるネットワークでは繋がれているコンピュータやネットワーク機器はIPアドレスという番号により管理される
  • 個々のコンピュータを識別するために使うものだから重複があってはいけない
  • IPアドレスは32ビットの数値であらわされる

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

IPアドレスにはグローバルIPアドレスとプライベートIPアドレスという2種類がある

グローバルIPアドレスとプライベートIPアドレスの関係は電話の外線と内線の関係によく似ている

IPアドレスは「ネットワーク部」と「ホスト部」で出来ている

IPアドレスの内容はネットワークごとに分かれるネットワークアドレス部と、そのネットワーク内でコンピュータを識別するためのホストアドレス部とに分かれている。つまり、「住所と名前」で構成されている

     ↓ここまではネットワークアドレス
192.168.1.3
      ↑ホストアドレス

IPアドレスのクラス

  • IPアドレスは使用するネットワークの規模によってクラスA、クラスB、クラスCと3つのクラスに分かれている
  • それぞれ「32ビット中の何ビットをネットワークアドレス部に割り振るか」が規定されている
  • ホストアドレス部が「全て0はネットワークアドレス(ネットワーク自体を表す)」「全て1はブロードキャストアドレス(ネットワーク内全てのアドレス)」
10進表記例 255.255.255.0
2進表記例.     11111111.11111111.11111111.00000000
                                                                    

ブロードキャスト

  • ブロードキャスト

    • 同一ネットワーク内の全てのホストに対して、一斉に同じデータを送信すること
    • ブロードキャストを行うには「ホストアドレス部が全て1となるIPアドレス」を指定
    • ブロードキャストは「ネットワーク内の全員」宛てなのでOSI階層モデル第3層(ネットワーク層)のルータを超えてパケットが流れることはない
  • ユニキャスト

    • ブロードキャストの逆の言葉として特定の1台のみに送信すること
    • 複数ではあるが不特定多数ではなく決められて範囲内の複数ホストに送信する場合はマルチキャストという

サブネットマスク

  • 「ホスト数はいらないから、事業部ごとにネットワークを分けたい」という場合にサブネットマスクを用いてネットワークを分割する
    • 分割するメリット
      • ひとつのネットワークに大量のホストをまとめると通信トラフィックが多くなりすぎて通信効率が下がる
        • ブロードキャストだとネットワークの全ホスト宛に送信するので最悪
  • 2ビットを使って分割したネットワークが表現できる
10進表記例 255.255.255.0
2進表記例.     11111111.11111111.11111111.00000000
                  ↑↑サブネット
                                                                    

TCP/IPアドレスとパケットヘッダ

  • TCP/IPによる通信では送信じにOSI参照モデルの各階層がパケットに対して必要な情報を順次付加して次の階層へと受け渡す
    • この時付加される情報のことをヘッダという
    • 各階層におけるパケットの正式な呼び名は以下

f:id:RyoheUdagawa:20210710104427g:plain 7key.jp/nw/technology/osi/osi.html

MACアドレスIPアドレスの変換

DHCPは自動設定する仕組み

LANにつなぐコンピュータの台数が増えてくると、1台ずつに重複しないIPアドレスを割り当てることが思いの外困難となる

  • DHCP(Dynamic Host Configuration Protocol)というプロトコルを利用するとIPアドレスの割り当てなどといったネットワークの設定作業を自動化することができる

NATとIPマスカレード

ドメイン名とDNS

ネットワークを診断するプロトコル

  • TCP/IPのパケット転送において発生した各種エラー情報を報告するために用いられるプロトコルがICMP(Internet Control Message Protocol)
    • 通信エラー発生時にはその発生場所からパケットの送信元に対してICMPによってエラー情報が通知される
    • これにより発生した障害内容を知ることができる
    • ICMPを用いたネットワーク検査コマンドとして有名なのが次の2つ
      • ping
        • 指定コンピュータまでパケットが届くかを試すことでネットワークの疎通が確認できる
      • traceroute
        • 指定コンピュータに到達するまでの間、どのような経路を辿っているか調査できる

ネットワークを管理するプロトコル

ネットワークを構成するルータやスイッチなど、様々な機器の状態や設定を管理するために用いられるプロトコルSNMP(Simple Network Management Protocol)

ネットワーク上のサービス

ネットワーク上で動くサービスにはそれぞれに対応したプロトコルが用意されている

代表的なサービスたち

ネットワーク上のサービスはそのプロトコルを処理するサーバによって提供されている

  • 代表的なプロトコルには次のようなものがある
    • 主だったプロトコルにはあらかじめポート番号が予約されておりこれをウェルノウンポートと言う
プロトコル 説明 ポート番号
HTTP(HyperText Transfer Protocol) Webページの転送に利用するプロトコルWebブラウザを使ってHTMLで記述文書を受信する時などに使用 80
FTP(File Transfer Protocol) ファイル転送サービスに利用するプロトコル。インターネット上のサーバにファイルをアップロードしたり、サーバからファイルをダウンロードしたりするのに使う 制御用:20 転送用:21
Talnet 他のコンピュータにログインして遠隔操作を行う際に使うプロトコル 23
SMTP(Simple Mail Transfer Protocol) 電子メールの配送部分を担当するプロトコル。メール送信時や、メールサーバ間での送受信時に使用 25
POP(Post Office Protocol) 電子メールの受信部分を担当するプロトコル。メールサーバ上にあるメールボックスから受信したメールを取り出すために使う 110
NTP(Network Time Protocol) コンピュータの時刻合わせを行うプロトコル 123

サービスはポート番号で識別する

  • ネットワーク上で動くサービスたちは個々に「それ専用のサーバマシンを用意しなきゃいけない」というわけではない
  • サーバというのは「プロトコルを処理してサービスを提供するためのプログラム」が動くことでサーバになっているわけで一つのコンピュータが様々なサーバを兼任することは当たり前にある
  • IPアドレスだけだとパケットの宛先となるコンピュータは識別出来てもそれが「どのサーバプログラムに宛てたものか」までは特定できない
  • そこでプログラムの側では0~65536までの範囲で自分専用の接続口のを設けて待つようになっている
    • この接続口をポート番号と呼ぶ

WWW(World Wide Web

  • WWWはインターネットで標準的に使われているドキュメントシステム
  • 散在するドキュメント同士が相互に繋がりを持つのが特徴
  • このサービスではWebブラウザを使って世界中に散在するWebサーバから文字や画像、音声などの様々な情報を得ることができる

Webサーバに「くれ」と言って表示する

WWWのサービスにはWebサーバとWebブラウザが欠かせないがそのやりとりはすごく単純

  • Webブラウザ

  • Webサーバ

    • 公開用のファイルを管理
  • サーバの仕事というのは基本的に「くれ」と言われたファイルを渡すだけ

  • なにかデータを整形したり特別な処理を加えたりはしない
  • WebブラウザとWebサーバのやり取りに使われているのプロトコルがHTTP

WebページはHTMLで記述する

WebページHTML(Hyper Text Markup Language)という言語で記述されている

URLはファイルの場所を示すパス

Web上で取得したいファイルの場所を指し示すにはURL(Uniform Resource Locator)という表記方法を用いる

電子メール

  • 電子メールではネットワーク上のメールサーバをポスト兼私書箱のように見立ててテキストや各種ファイルをやり取りする

メールアドレスは名前@住所なり

ユーザ名@ドメイン

ryohei.udagawa@onecareer.jp

電子メールを送信するプロトコルSMTP

電子メールを実際の郵便に置き換えると

  1. ポストに入れる
  2. 郵便屋さんが運ぶ
  3. 郵便受けに届く
  4. 郵便受けから取り出す

1~3がSMTPの役割

電子メールを受信するプロトコル(POP)

電子メールを受信するにはPOPというプロトコルを使用する