Basics on Computer

データdata=数値情報を加工する電子計算機=コンピュータに関する基本事項についてまとめる。

コンピュータ構成要素

コンピュータを構成する基本的な5つの構成要素は、入力(input)、出力(output)、記憶(memory)、情報経路(datapath)、制御(control)であり、特に情報経路と制御を合わせてプロセッサ(processor)と呼ぶ。これらの構成要素は採用するシステムソフトウェアやテクノロジーに左右されない普遍的な構成要素である。

SY:コンピュータはクッキングで例えると理解しやすいかもしれない。

【 料理とのアナロジー 】
コンピュータ   ↔   クッキング
データ 素材
入力 素材調達
プロセッサ 台所
制御/演算 レシピ/調理
記憶 取り置き
出力 料理

インターフェース≒バス interface≒bus

情報経路のうちコンピュータを構成する要素やモジュールの間での情報経路を特にインターフェースと呼ぶ。インターフェースを搭載する機器から見た場合、インターフェースとはその機器が外部と情報をやり取りするための渉外装置、仲介機器、橋渡し装置を指す。特に情報経路であることを強調する場合にはバスと呼ばれる。

【 各種インターフェース 】
名前 解説 補足
ローカルバス CPUのピンと各種バッファとを接続する。
アドレスバス アドレスバッファとメモリやI/Oポートを接続しAピンの情報を伝える。
データバス データバッファとメモリやI/Oポートを接続しDピンの情報を伝える。
I/Oポート CPUと入出力機器との情報を転送する際のインターフェース。 マザーボードのチップセット上に置かれている。
シリアルポート 端末と周辺機器or端末同士を接続するためのシリアル通信を行うインタフェース。

(SY comment)
会社単位で例えるとインターフェースは営業と言える。

キャラクタユーザインターフェース Character User Interface=CUI

キーボードなどの文字入力装置によってユーザがコンピュータを操作するためのインターフェース。シェル=コンソールなどによって実装される。

ハードウェア Hardware

コンピュータ構成要素を物理的に実現(implement)したコンピュータ構成物をハードウェアと呼ぶ。Windowsなどのデスクトップパソコンであればクラムシェル (clamshell=デスクトップを覆っている、側面の蝶番で観音開きする大きな金属)を開けて確認することが出来る。

【 ハードウェア分類 】
名前 解説 補足
主要/1次機器 チップやプロセッサなど電子演算の要となる機器の総称。 マザーボードに搭載される。
補助/2次機器 入出力機器や磁気ディスクなど電子演算を補助する機器の総称。 マザーボードに搭載されない。

SY:主要/1次機器 SY:primary device

コンピュータにおいて最も重要なチップやプロセッサなどのパッケージを総称して1次機器と呼ぶ。

マザーボード motherboard

絶縁体であるプラスチックでできた基板に集積回路=チップセットが搭載されたものをマザーボードと呼ぶ。1次機器がモジュールとして接続される。

【 マザーボードモジュール一覧 】
名前 解説 例、補足
チップ 集積回路とも呼ばれる。
プロセッサ 中央演算処理装置。 Intel社:Pentium、RENESAS社:SuperH[外部リンク]
メモリ 記憶装置。 特にCPU内/外にレジスタ/バッファと呼ばれる特殊なメモリがある。
チャネル マザーボード渉外装置
拡張カード カード型の回路を追加で挿すことで新しい機能を搭載できる。 ビデオカード=グラフィックボード、ネットワークカード=LANカード、SCSIカードなど。

集積回路=チップ Integrated Circuit (IC)=chip

4ミリ角のシリコン上に何十万何百万のトランジスタ、ダイオード、抵抗、コンデンサを配列し組み合わせた電子回路を集積回路(Integrated Circuit=IC)=チップ(chip)という。近年は1チップに載せられるトランジスタ数が大規模になり、そのような集積回路は性能ごとに、LSI(=Large Scale Integrated circuit)、VLSI(=Very Large Scale IC)、ULSI(=Ultra Large Scale IC)などと呼ばれる。

Mooreの法則

18-24ヶ月毎に集積回路に載せられるトランジスタ数は倍増する、というICの集積度に関する成長予測。1960年代にIntel社を設立したメンバーの1人であるGordon Mooreが予想を行った。

プロセッサ=CPU Central Processor Unit ➡Pentium CPU

演算と制御を司る中央演算処理装置。演算部は算術などの演算処理を行う部分を指し、制御部はプログラムの命令に従って演算と主メモリと入出力装置に指示をする部分を指す。

【 CPU構成物 】
制御部 役割 補足
命令解読器=デコーダ 機械命令文を解読する。 (instruction) decoder
レジスタ 主記憶から取ってきた機械命令文を記憶する。
演算部 役割
ALU 実際に演算を行う装置。

ピン ➡Pentium CPU-Pin

1つのピンが1bit情報に対応する。

【 ピン 】
名前 役割 例、補足
アドレスピン アドレスバスを通して主メモリに信号を送りそのアドレスの位置を指定する。
データピン データバスを通して主メモリに信号を送りデータの読み書きを行う。
割り込み受信ピン 割り込み信号を受信する。

動作(処理)サイクル

CPUの動作サイクルは機械命令文を1文実行することである。動作サイクルは命令文を取ってくるフェッチサイクルと命令文を実行する実行サイクルに分けられる。

【 CPU動作サイクル 】
名前 役割
フェッチサイクル 主記憶に格納された機械命令文を取ってくる。
実行サイクル とってきた機械命令文を解読し実行する。
フェッチサイクル fetch cycle
  1. 実行すべき命令文の番地情報が命令ポインタにセットされる。
  2. その番地情報をアドレスバッファに登録し、内部カウンタを一定バイト数(32bit machineでは4)だけ増加させる。
  3. アドレスバッファの番地情報をもとにCPUは主メモリから命令文を取り出しデータバッファに格納する。
  4. 次に実行する番地を命令ポインタにセットする。
  5. データバッファに格納された命令がデコーダと接続するコードレジスタに移る。
命令サイクル instruction cycle
  1. デコーダはコードレジスタにある命令のコードを解読し実行する。処理に分岐が生じる。
  2. 実行アドレス(リニアアドレス)の計算を行う。実行アドレスをベースポインタに入れる。
  3. 制御部がデコードされた命令を実行する。

レジスタ register ➡Pentium CPU-Register

プロセッサ内の特殊な記憶領域。電子回路でできたそろばん=「電子そろばん」。各レジスタのデータ長は32bit/64bitからなり、その本数は各コンピュータでしばしば32本/64本である。コンピュータのアーキテクチャを実装(implement)する。

【 制御部内レジスタ 】
名前 役割 例、補足
命令レジスタ=コードレジスタInstruction Register=Code Register 取り出した命令を保持する。実行中の命令を保持する命令部と次に実行する命令のアドレスを保持するアドレス部がある。
命令ポインタ=プログラムカウンタInstruction Pointer=Program Counter 実行中のプログラムの位置(⇆命令レジスタの先頭の命令)を指すポインタ。次に実行する命令の(オフセット)アドレスを格納する。
ベースポインタ=フレームポインタ スタックフレームの局所変数を指す。
スタックポインタ スタックセグメントの先頭アドレスを指す。
コントロールレジスタ システムの動作を制御する。
【 演算部内レジスタ 】
名前 役割 例、補足
汎用レジスタ 固定小数点数の演算(オペランド、作用素、算術結果)記憶を行う。
浮動小数点レジスタ 浮動小数点数の演算(オペランド、作用素、算術結果)の記憶を行う。
フラグレジスタ=条件コードレジスタ システムの動作を制御する。

CPU/システム性能評価

SY:CPUとシステムの性能評価はほぼ同様に行うことが出来る。

【 CPU/システム性能評価 】
名称 説明 補足
スループット throughput 単位時間に実行しうる機械命令文/ジョブ処理数(transaction number)
ターンアラウンドタイム Turn Around Time=TAT 機械命令文/ジョブ処理要求の作業開始から処理結果の出力完了までの時間。
応答時間=経過時間 response time=elapsed time 機械命令文/ジョブ処理要求の送信から処理結果の出力開始までの時間。
【 CPU性能評価単位 】
名称 説明 補足
MIPS Million Instructions Per Seconds 1秒間に実行しうる機械命令文の数を100万単位で表す。 1MIPS=100万機械命令文/秒
FLOPS FLoating Operations Per Seconds 1秒間に実行しうる浮動小数点演算の回数を表す。 1MFLOPS=100万浮動小数演算/秒
MIPS=1/命令実行時間

(命令実行時間)=(CPI)x(クロックサイクル時間)=(CPI)/(クロック周波数)

【 CPU性能評価単位 】
名称 説明 補足
CPI Clocks Per Instruction 1機械命令文の実行に要するクロック数。
クロック周波数 1秒間に発生する信号(クロック)の数を表す。 cf. C言語-CLOCKS_PER_SEC
クロックサイクル時間 1クロックに要する秒数を表す。 =1/(クロック周波数)
ベンチマーク

ある複数の大規模プログラムを使用してOSの処理時間を調べるOSの性能評価テスト。

メモリ=記憶装置 memory

実行中のプログラムやそのプログラムが必要とするデータを格納する半導体素子。

【 メモリの性質と分類 】
性質 役割 使用されるRAM
揮発性(V)/不揮発性(NV) 電力が供給されている間だけ/されていなくてもデータを保持する性質。 VRAM/NVRAM
1次(主)/2次(副) 実行中の/実行していないプログラムの保持に使用するメモリの分類。 DRAM/SRAM

揮発性 volatile=V

一定時間経つと自然放電によりデータが消えてしまう性質。

リフレッシュ refresh

揮発性記憶の保持を行うためのデータの読み込みと書き込み動作のこと。リフレッシュの頻度は数十回/秒である。

VRAM

揮発性を持つRAM。DRAMやSRAMは通常VRAMに分類される。

1次/主/実メモリ primary/main/real memory

実行中のプログラムの保持に使用するメモリを1次メモリ=主メモリ=実メモリという。これらはその用途から揮発性メモリが適切である。

整列化制約 aligment restriction

データをメモリ内の自然な境界に合わせて配置して転送速度を速くするために、アドレスなどを4の倍数に整列しておくこと。

セグメント segment

連続したアドレス空間においてある一定の用途のために分割された領域のこと。

  • 各セグメントは開始アドレスと大きさによって決定され、対応するレジスタによってアクセスされる。
【 1次メモリセグメント分類 】
名前 解説 例、補足
コードセグメント CPUが実行するプログラムコードを格納する。 変数の割り当ては他のセグメントで行われる。テキストセグメントとも呼ばれる。
データセグメント 初期化された大域変数・静的変数を格納する。 サイズは固定。
bssセグメント Block Started by Symbol 初期化されていない大域変数・静的変数を格納する。 プログラムローダによって実行時に0がセットされる。サイズは固定。
ヒープセグメント mallocなどによってプログラマが自由に使用できる領域。 Heap形式で低位アドレスからデータが格納される。プログラム実行中に要求され動的に割り当てallocateと解放delocateに使用されるメモリ領域。サイズは可変。フラグメンテーションが発生する。
スタックセグメント 関数の局所変数などを格納する。 stack形式で高位アドレスからデータが格納される。スタックフレームというまとまりで情報が格納される。サイズは可変。
スタックフレーム

プログラム実行中に定義された局所変数や借り引数、演算(関数)の戻り値、関数の実行が終了した際に復元する命令ポインタの値の格納に使用される

ガベージコレクション garbagge collection

フラグメンテーションが発生したヒープセグメントの記憶領域(=アロケータorデロケータ)を回収して再度使用可能にすること。

番地=アドレス address

各記憶素子=メモリサイトにはアドレスと呼ばれる特定の整数が割り当てられており、このアドレスによってメモリサイトにアクセスしそこに格納されている情報を参照する。

物理アドレス=実アドレス physical/real address

データバスが主メモリ内のメモリサイトにアクセスする際のアドレスバス回路上の2進数の形式で表されるアドレス。

【 アドレス変換 】

物理アドレス
(キッチン)
アドレス変換表
<---
(食材出し入れ)

仮想アドレス
(冷蔵庫)
アドレス空間

特定の用途のために使われるメモリ、特にプロセスが参照可能なアドレスの集合のことをアドレス空間と呼ぶ。それぞれのアドレス空間に分割して互いが互いの領域にアクセスできないようにしておけば、バグの領域をそのアドレス空間に制限することができる。

【 アドレス空間の種類 】
名前 役割 補足
カーネルアドレス空間 カーネルが使うアドレスの集合。 このアドレス空間へのアクセス権限は強く設定しておかないとシステムが誤作動した場合に被害が大きい。
ユーザアドレス空間 ユーザアプリケーションが使うアドレスの集合。 このアドレス空間へのアクセス権限は強くする必要は必ずしもない。
I/Oポートアドレス空間 I/Oポートに割り当てられているアドレスの集合。 このアドレス空間へのアクセス権限は強く設定しておかないとシステムが誤作動した際に被害が大きい。

(SY comment)
カーネルアドレス空間へのアドレスはシステムコールを用いて行い、I/Oポートアドレス空間へのアクセスはデバイスドライバを用いて行う、というのがUNIXの設計思想であるようだが、Linuxではiopermといった直にデバイスを操作するシステムコールが用意されており、Linuxの設計思想が必ずしもUnixのそれに完全に準拠しているわけではない。cf.『Linuxを256倍使うための本』

バッファ=緩衝記憶装置 buffer

ある別の用途のために暫定的に情報を保管しておく機能や装置はバッファと呼ばれる。

【 マザーボード内バッファ 】
名前 解説 補足
アドレスバッファ CPUから主メモリやI/Oポートへアドレスの情報を送る際に使われるバッファ。 CPU内にある場合にはメモリアドレスレジスタと呼ばれる。
データバッファ CPUから主メモリやI/Oポートへデータの情報を送る際に使われるバッファ。 CPU内にある場合にはメモリデータレジスタと呼ばれる。
キャッシュメモリ cache memory

1度使った情報を素早く再利用できるように一時的に記憶しておくメモリ。プロセッサ内部に搭載されているSRAMを用いて構成される小さいが高速なメモリで構成される。DRAMなどの大きいが低速なメモリのためのバッファの役割を果たす。

スプーリング

主記憶装置と低速の出力装置との間のデータ転送を緩衝記憶装置を介して行うことでシステム全体のthoughputを上げることをスプーリングと呼ぶ。

入出力処理装置=チャネル channel

マザーボードに対し外部の情報の入出力を行うインターフェースはチャネルとも呼ばれる。渉外する際内部の情報は抽象化される必要があるため、チャネル設計者は内部情報の抽象化について考える必要がある。そのコンピュータ固有のアーキテクチャなどを実装する。

基本命令セット=アーキテクチャ fundamental instruction set=architecture

CPUと最低水準のシステムソフトウェアとの間で情報をやりとりするためのインターフェース。機械語を正しく動作させるためにプログラマが知っていなければならない事柄の全てを含む。コンピュータ設計者は、アーキテクチャとそれを実際に実現する方法(implementation)とを区別して考える必要がある。

アーキテクチャは低水準言語を用いて記述されるため、アーキテクチャの学習は人間にとって負担が大きい。しかし豊かな構造をもつユーザユーザアプリケーションプログラムの作成には入出力処理やメモリの割当といった低水準システム機能が必要になる。アーキテクチャを知らなくとも低水準システム機能を使ったユーザアプリケーションを気軽に作ることができるような、アーキテクチャをカプセル化するソフトウェアサービス=ABIがOS間で統一され提供されている。

アプリケーション・バイナリ・インターフェース Application Binary Interface=ABI

CPUに直接命令をくだす機械命令文(binary instruction)とユーザアプリケーションプログラムを仲介するOSのソフトウェアサービス。この機能により基本命令セットを知らなくとも低水準機能を呼び出すことができる。

ABIがない場合、ユーザアプリケーションプログラムはシステムソフトウェアやOSがバージョンアップされる度にコンパイルして再びリンクしなければプログラムに不具合が生じる。これはアプリケーションベンダやユーザにとって大きな負担である。ABIは動的リンクを採用することによりこの負担を取り除いている。動的リンクされる標準ライブラリはlibc(Cライブラリ),libsys(システムランタイム),libX(Xウィンドウ),libnsl(ネットワークサービス),...などである。

SY:補助/2次/周辺機器 auxiliary/secondary device

各種周辺機器を同一環境で結合するために、物理的仕様(ケーブル、コネクタ、電気信号など)と論理仕様(機器間のやりとり)からなる取り決め=仕様が定められている。

【 補助/2次機器一覧 】
名前 役割 例、補足
入力/出力機器 コンピュータに/からデータを入力/出力する装置。 スキャナ、プリンタ
電源 コンピュータに電力を供給する装置。
外部記憶装置 入出力された情報を蓄える。 ドライブ、磁気ディスク
ファン 熱散逸加速装置。

Direct Memory Access=DMA

CPUを仲介せずにメモリや2次装置の間で直接データを転送する形式。DMA転送はCPUに負荷がかからずに高速かつ大量のデータの転送が可能になる。以下のIDEやATAなどはDMA転送が実装されたものである。一般に、それぞれの規格毎にそれ専用のバスが存在する。

【 データ転送・接続規格 】
名前 役割 例、補足
IDE Intelligent Drive Electronics コンピュータに磁気ディスクや光学ドライブを接続するための規格。デバイス制御のためにCPUに負荷がかかる。 1986年当時のCompaq Computer社などが開発。➡ [外部リンク2]
ATA Advanced Technology Attachment 各社が独自にIDEの拡張を行い互換性が損なわれたため、1994年ANSIが策定した標準IDE規格でパラレル通信を行う。 当初はパラレルATAと呼ばれた。現在では後継のSATAが使われる。
SATA Serial ATA ATA規格の後継拡張仕様でシリアル通信を行う。 リムーバブルメディアドライブで使用される。
SCSI Small Computer System Interface IDEの後継規格。専用コントローラがデバイスを制御するためIDEに比べCPUに負荷がかかりづらい。 ➡ [外部リンク]
ISA Industry Standard Architecture IBMのPC/AT互換機で使用されていたバス幅(=1回の転送データ量)16ビットの拡張カード用バススロット規格。 現在ではPCIやその後継が使われる。
AGP Accelerated Graphics Port インテルが策定したグラフィックボード専用バススロット規格。 現在ではPCI-eやその後継が使われる。
PCI Peripheral Component Interconnect Intel社を中心とするPCI SIGによって策定されたバス幅32ビットの拡張カード用バススロット規格。 ISAに取って代わる。
PCIe PCI-Express SATA接続より高速にシリアルデータ通信が行える拡張バススロット規格。 「M.2 SSD」→PCI-eを使用したSSD。現在主流の接続規格。
NVMe Non-Volatile Memory Express PCleバスを介してSSDなどのデバイスからデータに素早くアクセスするための転送プロトコル。
USB Universal Serial Bus Plug&Playやホットプラグ(=電源が入った状態でのパーツの取り外し機能)といった特徴をもつインターフェース規格。 小型で携帯に便利。
【 USB関連ドライバ 】
名前 役割 例、補足
ホストコントローラドライバ 全てのUSBデバイスはComputerに搭載されているチップを介して制御される。 USB1.1→UHCI、OHCI、USB2.0→EHCI
クラスドライバ 各USBデバイスの標準化されたデータ送受信形式の機能をデバイスクラスと呼び、これらに対し汎用のドライバが用意されている。
ベンダーデバイスドライバ デバイスクラスに属さないUSBデバイスはベンダー専用のドライバを利用する。

入出力機器 Input/Output device

【 入出力装置一覧 】
種類 解説 入力装置 出力装置
キャラクタデバイス character device 文字などのdigital情報を扱う。CUI入力装置。 キーボード プリンタ
ポインティングデバイス pointing device analog情報を扱う、GUI入力装置。 マウス タッチパネル、ディスプレイ
オーディオデバイス audio device 音声情報を扱う。 マイク スピーカー

外部記憶装置 storage

コンピュータの電源を切った後にデータを記憶しておくための装置。

ドライブ drive

外部記憶装置を認識するためのデバイス。内蔵型、外付け型、リムーバブル型(取り外し可能)がある。

磁気ディスク disk ➡ [外部リンク]

disc(円盤)+desk(机)=disk(ディスク). 主要な内蔵型or外付け型不揮発性2次メモリ。

【 磁気ディスク種類 】
名前 容量 単価 衝撃による故障リスク ランダムアクセス 性能
HDD Hard Disk Drive 大 安い 高い 非常に遅い 動作音や振動が発生
SSD Solid State Drive 小 高い 低い 非常に速い 動作音が静か。サイズが小さく軽い。
【 ディスク構成物 】➡ [外部リンク]
名前 役割 補足
各プラッタ表面からわずかに浮いた位置に配置された可動アームに取り付けられた電磁コイル。記憶の読み書きを行う。 各ヘッドにはヘッド番号が振られている。
プラッタ platter 片面/両面に磁性体が塗布された回転する平滑な円盤。 回転数のオーダーは毎分~105である。
①記録面 surface プラッタの表面が記録面となる。 各記録面はサーフェス番号をもつが、しばしば各面にヘッドが備えつけられヘッド番号と一致する。
②トラック track 1枚のプラッタは上から見て同心円状に分割された記憶領域。 各トラックは外側から番号が振られたトラック番号を持つ。
シリンダ cylinder プラッタを束ねたときに円筒状になる同じトラック番号をもつトラックのこと。 このためトラック番号はシリンダ番号とも呼ばれる。
③セクタ sector トラックをさらに円弧に分割した記憶単位で、ディスクアクセスの最小単位。 各セクタはトラック毎にセクタ番号が振られる。MBRでは512バイト/セクタだがGPTでは4KB/セクタも可能。
【 ディスクアクセス時間 】
(アクセス時間)=(シーク時間)+(サーチ時間)+(データ転送時間)
名前 役割 補足
シーク時間 データのあるトラックまで磁気ヘッドが移動する時間
サーチ時間 求めるデータが磁気ヘッドに来るまでに回転する待ち時間
データ転送時間 磁気ヘッドがデータを読み取る時間
【 ディスクアクセス方式 】
名前 役割 補足
CHS方式 CHS情報でセクタにアクセスする。 8Gバイトの壁が存在。今日このアクセス方式は使用されない。
LBA方式 Logical Block Addressing 論理ブロック番地を用いてセクタにアクセスを行う。 8Gバイトの壁が存在せず今日でもこの方式が使われる。
論理ブロック番地 Logical Block Address=LBA

SCSIディスク内の全てのセクタに対し0から振った32ビットの通し番号。

【 パーティション=ディスク分割方式 】
名前 役割 補足
MBR形式 古くから使用されているパーティション形式でWindowsXP以前のOSでも使用可能。 プライマリパーティション4つorプライマリパーティション3つと拡張パーティション1つまで作れる。
GPT形式 MBR形式の後継で、WindowsXP以前のOSでは使用できず、また64bit環境が必要だが2TBを超える大容量ディスクを認識できる。 プライマリパーティション128個まで作れる。
➡ [外部リンク]
【 磁気ディスク構成 】
セクタ番号(LBA) 00000000H 開始セクタ(LBA)- 開始セクタ(LBA)- 開始セクタ(LBA)- 開始セクタ(LBA)-
磁気ディスク MBR PBR パーティション1 PBR パーティション2 PBR パーティション3 PBR パーティション4
バイト数 512B パーティションサイズ パーティションサイズ パーティションサイズ パーティションサイズ
MBR=Master Boot Record ➡ [外部リンク]

パーティション分割された記憶ドライブの先頭(シリンダ0、ヘッド0、セクタ1)に配置されるセクタ。電源投入直後ブートを行うためのプログラム=ブートローダとファイルシステムを含む論理パーティションの構成情報=DPTの2つを保持する。

【 MBR構成 】
先頭から 内容 全512バイト 例、補足
ブート(ストラップ)ローダ boot(strap) loader MBRからカーネルファイルを主メモリにロードしOSを起動するプログラム。電源投入直後BIOSによって読み込まれる。 446バイト メインブートレコードとも呼ばれる。
パーティションテーブル Disk Partition Table=DPT ディスクのパーティション情報を記述する。各エントリの長さは16バイトで最大4つのパーティションしか存在できない。 64バイト
ブートシグナチャ boot signature ドライブが正当なものであることを保証するマジックナンバ=0xAA55の値を格納。この値が入っていないとMBR自体が無効なものとして扱われ、ブートローダが実行されずパーティションテーブルも読み込まれない。 2バイト
【 パーティションテーブル構成 】➡ [外部リンク]
先頭から 内容 全16バイト 例、補足
ブートフラグ boot flag 起動パーティション/それ以外のパーティションで0x80/0が通常入る。通常ブートローダはこのフィールドが0x80となるパーティションからOSを読み込む。 1バイト =アクティブフラグ
開始セクタ(CHS) パーティションの開始セクタのCHSアドレスをその順序で格納。 3バイト
パーティションタイプ フォーマット形式の識別子。 1バイト ➡ [外部リンク]
終了セクタ(CHS) パーティションの終了セクタのCHSアドレスをその順序で格納。 3バイト
開始セクタ(LBA) パーティションの開始セクタのアドレスをLBAかつリトルエンディアンで格納。 4バイト
パーティションサイズ パーティションの全セクタ数をリトルエンディアンで格納。 4バイト
(E)PBR (Extended) Partition Boot Record ➡ [外部リンク]

記憶ドライブ中の各パーティションの先頭に配置されるセクタ。電源投入直後ブートを行うためのプログラム=ブートローダを保持する。

【 PBR構成 】
先頭から 内容 全512バイト 例、補足
ジャンプ命令 ブートローダへエントリポイントを指定する命令コードと実行アドレスが書かれている。 3バイト
OEM名前 Original Equipment Manufacturing OSのOEMを格納する。 8バイト
パラメータブロック ボリュームラベル、セクタ数、クラスタサイズなどのパーティション情報を格納する。 51バイト
ブートローダ ➡ MBR-ブートローダ 448バイト
ブートシグナチャ ➡ MBR-ブートシグナチャ 2バイト
GPT=GUID Partition Table

パーティションラベルにGUID=Globally Unique IDentifier(用途を表すID+特定のためのID)を用いている。

【 GPT構成 】
先頭から 内容 LBA 例、補足
MBR ディスクの保護と互換性を目的に挿入されている。 0
GPT header OSのOEMを格納する。 1
パーティションテーブルエントリ 128bytes/パーティションテーブルエントリ、4パーティション情報/1セクタ。 2-33
パーティション1-128
パーティションテーブルエントリ パーティションテーブルエントリ1-128の情報を複製している。 32セクタ分
GPT header 1セクタ分

フラッシュメモリ

リムーバブル型ストレージ。書込みと読出しのメカニズムはEPROMと同じ。ただし、データの消去はブロック毎に可能になった。データ消去時にはメモリサイトにおけるFETのSに高電位、Gを接地、DをオープンにしてG酸化膜で生じるトンネル現象を利用して電子を引き抜く。

名前 役割 補足
USBメモリ USBメモリ コンピュータを内臓する機器にUSBポートをもったフラッシュメモリ。 小型で携帯に便利。
SDメモリカード Secure Digital カード型のフラッシュメモリ。 デジタルカメラや携帯、ラップトップパソコンで使用。

光ディスク optical disk

リムーバブル型ストレージ。個々のbitに対し1をディスク表面のピットと呼ばれる小さなくぼみに対応させて情報を格納。レーザー光を用いて書き込み、読み込みを行う。bitの読み込みは、ディスク表面にレーザー光を照射しその反射光を検出して表面がピットが平坦かで判定される。書き換え可能なものにするには、結晶質で反射性のある材料を使う。

名前 役割 補足
CD Compact Disk
DVD Digital Versatile Disc
Blue-ray Disc

コード code

SY:CPUが読み込むことのできる情報(=機械語)のうち、人にとって有意義な情報の単位(=単語)を一般にコード(code)と呼ぶ。コードを書くことを一般にコーディング(coding)と呼ぶ。

機械語=バイナリコード machine language=binary code

CPUが読み込むことができる情報は通常トランジスタによって実装される電気的なオン/オフで実現された2値の値を最小単位として構成されている。この機械が直接読み込みを行う2進数情報=バイナリ(binary)情報は機械語とも呼ばれる。

ビット BInary digiT=bit

CPU内でやり取りされる電気的なオン/オフで実現された情報を構成する最小単位をビットと呼ぶ。特にNビット(N bit)と言った場合、N続きのビットで表される情報、すなわち、N桁からなる2進数を表す。chipの集積度を表す際の単位として用いられる。

【 換算単位 】
略称 K M G T
名称 Kilo Mega Giga Tera
対応数 210=1024 220=1048576 230=1073741824 240=1099511627776

バイト byte

1byte :=8bit. (SY: byte=bite+eight.) コンピュータの記憶容量を表す際の単位として用いられる。

オクテット octet

通信の文脈において、1byteが8bitを表さないで使われることがあることを考慮し、厳密に8bitを意味する単位。コンピュータが通信する容量を表す際の単位として用いられる。

パケット packet

1packet :=1024bit=128octet. インターネット上でマシン情報を送受信する際の単位として用いられる。特に、インターネット通信における送受信データそのものを指すこともあり、その場合にはIPパケットとも呼ばれる。

フレーム frame

ネットワーク上のnetwork interface層(主にEthernet上)においてデータを送受信する際のデータの単位として用いられる。

機械命令文 machine instruction

CPUが直接理解できる機械語で表現されたコードで終止符と呼ばれる特定の区切り文字によって区切られる。CPUの動作サイクルの単位をなす。

【 機械命令文の例 】
10...1
命令部
1001...01
レジスタ部
0010...11
アドレス部
⏎
終止符
名前 解説 例、補足
命令部 命令文の動詞にあたる部分。処理の内容を記述する。
レジスタ部 SY:作用部 データを転送するレジスタや番地部を変更する汎用レジスタを指定する。 特に、番地部に対する作用素として用いられる汎用レジスタは指標レジスタ(SY:作用レジスタ)と呼ばれる。
アドレス部 SY:オペランド部 主メモリのアドレスを指定する。 命令語にレジスタ部の指定がない場合、アドレス部の値がそのまま主メモリのアドレス=絶対アドレスを表す一方、レジスタ部の指定がある場合、番地部の値に作用レジスタの値を加えた値が主メモリのアドレス=有効アドレス(Effective address)を表す。

バイト順序=エンディアン endianness

バイナリデータを並べる際の順序のこと。いくつか流儀がある。

名前 解説 利点 例
ビッグエンディアン big endianness 末尾のバイトがそのまま末尾に格納される方式。 人にとって読みやすい。 0xAA55→0xAA 0x55
リトルエンディアン little endianness 末尾のバイトが最初に格納される方式。 データの長さが変化した場合でもアドレスが変わる事なくアクセス出来るため計算の処理がしやすい。データの長さが分からない場合でもデータを読みやすい。 0xAA55→0x55 0xAA

文字コード ➡ [外部リンク]

人が使う一つの文字や記号はコンピュータでは1byte=8bit単位でコード化される。

SY: 7bit規則 7bit rule

文字をコード化する際には7bit分=2^7(=128)通りだけ対応を定めておき、最上位の1bitをどのように使って1byte codeを作るかはしばしば使用者団体に委ねられることが多い。このことを便宜上7bit規則と呼んでおく。自由度が残された最上位1bitには様々な使用法がある。

7bitコード

最上位bitの値を0にとった1byte codeを7bit則で定められた意味と同等の意味を持つとして定義される1byteコードを7bitコードと呼ぶ。

検査ビット check bit

7bitコードのうち最上位bitとして情報の送受信を行う際にノイズなどによってコードの破損がないかどうかを検査するために使う場合がある。そのときに用いられる最上位ビットを検査ビット(check bit)と呼ぶ。

【 検査ビットの種類 】
ビット名 解説
パリティビット 検査ビットの値として1バイト中に含まれる1となるbit数を常に偶数となるように定めたものをパリティビットと呼ぶ。パリティビットは1字ずつ送信する調歩式伝送で用いられ、受信側は1byte中の1の数が偶数であれば正しく送られてきた情報なのでチェックビットを0にして7bitコードに帰着させて読み取り、奇数であれば異常があったことを発信し再転送するよう働きかける。
Content-Transfer-Encoding: 7bit

電子通信を行う場合、上記の理由で最上位ビットを検査ビットに変換してから送信することが多く、例えば電子メールのヘッダに上のような文字が使われている場合、上記のような変換を行っていることを表す。従って、変換後の文字コードは7ビットコードになるため、8ビットコードで書かれた文字は採用されている検査ビットの値に応じて文字化けを起こす。例えば半角カナはJIS8ビットで最上位が1で表現されるため、最上位ビットが0に変換される場合メールで用いると文字化けを起こす。

8bitコード

最上位bitの値として1にとった場合の1byte codeに対し別の文字コードを対応させた1byteコードを8bitコードと呼ぶ。別の文字コードとして通常その国で使われる言語を表した文字コードが使われる。

ISOコード ISO code

世界各国で用いられる英字、数字、特殊記号の標準化を行うために、ISOが定めた7bit ruleに基づく世界共通のコードをISOコードと呼ぶ。

ISO7bitコード

ISO7bitコードはISOが定める7bitコードである。

SI/SO Shift In/Shift Out

ISOコードと別の文字コードに区別するために、ISOコードにはShift In/Shift Out機能をもったSI/SOコードが用意されている。Shift Inからの7bitコードはISO7bitコードとして読み込まれ、Shift Outからの7bitコードは別の規格の7bitコードとして読み込まれる。

【 機能文字まとめ 】
略称 名称 解説
SI/SO Sfhit In/Shift Out シフトイン/シフトアウト
ACK/NAK ACKnowledge/Negative ACK 肯定信号/否定信号
SOH/EOT Start Of Heading/End Of Transmission 伝送開始信号/伝送終了信号

Unicode ➡ [外部リンク]

世界の主な国の文字を統一的に扱うためにISOによって考案されたコードで、英数文字も含めて全ての文字を2バイト(=2x28=65536通り)で表す。現在ではUnicode全体は4バイトで定義されている。

UTF-8 Unicode Transformation Format-8

ASCIIコードと互換性があるように構成されている。

拡張UNIXコード EUC=Extended UNIX Code

7bit則に基づいて定められたUnix用のコード。現在はUTF-8に取って代わられている。

ASCIIコード ASCII=American Standard Code for Information Interchange ➡ [外部リンク]

アメリカでは英数文字として7bit則に基づいたASCIIコードを用いることが定められている。これは実質的にISO7bitコードと同じである。

JISコード JIS=Japanese Industrial Standards ➡ [外部リンク]

日本語で用いられる文字や記号の標準化を行うために、日本産業規格=JISが定めた7bit則に基づくコードをJISコードと呼ぶ。

KI/KO Kanji In/Kanji Out

JISコードは漢字コードを内包しており、それらへの変換はKI/KO(Kanji In/Kanji Out)コードによって行われる。

JIS7bitコード

JIS7bitコードはJISが定める7bitコードである。Shift Outされた場合に対する7bitコードには半角カタカナ文字や句読点が割り当てられている。

JIS漢字コード

JIS7bitコードにはJIS漢字コードが含まれており、JIS漢字コードで表される文字は2バイトの全角文字で表されるという特徴がある。Kanji Inからの7bitコードはJIS漢字コードとして読み込まれ、Kanji Outからの7bitコードはISO7bitコードとして読み込まれる。

JIS8bitコード

JIS8bitコードはJISが定める8bitコードである。最上位ビットが1の場合には半角カタカナ文字や句読点が割り当てられている。

シフトJIS漢字コード

JIS8bitコードにはシフトJIS漢字コードが含まれており、JIS漢字コード同様2バイトの全角文字で表される。Kanji Inからの8bitコードはシフトJIS漢字コードとして読み込まれ、Kanji Outからの8bitコードはJIS8bitコードとして読み込まれる。

数コード number code

【 数コード分類 】
種類 表現
固定小数点数 2進数表現
浮動小数点数 16進数表現
ゾーン10進数 文字数表現
パック10進数 2進化10進数表現

16進数 hexadecimal number

(数)16 ⇆ 数h ⇆ 数H ⇆ h数 ⇆ H数 ⇆ 0x数
【 表現 】
2進数 1101110010111011110001001101010111100110111101111
10進数123456789101112131415
16進数1H2H3H4H5H6H7H8H9HaHbHcHdHeHfH

固定小数点数

桁数が有限の2進数で表された整数のことを固定小数点数とも呼ぶ。

【 8bit固定小数点数の例 】
(0011000)2=0×27 + 0×26 + 1×25+ 1×24 + 0×23+ 0×22+ 0×21+ 0×20=(32+16)10

Xビット固定小数点数は最上位ビットの桁上がりで0に戻ることからmod 2でXとなる(代表)整数とみなすことが出来る。

2の補数表現 two complement's representation

固定小数点数では、Xビット固定小数点数の周期が2Xとなることから周期の上半分を負数として使用する。すなわち、100...00には±2X-1の2通りある解釈のうち、-2X-1を採用する。従って最上位ビットが1の場合にはそれらは負数となる。Xビット固定小数点数Nに対しその補数は-N=2X-N (≡ -N \mod 2X)で表される。

Nの補数-Nの求め方は、まずNを2進数で表した後0を1に、1を0に置き換えた(bit flip)数Nを考える。N+Nは全てのビットが1の値を取るが、これは-1に相当する。したがってN+1が補数に相当する:-N=N+1.

1の補数表現 one complement's representation

最上位ビットが1の場合それらを負数し、ある数の補数はbit flipした数-N=Nとする表現。特に全てのビットを1とした数は0と同じである。

浮動小数点数

浮動小数点数は、その表示において小数点が常に先頭に置かれ、それを指数の値の桁数だけ動かしたところにある。

【 4byte浮動小数点数の例 】
(3731.164)10=(E93.2A0)16
=+.E932A0×163=(0 1000011 1110 1001 0011 0010 1010 0000)2
∈ 符号部.仮数部×底指数部=(符号部 指数部 仮数部)2

【 浮動小数点構成 】
名前 解説 例、補足
符号部 浮動小数点数の符号を表す。 1bitで記述され+=0,-=1である。
指数部 浮動小数点数の指数は2進数で表される。4byte=32bit数/8byte=64bit数であれば7bit/15bit使われる。したがって指数部は27=128の周期性がある。 慣例として(0000000)2=(-64)10,(1000000)2=(0)10,(1111111)2=(+63)10のような対応を用いる。
仮数部 浮動小数点数の仮数は2進化16進数で表される。 4byte数であれば3byte、8byte数であれば6byte使われる。

パック10進数

10進数の各桁を2進数で表した2進化10進数で表し、最後に符号を示す4bitの符号コードを付けた数である。+=1100,-=1101である。最後が0か1かでプラスかマイナスかが判定される。

SY:識別コード identification code

SY:模様コード pattern code

【 幾何学コード分類 】
分類 解説
1次元模様コード バーコード
2次元模様コード QRコード

バーコード

縦線の幅、線と線の隙間の間隔によって情報をコード化する。

【 バーコード種類 】
名前 解説
JANコード Japan Article Number JISによる規格
ISBNコード International Standard Book Number 書籍のための規格
ITFコード Interleaved Two of Five 物流用に作られた規格

QRコード Quick Response

【 QRコード種類 】
名前 解説 補足
スタック型 stack type 1次元バーコードを縦に積み重ねて表現。
行列型 matrix type 黒と白で格子状に情報を格納。あらゆる方向から情報を読み取れる。 1994年現在のデンソーウェーブ社が開発した日本発の技術。

SY:電波コード=RFID radio code=Radio Frequency IDentificaiton=RFID➡ [外部リンク]

ICタグの情報を無線通信によって読み書きする自動認識技術。

ICタグ=RFIDタグ

データを管理するための無線チップと送受信するためのアンテナを内蔵したタグ。

【 周波数帯 】
名前 周波数 通信範囲 例、補足
LF帯 Low Frequency ~135kHz 狭い。~10cm 自動車のキーレスエントリ。環境非依存。
HF帯 High Frequency 13.5MHz 狭い。~10cm 交通機関のICカード、回転ずしのお皿
UHF帯 Ultra High Frequency 860-960MHz 広い。1m~数10m 在庫管理
マイクロ波帯 micro-wave Frequency 2.45GHz 中程度。~3m 電波干渉を受けやすい。

ソフトウェア=プログラム=SY:魔法 program=software=SY:spell

CPUに行わせる命令文を一般にプログラム(program)と呼び、プログラムを書くことをプログラミング(programing)と呼ぶ。特にハードウェアと概念的に対比する場合やハードウェアを動作させる命令の集合のことをソフトウェア(プログラム)とも呼ぶ。プログラムは特殊な効果をもつ文字列であり、本ノートではこのような特殊な効果を持つ文字列のことを「spell(呪文=魔法=おまじない)」、spellを実行することを「(スペル)発動=詠唱」とも呼ぶ。

(SY comment)
魔法(spell)の用語の使い分けだが、「呪文」はとりあえず何か効き目が期待される文字列、「魔法」は使い慣れている、もしくはその作用機序が分かっている(つもりなっている)文字列、「おまじない」はとりあえずそう書いておくとご利益がある文字列、などというように自分の気分で使い分ける。気持ちとしては、「呪文」はおどろおどろしい文字列に、「魔法」は嬉しい文字列に、「おまじない」は意味を考えずにコピペで使うありがたい文字列に用いる。

システムソフトウェア system software➡ [外部リンク]

ハードウェアとユーザが使用するアプリケーションプログラムとを仲介するインターフェースを一般にシステムソフトウェアと呼ぶ。しばしばユーザが直接扱うことなく背景で動作する。システムソフトウェアを統括するのがOSである。

ファームウェア firmware➡ [外部リンク]

電源投入時に自動的にすべてのハードウェアの初期化を行うシステム。

  • 電源投入直後DelキーやF2キーを押すことによる割り込みを実行することで表示される。
  • 通常コンピュータに付随する外部記憶装置であるROMに書き込まれよくキラキラ光るシールが貼られているが、アップグレードが可能になるようにEEPROMに書き込まれることもある。
【 ファームウェアの種類 】
名前 解説 補足
BIOS Basic Input Output System MBR型ディスクパーティションに対応。ブートセクタはMBR内からメモリ=0000:7C00Hに読み込む。システムBIOSはメモリを1MBしか使用できないためインターフェースにGUIが使えないなどの制限がある。 「Ralf Brown's Interrupt List」にサービスがリストアップされている。
UEFI Unified Extensible Firmware Interface BIOSの後継。GPT型ディスクパーティションに対応。システムBIOSにあった制約が無くなり様々な拡張機能が施されている。 古いタイプのデバイスをサポートする機能はCSMと呼ばれる。[外部リンク]、[外部リンク]
電源投入時自己診断テスト Power On Self Test=POST

ブート(ストラップ) boot(strap) ➡linux-boot ➡ [外部リンク] [外部リンク] [外部リンク]

コンピュータの電源投入やリセットによるコンピュータシステム起動後、自動でブートローダを読み込んでシステムソフトウェア、特にOSを主記憶に展開しユーザプログラムを実行できるようにするまでの一連の処理の流れのことをブート=ブートストラップと呼ぶ。

プログラム言語

【 プログラム言語の基本的な分類 】
分類 解説 補足
低水準言語 記述がハードウェアに依存する。 人間には読みづらい。
高水準言語 記述がハードウェアに依存しない。 人間には読みやすい。

アルゴリズム algorithm

プログラムのうち、特に代数計算を行うための一連の計算手続きのことをアルゴリズムと呼ぶ。

ソースファイル source file

CPUに処理を行わせるためのプログラムが書かれた1次ファイル=大本になるファイルのこと。

実行ファイル executable file

機械語で書かれた機械命令文で構成されるファイル。

設定ファイル config file

ソースファイルを翻訳する際や実行ファイルを実行する際に指定されるパラメータを記述したファイル。

SY:魔法陣

本ノートでは魔法を実行する環境のことを総じて魔法陣と呼ぶ。

低水準言語=アセンブリ言語 low level language=assembly language

ハードウェアに依存するプログラム言語。人間語に近いシンボル形式で書かれており、コンピュータのアーキテクチャを構成する。

アセンブル assemble

低水準言語を機械語に翻訳すること。アセンブルを行うソフトウェアをアセンブラassemblerという。

SY:アセンブリ assemblee

低水準言語で書かれたプログラム、もしくはそのファイルのことをアセンブリと呼ぶ。

ニーモニック mnemonic

機械命令文(binary instruction)に対応する低水準言語を構成する単語。短い英数字で書かれている。

【 ニーモニックを用いたアセンブリ 】
アセンブリ:
説明:
ADD
命令部
%ebp
レジスタ部
,
 
%esp
アドレス部
⏎
終止符

高水準言語 high level language

ハードウェアに依存しないプログラム言語。人間にとって分かり易くかつ扱いやすい文法をもつ。

【 高水準言語まとめ 】
実行方式 言語
コンパイル C・Java・Fortran
インタープリト JavaScript・Perl・HTML・python
ディレクティブ directive

高水準言語によるプログラムを低水準言語としてコンパイル/インタープリトする際の細かな指示を与えるプログラム。ソースファイルだけでなく、初期設定ファイルに記述されることも多い。

コンパイル compile ➡ C-コンパイル

高水準言語を低水準言語に翻訳することをコンパイルと呼び、そのためのソフトウェアをコンパイラという。

【 コンパイル処理過程の例 】
1 字句解析 プログラムの文字列を規則に基づいて解析し、最小の字句単位tokenの切り出しを行う。
2 構文解析 字句解析が出力する字句を読み込みながら構文規則に従って2分構文木を作成する。
3 意味解析 構文解析で正しい文法に則った文の意味を解釈し、最適化処理がしやすいように同じ意味を持つ(後置表記などの)別の表現に書き直して中間コードを作成する。
4 最適化 実行時間や所要記憶容量が少なくなるようプログラムの再配置(変数のレジスタ割り当て、関数のインライン展開、マクロの代入、自明な演算の実行など)を行う。
5 コード生成 実行ファイルを作成する。
前置《後置》記法=《逆》ポーランド記法 prefix《postfix》 notation=《reverse 》Polish notation

演算で使用する2つのオペランドを演算子の後ろ《前》に記述する表記法。ある等式を前置《後置》表記するには、(比較子も含めた)演算子を節点とする2分構文木を構成し深さ優先の先行順《後行順》で文字を並べることで得ることが出来る。通常の記法は中置記法infix notationと呼ばれる。

ヒューレットパッカード社が作った初期の電卓(世界初の携帯電卓「HP-35」など➡[Wikipedia])は逆ポーランド記法で計算式を入力していたようである。➡計算機で試してみる

SY: コンパイリ compilee

コンパイルされるプログラム、もしくはそのファイルのことをSY:コンパイリ(compilee)とも呼ぶ。コンパイリはソースファイルであることが多い。

SY: インタープリト interpret

コンパイルすることなく、命令を一つずつ機械語に翻訳しながら実行すること。インタープリトを行うソフトウェアプログラムをインタープリタ(interpreter)と呼ぶ。

スクリプト script

コンパイルする必要がなく、インタープリタによって実行されるプログラム、もしくはそのファイルのことをスクリプト(script)と呼ぶ。

オブジェクト指向言語

データを取り扱う際には、構造を持たせて特徴が同じものをひとまとまりで扱えるようにするのが便利である。そのようなデータの構造が(抽象的に)定義された集合をデータクラス(data class)と呼び、それに属するデータ要素⇄元elementのことをデータオブジェクト(data object)と呼ぶ。データオブジェクトが下位のデータ(オブジェクト)から構成されている場合、構成するデータのことをデータ成分(data compoenent)と呼ぶ。以下、適宜これらの用語のうち「データ」の部分を省略する。

(SY comment)
データクラス、データオブジェクト、データ成分の関係は、数学(線形代数)におけるベクトル空間、ベクトル、ベクトル成分の関係と同じである。この関係を言及した記述を私はこれまで見たことはなく(少なくとも明確には)認識されていないように思われるが、オブジェクト指向のプログラミング言語の理解を助けると思われる。(2018/2/26)以下により詳しい対応の説明がある。(追記:2021/9/13)

データクラス ∋ データオブジェクト → データ成分
ベクトル空間 ∋ ベクトル → ベクトル成分

オペランド=オブジェクト規則

演算が行われる対象はオブジェクトでなければならない。オブジェクト以外のものを演算するとErrorを引き起こす。

オブジェクト object

データクラスに属する/値を取る要素のことを一般に(データ)オブジェクトと呼ぶ。

成分 compoenent

データオブジェクトは内部構造をもちさらに下位のデータ(オブジェクト)から構成することができる。このような場合、構成しているデータのことをそのオブジェクトの成分と呼ぶ。

SY:定オブジェクト specific object

オブジェクトに対し、特定の要素=具体的な値としてのオブジェクトのことを定オブジェクトと呼ぶ。

【 定オブジェクトの作り方 】
分類 解説
リテラル構成 literal expression 標準で搭載されている組み込みクラスに属するオブジェクトはしばしばそのクラス特有の表示をもつ。このような組み込みオブジェクト特有の表現をリテラル表示と呼ぶ。
抽出的構成 abstract expression クラス()のように属するクラスを明示的に指定して定オブジェクトを構成するやり方を抽出的構成と呼ぶ。クラスにコンストラクタが定義されていると、()内に引数を書くことで引数を値に持つオブジェクトを取ってくることができる。
初期化

変オブジェクトを構成する際に修飾子 変オブジェクト=定オブジェクト;のような形で変オブジェクトの初期値を定めることを初期化と呼ぶ。初期化の作業は変オブジェクトが初めて構成されたときのみ行われる。したがって、loop処理などで再度出てきた場合には値の代入は行われずこの文は無視される。

名付けルール

変オブジェクトには一般に自由に名前を付けてよいが、基本的に同じ名前を使うとエラーとなるため、一定のルールで名前をつけるとよい。以下に一般的な名前の付け方のルールや慣習が知られている。

クラス

オブジェクトの抽象的集合としてのオブジェクトのことを集合オブジェクト=クラスと呼ぶ。

構成成分:.

オブジェクトを構成する成分のうち、ピリオド.によって参照される成分のことを一般に構成成分と呼ぶ。

【 構成成分の分類 】
名称 解説 補足
クラス構成成分 集合オブジェクトの構成成分。
オブジェクト構成成分 集合オブジェクトに属するオブジェクトの構成成分。 単に構成成分と言った場合にはこちらを指す。
【 構成成分の構成物 】
名称 解説 補足
SY:構成変数=メンバ=プロパティ オブジェクトの構成成分となる変数はメンバ=プロパティとも呼ばれる。 =member
SY:構成関数=メンバ関数=メソッド オブジェクトの構成成分となる関数はメンバ関数=メソッドとも呼ばれる。(演算の成分化) =member function

SY:数学における関数との対応

クラスとはベクトル空間に値をもつ関数に対応し、変オブジェクト=インスタンスとはその関数の切断面(切断地点における引数xとその値f(x)の組)に対応する。

ベクトル空間に値をもつ関数:f
関数fの切断面:(x,f(x))
変域(base space) 値域(fiber space)
引数:x (ベクトル)値:f(x)
→ ベクトル成分:f(x)[1]
 

(SY comment)
これがオブジェクト指向言語の最も重要な理解である。後は各言語で変オブジェクトの構成方法やそのアドレスと成分の参照の方法を覚えるだけである。この理解に到達するまでにだいぶ時間がかかった。(2021/09/10)

オペレーティングシステム Operating System=OS ➡ [外部リンク],[リンク2]

総合統括システムソフトウェア。マシン上で実行されるアプリケーションプログラムのためにハードウェアの資源を管理したり監視したりする。

【 アドレス空間 】
《ユーザアドレス空間》
ユーザプログラム
  標準ライブラリ
高水準アクセス
--->
API
《カーネルアドレス空間》
システムコール 監督=カーネル
(ソフトウェア割り込み)   デバイスドライバ

低水準アクセス
--->
《ハードウェア》
 
デバイス
【 OSによるジョブ処理の流れ 】
@入力機器
ジョブセット
魔法詠唱!
ジョブマネジャ
--->
@仮想メモリ
ジョブ入力キュー
↓
タスク
スワッパ
--->
ページング
@主メモリ
タスクページ
↓
タスク待ち行列
タスクマネジャ
--->
<---
タイムオーバー
@CPU
タスク実行

--->
成功
@仮想メモリ
ジョブ出力キュー
I/Oスケジューラ
--->
@出力機器
魔法顕現!

監視プログラム=カーネル=SY:監督 supervisor=kernel

ハードウェアとソフトウェアの全ての情報のやりとりを統括する、OSの要であり頭脳でもある制御プログラムのことを監視プログラム(SY:監督)=カーネル(supervisor=kernel)と呼ぶ。ハードウェアとソフトウェアの情報連絡は全て監督を通して行われる。監督は配下に管理プログラムを組織している。

【 監督配下プログラム 】
名前 解説
デバイスドライバ device driver ハードウェアの監視や制御を行う。利用頻度に応じてカーネル組み込みかカーネルモジュールとして利用される。
割り込みハンドラ inturrupt handler ハードウェアとソフトウェアを監視し割り込み依頼が生じると監督下で緊急動作を行うプログラムを指す。
ジョブマネジャ Job manager 入力され補助(実質)メモリに移されたジョブに対し優先順位に従って実行順序を決めジョブの待ち行列(ジョブ入力キュー)を作る。待ち行列先頭のジョブをスケジューリング作業を行って実行に必要なファイルや周辺機器の利用が可能になり次第それを実行中のジョブ列に加えページをもつタスクに分解する。
タスクマネジャ=プロセスマネジャ Task(process) manager ジョブの優先度に応じてタスクのCPU待ち時間行列を作りその先頭のタスクの単位(=ページ)をCPUに転送して実行していく。スケジューラから時間切れ(タイムオーバー)が知らされるとタスクの実行を中断しタスクの待ち行列を優先度に応じて並べ替え先頭のタスクを実行する。
メモリマネジャ memory manager スワッパを使ってメモリ割り当てを制御する。

スケジューラ ➡linux-スケジューラ

【 スケジューラの種類 】
名前 解説
(CPU)スケジューラ CPU下もしくは監督下である短い時間間隔(=quantum)でクロック割り込みを生成し、時間が来ると監督に時間が来たこと(time-over)を知らせる。
SY:メモリスケジューラ=スワッパ swapper スワッピングを制御するスケジューラ。プロセスをスワップ装置から主記憶へスワップインする唯一つのプロセス。
I/Oスケジューラ 入出力を制御するスケジューラ。

割り込み/割り込み依頼 Inturrupting ReQuest=IRQ

割り込み依頼には通常ハードウェアからの割り込みとソフトウェアからの割り込みの2種類がある。OSは起動時に各種割り込みに対してベクタと呼ばれる識別番号を割り当てると同時にベクタ番号と割り込みハンドラの対応表を作る。この番号が正しく割り当てられないとシステム障害を起こす。

ハードウェア割り込み

外部周辺機器から割り込み受信ピンに送られてくる割り込み信号によって生じる。

【 ハードウェア割り込み 】
名前 解説
マシンチェック割り込み ハードウェアに異常な動作が生じたときに発令される。監督はその異常状態を分析し修復できるならば修復を行うシステムタスクを作りタスクマネジャにタスクの実行を指令する。
クロック(タイマ)割込み clock tick 処理にtime-overが生じるとスケジューラから監督に連絡が入りタスクマネジャに指令を出す。
入出力割込み 入出力機器やデータ管理プログラムから入出力の処理の依頼が生じると監督は入出力処理装置に入出力指令を出す。
優先順位=特権レベル priority level=privilege level=PL

各種割り込みには優先順位が付けられており、優先順位の高い順位の割り込み(タイマ割り込みやディスクイベントなど)が優先順位の低い割り込み(キーボードイベントなど)に先だって実行される。特権レベルは0から3までの4段階あり数値が小さいほど高い権限を表す。

【 特権レベル 】
値 役割 Linuxの場合
0 最高レベル カーネルプログラム
1 高レベル 使わない
2 中レベル 使わない
3 弱レベル ユーザアプリケーション

ジョブ job

コンピュータ利用者(ユーザ:user)がOSの管理の基にコンピュータに仕事をさせるためのプログラムやデータのことをジョブと言う。

ジョブはその処理方法によって電話型(=対話処理)と郵便型(=バッチ処理)とに分けられる。

【 ジョブの種類 】
種類 英名 解説 例、補足
電話型、対話処理 interactive processing ユーザがその場でコンピュータにプログラムを入力を行うことで実行され通常即時に処理される。 複数のユーザがいてもスケジューラに従ってユーザを切り替えてTSS処理を行う。
郵便型、バッチ処理 batch processing 事前に準備された作業手順が書かれたプログラムファイルを束(batch)で入力して一括して処理させる。 TATが長いことが欠点。
ハイブリッド処理 Real-time/On-line processing ユーザがその場でデータを入力すると、内部プログラムが即座に実行され実行結果が瞬時に出る。 データ収集、問い合わせ、データ通信、取引処理

システムコール system call ➡ C/システムコール

カーネルに直接処理を要求するジョブ。監督呼び出しSuperVisor Call(=SVC)とも呼ばれる。

API Application-Programming Interface

低水準で行われる処理を抽象化して、ユーザにとって低水準の処理を扱いやすくするシステム設計やプログラムのことをAPIと呼ぶ。

タスク=プロセス task=process

ジョブは(実行ボタンを押すなどして)実行に移されるとまず磁気ディスクなどの補助(実質)メモリに輸送されジョブマネジャによってある実行単位に分解される。この分割された実行単位をタスク=プロセス(UNIX)と呼ぶ。

時分割方式 Time-Sharing System=TSS

CPUは通常コンピュータ1つにつき1つしかなく、その動作サイクルも機械命令文を1つずつ処理するだけである。このような特性をもつCPUを効率よく作動させるためOSは仮想的な動作空間(ページ)を補助(実質)メモリに複数作成してこの空間を瞬時に切り替えながら(ページング)処理を行わせることで複数のことが同時に処理されているかのような動作環境を作り上げている。このような処理方式を時分割方式(TSS)と呼ぶ。時分割方式においては1つのプログラムの処理時間の最短化よりもスループットの最適化に重点が置かれる。

(SY comment)
裏方で超サイヤ人となった悟空が残像拳で調理をしているようなものである。

CPU(実行)時間 CPU (execution) time

TSSにおいては、実行プログラムのためにプロセッサが割いた時間(=CPU実行時間)と、入出力待ち時間や他のプログラムを実行させるための時間を含むユーザがプログラムの実行開始から終了までに感じる応答時間(response time)を区別する。

【 CPU実行時間=ユーザCPU実行時間+システムCPU実行時間 】
名前 解説 例、補足
ユーザCPU実行時間 プログラム中で費やされたCPU実行時間
システムCPU実行時間 OSがタスクを遂行するために費やしたCPU実行時間

ページ/ページフレーム page/page frame

タスク=プロセスに割り当てられている仮想メモリの該当部分をページと呼ぶ。プログラムはページに分割されて仮想メモリにバラバラに入れられているため、それらを実行する際にはアドレス変換が行われた後にページ単位で主メモリに移される。特に主メモリに移されたページのことをページフレームと呼ぶ。

スワッピング⊃ページング swapping⊃paging

実メモリと仮想メモリに情報を出し入れする作業はスワッピングと呼ばれ、特にその情報単位がページとなるものをページングと呼ぶ。

スレッド thread

タスク=プロセスに割り当てられたページをさらに複数に分割して処理を行う際の単位をスレッドという。

マルチスレッド multi-thread

特に複数のスレッドをスケジューラに従って高速で切り替えながら並列処理を行う環境のこと。

リアルタイム/オンライン処理

要求が行われると同時に処理を行う。単位時間当たりの処理件数(=throughput)を大きくすることが重要。

【 リアルタイム/オンライン処理の種類 】
種類 例、補足
データ収集 バーコードによる販売時点情報管理(POS=Point Of Sale system)、各種計測(雨量:AMEDAS=Automated MEteorological Data Acquisition System(外部リンク), 交通量,...)
問い合わせ 各種データベースへのアクセス(蔵書検索,...)
取引 為替取引、座席予約、ATM
システムの信頼性向上の方針

リアルタイム処理では時々刻々とデータの処理が行われているため、その間にコンピュータの故障や停電などによって処理が中断すると、業務が滞るだけでなくその間に入力されたデータの損失も生じる。このような被害を最小限にするためにバックアップ体制を整え信頼性を向上させておくことはリアルタイム処理では重要になる。

【 信頼性向上の方針 】
名前 英語 解説 補足
フォルトトレランス fault tolerance 耐故障。システムの構成要素を多重化して故障に備える。 failsoft,failsafe.
フォルトアボイダンス fault avoidance 故障排除。システムの個々の構成要素の信頼性を向上させ故障そのものの発生を抑える。
【 バックアップ体制 】
名前 英語 解説 例、補足
フェイル fail 突然のトラブルが生じた場合、リアルタイム処理が中断される。
フェイルソフト failsoft 故障が発生した部分を切り離し、処理能力を(大幅に)縮小して運転(フォールバック)しながらリアルタイム処理を続行する。
フェイルセーフ failsafe 突然のトラブルに際し、ほぼ通常の処理能力でリアルタイム処理を続行するか、安全側にシステムを制御する。 交通管制システムにトラブルが発生した場合、信号機を常に赤に点灯させる。
フールプルーフ foolproof ユーザが誤った操作をしても事故が起こらないようにする。
【 バックアップシステムの種類 】
名前 英語 Computer数 CPU数 バックアップ体制 解説
シンプレックス simplex 1 1 fail 1つのCPUをもつ1台のコンピュータでリアルタイム処理を行う。異常が生じた場合リアルタイム処理は中断される。
マルチプロセッサ multi-processor 1 multi failsafe 1台のコンピュータに複数のCPUを搭載し、1つのCPUに異常が生じてもそのCPUに割り当てられたタスクを他のCPUに割り当ててリアルタイム処理を続行する。
デュプレックス duplex 2 2 failsoft 予備のコンピュータが待機し、稼働中のコンピュータに異常が生じたとき自動的に予備のコンピュータに切り替わりリアルタイム処理が続行される。
デュアル dual 2 2 failsafe 2台のコンピュータで同じリアルタイム処理を並行して行い、一方のコンピュータに異常が生じてもリアルタイム処理には何の影響もない。また一定時間ごとに処理結果を検証し誤動作の検査も行われる。
ロードシェア load-share multi multi failsafe 複数のコンピュータでリアルタイム処理を分散並行して行い、1台のコンピュータに異常が生じてもタスクが残りのコンピュータに振り分けられる。

OSの種類

【 OSの種類 】
名称 解説 シェルの名前 魔道書の名称 例、補足
Linux Unix系列 terminal shell script Ubuntu,CentOS,RedHat Linux
Mac Unix系列 terminal shell script
Windows DOS系列 command prompt batch file

シェル=コマンドライン command line

各OSにはシェル(Unix系:shell)=コンソール(console)=コマンドライン(Windows:command line)が実装され、そこに文字列を書いて(タイプして)プログラムをOSにジョブとして依頼し実行する。シェル=コマンドラインは魔法陣の一種であり主要なCUIである。

コンソールconsole

OS内で動くアプリケーションプログラムに付随するCUIはコンソールと呼ばれる。プログラムの出力を段階毎に詳しく追跡したい場合にしばしば用いられる。

環境変数

OS上で動作するタスクがデータを共有して環境を整備するために利用できる変数。

電子回路 Electronic circuit

コンピュータ内にあるチップ上には半導体によって構成される大量の電子スイッチと算術論理素子(ALU)によって構成される電子回路が組まれており、それらは大きく分けて算術論理回路と記憶回路に分けることが出来る。

半導体 semiconductor

真性半導体 intrinsic semiconductor

非常に純度の高い半導体。自由電子と正孔がちょうど同じ数だけある。

シリコン silicon

純度の高い4価元素であるケイ素のことをシリコンという。

twelve 9 purity

99.9999999999%のように9が12個並ぶ純度を表す。

不純物半導体 impurity semiconductor

シリコン結晶を溶かしたものに、少量の不純物元素を入れて結晶を作ることで不純物半導体が得られこれが電子部品が得られる。シリコン結晶だけでは電流がほとんど流れず電子部品にはならず、そこに価電子の異なる物質を少量混ぜることで電子部品になる。5価の元素(ドナー:donor)を入れると電子が一つ余ったN型半導体が得られ、3価の元素(アクセプタ:accepter)を入れると正孔が出来P型半導体が得られる。電荷の運び手となる粒子をキャリアと呼ぶ。

【 不純物半導体種類 】
型 キャリア 価電子数 混入元素例 不純物名称
P型 正孔(Positive) 3価 ホウ素(5B)、ガリウム(31Ga)、インジウム(49In)、これらの複合化合物 accepter
N型 電子(Negative) 5価 リン(15P)、ヒ素(33As)、アンチモン(51Sb)、複合化合物 donor

製造工程 ➡ [外部リンク]

【 不純物半導体製造工程 】
シリコン結晶
(真性半導体)
溶かす
--->
+不純物
シリコンインゴット
(不純物半導体)
輪切り
--->
  
無地ウェハー
回路焼付
--->
by ステッパー
IC基板
切り出し
--->
 
ダイ
ボンディング
--->
 
チップ
シリコンインゴット ingot

不純物を入れて溶かしたシリコンを回転させながら引き上げると半導体インゴットが出来る。インゴットとは直径8/12インチ(20/30cm)、長さ12/24インチ程の巨大な円形柱の形をした物体で、より大きくより均一なインゴット程作成は難しくなる。

ウェハー wafer

シリコンインゴットを輪切りにした厚さ2.5mmにも満たない薄い円盤。日本語のウェハースである。

ステッパー stepper

ウェハーに回路を焼き付ける光学装置。ステッパー作業によってトランジスタ、導体、絶縁体などの電子回路素子を作成する。

ダイ die

電子回路が焼き付けられたウェハーを切り出した(dice)長方形の部分。この切り出しにより一連のパターン形成工程で生じる微細な傷、欠陥を分離することが可能となる。ウェハー上のダイの総数に対する良品の割合を歩留まり(yield)という。

ボンディング

良品のダイを選別してパッケージの入出力ピンに接続しチップを作る工程をボンディングという。この工程でも不良品が発生する可能性があり再度テストを行い、最後のテストに合格したダイが晴れてチップとして出荷される。

電子スイッチ

電気的なオンオフを実装する。整流作用をもった電子部品によって実現される。

【 電子スイッチの種類 】
名前 解説
真空管 グリッドにかける電圧によって電流を流したり止めたりする。
ダイオード 両端にかける電圧の正負の違いで電流を流したり止めたりする。
トランジスタ 3極管の現代版。現代のIC回路���主力となる。

真空管 Vacuum tube➡ [外部リンク]

エジソン効果を用いた電流整流作用装置。ガラス管の中にカソード電極とそれを覆うプレート電極の二つを封入し、カソード金属のみを電熱器(ヒーター)で熱することでカソードからプレートの一方向のみ電子がガラス管中を移動する。ガラス管の中を真空にすることで反跳電子を効率よく捕らえると同時に電熱器の燃焼を防ぐ。

3極管 triode

カソードとプレートの間に電子がすり抜けられるよう格子(grid)状にした第3の電極(グリッド)をおいてグリッドの電圧を調節することで電気信号の制御を行った真空管。グリッドの部位が電子スイッチとしての役割を果たす。

ダイオード diode ➡ [外部リンク]

P型半導体とN型半導体を接合してできる、di(二つの)ode(路)を持つ素子で、P型/N型に接続する路はアノード/カソードと呼ばれる。

【 応答 】
電位の関係 電流 解説
P (アノード) > N (カソード) P → N 正孔がNの方へ移動し電流がPからNへ流れる。
P (アノード) < N (カソード) 流れない 正孔がアノードの方へ移動し電流が流れない。

(SY comment)
水が高いところから低いところへ流れるように、電流は電位の高いところから低いところへ流れる。通常電圧をかけることは、水の例えで言えば堤防をつくって水位を上げることに相当する。水が流れてる=1,流れてない=0である。

トランジスタ ➡ [外部リンク][外部リンク2]

電気的に制御されるオン(1)/オフ(0)の2値の値を取る動作をする半導体スイッチ。現代のコンピュータの基板を成す集積回路はこのトランジスタが集積されて出来たものである。

【 トランジスタの種類 】
型 解説 動作速度
バイポーラ 電子と正孔の二つの極性の電荷で動作する。 普通。
ユニポーラ 電子もしくは正孔どちらかの極性の電荷で動作する。 速い。

(バイポーラ)トランジスタ

トランジスタと言えば、バイポーラトランジスタを指す。一方の極性をもつ薄い半導体の両側を逆の極性をもつ半導体ではさんで接合しそれぞれに電極をつけてできたトランジスタ。ベース電流を調節することでコレクタの電流を変化させる。

NPN型

  1. 電位をC>Eで設定する。
  2. B<Eでは電子はC側に引き付けられるが、Eの電子はBの正孔と打ち消しあいC側へは流れ込まない。
  3. B>Eの電圧をかけると、Bに電流が流れE側の電子がB電圧で加速されC側に流れ込む。Cに引き付けられていた分の電子が一斉に移動するため大電流が流れる。

(SY comment)
大雑把にはB<Eだと水はCからBに流れ込んでもEの堤防を越えられないが、B>Eの場合はBの方がEより高所にあるので水がC->Eへ流れる。

PNP型

  1. ベースの電圧操作はNPNの場合同様、EB間に電圧をかけることで行う。
  2. NPNの場合においてCE間の電圧を逆にする。これによりNPNの場合とは応答が逆になる。

(SY comment)
大雑把にはB>Eの場合だとEに流れ込んだ水はBの堤防を越えられないが、B<Eの場合はBの方がEより低所にあるので水がE->Cへ流れる。

ユニポーラ(or電界効果)トランジスタ Field Effect Transistor=FET

半導体の中に逆の極性をもつ半導体を入れ、SiO2絶縁体を挟んで金属盤を接合して電極をつけたトランジスタ。

【 FETの種類 】
略称 解説
JFET Gateに小さな逆極性半導体。
MOSFET SourceとDrainに小さな逆極性半導体。

接合形FET Junction FET=JFET ➡ [外部リンク]

NキャリアJFET NJFET

N型半導体(S,D)の中にP型半導体(G)を入れた接合形FET。NPNJETとも呼ばれる。

  1. 単極性であるため、電圧をD-S間でかければD->Sで電流は流れる。
  2. S>Gで電圧をかけると、電界効果により空乏層ができてN型半導体内の通路が狭くなり電子の流れを妨げるようになる。
PキャリアJFET PJFET

P型半導体(S,D)の中にN型半導体(G)を入れた接合形FET。PNPJETとも呼ばれる。

  1. 単極性であるため、電圧をD-S間でかければD->Sで電流は流れる。
  2. S>Gで電圧をかけると、電界効果により空乏層ができてP型半導体内の通路が狭くなり電子の流れを妨げるようになる。

金属酸化被膜FET Metal Oxide Semiconductor FET=MOSFET

MOSFETは集積化が容易であるという特徴があり、DRAMのメモリサイトなどに使われる。

NキャリアMOS NMOS

P型半導体(G)の中にN型半導体(S,D)を入れたMOSFET。

  1. 電圧をD-S間でかけてもGに電圧をかけない限り電流は流れない。
  2. G>Sで電圧をかけると、Gの電圧にひかれてP型半導体中に電子がしみだしこれがキャリアとなる。
PキャリアMOS PMOS

N型半導体(G)の中にP型半導体(S,D)を入れたMOSFET。

  1. Gの電圧が低い場合に限り電流が流れる。
  2. G>Sで高い電圧をかけると、Dに流れた正孔キャリアがGに吸われて電流が流れない。

(SY comment)
PNPトランジスタと同様、G>Sの場合だとDに流れ込んだ水はGの堤防を越えられないが、G<Sの場合はGの方がSより低所にあるので水がD→Sへ流れる。

CMOS Complementary MOS➡ [外部リンク]

NMOSとPMOSが同じ入力電圧に対して逆の動作をすることを利用して、それらを同一基板上に組み合わせて配置すると消費電力を小さくすることができ小型化に有利なIC回路を作ることができる。

算術論理回路 Arithmetic and Logic Circuit=ALC

プロセッサ、レジスタに用いられる。算術論理回路は大きく分けてDTLとTTLの2種類に分類される。

【 論理回路の種類 】
略称 名前 解説
DTL Diode-Transistor Logic ダイオードとトランジスタの両方を用いて組まれた論理回路。
TTL Transistor-Transistor Logic トランジスタのみを用いて組まれた論理回路

正論理・負論理

高電圧/低電圧を1/0として行う論理演算を正論理と呼び、この逆を負論理と呼ぶ。これらは逆の関係にありMIL記号の小さな〇が負論理の印と考えることが出来る。実際の回路では正論理と負論理を混在させ信号の減衰を防いだり消費電力を減らして電気的に効率の良い回路が作られている。

算術論理素子 Arithmetic and Logic Unit=ALU

算術論理素子(ALU)を生成する基本的なALUの組み合わせ(AND,OR,NOT)を基本ALUと呼ぶ。古くはGateとも呼ばれた。

ANDゲート

信号ゲート

AND素子は例えばプロセッサがレジスタからレジスタへのデータを転送する際のデータ転送回路=信号ゲートとして使われる。制御がゲート信号(B)を1(青)/0(赤)に設定すると入力信号(A)を出力(C)に通す/通さない。

ORゲート

NOTゲート

inverterともいう。bipolarトランジスタを用いたNOT素子。

CMOS inverter

CMOSを用いたNOT素子。

PMOSのgate=High(ON)/Low(OFF)の場合、sourceが閉じて電流が流れない/開いて電流が流れる。同時にNMOSのgate=ON/OFFとなり、電流が流れない/流れる。この性質により、Vo=OFFのときVpから電流は流れず無駄な電力を消費しない。

基本ALUを用いて初等的ALUであるNAND,XOR,NORが次のように構成される。

NANDゲート

【 NAND-回路図 】

NANDgate

【 NAND-MIL記号 】

NANDMIL

XORゲート

addition mod2: A ⊕ B ≡mod2 A + B

【 XOR-回路図 】

XORgate

【 XOR-MIL記号 】

XORMIL

NORゲート

【 NOR-回路図 】

NORgate

【 NOR-MIL記号 】

NORMIL

比較一致回路 Match circuit

1bitを比較し同じであれば1を返し異なれば0を返す。

算術回路 Arithmetic Circuit

半加算器 Half Add Unit

1bitと1bitの桁上がりの加算を行わない回路を半加算回路と呼ぶ。XORゲートによって和を計算し、ANDゲートによって桁上がりを計算する。

【 半加算器真理値表 】
A B ---> S=[A+B]0 C=[A+B]1
0/1 0/1 ---> 0 0/1
1/0 0/1 ---> 1 0

全加算器 Full Add Unit

最初の半加算器で各桁のビットを加算して和と桁上がりを求め、もう1つの半加算器で下の桁上がり(C-1)を考慮しながら計算を行う。

【 全加算器真理値表 】
A B --[C-1]-> S C
0/1 0/1 --[C-1]-> C-1 0/1
1/0 0/1 --[0]-> 1 0
--[1]-> 0 1

固定小数点数加算器 Fixed point number Addition

固定小数点数の足し算は、最初の桁を半加算器で行った後、残りの桁を下の桁からの桁上がりを考慮した全加算器を用いて計算する。

記憶回路

メモリを構成する回路。読み出し専用の不揮発性メモリであるROMと読み書き両用の揮発性メモリであるRAMから成る。

順序回路 Sequential circuit

入力だけでなく出力側の状態値の出力の次の値が決定される回路を一般に順序回路という。順序回路は構成素子の出力情報がその素子の入力に入るような特徴を持っている。入力が0の場合に出力の値が保持される特性を持つ順序回路は記憶回路として実用的に好ましい。

メモリセル=SY:メモリサイト memory cell=SY:memory site

1ビット情報を記憶する最小単位はメモリセル=SY:メモリサイトと呼ばれる。メモリの内部ではメモリサイトが格子状に規則正しく配列され、セル格子を選択するためのデコーダとセルへの読み書きを行うI/Oコントローラ回路で制御されている。慣習で行/列の線はワード線(W線)/ビット線(B線)と呼ばれている。各メモリサイトはアドレスをもちこれによってそのメモリサイトにアクセスされるようになっている。

(SY comment)
サイトと呼ぶ理由は格子理論において格子状の系に対しその最小単位をサイトと呼ぶためである。セルというとさらに複雑な内部構造がある印象を受けるため、文脈に応じて使い分ける。

【 ビットデータ記憶方法まとめ 】
名称 bit=1/0
コンタクト方式 ビット線に電流を流す/流さない。
拡散方式 格子にトランジスタを付ける/付けない。
注入方式 メモリサイトトランジスタのしきい電圧を高く/低く設定。

フリップフロップ回路 Flip-Flop Unit ➡ [外部リンク][リンク2]

1ビット情報(0と1の両方)を記憶する順序回路でレジスタやカウンタに用いられる。

【 代表的FF回路 】
略称 名前 解説
RS-FF Reset-Set FF Unit Sで値がセットされ、Rで値がリセットされる。
JK-FF Jack-King FF RS-FFのR=S=1が改善され出力が反転する。
T-FF Toggle FF 入力がある度に出力が反転する。
D-FF Delayed FF 出力の状態によらず入力と同じ値を返す。

RS-FF Reset-Set FF Unit

S(Set)が書き込み、R(Reset)が読み出し、Qが記憶する1bitの出力に対応する。S→1を送るとビットがセット(Q→1)される一方、R→1を送ることでビットがリセット(Q→0)される。S=R=1はinconsistent circuitで禁止する。

【 RS-FF回路 】

RSFF

D-FF Delayed FF

RS-FFにおいてSとRを接続(S=R=:D)した回路がD-FF回路である。RS-FFの真理値表の黄色部から見て分かるように、出力が出力の状態に依存せず入力と同じ値を返す。名前はクロック波形の中にこのFFをと1クロック分遅れて(Delay)出力されることに由来する。

JK-FF

RS-FFにおいてS=R=1がinconsistentであったものを改善し、出力結果をQ,Qで反転されるよう機能を変更した回路がJK-FF回路である。JackとKingがQueenを奪い合うことからその名前が付けられたそうである。(➡ [外部リンク])

【 JK-FF回路 】

JKFF

T-FF Toggle FF

JK-FFにおいてJとKを接続(J=K=:T)した回路がT-FF回路である。JK-FFの真理値表の黄色部から見て分かるように、入力がある度(T=1)に出力が反転する(Toggle)。

シフト回路

1bitの移動を行う回路。信号ゲートが開く(SS=1)と最初のRS-FFで蓄えた1bitの情報が次のRS-FFへ転送される。

【 シフト回路 】

Shift

ROM Read Only Memory ➡ [外部リンク]

不揮発性を実装したメモリ。電源を切っても失いたくない情報の保持に使用される。

【 ROMの種類 】
略称 名前 解説 用途、補足
MROM Mask ROM 追加書き込み不可。 フォントメモリ、電子辞書。単にROMと言った場合MROMを指す。
〖E〗PROM 〖Elasable〗 Programable ROM 一度だけ書き込み〖と消去〗が可能。 ブートローダ、BIOS。フラッシュメモリはEPROMの原理で作動している。
EEPROM Electorically EPROM 書き込みと消去が可能。 メモリサイトが大きいものは大容量にはしづらい。

MROM

名前の由来はデータを焼き付ける写真製板の原版がマスクと呼ばれたことに由来する。チップ(ウェハー)を製造する段階で形状によってバイナリ情報を確定する。

ユニポーラトランジスタ/バイポーラトランジスタを使う場合にはゲート/エミッタの回路を切断することで情報が書き込まれる。

〖E〗PROM ➡ [外部リンク]

PROMのメモリサイトであるMOSFETのゲート部分には他所と絶縁した浮遊ゲート(Floting Gate=FG)に制御ゲート(Control Gate=CG)と呼ばれる電極が取り付けられている。

書き込みには、SからDに電流が流れている状態でCGに高い電圧を加えると電子がDの近くで大きな運動エネルギーを獲得して高熱電子(Hot Electron=HE)になり、その一部がG酸化膜を飛び越えてFGに注入される。注入された電子の負電荷によってFGは負電位になるので、CGから見たセルトランジスタの電圧のしきい値は初期値よりも高くなり、これが1として記憶される。(注入方式)

メモリ消去にはFG内に紫外線を照射し注入された電子にゲート酸化膜を飛び越えさせて基板に放出させるとFGの電圧が初期値に戻り0となる。紫外照射は石英窓を取り付けることで実現されこれが可能となったPROMはEPROMと呼ばれる。紫外線照射は特定のメモリサイトだけに行うことは難しくデータが一括して消去される。

一方、読み出しはCGにセルトランジスタのしきい電圧と初期値の中間の電圧を加えた際のオン/オフによって判断することができる。

【 MOSFETセル 】
bit 解説
1 CGを高電位にしてHEをFGに飛ばし電子をLowにする。
0 FGに紫外線を照射しHEを飛び出させる。

【 PROM-メモリサイト 】

MOSFET+FGgate

EEPROM ➡ [外部リンク]

RAM Random Access Memory=Unix:Core ➡ [外部リンク]

格納されたデータに任意の順序で読み込みと書き込みができる性質をもつ揮発性記憶装置(VRAM)。どの部分にも同じ時間でアクセスすることが出来る。

【 RAMの種類 】
略称 名前 解説 例、補足
DRAM Dynamic RAM データをコンデンサの電荷として蓄えるため常時リフレッシュが必要でこのことからDynamicの名がついた。実行中のプログラムの命令とデータを保持する1次メモリとして使用される。 メモリサイトが最も少ない回路素子で構成されるため、生産量が最も多く技術進歩の指標にもなる。
SRAM Static RAM データをFF回路を用いて蓄えるためリフレッシュが不要。アクセス動作が無ければ極く少量の電力で記憶を保持でき、かつ高速な情報の出し入れが可能で2次メモリとして使用される。 DRAMよりも高価。NVRAMとして使用もされる。

DRAM Dynamic Random Access Memory

DRAMのメモリサイトは、1個のMOSFETとこれに直列接続しかつ設置されたコンデンサ(C)からなる。1bitの情報はコンデンサが充電されていれば/されていなければ1/0として蓄えられる。

書き込みは、W線の電圧を上げて(W=High)MOSFETのゲート電圧をかけた状態でビット線の電圧を上げて/下げてキャパシタを充電する/放電することで1/0を書き込む。

読み出しは、W線を高電圧(High)にした時にCondenserからB線に電荷が流れ出すこと/出さないことを検出(sense)すれば1/0と判断する。

SRAM Static Random Access Memory ➡ [外部リンク]

FF回路をメモリサイトに用いることによりリフレッシュを行うことなくバイナリ情報を蓄えることが可能になった。

【 SRAMの種類 】
名前 メモリサイト 解説 例、補足
bipolar SRAM バイポーラトランジスタ x 2 アクセス速度は速いがより大きなスペースを必要とする。
MOS SRAM MOSFET x 6 アクセス速度は遅いがより集積化を容易とする。 こちらが主流。
bipolar SRAM
MOS SRAM ➡ [外部リンク][外部リンク2]

CMOSインバータ(CMOS1=N1+P1,CMOS2=N2+P2)をFF化することでbit情報を蓄える。データ書き込み・読み出しのための転送用のMOSFET(N3,N4)を合わせると計6個のMOSFETからなる。

その他

分類 classification

【 大きさによる分類 】
名前 用途 例、補足
スーパーコンピュータ 大規模科学計算 ヒトゲノム計画
メインフレーム 科学計算、事務処理 サーバ
ミニコンピュータ PC デスクトップ、ラップトップ
マイクロコンピュータ 組み込み用 iphone、車載コンピュータ、現金自動預払機(ATM)

パーソナルコンピュータ(パソコン) Personal Computer (PC)

【 商用コンピュータ 】
名前 用途 例、補足
Raspberry Pi ARMプロセッサを搭載したシングルボードコンピュータ。

マイクロプロセッサ micro processaor=MP=MPU

小さな組み込みコンピュータに搭載されているプロセッサのことをマイクロプロセッサ(MP=MPU)という。

データ構造

データをリスト=配列の各成分にどのように配置するかは重要な問題であり、そのための基本的な考え方が知られている。

【 基本データ配列 】
名称 解説 例、補足
木 2次元平面上に配置された点が線分でつながれた集合。 UNIXファイルシステムは多分木multi-tree構造をしている。➡C-2分木
stack 新規データの格納pushと取り出しpopがデータの最上段で行われる。 よく食堂の皿やトレイで例えられる。LIFOの処理に適したデータ構造。➡C-スタック
queue 待ち行列。データの格納enqueue/取り出しdequeueは配列の左端/右端で行われる。 FIFOの処理に適したデータ構造。➡C-キュー

木

2次元平面上に配置された点が線分でつながれた集合。図示する場合上下を逆さまに書いて根が最上部になるように書くことが多い。

【 木の構造 】
名称 解説 例、補足
枝 branch 点と点を結ぶ線分のこと。枝の上部/下部の点を親/子と呼ぶ。
節点 node 下部に枝をもつ点のこと。SY:節点につながれた枝のうち上部/下部の枝を親枝/子枝という。
根 root 木の最深部(=最上部)にあり上部に親(枝)を持たない節点のこと。
葉 leaf 下部に子(枝)を持たない点のこと。

N分木 N-ary tree ➡C-2分木

節点(node)がN個の子(枝)で構成されている木のことをN分木と呼ぶ。

【 N分木アルゴリズム 】
名称 説明 補足
深さ優先 節点を基点に隣接点(子)を再帰的に訪問し、終わったら一つ前の節点(親)に戻って他方に訪問する。 stackを使用。
幅優先 浅い節点から同じ深さを左から右に順に走る。 queueを使用。
完全N分木

全ての葉が同じ深さ(=高さ)にあるN分木のこと。

データ入れ替え処理

ページングなどにおけるデータ(ページ)の入れ替えを行う処理にはいくつかの方法が知られている。

【 入れ替え処理の種類 】
名称 データアウト対象 例、補足
LIFO《FIFO》 Last《First》-In-First-Out 最後《最初》にデータインしたデータ。 後入れ先出し《先入れ先出し》。データの参照頻度が全く考慮されていない。
LFU《LRU》 Least Frequently《Recently》 Used 最も参照されていない《古い》データ。 参照頻度《時間》を考慮しているが、優先順位の低いジョブが常に追い出される。
WS Working-Set 各ジョブ毎にCPU使用時間を基に一定時間内に参照されなかったデータ。 ジョブ単位でLRU方式でデータの入れ替えを行う。

歴史 history

【 集積回路テクノロジー 】
時代 年代 素子 処理速度 相対コスト性能比
歯車時代 1642-1833 歯車 - -
電動時代 1884-1943 歯車、パンチカード - -
真空管時代(第1世代) 1949-58 真空管 1ms 1
トランジスタ時代(第2世代) 1958-65 トランジスタ 10μs 35
IC時代 (第3世代) 1965-71 IC 1μs 900
LSI期(第3.5世代) 1971-80 LSI 10ns
VLSI期 (第4世代) 1980-90 VLSI 10ns 2,400,000
ULSI期(第5世代) 1990-2005 ULSI 100ps 6,200,000,000

歯車時代

パスカリーヌ Pascaline, 1642

物理学者B.Pascalが世界で初めてピン歯車式加算器の開発に成功した。パスカルはこの加算器で2の補数を使った減算を行っていた。

ライブニッツ乗算器 1694

数理物理学者LeibnizはB.Pascalの作成した加算器の原理を応用し、加減算を繰り返すことで乗除算を可能にする乗算器を開発した。この計算機には1つのハンドルがついていて順回転と逆回転を行うことで加減算を実装していた。

ペダル式自動織器 1804

フランス人J.M.Jacquardはパンチカードに穴を空けることでカラーの模様の型や色を定めるペダル式自動織器を開発した。今日のコンピュータプログラムの元祖と言える。

解析エンジン 1833

イギリスのケンブリッジ大学の数学者C.Babbageは、ジャカールが自動織器で用いたパンチカード方式を採用し、計算手続きとデータを蓄える「貯蔵装置」とそれに計算を行う「加工装置」を内蔵した歯車式計算機械「解析エンジン」を開発した。解析エンジンは今日のコンピュータが有する基本的性能であるメモリ、プロセッサ、システムソフトウェアを備えており、バベッジは「現代コンピュータの父」と呼ばれている。

エイダ女史 Ada Augustine Byron

バベッジの助手だったエイダ女史は解析エンジンのプログラムを作成、世界最初のプログラマとされている。

電動時代

ホレリス電動会計機 1884

アメリカの商務省国勢調査局に勤めていたH.Hollerithはパンチカードでデータを入力する電動会計機を発明し、1890年に行われた国勢調査の集計に用いられた。その後間もなくしてHollerithはTabulating Machine Company(TMC)を設立しこれが現在のIBM社に発展、Hollerithが考案したパンチカードや文字コード(Hollerithコード)は現在のIBM社に引き継がれている。

チューリングマシン 1936

イギリスのA.M.Turingは1936年計算可能性に関する論文を提出し、ハードウェアとして読み書き可能なテープとヘッド、ソフトウェアとしてテープに印字する記号と状態と状態間の遷移を表すオートマトンによって、コンピュータ構成要素を備えた理論的機械を考案した。(Cf. Mathematica/TuringMachine)

Mark I 1943

ハーバード大学の物理学者H.AikenがIBM社と共同で電気リレー式計算機Mark Iを開発、プログラムが印字された穿孔テープを用いて処理を実行した。

真空管時代

ENIAC Electronic Numetrical Integrator And Calculator 1945

ペンシルバニア大学の電気技術者J.P.Eckertと物理学者J.W.Mauchlyが陸軍兵器局とIBM社の全面協力を得て真空管を用いた計算機ENIACを開発、Mark Iで2時間かかった弾道計算が数秒で計算できるようになった。メモリはまだ搭載されておらず、プログラムは外付けのプラグボード(コントロールパネル)の配線によって実現されていた。

トランジスタの発明 1947

1947年のクリスマスイヴにベルシステムに所属するショックレー(W.Shockley)、バーディーンらが開発。(cf. 朝永『紀行と閑談』)

EDSAC Electronic Delay Strage Automatic Computer 1949

Cambridge大学のM.V.WilksがENIAC開発中のペンシルバニア大学に訪問しイギリスに帰国後、プロセッサ内蔵方式の計算機開発に着手、コンピュータ構成要素を実装する世界最初のコンピュータEDSACをEDVACより1年速く完成させた。

UNIVAC I UNIVersal Automatic Computer 1951

J.P.EckertとJ.W.MauchlyはENIAC開発後大学を辞め1946年会社を設立、国勢調査局から新しい計算機の注文を受け開発に取り掛かった。しかし資金繰りが悪化し当時のレミントンランド社(→スペリランド社→現ユニバック社)に吸収されるも、1951年世界最初の商用コンピュータUNIVAC Iを完成させた。UNIVAC Iは国勢調査局に納入され国勢調査の集計に用いられ、1950年代性能面でコンピュータ業界をリードした。

IBM70x, IBM650 '50

ユニバックに後れを取ったIBM社は50年代に続々と新機種を打ち出し販路を広げていった。この頃から主メモリとして磁気ドラムではなく磁気コアが初めて用いられ補助記憶装置に磁気テープが用いられた。

トランジスタ時代

UNIVAC80 1958

ユニバックはIBM650の対抗機種としてトランジスタを初めて用いたコンピュータUNIVAC80を開発した。

ICの開発1959

TI社のJ.Kilbyとフェアチャイルド社のR.Noyceは1959年独立に集積回路(IC)の開発に成功した。

IC時代

IBM360 1965

60'前半になると大型機ではCDC社が1963年CDC3600,6600を、中型機ではハネウェル社がH200を出荷しIBMの対抗機種が続々と出現し始めた。市場を脅かされた IBM社は他社の追随を断ち切る対抗機種としてICを初めて用いたコンピュータIBM360を開発し1965年に初出荷、生産が追い付かないほどの大成功を収めた。

ARPANET企画 1969

米国国防総省は、コンピュータが攻撃を受け使用不可能になっても継続使用できるような分散型ネットワークの構築に関する官学共同研究プロジェクトを立ち上げ、通信ルートにおいて中継局が不能になっても通信が行えるようなパケット通信のプロトコルが策定された。今日のインターネットの前身となる。

UNIX元年 1970
IBM370 1971

IBM社はIBM360の改良機種としてLSIを搭載したコンピュータIBM370を1971年に初出荷、主メモリとして半導体メモリが実装され仮想記憶が実現された。

BSD-UNIXの開発 1978

1978年にUCB(University of California, Berkeley)に客員教授として着任したK.Thompsonが中心となってBSD-UNIX(Berkeley Software Distribution)の開発が行われた。

TCP/IPの実装 1982

SUN-OS社がTCP/IPプロトコルを実装したネットワークSunOS1.0を開発した。

WWW=インターネット時代

HTMLの実装 1989

スイスにある素粒子物理学の研究機関である欧州合同原子核研究機構(CERN➡[外部リンク])に集まった各国の研究者の間で文書情報を簡単にやり取りする目的で、Tim Berners-Leeがハイパーリンク構造をもつネットワークを開発、その基本仕様が1989年に公開され、今日のWWW=インターネットの土台を築いた。当時は米NeXT社(後にApple社が買収)のSTEPというOS環境を用いる必要があったため、CERNはSGMLを基にHTML0の開発を始め1990年にHTML/0.9を公開、これをきっかけとしてWWW利用におけるOSに依存しないためのプロトコルが整備されていった。

発展:Pentium CPU

詳しくは『IA-32 インテル® アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル』[上巻][下巻])

【 インテルCPU 】➡ [外部リンク]
名前 解説 例、補足
x86 インテル初期のCPU=Intel 8086互換の32bitCPU。互換メーカーのCPUやその関連技術もx86で総称される。 Intel 8086、AMD
x64=x86-64 x86を64bitに拡張したCPUおよびその技術の総称。 Intel 64
IA-32 Intel Architecture 32bit CPU。 Pentium
IA-64 Intel Architecture 64bit CPU。IA-32の後継。 Itanium
【 マザーボード概念図 】
チップ
CPU
ピン
== ||
||
||
||
ロー
カル
バス

||
||
||
||
==







==
アドレスバッファ







データバッファ
==







==
======
||
A0-31情報
||
主メモリ
||
D0-31情報
||
======
======
アドレスバス





データバス
======
======
||
A0-15情報
||
I/Oポート
||
D0-31情報
||
======
【 レジスタ 】
名前 ニーモニック《bit数》
実モード 保護モード
汎用レジスタ AX,BX,CX,DX,SI,DI《16》 EAX,EBX,ECX,EDX,ESI,EDI《32》
ベースポインタ BP《16》 EBP《32》
コントロールレジスタ CR0-CR4《32》
命令ポインタ IP《16》 EIP《32》
スタックポインタ SP《16》 ESP《32》
フラグレジスタ FLAGS《16》 EFLAGS《32》
セグメントレジスタ CS,DS,ES,SS,FS,GS《16》
IDTレジスタ IVTR《64》 IDTR《48》
GDTレジスタ TR《64》 GDTR《48》
  • プロテクトモードの頭文字のE=Extendedを意味する。
【 ピン 】
ニーモニック 解説 例、補足
A0-A31 32本のアドレスピン。 32bit=4GB=00000000H-FFFFFFFFH
D0-D63 64本のデータピン。 64bit=8GB=000000000000H-FFFFFFFFFFFFH
INTR 割り込み受信ピン。EFLAGSのIFフラグによってCPUが割り込みを受信するか否かが決まる。 8259A(補助機器)や外部割込みコントローラに接続されている。
NMI 不可避割り込み受信ピン。CPUはNMI信号による割り込み受信を拒否できない。 Non-Maskable Interrupt.メモリモジュールに接続されている。
【 アセンブリ言語 】
ニーモニック 意味 補足
int ベクタ番号 ベクタ番号に相当するソフトウェア割り込みの発生 対応するハンドラが呼び出される。
lidt IDTRにIDTの32bitの先頭アドレスと16bitの上限サイズが書き込まれる。 =Load IDT. この命令以降CPUは割り込みと例外を処理できるようになる。
cli EFLAGSのIFフラグのクリア INTR信号をマスクする。
lea Load Effective Address

動作モード

【 動作モード 】
名前 役割 アクセスメモリ 例、補足
リアル(アドレス)モード
real-address mode
主にMS-DOSなどの8086用に書かれたプログラムを実行させるためのモードで、上位互換性をもつ。 A0-A19 電源投入後やリセット後はこのモードで動作する。
プロテクトモード
protect mode
80386で追加された機能であるセグメントによるメモリやタスクの管理保護機能やページング機能を使うためのモード。 A0-A31 x86用OSの大半はこのモードで動作する。
仮想8086モード
virtual 8086 mode
プロテクトモードの機能を働かせたまま8086用プログラムが実行できる互換環境をもつモード。

モード移行

    【 リアルモード → プロテクトモード 】
  1. GDTとIDTの作成と設定。
  2. A20マスクの解除。
  3. CPUへの割り込みを禁止する。
  4. CR0レジスタのPEビット=1に設定。
  5. パイプラインの内容をフラッシュ。
  6. セグメントレジスタの設定。

Intel-セグメント ➡ [外部リンク]

セグメントディスクリプタ Segment Descriptor

セグメントの属性情報を記述した8バイト=64bitのデータ構造体。

【 セグメントデスクリプタ構造体 】
名前 役割 bit数 例、補足
ベースbase セグメントが始まる場所のこと。そのアドレスを表す。 32bit 住所でいえば、役場や県庁所在地に相当。
リミット セグメントのサイズ。Gフラグ=0/1の場合1MB/4GB。 20bit プログラムがリミットを超えた領域のアドレスにアクセスしようとするとセグメンテーションフォルトを発行する。
Gフラグ リミットの単位。Gフラグ=0/1の場合1B/4KB。 1bit
Dフラグ データサイズの指定。Dフラグ=0/1の場合16bit/32bit。 1bit 保護モードにおけるオプション。
Pフラグ セグメントがメモリ上に存在する/しないとき1/0になる。 1bit =Present. Linuxではセグメント全体がスワップアウトすることはないので常に1となる。
DPL セグメントへのアクセスに必要なCPUの特権レベルを表す。 2bit =Descriptor Privilege Level
タイプ セグメントのタイプを指定。 3bit
【 セグメントタイプ 】
値 役割 補足
0/1 読み出し専用/読み書き可能データセグメント
2/3 読み出し専用/読み書き可能スタックセグメント
4/5 実行専用/実行と読み出し可能コードセグメント
6/7 実行専用/実行と読み出し可能近フォーミングコードコードセグメント
Global Discriptor Table GDT

セグメントディスクリプタからなる配列。システムに一つだけ準備する。

基本フラットモデル

各セグメントがベースアドレス=0から始まりその大きさを4GB(リミット=FFFFFHかつGフラグ=1)としてセグメントディスクリプタによって管理される設定。そのため仮想メモリ空間内のすべてのアドレスが32bitのリニアアドレスで表現される。

セグメントレジスタ segment register

各セグメントにアクセスするために用いられるレジスタ。

【 セグメントレジスタ 】
ニーモニック 名前 bit数 セグメントタイプ 例、補足
CS Code Segment 16bit 4-7 CSレジスタが指すコードセグメントのDPL=CPL
DS Data Segment 16bit 0-3
SS Stack Segment 16bit 1,3
ES/FS/GS 16bit 0-3

アドレス変換

仮想アドレスを実アドレスに変換すること。

【 仮想アドレス 】
名称 説明 補足
オフセット offset メモリサイトがもつアドレスのセグメントベースからのずれのこと。セグメントの大きさ分だけある。 住所で言えば番地に相当。
論理アドレス セグメントレジスタとオフセットの組によって特定されるアドレス。 セグメントレジスタ(値):オフセット、で表示される。
リニアアドレス セグメントベースにオフセットを加えたものとして指定されるアドレス。
【 アドレス変換 】
論理アドレス

セグメンテーション変換
--->
↓アクセス違反↓
セグメンテーションフォルト

リニアアドレス

一般保護例外
ページング
--->
↓アクセス違反↓
ページフォルト
物理アドレス

Page Directory Entry PDE

最初のページングアドレス変換の情報を記述した32bit=4byteのデータ構造体。

【 ページディレクトリ構造体 】
名前 役割 bit数 例、補足
ページ表ベースアドレス ページ表のベースアドレスを表す。 20bit
R/Wフラグ ページの読み書き権限の設定。R/W=0/1の場合読み出し専用/読み書き両用。 1bit =Read/Write flag.
U/Sフラグ ページにアクセスできる特権レベルの指定。 1bit =User/Supervisor flag.
ページディレクトリ page directory

1024個の4bytePDEからなる4KBの配列。ページングによる最初のアドレス変換の変換表を構成する。

  • ページディレクトリの物理アドレスはCR3レジスタに格納されている。

例外 exception

プロテクトモードにおけるCPUが検出したプログラムエラーによるソフトウェア割り込みやハードウェアの異常な動作によるマシンチェック割り込みによって生じる。

  • 割り込みと例外はベクタ番号と呼ばれる0-255の整数によって識別される。このうち先頭の0-31はIntelが予約領域として定めており、残りは使用者が自由に割り込みとして設定できる。
  • 例外が生じて割り込みが発生すると、その受け取った信号に対応する番号に応じてハンドラを呼び出す。
【 例外の種類 】
名前 解説 原因 例、補足
fault プロテクトモードにあるCPUはフォルトを起こした命令を実行する直前の状態に戻し割り込みハンドラを呼び、ハンドラから戻って来た時の実行ポインタ(IPレジスタ)はフォルトを起こした命令を指す。そのため同じ場所からプログラムの実行を再開できる。 セグメントやページの保護機能。 ページフォルト、セグメンテーションフォルト
trap CPUは割り込みハンドラを呼びだしハンドラから戻って来た時の実行ポインタはトラップを起こした次の命令を指す。そのため例外となったプログラムは再実行を行わない。 INTOやint3命令の実行。 プログラムのデバッグなど。cf.linux-trap
abort Pentium以降のCPUはチップの内部状態をチェックする機構を備えており、この機構がアボートを発生させる。 致命的なエラー。 ハードウェアエラー、システムが参照する表の不一致など
割り込み 解説 原因 例、補足
ソフトウェア割り込み int ベクタ番号命令の実行。
ハードウェア割り込み INTRやNMI信号の受信。

割り込みベクタ表 Interrupt Vector Table=IVT

リアルモードで使われるベクタ番号とハンドラの対応表。

  • 表の各成分はセグメント:オフセットで表され計2+2=4バイトになる。
  • 割り込みベクタ番号は00H-FFHまでの256まである。

ゲートデスクリプタ gate descriptor

異なる特権レベルのコードセグメントに制御を移すために用いるデータ構造体。保護モードで使われるハンドラの仮想アドレスや実行権限を設定する。

【 ゲートデスクリプタの種類 】
名前 役割 例、補足
タスクゲート タスク・スイッチングに使用される。 Linuxでは使わない。
コールゲート 特権レベルを変更しながらプログラムを実行する。 Linuxでは使わない。
割り込みゲート 特殊なコールゲート。ハンドラを呼び出す際FLAGSのIFフラグをクリアする。 Linuxでは割り込みに対処する。
トラップゲート 特殊なコールゲート。ハンドラを呼び出す際FLAGSのIFフラグをクリアしない。 Linuxでは例外に対処する。
【 ゲートデスクリプタ構造体 】
名前 役割 bit数 例、補足
オフセット セグメント内でのハンドラのオフセットアドレスを表す。 16bit
セグメントセレクタ ハンドラが格納されているコードセグメントのセレクタを表す。 16bit LinuxではKERNEL_CSを指す。
割り込みデスクリプタ表 Interrupt Discriptor Table=IDT

ゲートデスクリプタを並べた配列。

  • IDTはメモリ上のどこにおいても構わず、そのサイズも自由に設定可能だが、そのエントリ数は割り込みベクタ番号(00H-FFH)の256まである。
  • IDTをメモリ上に作成したあとはlidt命令によってその先頭アドレスとバイト数をCPUに通知する。

主要参考文献・役立ちサイト ⇧ top ⇧

D.A.Patterson+J.L.Hennessy 『コンピュータの構成と設計』 著者らが手がけたMIPSを使ったハードウェアの解説。「パタヘネ」
パソコン初心者講座 『目指せ!PCマスター』 用語解説から自作パソコン入門まで。
定道 宏 経営情報学講座1『情報処理概論』オーム社 古い記述が見受けられるが、入門書として良書ではないかと思う。
白崎博生 『Linuxのブートプロセスをみる』 ASCII出版。KADOKAWAで復刊されている。
【 電子回路 】
Lecture Notes of NAGASAKA Yasunori 『デジタル電子回路』
EdrawMax プロな電気回路図作成ソフト 部分的にフリーで使える。
水魚堂の回路図エディタ 回路図エディタBSch3V フリーで使える。