コンピュータのハードウエア

コンピュータのハードウエア

パソコンの計算能力と記憶容量を考えると,[計算負荷を小さくできる],[メモリを消費しない]という意味がいまひとつ分かりにくいのではないかと思われますが,プログラミングではメモリの節約や消費電力の削減(=バッテリの持続時間)を目指して様々な最適化設計が行われます.
C言語はこの点において特に優れており,ハードウエアにとって効率的な(機械語の)プログラムを設計,製造することが可能といわれています.
実際,皆さんが使っているパソコンやスマートフォンの能力はおおよそ以下のようなものです.

PC スマートフォン マイコン
CPU・プロセッサ Intel Core i5/i7/i9, Xeon, AMD Ryzen ARM(A16 Bionic etc.), Snapdragon 数MHz∼100MHz以上
3∼4GHz 4∼8Core 1.5∼2.5GHz 2∼8Core
メインメモリ(RAM) 16∼64 GB 4∼8 GB 0.5 ∼ 512 kB
ストレージ(HDD, SSD, EPROM) 1∼10 TB以上 64∼1 TB 64 kB∼10 MB

現在では,小さなマイコンであっても,授業で扱うような規模のプログラムでは充分ですので,効率的なコーディングの効果が見えて来ないのも事実なのです.

MotherBoard of PC
ミニタワー型PCの内部.マザーボード,ディスク,電源,周辺機器などが納められている.

MotherBoard of PC
(いにしえの)マザーボード上にCPU,メモリなどが搭載されている.右半分の白色や黒色の拡張スロットにグラフィックボードやネットワークボードなどの拡張ボードを刺して使用していた.

プロセッサについて

コンピュータの頭脳は,なんと言ってもCPUである.
ソースコード中に記述した a = b + c; などの数値演算や, if(i < 0) などの比較演算・条件分岐は,すべてCPUで行われる

最新のCPUの動作クロックは,スマートフォンのような小型端末でさえ,数GHz以上となる.
また,1つの半導体パッケージに演算処理ユニットが複数収められ,並列に処理を実行できるマルチコアCPUが一般的である.

CPUが直接処理可能な機械語プログラムは,CPUの製造メーカーや,年代,製品ごとに異なるため,機械語で直接プログラムを書くと使い回しがしにくい.
そこで,機種依存を排したC言語などの高級言語でプログラムを記述して,コンパイラで機械語に翻訳する方法が採用されている.

CPUs CPUs
左:やや旧式のCPU 右:デスクトップPC・ワークステーション用CPU

CPU3
組み込み用CPU.マイクロコントローラとも呼ばれる.

メモリ(主記憶装置)について

メモリは,プログラム実行中に変数データ,配列・文字列データ,そしてプログラム自身(コードという)を一時的に記憶しておく,いわば作業場所である.
ソースコード中のint i;double data[100]; などの宣言により,メモリ内にデータの記憶場所が確保される.
最近のPCでは,8GB以上の容量のメモリが搭載されていることが多い. 携帯型のスマーとフォンであっても,2GB以上のメモリ搭載が一般的である.

SO-DIMM
ノートPC用内蔵メモリ.容量やピン数など様々な種類がある.

SDRAM
デスクトップPC用内蔵メモリ.こちらも多くの種類がある.

ディスク類(補助記憶装置)

実用的なプログラムでは,処理結果を単に画面に表示するだけでなく,何らかの方法でデータを永続的に(=電源を切っても)保存したい
また,処理に必要なパラメータ・計算条件,入力データなどは,毎回キーボードから打ち込むのではなく,ディスク上から読み込んで処理を行う場合が多い.

コンピュータにおいては,このような機能を実現するハードウエアを補助記憶装置と呼ぶ. これらはディスク,ドライブ,ストレージとも呼ばれる.

補助記憶装置の具体的な例として,ハードディスク(HDD)や,ソリッドステートディスク(SSD), SDメモリ, USBメモリ, Blue-ray, DVD, CDROM(古くは MO, PD, FDD, 磁気テープ, パンチカード・・・)などが挙げられる.
この中には,名称に「メモリ」とつくものがいくつかあるが,役割を考えると補助記憶装置である.

HDD SSD
補助記憶装置.(左)容量はなんと 61GB.ハードディスクドライブ,HDDと略す.
(右):ソリッドステートディスクドライブ,SSDと略す.高速だが容量単価が高い.

マイコン:マイクロコントローラ

自動車やスマーホフォンなどでは,PC向けに比べて大幅に小型なコンピュータが数多く使われている. このようなハードウエアでは,小さな半導体にプロセッサやメモリ,入出力インターフェースなどがワンチップ化されている.

マイコンと略称で呼ばれるが,「マイクロコンピュータ」,「マイクロプロセッサ」,「マイクロコントローラ」などの呼称があります.
演算機能+いくつかの入出力系があるもので,家電製品や自動車,通信機器など何らかの装置に組み込む用途で使われます.

これに対し,PCはキーボードやマウス,ディスプレイが付けば完結して使うことが可能なものとなっています.

いろいろなマイコンの種類を並べます. (加藤先生の元データはこちら
Raspberry Piは小さいながらもデスクトップPCとしての要件を満たす程度の性能を有しているものもあります.

特徴 主な開発言語 開発環境 価格(個人購入) 外観
Arduino AVRベースのマイクロコンピュータ C(部分的にC++) 無償のJAVA 比較的安価
\1,600∼\8,500
AVR RISC 8bitマイクロコントローラ アセンブラ, C言語 無償のアセンブラ
Cはgccなど
安価
\50∼\2,000
Basic Stamp PICベースマイクロコンピュータ Basic 無償で用意 やや高価
\2,500∼\4,500
H8 8(16,32)bitマイクロコントローラ
組み込み用
回数制限があるが書き換え可能
C/C++言語等 有償の専用品(HEW)
gcc(クロスコンパイラ)
比較的安価
\700∼\4,500
NXP
LPC
ARMマイクロプロセッサベース C/C++言語 オフラインコンパイラ(無償) 安価
∼\2,000
STMicro
F432KC
ARMマイクロプロセッサベース C/C++言語 クラウド上(無償)
オフラインコンパイラ
安価
∼\2,000
mbed
LPC1768
ARMマイクロプロセッサベース
Coretex M3
C++言語 クラウド上
オフラインコンパイラ
(いずれも無償)
やや高価
∼\7,000
PIC 8(16)bitマイクロコントローラ
組み込み用
アセンブラ, C言語 無償の開発環境(MPLAB) 安価
\50∼\2,000
PIC
Raspberry Pi, マイクロコンピュータというより,小型PC
Linuxマシンとして使用可能
アセンブラ, C言語,
python
gcc 他 やや高価
\5,000∼\15,000
RASPI
SuperH RISCチップ
32bitマイクロコントローラ(SH-2など)
32bitマイクロプロセッサ(SH-4, SH-Mobilleなど)
C/C++言語等 有償の専用品
gccとクロスコンパイラ
比較的安価
\900∼\3,000
Z80 8bitマイクロプロセッサ
昔はパソコン,今は組み込み用
アセンブラ, C言語 有償の専用品 比較的安価
¥1,000∼\1,500-

マイコンとC言語

コンピュータを動作させるためには,必ずといって良いほどプログラミングによるソフトウエア作成が必要となる.
とくにC言語は,スーパーコンピュータ(スパコン)を用いた大規模な並列計算機から,自動車や家電製品に組み込まれているマイクロコントローラ(マイコン)まで,非常に幅広いスケールのプロセッサをターゲットとしたソフトウエア開発で利用されている.

マイコンは,コンピュータの心臓部であるCPUとメモリに加えて,アナログ入出力,ディジタル入出力などが一体となった小さなコンピュータのことである. さらに,WiFi や 5G などの通信モジュールが一体となったものもあり,IoT (Internet Of Things)の中核をなす機器である.
マイコンは,自動車,家電製品,ドローン,ロボットなど,何らかの機械・機器に組み込んで使用されるため,通常のPCで使用されるようなディスプレイ,キーボード,マウスなどを接続することは少ない.
したがって,ソフトウエアの開発(ソースコードの編集や,コンパイル作業)を通常のPC上で行い,作成した実行ファイルをUSBやシリアル通信経由でマイコンに転送(書き込む)する方法が一般的である.
このような開発手法をクロス開発と呼び,使われるコンパイラをクロスコンパイラと呼ぶ.

マイコンの例:Arduino

Arduinoマイコンボード.プロセッサと多くの入出力端子がある.

Arduino (アルデュイーノ)は,教育用に開発されたマイコンである. 安価(数千円)で入手しやすく,Arduino IDE と呼ばれる統合開発環境(エディタ+コンパイラ)を無料でダウンロードすることができる.
プログラミング言語は C/C++ 言語であり,作成したプログラムはUSBケーブル経由で簡単にマイコンに転送することができる.

以下に開発の例を示す.
プログラムは基本的にC言語であり,ボタンクリックのみでコンパイルから実行ファイルの転送,実行が可能である.

コンパイルから実行までの動画.見慣れない関数が並んでいるが,これはマイコンボードに固有の機能.また,ソースファイルにmain()が無いが,別の場所で定義されている.
動作に必要な関数のみを記述すればよいので,簡単に開発を始めることができる.