プログラミング初心者の日記　第1回　コンピュータの仕組み

# 前書き
初めましての方は初めまして。syamaです。
今回より雑記として学んだ内容をアウトプットしていこうと思います。

第1回のテーマなのですが、IT業界の末席に身を置く人間としてコンピュータに関する基礎知識が不足していると感じたので、IT基本の「き」としてコンピュータを構成する仕組みについて調べて、解釈を記していこうと思います。

n番煎じの内容となるとは思いますが、読んでいただける方はお付き合いください。

# コンピュータの5大要素
コンピュータを構成する要素には以下の5つがあり、コンピュータの5大要素と呼ばれています。
1. 入力装置
2. 出力装置
3. 演算装置
4. 制御装置
5. 記憶装置

# 入力装置
人間がコンピュータにしてほしい処理を、コンピュータが分かるように変換して送る機能を持った装置。
入力装置の具体的な例としては以下のものなどがあります。
- キーボード
- マウス
- タッチパネル
- スキャナ
- カメラ
- マイク

このように、人間がタッチした箇所の情報、あるいは読み込んだ景色や写真などのビジュアルの情報、または認識した音声の情報をコンピュータが処理できる形に変換してコンピュータに送信します。

# 出力装置
入力装置とは逆に、コンピュータによって処理された結果を人間が理解出来る形に変換してコンピュータの外部に出力する機能を持った装置。
出力装置の具体的な例としては以下のものなどがあります。
- ディスプレイ
- プリンター
- スピーカー

このように、コンピュータが処理を行なった結果を人間が理解できる言語の形で表示したり、プリンタのように画像で出力したり、スピーカーのように音声によって出力したりすることができます。

# 演算装置
コンピュータを構成する中枢の部分。主記憶装置からプログラムやデータを取り出して計算や条件判断を実行する装置。
演算装置には主に以下が該当します。
- 中央処理装置（CPU）

CPUについては後述します。

# 制御装置
コンピュータ内の各装置に実行の命令を出し、操作・調整を行う装置。
制御装置には主に以下が該当します。
- 中央処理装置（CPU）

## CPU
私が今回コンピュータについて調べようと考えた原因の一つが、そもそもCPUとは何なのか、よく分からない状態だったことにあります。

CPU（Central Processing Unit = 中央処理装置）とは、文字通り、コンピュータの中心的な処理である演算と制御を行う装置です。

CPUが具体的に何をしているのかというと、主記憶装置との処理のやり取りです。

処理を行う際、まず、制御装置にある __レジスタ__ に、主記憶装置からの命令が格納されています。それは、具体的に何をすればいいかを表す __命令部__ と、処理対象となるデータの主記憶上の場所（アドレス、と言います）を示す __アドレス部__ からなっています。制御装置では、命令部とアドレス部で指定された命令内容やアドレスの内容を解読し、演算装置に送っています。

次に、演算装置では、受け取ったアドレスに対応した箇所にある演算の対象となるデータを主記憶装置から読み取ります。そして、読み取ったデータを命令に従って演算を実行し、最後に演算結果を主記憶装置に戻します。

このように、CPUでは、入力装置によってコンピュータに伝えられた命令を主記憶装置から受け取り、それに従って主記憶装置のデータを参照して指定された処理を実行するという作業が行われています。

# 記憶装置
その名の通り、プログラムやデータの記憶を行う装置。
以下のものが該当します。
- 主記憶装置（メモリ）
- 補助記憶装置

それぞれについて以下で後述します。

## 主記憶装置
私がコンピュータの構造について調べることとしたもう一つの原因がこちらです。つまり、「CPUって何？メモリって何？」というところから今回の調査は始まりました。

メモリとは、こういうやつです。
![computer_memory.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622599/3dcca6d8-c6f5-12f7-f2d5-8fe9ba59f237.png)

コンピュータが情報を利用する場合、必ず主記憶装置に格納されている必要があります。すなわち、CPUが直接アクセスできるのは主記憶装置のみです。

主記憶装置では、1バイトごとに「番地（アドレス）」と呼ばれる通し番号で管理されるそうです。しかし、一般的にはワードと呼ばれる単位（多くは32ビットまたは64ビット）が処理の最低単位で、それ以下であれば、例えば1バイト（8ビット）使う場合でも4バイト（32ビット）使う場合でも処理速度は変わりません。

主記憶装置はPC本体に内蔵された半導体の記憶装置で、電気的に情報を記録しているため、電源を切ると情報が消えてしまうという弱点があります。また、扱う全ての命令やデータを格納しておくには容量が足りません(数GBから数十GBが一般的です。)。
そのため、データ保存は後述の __補助記憶装置__ に任せ、主記憶装置では補助記憶装置のデータを扱うデータ処理を主に行っています。
メモリが大きいということは、たくさんのデータを保存出来る！というよりは、データの処理が速い！(たくさんのデータ処理が出来る)といった感じです。

## 補助記憶装置
補助記憶装置は、上記した主記憶装置の弱点を補うことができます。
補助記憶装置とは、一般的に、 __ストレージ__ と呼ばれるアレです。
代表的なものでは、以下があります。
- ハードディスクドライブ
- フラッシュメモリ
- SSD

こちらは、数百GB、あるいは数TBと主記憶装置に比べて非常に容量が大きく、また、PCの電源を切ってもデータは保存されます。

ただし、コンピュータの演算装置は補助記憶装置のデータを直接扱うことは出来ないので、主記憶装置を間に置いてデータをやりとりしています。

# 最後に
以上です。調べていて、自分が本当になんとなくでPCを使っていたのだと実感しました。
読んでくださる方々におかれましては、本当に基本的なことしか書けませんでしたが、アウトプットを行うことで自らの理解を深めることが目的の日記ということで、どうかご了承ください。

現在は、来月基本情報技術者試験を受けるための勉強をしていますので、次回から試験までは勉強した内容のアウトプットを行おうかなと思います。

ここまで読んでいただきありがとうございました。
次回も読んでいただけると嬉しいです。

# 参考
[コンピュータの仕組み-P検](https://www.pken.com/school/materials/pdf/kadai_h_01.pdf)

[コンピュータの仕組み-慶應義塾大学](https://crew-lab.sfc.keio.ac.jp/projects/2001ipl-text/info-2001-4/text-b/dentakuframe.htm)

[メモリやストレージ、記憶装置の分類を整理！-NIHON POLYMER](https://nihon-polymer.co.jp/2021/10/25/2779/#:~:text=%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E4%BF%9D%E5%AD%98%E3%81%AA%E3%81%A9%E3%82%92,%E7%9B%B8%E5%A0%B4%E3%82%82%E7%95%B0%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82)