MySQL SQLの基本 ~CRUD文法の一覧~

イントロダクション

MySQLなどのDBを使用しているときに、どうしてもネットで調べながらになるので、時間がかかる。。。

では、調べたものを一覧化しておけば、調べるのも楽だと考えました。

MySQLの文字コード

参考サイト
my.cnfを修正する。

[mysqld]
...
character-set-server=utf8 #mysqldセクションの末尾に追加
[client]
default-character-set=utf8 #clientセクションを追加

MySQLにユーザー登録

次のコマンドでユーザー登録を行いました。

  1. DB確認

    show databases

  2. ユーザー作成

    create user 'takunoji'@'localhost' identified by 'takunoji1';

  3. 全権限を与える

    grant all previleges on . TO 'takunoji'@'localhost';

ここで、「localhost」をつけないと、コマンドで動かそうとしてもアクセスができない。。。

MySQLの設定コマンド

  • charset 文字コード名: 文字コードを設定する
  • コマンドプロンプトの文字コード設定(UTF-8)
    chcp 65001で、コマンドプロンプトの文字コードをUTF-8に設定、その後MySQLに登録した文字(UTF-8)を表示する

    SQL文法の一覧

    CREATE DATABASE

    参考サイトはこちらです。

    CREATE DATABASE [IF NOT EXISTS] db_name

CREATE USER

参考サイトはこちらです。

CREATE USER user IDENTIFIED BY 'auth_string'

CREATE TABLE

参照先: MySQLリファレンス

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
(create_definition,...)
[table_options]
[partition_options]

create_definition:
col_name column_definition
| [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)
[index_option] ...
| {INDEX|KEY} [index_name] [index_type] (index_col_name,...)
[index_option] ...
| [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY]
[index_name] [index_type] (index_col_name,...)
[index_option] ...
| {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (index_col_name,...)
[index_option] ...
| [CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name,...) reference_definition
| CHECK (expr)

CREATE TABLE fravors (id int not null primary key auto_increment, name text);

実行SQLサンプル

テーブル作成

create table students (student_no not null primary key, name varchar(20), japanese int, math int, english int);

データの登録

insert into students (student_no, name, japanese, math, english) values(2001, '阿部正幸', 80, 90, 60);
insert into students (student_no, name, japanese, math, english) values(2002, '今井 美紀子', 60, 30, 70);
insert into students (student_no, name, japanese, math, english) values(2003, '上野 英次', 70, 100, 90);

テーブルの結合

select * from students a1, student_act b1 where a1.student_no = b1.student_no;

studentsテーブルとstudent_actテーブルを「student_no」をキーにして結合します。

この条件がない時は下のように、データが重複してしまいます。

select * from students a1, student_act b1;

ここでの「条件」とは、Whereの部分です。

where a1.student_no = b1.student_no

この条件を付けることでstudentsテーブルとstudent_actテーブルのデータの関連性を適用しています。

STUDENTSテーブル

STUDENT_ACTテーブル

ALTER TABLE

参照先:MySQLリファレンス

ALTER [ONLINE|OFFLINE] [IGNORE] TABLE tbl_name
[alter_specification [, alter_specification] ...]
[partition_options]

「[]」で囲っている部分は必須ではないので、fravorsテーブルを修正したいときには、次のようなSQLになります。

ALTER TABLE fravors ... 

そして、テーブルにどのような変更をするのか?というコマンド(SQL)は次のようになっています。

alter_specification:
table_options
| ADD [COLUMN] col_name column_definition
[FIRST | AFTER col_name ]
| ADD [COLUMN] (col_name column_definition,...)
| ADD {INDEX|KEY} [index_name]
[index_type] (index_col_name,...) [index_option] ...
| ADD [CONSTRAINT [symbol]] PRIMARY KEY
[index_type] (index_col_name,...) [index_option] ...
| ADD [CONSTRAINT [symbol]]
UNIQUE [INDEX|KEY] [index_name]
[index_type] (index_col_name,...) [index_option] ...
| ADD FULLTEXT [INDEX|KEY] [index_name]
(index_col_name,...) [index_option] ...
| ADD SPATIAL [INDEX|KEY] [index_name]
(index_col_name,...) [index_option] ...
| ADD [CONSTRAINT [symbol]]
FOREIGN KEY [index_name] (index_col_name,...)
reference_definition
| ALGORITHM [=] {DEFAULT|INPLACE|COPY}
| ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
| CHANGE [COLUMN] old_col_name new_col_name column_definition
[FIRST|AFTER col_name]
| LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}
| MODIFY [COLUMN] col_name column_definition
[FIRST | AFTER col_name]
| DROP [COLUMN] col_name
| DROP PRIMARY KEY
| DROP {INDEX|KEY} index_name
| DROP FOREIGN KEY fk_symbol
| DISABLE KEYS
| ENABLE KEYS
| RENAME [TO|AS] new_tbl_name
| ORDER BY col_name [, col_name] ...
| CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]
| [DEFAULT] CHARACTER SET [=] charset_name [COLLATE [=] collation_name]
| DISCARD TABLESPACE
| IMPORT TABLESPACE
| FORCE
| ADD PARTITION (partition_definition)
| DROP PARTITION partition_names
| TRUNCATE PARTITION {partition_names | ALL}
| COALESCE PARTITION number
| REORGANIZE PARTITION partition_names INTO (partition_definitions)
| EXCHANGE PARTITION partition_name WITH TABLE tbl_name
| ANALYZE PARTITION {partition_names | ALL}
| CHECK PARTITION {partition_names | ALL}
| OPTIMIZE PARTITION {partition_names | ALL}
| REBUILD PARTITION {partition_names | ALL}
| REPAIR PARTITION {partition_names | ALL}
| REMOVE PARTITIONING

fravorsテーブルにカラム(image BLOB型データ)を追加するときは次のようになります。

ALTER TABLE fravors add column image blob;

テーブル定義の確認方法

SHOW FULL COLUMNS FROM テーブル名

SELECT文

参照先: MySQLリファレンス

select * from fravors;

まだまだ更新します。

でわでわ。。。

基本情報技術者試験 ~暗記物「データベース」~

データベース

コンピュータでデータを扱う方法として、ファイルを利用する方法と、データベースを利用する方法があります。
データベースは、データを一括管理する方式(アプリケーション)のことです。

データベースとファイルの違い

データ項目の重複がある。

ファイルでデータを管理すと、項目Aを2つのファイルに持たせた場合項目Aを重複させないと関連がわからなくなる。

データベースの設計

データモデルとは、データをモデル化したもの。
モデル化とは、いろんな場所で使用される言葉だが、データのモデル化とはシンプルにまとまりをつけるということ。

データモデル=テーブル

色んな言葉で表現されることが多いので、はっきり言って混乱しますが、まとめると「データモデル」=「テーブル」のことです。言葉を変えると何かしらの物事をデータとしてあらわすために、並べた項目の塊のことを「データモデル」と呼んでいるようです。※はっきりとした記述が見つからなかったのでこの様に記載します。

モデル化の例

学校の生徒をデータモデル化することを感が増す。

  1. 学生には本人の情報として、氏名、年齢、住所、電話番号があります。
  2. 学生には学校の成績として、国語、数学、英語、理科、社会の生成器があります。
  3. 学生には学校内の活動として部活動があり、委員会がありますが、すべての学生が活動に参加する必要はありません。

まずは、上のような前提条件があったとします。

この時に、データ(モデル)として下のような表(モデル)ができます。

学生氏名 学生年齢 学生住所 学生電話番号
一抹太郎 15 北海道1番地 01234
二審次郎 16 北海道2番地 11234
三振三郎 17 北海道3番地 21234
四面史郎 18 北海道4番地 31234

しかし、このモデルでは、上記の1番しか満たすことができません。

なので次は、成績のデータをモデル化します。

学生氏名 国語 数学 英語 理科 社会
一抹太郎 15 20 30 40 50
二審次郎 16 20 30 40 50
三振三郎 17 20 30 40 50
四面史郎 18 20 30 40 50

これで、1番と2番の要件を満たすことができそうです。
しかし、これではデータが別々で関連付けることができません、なので「学籍番号」を追加します。
そして、各モデル(表)に名前を付けます。「<>」の中身が表の名前です。そしてテーブル名がついたので、重複する文字を削除してしまいます。テーブル名を見れば人間は理解できるからです。

<学生テーブル(表)>

学籍番号 氏名 年齢 住所 電話番号
001 一抹太郎 15 北海道1番地 01234
002 二審次郎 16 北海道2番地 11234
003 三振三郎 17 北海道3番地 21234
004 四面史郎 18 北海道4番地 31234

<成績テーブル(表)>

学籍番号 学生氏名 国語 数学 英語 理科 社会
001 一抹太郎 15 20 30 40 50
002 二審次郎 16 20 30 40 50
003 三振三郎 17 20 30 40 50
004 四面史郎 18 20 30 40 50

上のようにすると、学籍番号をキーにして、ふたつの表を関連付けることができます。

一例としては学籍番号「001」の学生は15歳で、国語の成績は15です。

プログラム的に見ると、「学生テーブルの学籍番号001の年齢」と「成績テーブルの学籍番号001の国語」を取得した形となります。

Javaで表現すると?

テーブルをJavaプログラムで表現することもできます。早い話が、データクラス(データモデル・クラス)を作成してやればよいということです。

色んな言葉と使いましたが、早い話が下のようなクラスです。

  • フィールド変数がある(データの項目)
  • フィールド変数を取得、セットするメソッドがある

これだけです。
上の<成績テーブル(表)>をJavaで表現すると、次のようなコードになります。フィールド変数とゲッターセッターのみのクラスです。データ・クラスとかエンティティクラスなどと呼ばれます。

public class SeisekiData {
    /** 学籍番号 */
    private String studentNo;
    /** 学生氏名 */
    private String studentName;
    /** 国語 */
    private int japanese;
    /** 数学 */
    private int math;
    /** 英語 */
    private int english;
    /** 理科 */
    private int science;
    /** 社会 */
    private int society;
    /**
     * @return studentNo
     */
    public String getStudentNo() {
        return studentNo;
    }
    /**
     * @param studentNo セットする studentNo
     */
    public void setStudentNo(String studentNo) {
        this.studentNo = studentNo;
    }
    /**
     * @return studentName
     */
    public String getStudentName() {
        return studentName;
    }
    /**
     * @param studentName セットする studentName
     */
    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }
    /**
     * @return japanese
     */
    public int getJapanese() {
        return japanese;
    }
    /**
     * @param japanese セットする japanese
     */
    public void setJapanese(int japanese) {
        this.japanese = japanese;
    }
    /**
     * @return math
     */
    public int getMath() {
        return math;
    }
    /**
     * @param math セットする math
     */
    public void setMath(int math) {
        this.math = math;
    }
    /**
     * @return english
     */
    public int getEnglish() {
        return english;
    }
    /**
     * @param english セットする english
     */
    public void setEnglish(int english) {
        this.english = english;
    }
    /**
     * @return science
     */
    public int getScience() {
        return science;
    }
    /**
     * @param science セットする science
     */
    public void setScience(int science) {
        this.science = science;
    }
    /**
     * @return society
     */
    public int getSociety() {
        return society;
    }
    /**
     * @param society セットする society
     */
    public void setSociety(int society) {
        this.society = society;
    }
}

関係モデル

上の様な形で表と表に関連性を持たせた表(モデル)を「関係モデル」といい、そのようなデータベースを「リレーショナルデータベース」と呼びます。

そして、これらの表に行う操作の種類としては次のものがあります。

名前 説明
挿入 テーブルにデータを挿入(INSERT)します
更新 テーブルのデータを更新(UPDATE)します
削除 テーブルのデータを削除(DELETE)します

これらの操作を行うプログラム言語をSQLと呼びます。

SQL

SQLは、データベースの操作に使用するプログラム言語で、用途は上記のようなものとなります。
しかし、「どう使うの?」という疑問に関しては学習する以外に理解のしようがありません。

なので、簡単に、DBを作り使用できる方法を考えました。というか見つけました。
H2DBを使用する方法です。こちらのサイトからH2DBをダウンロードできます。

SQLを実行して理解するほうが、本を10回読むよりもちゃんと理解できます。

H2DBをインストール

こちらのリンクが、H2DBのサイトになります。

英語ばかりですが、臆することはありません。赤枠の部分をクリックすればよいのです。

すると「h2-setup-2019-03-13.exe」というようなファイルがダウンロードできるはずですので、これを起動してインストールします。そして、以下の手順に従います。

  1. H2DBを起動する ※H2 Consoleという名前があるのでそれをクリック
  2. 下のような画面があるので、赤枠の部分にDBを作成するフォルダとファイル名を指定する

    ※「D:\Apps\H2\」のフォルダに「database.mv.db」ができます。

そして、ユーザー名などは指定していないので、未入力の状態にして「接続」をクリックします。

すると下のような、画面が見れますので、赤枠をクリックします。

すると下のようなSQLが生成されて、実行する事ができます。

DROP TABLE IF EXISTS TEST;
CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR(255));
INSERT INTO TEST VALUES(1, 'Hello');
INSERT INTO TEST VALUES(2, 'World');
SELECT * FROM TEST ORDER BY ID;
UPDATE TEST SET NAME='Hi' WHERE ID=1;
DELETE FROM TEST WHERE ID=2;

作成されたテーブルは、サンプルのテーブルです。とりあえず作成されたことを確認できますのでこれを実行します。

実行して、テーブルが作成されたことを確認したら、「切断」して初めの画面に戻ります。

データベースの概念設計

現場では、論理設計などと呼んだりします。具体的にはER図を作成しテーブル間のデータ関係を明確にします。

テーブル(表)のカラム(列)同士を矢印で結び関係性を示します。

では、実際にDBを起動してみましょう。

現状はここまでです。まだまだ更新します。

基本情報技術者試験 ~暗記物「ソフトウェア」~

ソフトウェア

ソフトウェアの分類

名前 別名 説明
OS 基本ソフトウェア オペレーションシステム
Application 応用ソフトウェア アプリケーション
ミドルウェア OSとアプリケーションの間に入るソフトウェア、DB管理ツール、通信管理システム、IPモニタなど

OS(基本ソフト)

名前 説明
Windows Microsoft社の出すOS
UNIX 有償ソフト、Linuxの前身
Linux オープンソースソフトウェアのOS、多くのディストリビューションがある。UBUNTSU, FedreaCore, CentOS ...
macOS, iOS Apple社の出すOS, iOSはモバイル端末用のOS
Android Google社の出すOS。ARMに対応しており、小さな基盤(マザーボード)でも使用が可能

ミドルウェア

名前 説明
Shell(シェル) Linux, MacなどのOSで使用できるコマンドプログラム、Windowsの場合はコマンドプロンプト
WebAPI リクエストを投げるとJSONで情報を返してくれる。CSV,XMLで返却する場合もある
ライブラリ JAR, DLL, src.zipなどのソースを圧縮、配布、利用することができるようにしたもの
コンポーネントウェア プログラムをオブジェクトとしてまとめ、実装されたもの
Java Beans Java プログラムをコンポーネントとして扱う規約
ActiveX Microsoft社の出す、コンポーネント、コンポーネント技術の総称
CORBA メッセージ交換の標準仕様、ネットワーク通信時に各サーバー間でメッセージの交換を行う
開発フレームワーク Struts, Springframework, Playなどアプリケーション実装の汎用的な処理を実装、体系化して利用することができる枠組みを持ったライブラリ群のこと

アプリケーション(応用ソフトウェア)

名前 説明
ワープロ ワードプロセッサ
表計算 エクセルのようなソフト
データベースソフト DB管理ソフト
DPTソフト 印刷系のソフトウェア
グラフィックスソフト ペイントツール、3DCGソフトなど
プレゼンテーションソフト パワーポイントのようなソフト
グループウェア 組織内における共同作業を支援するソフト

OSS(Open Source Sorft wear)

名前 説明
Webサーバー Apache HTTP Server
DNSサーバー BIND(IPアドレスとURLを関連付ける)
メールサーバー sendmail
Webブラウザ FireFox, Chrome
データベース MySQL(MariaDB), PoestgreSQL
スクリプト言語 Riby, PHP, Python, Perl
統合開発環境 Eclipse, IntelliJ IDEA
LAMP/XAMP Apacheウェブサーバー、MySQL、PHPがセットになったパッケージ。LAMPが古い

OSの機能

名前 説明
ジョブ管理 人間から見た仕事(ジョブ)を管理する
タスク管理 機械から見た仕事(タスク)を管理する
記憶管理 記憶領域を有効に利用する回数
データ管理 補助記憶装置のデータへのアクセスを管理する
入出力管理 入出力装置のアクセスを管理する
ネットワーク管理 ネットワーク制御を管理する
運用管理 運用に関する容易性や制御を管理する
ユーザ管理 ユーザーに関する情報や制御を管理する
セキュリティ管理 セキュリティに関する情報や制御を管理する
障害管理 障害の検出、記録、対応に関して管理する

ジョブ管理処理で使う単語

名前 説明
スプーリング 情報をメモリなどに一時保管しておき演算装置の処理が終わったら即データを渡せるようにすること
・バッファリングがプリンタなどのメモリ上で行う事
・スプーリングはハードディスクが行うことを指す
ジョブスケジューラー ジョブをスケジューリングする、タイマー機能のように時間が来たら対象のジョブを実行する
FCFS方式 First-Come-First-Served、ジョブの到着順に実行すること
マスタスケジューラー 利用者とコンピュータとの間でジョブ実行管理を行う

ディスパッチャ

実行かの状態にあるタスクを選択(ディスパッチ)して実行するプログラム。実行するタスクを選択する基準はタスクスケジューリングの方法により決定する

プリエンプティブ方式

実行中のタスクがOSの制御により一時的に中断される方式

名前 説明
優先度順方式 各タスクに割り当てられている優先度順にタスクを実行する
イベントドリブン方式 イベント(何かの操作、受信など)をきっかけとしてタスクを実行する方式
ラウンドロビン方式 実行可能状態のタスクを、到着順に管理、一定時間使っても終わらないタスクは処理を中断して最後尾に回す。
ノンプリエンプティ部方式 OSの制御により中断されない

セマフォ(semaphore)

複数のプログラムを並行して走らせるときにメッセージ制御、割り込み処理を行うための信号

記憶管理方法

名前 説明
フラグメンテーション 分断、断片化、コンピュータ上でファイルが分散して保存されている状態
メモリコンパクション 断片化したメモリ使用領域を並べなおし、使用領域を増やします。
ガベージコレクション 使わなくなったメモリ領域を解放します
オーバーレイ方式(セグメント方式) セグメントに分割して使用する方式
スワッピング プログラムを補助記憶装置を用いてして処理する方法、一時的に補助記憶装置に退避=スワップアウト、逆はスワップイン

仮想記憶管理

仮想記憶領域は、実際のハードよりも大きな論理的なメモリ領域を作り使用する。
物理メモリに対して、仮想メモリがあるということ。

名前 説明
ページング方式 記憶領域を大きさで区切る方式
セグメント方式 記憶領域を役割や実行単位で区切る方式
セグメントページング方式 上記の合体

ページリプレースメントアルゴリズム

ページ置換アルゴリズムのこと、オンラインアルゴリズムの一種

オンラインアルゴリズム

入力全体を初めからアクセス可能にしなくても、先頭から順に処理を行えるアルゴリズム。

これに対しオフラインアルゴリズムもあり、それぞれの違いは以下のような違いがある
※どちらも実装は簡単だが、処理が遅いようだ。

  • 挿入ソート:オンラインアルゴリズム
  • 選択ソート:オフラインアルゴリズム

プログラム言語と言語プロセッサ

言語プロセッサとは

コンピュータ言語で書かれたデータを読み込んで処理・解釈し、別の言語やデータ構造による表現に変換するソフトウェアの総称。

プログラム言語の分類

名前 説明
手続き型言語 演算命令やデータ操作命令などのを実行する「C言語,COBOL,Basic」
関数型言語 関数を入力データに作用させることによって出力データを得る
論理型言語 問題に内在する関係や条件などを論理式で記述する
オブジェクト指向型言語 データと処理を一体化した、オブジェクトを単位とする「Java, VB」
スクリプト言語 簡易プログラム(スクリプト)言語「JavaScript(JS), Ruby, Python, PHP」
マークアップ言語 SGML(DTD(Document Type Definition)で構造を定義), HTML, XML

言語プロセッサの種類

名前 説明
アセンブラ コンピュータなどのプログラミング言語の1種で、原則として機械語の命令命令に1対1で対応した、人間に理解しやすい文字列や記号で記述される。
コンパイラ C言語、COBOLのようなプログラムをコンパイルして機械語に翻訳する

マークアップ言語

名前 説明
DTD Document Type Difinition 文書構造(文書型)を定義するためのスキーマ言語の一つである。
SGML ISOで標準化されている。DTDに書かれた内容でその文書構造が決定される
HTML SGMLを拡張したもの、ホームページの作成にCSS,JavaScriptと合わせて使用される
DHTML Dinamic HTML、HTMLの拡張で、JavaScript,VBScriptを埋め込める
XML Extensible Markup Language、DTDの代わりにXMLスキーマを使用することもある。下記表を参照
XHTML HTMLをXMLで再定義したもの

XML関連技術

名前 説明
XMLパーサ DOM(Document Obuject Model)とSAX(Simple API for XML)がある
SOAP XMLをベースにしたメッセージ交換プロトコル
SVG XMLをベースにした2次元グラフィックス画像形式
WSDL Webサービスを外部のソフトウェアから接続・利用するための仕様(インターフェース)を記述することができる言語(Web SDL)、昔はSDLだった
Ajax ブラウザとサーバーで同期をとらずにXML文書を送受信して動的に画面を再描画する技術

コンパイラの処理

  1. 字句解析
  2. 構文解析
  3. 最適化
  4. コード生成

1. 字句解析

正規表現や有限オートマトンを使用して解析する。

正規表現

下のような形で、文字列指定することで、文字列の抽出、選択します。

[a-zA-Z] => 文字列「a」から「z」、「A」から「Z」の間の1文字を指定する

基本的な正規表現
文字 説明 正規表現の例 マッチする例
. 任意の1文字 にマッチします。 .
+ 直前の文字が 1回以上 繰り返す場合にマッチします。
最長一致。条件に合う最長の部分に一致します。
go+gle gogle
go...gle
* 直前の文字が 0回以上 繰り返す場合にマッチします。
最長一致。条件に合う最長の部分に一致します。
go*gle ggle
go...gle
? 直前の文字が 0個か1個 の場合にマッチします。
最長一致。条件に合う最長の部分に一致します。
go?gle ggle
gogle
+? 直前の文字が 1回以上 繰り返す場合にマッチします。
最短一致。条件に合う最短の部分に一致します。
go+?gle gogle
go...gle
*? 直前の文字が 0回以上 繰り返す場合にマッチします。
最短一致。条件に合う最短の部分に一致します。
go*?gle ggle
go...gle
?? 直前の文字が 0個か1個 の場合にマッチします。
最短一致。条件に合う最短の部分に一致します。
go??gle ggle
gogle
| いずれかの条件 (OR条件) として使われます。 goog(le|ol) google
googol
\ 直後の正規表現記号を エスケープ します。 go\+gle go+gle

[...] 角括弧に含まれるいずれか1文字にマッチします。 [abc]
[a-c]
a, b, c
[^...] 角括弧に含まれる文字以外にマッチします。 [^abc]
[^a-c]
a, b, c
以外の文字
(...) 文字を1つのグループにまとめることができます。 goog(le|ol) google
googol
{n} 直前の文字の桁数を指定できます。 a{3} aaa

{n,} 直前の文字の最小桁数のみ指定できます。 a{3,} aaa
aaaa...
{n,m} 直前の文字の最小桁数と最大桁数を指定できます。
最長一致。条件に合う最長の部分に一致します。
a{3,4} aaa
aaaa
{n,m}? 直前の文字の最小桁数と最大桁数を指定できます。
最短一致。条件に合う最短の部分に一致します。
a{3,4}? aaa
aaaa
有限オートマトンとは

意味
有限個の状態と遷移と動作の組み合わせからなる数学的に抽象化された「ふるまいのモデル」
デジタル回路やプログラムの設計で使われることがあり、ある一連の状態をとったときどのように論理が流れるかを調べることができる。

用途
有限オートマトンは様々な問題に応用でき、半導体設計の自動化、通信プロトコル設計、構文解析などの工学面での応用がある。生物学や人工知能研究では状態機械(群)を使って神経系をモデル化し、言語学では自然言語の文法をモデル化したりする。参考サイト

2. 意味解析

・プログラム言語の文法(BNF)

説明
::= 左側に書かれた要素の構文を右側に定義する
<> まぎらわしさを無くすための区切り
\|どちらかを選択する(選択)
[] これで挟まれる要素は有ってもなくても良い(省略)
・・・ 直前の要素を反復する
ZERO 回以上の繰り返し
1回以上の繰り返し
直前の要素があってもなくても良い
‘‘ 文字や文字列そのものを表す

<数字>::= 0|1|2|3|4|5|6|7|8|9
 <英字>::= A|B|C|D|E|F
 <英数字>::=<英字>|<数字>|_
 <変数名>::=<英字>|<変数名><英数字>

上のようなBNF記法で書かれた定義があったとします。それは以下のような意味です。

  1. 「<数字>」は「0|1|2|3|4|5|6|7|8|9」で定義される
  2. 「<英字>」は「A|B|C|D|E|F」で定義される
  3. 「<英数字>」は「<英字>」または「<数字>」または「_」
  4. 「<変数名>」は「<英字>」「<変数名>(ここでは<英字>がセットされている)」または「<英数字>」

のように定義されます。他にも「構文図式」「構文木」があります。参考サイト

  • 構文図式

意味解析

  • 3番地コード(three-address code)
    コンピュータ・プログラミング言語処理系などにおける中間表現などにおける形式の1パターンである。処理系においては、コンパイラ最適化などの処理を掛けるのに適している。2つの入力と1つの出力のアドレス(メモリまたはレジスタ)を指定する形式であるため、3アドレスコードと呼ばれる。

四つ組み形式で表現すると (オペコード, ソース1, ソース2, デスティネーション)
※下の四つ組み形式を別な言葉で表現している

  • 四つ組み形式(三番地文)
    コンパイラで構文解析した結果の表現方法の一つに4つ組み形式があります。
    (演算子,被演算子1,被演算子2,結果)
    この形式は、被演算子1と被演算子2に演算子を作用させたものが結果であることを表わします。

  • 逆ポーランド記法(Reverse Polish Notation)
    数式の記述方法で、演算子を被演算子の後に記述する表記法です。

例えば、「3 と 4 を加算する」という演算を、一般的に数式の表記に用いられる中置記法で記述すると、以下のようになる。

3 + 4

一方、逆ポーランド記法では、加算を表す演算子 + を、被演算子である 3 と 4 の後(右)に置いて、以下のよう記述する。

3 4 +

例)

(3 + 4) * (1 - 2)

逆ポーランド記法で記述すると以下の通りとなる。

3 4 + 1 2 - *

逆ポーランド記法では後で使われる演算子ほど、右に位置することになる(ポーランド記法では逆になり、左に位置する演算子ほど後で使われる)。ちなみに上式を日本語で読み下すと「3 と 4 を足したものに 1 から 2 を引いたものをかけ合わせる」となる。

最適化

中間コードを解析してプログラム構造の変更を行い実行時の処理効率を高める(最適化する)

最適化手法 説明
関数のインライン展開 関数を呼び出す場所に呼び出す関数を展開する
共通部分式の削除 複数の個所に存在する同じ式の値を作業用変数に求めて、作業用変数に置き換える
定数の畳み込み 定数同士の計算式を計算結果に置き換える
定数伝播 変数を定数に置き換える
ループ内不変式の移動 ループ内不変式の移動 ループ内で値が変化しない式を外に移動する
ループの案ローリング ループ中の繰り返い処理を展開する

コード生成

最適化した中間コードを目的とするオブジェクトコード(機械語)に変換する。
ただし、Java言語では、Javaバイトコード(Classファイルの中身)を生成して、実行時に実行環境に合わせたコードに変換する。

原子プログラム=ソースプログラム
 目的プログラム=機械語、中間プログラム

<コンパイラとインタプリタ> コンパイラ インタプリタ
目的プログラム 生成する 生成しない
翻訳単位 全文一括(完成しないとコンパイルできない) 1命令でも翻訳・実行可能
実行速度 早い 遅い
適応業務 バッチ処理 対話型処理

ジェネレータ

入出力のデータ様式、処理条件などをパラメータとして与えコードを生成する

トランスレータ

プログラムをを別のプログラムを別のプログラム言語のプログラムに変換する

サービスプログラム

作成したプログラムの塊(モジュール)同士を組み込む、リンカがある。

ローダー

対象のモジュールを主記憶装置に格納して実行する

エディタ

IDE、開発ツールのこと、その他、図形エディタなど。

エミュレータ

プログラムの実行環境を記事的に作成し手他機種のプログラムを起動する

シュミレータ

プログラムの動きを再現するツール

整列・併合プログラム

データの並び替え・並び替えたデータのまとめる(マージする)プログラム

プログラムのカテゴリ分け

名前 説明
再配置可能プログラム 主記憶装置の、どの位置に格納しても実行できるプログラム
再使用可能プログラム 何度でも再利用可能なプログラム
再入可能プログラム 複数のタスクで実行しても正しい結果が得られるプログラム
再起プログラム プログラム実行中に自分自身を呼び出す

基本情報技術者試験 ~暗記物「情報処理システム」~

情報処理システムの形態

  • 非対話型処理システム: 利用者は処理に介入できない
  • 対話型処理システム: Windowsのような画面を使用して動かすシステム
名前 別名 説明
一括処理システム バッチ処理システム コンピュータでひとまとまりのデータを一括して処理する方式。
即時処理システム リアルタイム処理システム 処理の要求を受けたら即動くシステム(リクエストを受けて動くシステムを含む)

集中処理、分散処理システム

  • 集中処理システム:1か所に集中して処理を行うシステム
  • 分散処理システム:分散して処理を行うシステム

分散処理システムの種類

名前 英語 説明
 ピアツーピア Peer to Peer 対等な立場にあるコンピュータを並列につなぐ水平分散型。複数の機器やシステムで処理を分担する
クライアントサーバー Client Server 垂直分散型、サーバーとクライアントのように、各処理を担当するシステム、機能を分散しそれぞれの処理をコンピュータごとに行わせる
ファイルサーバー File Server ファイル管理用サーバー
データベースサーバー Data Base Server DB、DBを起動するサーバー
プロキシサーバー Proxy Server インターネットなどの外部ネットワークへの接続を行う、外部への接続ポイントをまとめるのでセキュリティ強化のために使用する
3層クライアントサーバーシステム プレゼンテーション層(クライアント)、アプリケーション層(APサーバー)、データ層(DBサーバー)の3つに分けて実装する
ストアドプロシージャ Stored procedure DBのInsert(Create), Select(Read), Update, Delete -> 「CRUD(クラッド)」処理をスクリプトで実行する
シンクライアントシステム Thin Client リモートデスクトップ専用のコンピュータ、PC本体はほとんど機能を持っていくてもよい(ネットワーク接続ができる必要はある)
ウェブシステム Web System ウェブブラウザから処理を依頼するシステム、ECサイトなどがそれにあたる

クラウドコンピューティング

概要
インターネットなどのネットワークを経由して、外部組織が保有する情報システムから各種の情報処理サービスを受ける方法

下のような形でのサービスを提供する
特徴

  • ユーザーインターフェースは主にウェブアプリケーションの形式で提供される。
  • ユーザー側に必要なものは最低限の接続環境とパーソナルコンピュータや携帯情報端末などのクライアント、そしてサービス利用料金のみ

クラウドサービス

  • SaaS (Software as a Service) - インターネット経由のソフトウェアパッケージの提供。電子メール、グループウェア、CRMなど。GoogleのGoogle Apps、マイクロソフトのMicrosoft Online Services、SAPのS/4HANA Cloud、SAP Business ByDesignやSAP SuccessFactors、SAP Ariba、セールスフォース・ドットコムのSalesforce CRM、オラクルの Oracle Cloudがある。オープンソースのSaaS構築フレームワークとしてはLiferayがある。

  • PaaS (Platform as a Service) - インターネット経由のアプリケーション実行用のプラットフォームの提供。仮想化されたアプリケーションサーバやデータベースなど。ユーザーが自分のアプリケーションを配置して運用できる。GoogleのGoogle App Engine、AppScale、マイクロソフトのMicrosoft Azure、SAPのSAP Cloud PlatformやSAP HANA Enterprise Cloud、Amazon Web ServicesのAmazon S3やAmazon DynamoDBやAmazon SimpleDB、IBMのSoftLayer、セールスフォース・ドットコムのForce.comプラットフォームなど。

  • HaaSまたはIaaS (Hardware / Infrastructure as a Service) - インターネット経由のハードウェアやインフラの提供。サーバー仮想化やデスクトップ仮想化や共有ディスクなど。ユーザーが自分でオペレーティングシステム (OS) などを含めてシステム導入・構築できる。Amazon Web ServicesのAmazon EC2・VMware Cloud on AWS、IBMのSoftLayerなど。

  • XaaS - 上記の総称。

並列処理システム

並列処理システムは、分散処理を並列して行う。これにより、処理時間の削減と大規模システムを実現する。

種類

名前 説明
マルチプロセッサシステム 複数のコンピュータを組み合わせたシステムの総称。「マルチプロセッサ」というときは一台のコンピュータに複数のプロセッサ(プロセッサコア)が入っていることを示す
クラスタシステム 複数のコンピュータを連携させて、全体を1台の高性能コンピュータであるかのように利用するシステム。
負荷分散クラスタ構成:ロードバランサにより負荷分散を行う。HA(High Availability)クラスタ構成:メイン機と、待機するサブ機を使用してサーバーダウンしないような形を実現する構成
グリッドコンピューティング 広域に分散する多数のコンピュータをネットワークで結び並列処理することで仮想的に高性能なコンピュータとして使用するシステム(仕組み)。
大規模並列処理とも呼ばれヒトゲノムを解析するプロジェクトなどで使用している

高信頼化システムの構成

名前 説明
シンプレックスシステム オンライントランザクション処理における基本的な構成
情報システムの信頼性や構成法に関する用語で、冗長化などを行わず単一の系統だけでシステムを動作させること。 最も単純な構成で、どこかに障害が発生するとシステム全体が停止してしまう。
タンデムシステム 複数の処理装置やコンピュータを直列につなぎ、それぞれが特定の処理に注力して役割分担する構成のシステム  
デュプレックスシステム 1つの処理に対して2組のシステムを用意しておき、一方は障害が発生した際の予備機として待機させておく構成。よくあるサーバー構成。

A.直列システム

デュプレックスシステム

サーバー運用などでメインサーバー(主系)とサブサーバー(従系)を用意しておき、主系がダウンしたときに従系が起動する方式。
下のように3種類の状態がある。こちらのサイトを参考にしました。

  1. ホットスタンバイ:主系が起動しているときに従系も同様に起動、同期している状態で運用するので、ダウンしたときはすぐに従系が起動できる

  2. コールドスタンバイ:切り替えに時間がかかる。従系は電源を切った状態で待機、ダウンしたときに従系を起動して切り替えるので時間がかかる

  3. ウォームスタンバイ:従系には、別のアプリケーションを起動させている状態。ダウンしたときに従系に切り替えるのに時間がかかる

デュアルシステム

システムを2以上起動して、正常性を確認品がら処理を行う(クロスチェック)。医療系などの絶対にシステムを停止できないようなシステムに使用される。

フォールトトレラントシステム

その構成部品の一部が故障しても正常に処理を続行するシステムである。
フォールトトレラントシステムにおける障害復旧はロールフォワード(roll-forward)とロールバック(roll-back)に分けられる。

マルチプロセッサ

一台のコンピュータシステムに複数のマイクロプロセッサ(CPU/MPU)を搭載すること。複数のプロセッサで異なるデータや命令を並列に処理することでシステム全体の処理能力を向上させることができる。

RAID(レイド)

名前 説明
RAID 0 複数のディスクにデータを分割して書き込みアクセス速度を向上したもの
RAID 1 片方のディスクと同じディスクを作成する(ミラーリング)ようにして、片方のディスクをバックアップ用にする
RAID 2 データ保存用ディスクを複数台、データ修復用(ハミング符号)を用意してアクセス速度と信頼性を向上する
RAID 3 データ保存用ディスクを複数台、データ修復用(パリティ符号)を用意してアクセス速度と信頼性を向上する
RAID 4 RAID 3 では、ビット単位で行っていたこと(データアクセス)をセクタ単位で行うようにしたもの
RAID 5 RAID 4 において、データ修復用のパリティディスクにあるデータ(パリティデータ)をデータ保存用のディスクに分散したもの
RAID 6 RAID 5 においてデータ修復用のパリティ符号を2つ生成する方式

RAIDはネットワークストレージにも使用される

NAS: Network Attached Storage
SAN: Strage Area Network

情報処理システムの評価

評価ポイント

  1. 処理能力の評価
  2. システムの稼働率と故障率
  3. 経済性の評価

1.処理能力の評価

  • 処理能力の評価
  • 信頼性の評価

処理能力の評価

システム全体の評価:以下の評価指標を使用する。

  1. 処理時間
  2. 仕事量
  3. CPU
処理時間の評価
  • ターンアラウンドタイム:処理を依頼してから、完全な出力結果を得られるまでの時間
    = CPU処理時間 + 入出力時間 + 処理待ち時間など

  • レスポンスタイム:システムに処理依頼が届いてから、結果の出力までの時間
    = CPU処理時間 + 処理待ち時間など

処理時間のイメージ

仕事量の評価
名前 説明
スループット 1トランザクションにかかる時間
TPS (transactions per second: トランザクション数/秒)
または TPM (transactions per minute: トランザクション数/分) で測定されるのが普通です。
キャパシティプランニング 情報システムの設計段階で現状の最大負荷だけでなく、将来予測される最大負荷時にもサービスの水準を維持できるような設計を検討することです。 ステップ1: パフォーマンス目標の決定
ステップ2: パフォーマンス・メトリックの測定
ステップ3: システムのボトルネックの特定
ステップ4: キャパシティ管理計画の実施
CPUの評価
名前 説明
クロック周波数 高いほど性能が良い
MIPS(Million Instructions Per Second) 100万単位での、1秒で実行できる命令数 = MIPS は、「 百万命令 / 秒」=> 「1MIPS = 100万命令/秒」
GIPS(Million Instructions Per Second) 1秒で実行できる命令数 = MIPS は、「 百万命令 / 秒」
FLOPS(FLoating-point Operation Per Second) 1秒で実行できる浮動小数点数演算数 = FLOPS は、「 百万命令 / 秒」=> 「1FLOPS = 10億命令/秒」
性能測定技法

ベンチマークテスト
評価用標準プログラム使用して計測

名前 ベンチマークの種類
TCPベンチマーク nuttcp, GoogleCodeのNDT, J2EE ベンチマークなど
SPECベンチマーク SPEC(標準性能評価法人)、CPUの性能指標と評価方法(日本OSS推進フォーラム)

評価指標とベンチマーク

信頼性の評価

故障に関する考え方

名前 説明
フォールトトレラント(耐故障技術) システム設計の手法であり、システムの一部に問題が生じても全体が機能停止するということなく(たとえ機能を縮小しても)動作し続けるようなシステムを設計するものである。
フェールソフト 故障箇所を切り離すなど被害を最小限に抑え、機能低下を許しても、システムを完全には停止させずに機能を維持した状態で処理を続行(縮退運転)する設計のこと
フォールトアボイダンス(故障排除技術) システムや装置の信頼性についての考え方の一つで、なるべく故障や障害が生じないようにすること。 個々の構成要素の品質を高めたり、十分なテストを行ったりして、故障や障害の原因となる要素を極力排除することで信頼性を高めるという考え方。

安全に対する考え方

名前 説明
フェールセーフ 誤操作・誤動作による障害が発生した場合、常に安全に制御すること。 またはそうなるような設計手法で信頼性設計のひとつ。 これは装置やシステムが『必ず故障する』ということを前提にしたものである。
フールプルーフ 機器の設計などについての考え方の一つで、利用者が操作や取り扱い方を誤っても危険が生じない、あるいは、そもそも誤った操作や危険な使い方ができないような構造や仕掛けを設計段階で組み込むこと
信頼性の指標
RASIS, RASという指標がある 指標 意味
Reliability(信頼性) システムが正しく動いているか?
Availability(可用性) 使いたいときにシステムが稼働状態になっているか?
Service ability(保守性) 障害が発生したときに対処(回復)しやすいか?
Integrity(完全性) データの正当性が保証されているか?
Security(安全性) システムやデータに対する機密保護が行われているか?
名前 説明
MTBF(Mean Time Between Failures(平均故障動作時間) システムが修復されてから次に故障するまでの時間
MTTR(Mean Time To Repair(平均修理時間)) システムが修復されてから復旧するまでの時間
稼働率 MTBF / (MTBF + MTTR)
非稼働率 1 - 稼働率
故障率 「1 / MTBF」 もしくは、 「Σ装置単体の故障率」※Σは総和を示す

経済性の評価

名前 説明
初期コスト(Initial const) ハードウェア、ソフトウェア、開発の合計費
運用コスト(Running const) ハードウェアのリース(レンタル)、オペレータ、設備維持の費用

インターフェース設計

画面設計

シュナイダーマンの8原則

  1. 一貫性を持たせる
  2. 頻繁に使うユーザーには近道を用意する
  3. 有益なフィードバックを提供する
  4. 段階的な達成感を与える対話を実現
  5. エラー処理を簡単にさせる
  6. 逆操作を許す
  7. 主体的な制御権を与える
  8. 短期記憶領域の負担を少なくする

フールプルーフ
機器の設計などについての考え方の一つで、利用者が操作や取り扱い方を誤っても危険が生じない、あるいは、そもそも誤った操作や危険な使い方ができないような構造や仕掛けを設計段階で組み込むこと

チェック内容一覧

名前 説明
ニューメトリックチェック 数字検査
リミットチェック 限度検査
フォーマットチェック 書式チェック
重複チェック
照合チェック 取得したデータと取得元のデータを照合する
バランスチェック 別々に集計した合計が一致しているか
論理チェック データが論理的に正しいか
シーケンスチェック 番号が順番に並んでいるか
組み合わせチェック 入力された複数の関連項目の組み合わせに矛盾がないかチェック
チェックデジットチェック 検査文字(チェックキャラクタ)を使用してチェックする
帳票設計

システムから出力される、報告書、伝票などの項目やレイアウトを設計する
手順

  1. 総合的な検討:出力目的、出力周期、タイミング、配布先、出力量など
  2. 出力方式、媒体の検討:紙、CD、PDFなど
  3. 出力項目、帳票レイアウトの作成:プリンターやプリンターサーバーに保存しておき、原稿と重ね合わせて印刷する機能。フォームオーバーレイの使用も検討する。

フォームオーバーレイ
プリンターやプリンターサーバーに保存しておき、原稿と重ね合わせて印刷する機能。

コード設計

データを分類するためのコードを定義する、都道府県コードや、大学コードのこと。コードに要求される4つの機能

  1. 識別機能:データを区別する
  2. 分類機能:データを分類する
  3. 配列機能:データの順序を決定する
  4. チェック機能:データが正しいことをチェックする

コードは以下のような種類がある

名前 説明
順番コード 順番に割り当てる 都道府県コード
区分コード 各ブロック内で連番で割り当てる 大学コード
Ex 0: 国立{001: 東京大学, 一橋大学 ...} 1: 公立{都立大, 横浜市大 ...} 2: 私立{明治大, 慶応大 ...}
桁別番号 各行に意味を持たせる(1桁目: 種別, 2桁目: コース, 3~6桁目: 登録番号) 前日コースの法人会員コード
表意コード コード化するデータや名称や略称を使用 JP20CTV=日本製20インチカラーテレビ
合成コード コードを組み合わせる

基本情報技術者試験 ~暗記物「ハードウェア」~

イントロダクション

基本情報技術者試験は「考える事」よりも「暗記する事」の方が多いように思えたので、ここのページにまとめることにしました。

基本情報学習 Index

A. ハードウェア

  • 1-1. コンピュータ5大装置
  • 1-2. コンピュータの5大要素
  • 2-1. データの表現 ※理解が必要のため別記事
  • 2-2 基数と奇数変換 ※同様に別記事
  • 2-3 データの表現形式
  • 3-1 中央処理装置の構成
  • 3-2 主記憶装置の構成
  • 3-3 命令とアドレッシング
  • 3-4 ALUの構成回路(論理回路)

1-1 コンピュータの種類

世代: 西暦 代表的なコンピュータ
1: 1940年~ 【論理素子:真空管】・ENIAC(1946年), EDSAC(1949年)
2: 1950年~ 【論理素子:トランジスタ】・UNIVAC(1951年), EDSAC(1949年)
3: 1960年~ 【論理素子:IC(集積回路(Integrated Circuit))】・IBM/360(1964年)
3.5: 1970年~ 【論理素子:LSI(Large Scale Integration): 大規模集積回路】

・制御用コンピュータ

・マイクロプロセッサ

・スーパーコンピューター

・マイクロコンピュータ(マイコン)

4: 1980年~ 【論理素子:VLSI(Very LSI)】・個人に一台のPCに変化
次世代:1 ?年~ 【論理素子:?】・さらなる発展

パーソナルコンピューター

・通常のデスクトップ
・ノートパソコン

サーバ

・サーバー機、スペックが高い(コンピュータ)。
・タワー型
・ラックマウント型(ユニット型を差し込む)
・ブレード型

サーバーは常駐アプリケーションの事ですが、世間ではサーバー用のマシンも「サーバー」と呼びます。

これに対し、ウェブサーバーや、DBサーバー、ファイルサーバーなどは、マシンではなく、アプリケーションを指します。

サーバーアプリケーションには以下の分類があります。

  • ウェブサーバー(Apache, nginx etc)
  • DBサーバー(MySQL, Oracle, PostgreSQL)
  • ファイルサーバー(LinuxではSambaというアプリ)
  • APサーバー(アプリケーションサーバー)(Tomcat, JBoss, GrassFish etc)

携帯端末

・ガラケー, スマホ, タブレット
・ウェアラブルコンピューター(スマートウォッチ、スマートグラス)

マイコン(マイクロコンピュータ)

電子ジャーなどの家電に組み込まれている、ゲーム機のコントローラにも使用されている。

画面などを表示しない、以下の様なものがあります。

  1. リモコンなどでコントロールするもの
  2. センサーなどを使用して人がいたらドアを開ける
  3. タイマーをセットして家電を動かす
  4. 指紋認証でドアの解錠を行う

など、多岐にわたり使われています。そして、LSIや、VLSIが使用されている。
※LSI, VLSIは上の表を参照ください

1-2. コンピュータ5大装置

  1. 入力装置: コンピュータに処理させるデータを入力する装置
    ・キーボード ・マウス ・イメージスキャナ
    ・デジタルカメラ ・ジョイスティックなど
  2. 出力装置: 処理結果を人間に分かる形で出力する装置
    ・ディスプレイ(モニタ) ・プロジェクタ
    ・プリンタ ・プロッタ ・スピーカー
    ・イヤフォンなど
  3. 記憶装置: データを記憶する装置
    ・ディスクドライブ ・フロッピーディスク(オフラインストレージとして使用)
    ・ハードディスクドライブ
    ・磁気テープ装置
    ・USBなど
  4. 演算装置: 記憶されているデータを制御装置の指示に従い処理する装置
    ・ALU: 高速な加算器と任意の論理演算のための装置をうまくひとつにまとめたもの
    ・加算器: デジタル回路によるものは、ANDゲート、ORゲート、NOTゲートの組み合わせで作る
    ・乗算器: デジタルに乗算を実行する回路
    ・バレルシフタ: ある特定のビット数分だけワードデータをシフトできるデジタル回路である。
    ・FPU: 浮動小数点演算を専門に行う処理装置
  5. 制御装置: 命令を解釈してほかの4つの装置に対して指示を出す装置

ポイントは記憶装置から出力装置に流れる所

<データの流れ図1>
5大装置におけるデータの流れ

<データの流れ図2>

2-1. データの表現形式

表現単位
コンピュータ内部では、電気信号が「流れている」もしくは「流れていない」の2種類のみ表現できる。

この2つの状態を「0」「1」に対応させコンピュータ内部で保存する。これは、2進数(ビット)表現に対応させている

情報量

データ量の単位 データの例
ビット(bit) 0, 1
バイト(byte) 01010101(= 8bit)
ワード 0101010101010101(= 16bit)

<大きな値>

記号 読み方 10進数 2進数
k キロ 10の3乗(10e3) 2の10乗
M メガ 10の6乗(10e6) 2の20乗
G ギガ 10の9乗(10e9) 2の30乗
T テラ 10の12乗(10e12) 2の40乗
P ペタ 10の15乗(10e15) 2の50乗
E エクサ 10の18乗(10e18) 2の60乗
<小さな値> 記号 読み方 10進数
m ミリ 10の-3乗(10e-3)
μ マイクロ 10の-6乗(10e-6)
n ナノ 10の-9乗(10e-9)
p ピコ 10の-12乗(10e-12)

2-2 基数と基数変換

2進数を10進数に変換する方法

2進数の各ビットが1になっている部分を桁数-1乗し、合算する

2の2乗⇒2e2と表記

例:「0101」(2進数)⇒「(0 x 2e3) + (1 x 2e2) + (0 x 2e1) + (1 x 2e0)」 = 「3」

8進数を10進数に変換する方法
2進数の時と同様に。。。

例:「0101」(8進数)⇒「(0 x 8e3) + (1 x 8e2) + (0 x 8e1) + (1 x 8e0)」 = 「65」

r進数を10進数に変換する方法
2の2乗⇒2e2と表記し、桁数=「n」とする

各値e(n - 1) を合算する => 2進数「1010」であれば「(1 x 2e(4 - 1) + 0 x 2e(3 - 1) + 1 x 2e(2 - 1) + 0 x 2e(1 - 1))」 = 10

10進数をr進数に変換する方法

  • 整数部:商が0になるまでnで除算を繰り返し、後ろから並べる

10進数「65」を8進数に変換する
65 / 8 = 8 ... 1
8 / 8 = 1 ... 0
1 / 8 = 0 ... 1

  • 小数部: 計算結果の小数部が0になるまでnで乗算し、それぞれの計算結果を前から並べる
    10進数「0.6875」を8進数に変換する
    0.6875 x 8 = 5.5000 -> 5
    5.5000 x 8 = 4.0000 -> 4
    = 「0.54」

2-3 データの表現形式

コンピュータ内部dふぇは、すべてのデータを0, 1で表すが、これを下の様に人間に分かる形で「表現(表示)」する。

データ

  • 文字データ
  • 数値データ(10進数表記, 2進表記)
    • 10進数
    • ゾーン10進数(アンパック10進数)
    • パック10進数
    • 2進数
    • 固定小数点数
    • 浮動小数点数

文字データ

1byte(8bit)で表現される

文字コード 16進表記 文字
0100 1010 4A 'J'
0100 1001 49 'I'
0101 1011 53 'S'

数値データ

基数(2進数、10進数) ※別記事詳細を記載

3-1 中央処理装置(CPU)の構成

中央処理装置には、制御装置演算装置が含まれる

ストアドプログラム方式(我々が使用する普通の方式)のコンピュータでは、以下のように動く

  1. 主記憶装置に記録されているプログラムを中央処理装置に読み込む
  2. 制御装置が各装置に指示を出す
  3. 処理を実行する

中央処理装置

  • 制御装置
    • デーコーダ:実行命令を解釈する(命令解読器、複合器)
    • レジスタ:様々なデータを一時的に記録するための装置
      • 命令レジスタ: 実行する命令を格納する
      • 命令アドレスレジスタ(プログラムレジスタ): 次に実行する命令のアドレスを格納する
      • 汎用レジスタ: 処理対象となるデータを格納するなど、様々な用途に使用する
    • アキュムレータ: 演算を行うためのデータを格納する。
    • 指標レジスタ: あぢレス就職を行うための仕様を格納する。
    • フラグレジスタ: ある状態(演算結果が正か負か、など)の情報を格納する。フラグレジスタの状態により、条件分岐命令の分岐先などが決定される。
    • PSW(Program Status Word): プログラムの実行状態を格納する。= 「待機、実行、停止」
    • クロックジェネレータ: コンピュータ内部で、各装置間の動作タイミングをとるのに使用するクロック信号を発生させクロック周波数(MHz(メガヘルツ))でその速さを表す。
    • バス: データの通り道、内部バス(CPU内のバス)、外部バス(システムバス、メモリバス、入出力バス)、拡張バス(PCIスロットなどの拡張カードの接続バス)
  • 演算装置
    • 加算器、補数器を使用したALU(算術論理演算装置)

3-2 主記憶装置の構成

記憶素子とは、主記憶装置やレジスタを構成する素子。IC(集積回路)を使用したメモリのことを半導体メモリ, ICメモリと呼ぶ

説明
MOS型 集積度が高く消費電力も少ない、速度が若干遅い
CMOS型 MOS型の改良版、これが主流となっている
バイポーラ型 高速だが、集積度が低く、消費電力が多い論理集積回路TTLがある

RAM(Random Access Memory)

データの読み書き可能なICメモリ(半導体メモリ)、データの長期保尊には向かない

名前 説明
SRAM 高速で高価、フロップリップ回路を使用し、レジスタなどに使用される。情報保持は電力が少ないが、読み書きは大きくなる
DRA< 集積度が高く、大量生産に向いているれフレッシュが必要になる。SDRAM, DDR SDRAMがある。

ROM(Read Only Memory)

名前 説明
マスクROM 工場などでデータが記憶される、情報を参照するために使用される
ユーザープログラマブルROM 利用者がデータを書き込めるROM
PROM 紫外線を照射することで記憶内容の消去が可能なROM。
UV-PROM 紫外線を照射することで記憶内容の消去が可能なROM。
EEPROM E2PROMとも表記される。コンピュータなどの電子機器において、設定情報など、電源を切っても保持すべきデータの記憶に用いられる。
フラッシュメモリ EEPROMの一種で持ち運びに便利

主記憶装置の構成要素

・記憶部:データを記憶するメモリセル(記憶素子)が配置されている。
・読み取り機構:記憶領域(メモリセルの集合)にあるデータの読み書きをする。
・アドレス選択機構:指定されたアドレスを解釈してデータの領域を選択する。

主記憶装置の容量拡張

拡張メモリ:SIMMやDIMMがある。
メモリカード:JEIDA(日本電子工業振興協会)やPCMCIA(雨居r化の業界団体)がある。

3-3 命令とアドレッシング

中央処理装置が主記憶装置から読み込む命令は機械語

命令の種類 説明
算術演算命令 加算減算を行う命令
論理演算命令 論理演算を行う命令
転送命令 ロード・ストアなどのデータ転送を粉う命令
比較命令 二つの値を比較する命令
分岐命令 シフト命令(算術シフト、論理シフトを行う)命令
入出力命令 入力装置または出力装置とデータのやり取りをする命令

命令の実行手順

①命令の取り出し段階(フェッチサイクル)と ②命令の実行段階(エグゼキューションサイクル)がある。

  1. 命令取り出し(命令フェッチ)
  2. 命令解読
  3. 実行アドレス計算・オペランド(変数)取り出し
  4. 演算(命令の実行)

アドレスの指定方式

コンピュータのCPUが命令を実行する際に、対象となるデータのメインメモリ上での所在情報(アドレス、番地)を指定する方法のこと

割り込み

外部割込み

割込み名 説明
タイマー割込み タイマーによって割り込みを掛けること。
入出力割込み 入出力が完了したときなどに発生する。 また、入出力装置の故障や紙切れなど、入出力装置の状態が変化したときにも発生する。
機械チェック割込み ハードウェアに異常が検出された際に発生する割り込みのことである。 主に処理装置や主記憶装置などが、誤動作、故障、電源異常などを起こした際に行なわれる。
リスタート割込み 外部から、オペレーターなどにより再起動がかけられたときに発生する割り込みのこと。

3-4 ALUの構成回路

論理回路

参考サイト:論理回路記号とその変換

MIL記号では論理演算を下のように、書きます。ここは論理演算を図指揮すると下のように描けるというものです。深く考える必要はありません。

  1. and(論理積)
    AND演算
  2. nand(否定論理積)
    NAND演算
  3. or(論理和)
    OR演算
  4. nor(否定論理和)
    ![NOR演算]
  5. not(否定)
  6. xor(排他的論理和)

加算器(回路を組み合わせたもの)

  1. 半加算器
  2. 全加算器

算術演算回路

この部分に関しては、Javaプログラミングで理解しました。こちらの記事に詳細を記載しております。

加算器(回路を組み合わせたもの)

  1. 半加算器(2ビット計算)

これは、入力(X, Y)が1の時、AND演算を行うときのみ桁上がりすることを示す回路

  1. 全加算器(3ビット計算)

半加算器を2つ組み合わせ3桁のビット計算に半加算器を対応させたもの

補数回路

ビット反転した値 + 1を実現する回路

高速化技術

ライトスルー方式

CPUと記憶装置の間で記録を一時的に保管するキャッシュメモリーの動作方式のひとつ
CPUが記憶装置にデータを書き込むと同時に、キャッシュメモリーにも同じ内容を書き込む方式

ライトバック方式

ライトスルー方式に比べて、キャッシュが記憶装置よりも記憶動作が高速
キャッシュとメインメモリーとの間でデータが必ずしも整合するとは限らず、ライトスルー方式よりも制御が多少困難

メモリインタリーブ

物理上は1つである主記憶領域を、論理的な複数の領域(バンク)に分け、これに並列アクセスすることで見かけ上のアクセス時間の短縮を図るメモリアクセス高速化の手法

パイプライン制御

コンピュータは命令取り出し段階と命令実行段階を繰り返し処理する(CPU処理の並列化); この命令の実行段階を複数の段階に分けて、次の命令を先読みして並列化して高速化すること

補助記憶装置

  • 内蔵HDD(ハードディスク)
  • 外付けHDD(ハードディスク)
  • 光ディスク
  • USBメモリ
  • SDカード

磁気ディスク装置(ハードディスク)

HDDは下のようにトラックを中心に、セクタ→トラック→シリンダと部位が分かれている。

セクタ
トラックを等分割したもの
トラック
データの記録単位で、1周のことである
シリンダ
同心円状のトラックが集まったものである

磁気ディスクの記録領域

呼び方 またの名 意味
論理レコード レコード 記憶する単位
物理レコード ブロック 記憶する単位
ブロッキング - レコードをブロックにまとめること
ブロック化因数 ブロック化係数 ブロックにまとめたレコードの数

データの記録方式

呼び方 意味
バリアブル方式 データの読み書きをブロック単位で行う方式、区切りとしてIBGを使用する
セクタ方式 データの読み書きをセクタで行う方式。区切りとしてからのブロックを使用する。複数のセクタをかまとめて入出力単位とするクラスタという概念を用いることもある

磁気ディスク装置の平均アクセス時間

呼び方 またの名 意味
アクセス - データを読んだり書いたりする動作を
サイクルタイム - アクセス要求を受けてから次のアクセスを受けるまでの時間
位置決め シーク アクセスアーム(磁気ヘッド)を目的のトラック(シリンダ)まで移動する事
回転待ち サーチ 読み込むデータの先頭まで、磁気ヘッドが移動するのを待つ
データ転送 - 磁気ヘッドがデータを読み込む(書き込む)こと。

光ディスク

書き込み方式 英語 意味
ディスクアットワンス Disk At Onece ディスク全体にまとめてデータを書き込む
トラックアットワンス Track At Once トラック単位でデータを書き込む
セッションアットワンス Session At Once セッション単位でデータを書き込む
マルチセッション Multi Session 1枚のディスクに複数のセッションを記録する
パケットライティング Packet Writing データをパケットという小さな単位で記録する

入出力装置

カテゴリ 名前 説明
キーボード キー入力
ポスティングデバイス マウス
ポスティングデバイス タッチスクリーン
ポスティングデバイス デジタイザ(タブレット)
ポスティングデバイス トラックボール
ポスティングデバイス タッチパッド
ポスティングデバイス ジョイスティック
ポスティングデバイス ライトペン
画像入力装置 イメージスキャナ
画像入力装置 デジタルカメラ
画像入力装置 OCR 手書きの文字や印刷されたものをデータとして取り込む
画像入力装置 OMR マークしたものを絵データとして取り込む
画像入力装置 MICA 小切手や、手形などをデータとして取り込む
その他 生体認証装置 顔認証、指紋認証、など
その他 バーコードリーダ 1次元バーコード、2次元バーコード(QRコード)
音声入力 マイク 単一指向性マイク、全指向性マイク
カード読み取り装置 カードリーダ ICカード、磁気カードの読み取り
通信制御装置 LANインタフェースカード

出力装置

解像度規格
名前 画面サイズ 縦横比
VGA 640 x 480 4 : 3
SVGA 800 x 600 4 : 3
XGA 1024 x 768 4 : 3
SXGA 1280 x 1024 5 : 4
HD 1280 x 720 16 : 9
FHD 1920 x 1080 16 : 9
4K(QFHD) 1280 x 720 16 : 9
8K(FUHD) 7680 x 4320 16 : 9
ディスプレイ
名前 英語 説明
液晶ディスプレイ LCD(Liquid Crystal Display) 通常のディスプレイ
有機ELディスプレイ EL(ElectroLuminescence)
プラズマディスプレイ PDP(Plasma Display Panel)
CRTディスプレイ Cathode Ray Tube)

入出力

名前 英語 説明
USB Universal Serial Bus mini USB, micro USBのタイプがあり、コネクタはTypeA, B, Cが存在する。機能として「バスパワード(電源)」「ホットプラグ(PCの電源を入れたままケーブルの着脱が可能)」「アイソクロナス転送(データ転送量を保証する転送方式)」がある。
IEEE1394 Apple社のFirewire, ソニーのi.Linkがこれの商標名
RS232C
SCSI
IrDA 赤外線通信すべてを意味しているわけではなく、情報機器等の通信を定めた物
Bluetooth 無線技術の規格
シリアル ATA Serial ATA ハードディスクの接続に使用する
HDMI  TVとゲーム機など接続、画面に表示、音声も送信する

デバイスドライバ

名前 英語 説明
デバイスドライバ Device driver 周辺機器(デバイス)を制御するソフトウェア、Windowsの場合、デバイスマネージャで管理できる。接続して使用するためのソフトウェア
BIOS Basic Input/Output System ファームウェアの一つで、コンピュータに搭載されたプログラムのうち、ハードウェアとの最も低レベルの入出力を行うためのプログラムである。
プラグアンドプレイ Plug and play 「差し込んで使う」という意味。パソコンに周辺機器や拡張カードを接続すると、OSが自動的に必要な設定を行う仕組みのこと。

まだまだ、更新します。