コンテンツにスキップ

1-1. コンピュータアーキテクチャ

  • コンピュータを構成する主要部品の役割
  • 2進数・16進数と文字コードの仕組み
  • ビット演算・シフト演算の仕組みと使いどころ
  • OSがどのような役割を果たしているか

コンピュータは大きく以下の部品で構成されている。

┌─────────────────────────────────────────┐
│ コンピュータ │
│ │
│ ┌──────┐ ┌──────┐ ┌────────────┐ │
│ │ CPU │──▶│メモリ│ │ストレージ │ │
│ └──────┘ └──────┘ └────────────┘ │
│ │ │ │ │
│ └───────────┴────────────┘ │
│ │ │
│ バス(Bus) │
└─────────────────────────────────────────┘

プログラムの命令を実際に実行する「頭脳」にあたる部品。

  • 役割:計算・判断・制御
  • クロック周波数:1秒間に何回クロックを刻むかを示す(例:3GHz = 30億回/秒)
  • コア数:複数のコアがあると複数の処理を同時に行える(マルチコア)

CPUが行う基本動作は以下の3ステップの繰り返し。

フェッチ(Fetch) → 命令をメモリから取り出す
デコード(Decode) → 命令を解読する
実行(Execute) → 命令を実行する

プログラムが実行中に使うデータを一時的に保存する場所。

  • 特徴:高速だが、電源を切るとデータが消える(揮発性)
  • 役割:実行中のプログラムやデータを保持する
  • 容量の例:8GB、16GB、32GBなど
メモリのイメージ(各マスに1バイトのデータが入る)
アドレス データ
0x0000 01001000 ← 'H'
0x0001 01100101 ← 'e'
0x0002 01101100 ← 'l'
0x0003 01101100 ← 'l'
0x0004 01101111 ← 'o'

データを永続的に保存する場所。

種類特徴速度
HDD磁気ディスクに記録。大容量・安価遅い
SSDフラッシュメモリに記録。衝撃に強い速い
  • 電源を切ってもデータが消えない(不揮発性)
  • プログラムの実行時はストレージ → メモリへ読み込まれる
CPU レジスタ : ~0.3 ns (最速)
CPU キャッシュ: ~1-10 ns
メモリ(RAM) : ~100 ns
SSD : ~0.1 ms
HDD : ~10 ms (最遅)

プログラムが遅い場合、多くはメモリやディスクへのアクセスがボトルネックになっている。


コンピュータは電気信号の「オン(1)」と「オフ(0)」しか扱えない。そのため、すべてのデータは 2進数(Binary) で表される。

10進数2進数
00000
10001
20010
30011
40100
50101
81000
151111

変換の考え方(10進数 → 2進数)

13 ÷ 2 = 6 余り 1
6 ÷ 2 = 3 余り 0
3 ÷ 2 = 1 余り 1
1 ÷ 2 = 0 余り 1
余りを下から読む → 1101 ✓(13 = 1101₂)
単位読み方大きさ
bitビット0か1の1桁
Byteバイト8 bit
KBキロバイト1,024 Byte
MBメガバイト1,024 KB
GBギガバイト1,024 MB
TBテラバイト1,024 GB

2進数は桁数が多くなり読みにくいため、プログラミングでは 16進数 がよく使われる。

0〜9, A〜F の16種類の文字を使う(A=10, B=11, ... F=15)
2進数 : 1111 1111
10進数 : 255
16進数 : FF (プログラムでは 0xFF と書く)
2進数16進数10進数
000000
000111
001022
001133
010044
010155
011066
011177
100088
100199
1010A10
1011B11
1100C12
1101D13
1110E14
1111F15

なぜ16進数が便利か? 4ビット = 16進数1桁に対応するため、変換が簡単。


2進数のビット1本1本を直接操作する演算を ビット演算 という。 CPUが直接サポートしており、非常に高速に処理できる。

演算子名前意味
&AND両方が1のときだけ1
|ORどちらか一方が1なら1
^XORどちらか一方だけが1なら1(排他的論理和)
~NOT0と1を反転

対応するビットが両方とも1のとき、結果が1になる。

1100 (12)
& 1010 (10)
----------
1000 ( 8)

使いどころ:ビットマスク(特定のビットだけ取り出す)

value = 10110111 (183)
mask = 00001111 ( 15) ← 下4ビットだけ抽出したい
---------
結果 = 00000111 ( 7) ← 下4ビットが取れた

対応するビットのどちらか一方が1なら結果が1になる。

1100 (12)
| 1010 (10)
----------
1110 (14)

使いどころ:特定のビットを立てる(フラグをセットする)

flags = 00000000
flag_B = 00000010 ← Bビットを立てたい
-------
結果 = 00000010 ← Bビットが1になった

対応するビットが異なるときだけ1になる(同じなら0)。

1100 (12)
^ 1010 (10)
----------
0110 ( 6)

使いどころ:差分検出・暗号化・ビットの反転

// 同じ値でXORすると0になる → 差分がなければ0
a ^ a === 0 // true
// 0でXORすると元の値に戻る
a ^ 0 === a // true

全ビットを反転する。

8ビット幅で考えると:
~00001111 → 11110000 (= 240)

注意(JavaScript の場合) JavaScript では整数は32ビットとして扱われるため、~00001111-16 になる。 NOT を使う場合はビット幅を意識して AND マスクで必要な桁だけを取り出すのが一般的。


ビット列を左または右にずらす演算。

演算子名前意味
<<左シフトビットを左にずらす。右端に0を補う
>>右シフトビットを右にずらす。左端は符号ビットを補う

ビットを左に n 個ずらす = 2ⁿ 倍 と同じ効果。

00000001 (1)
<< 3
-----------
00001000 (8) ← 1 × 2³ = 8
const x = 1;
x << 3; // → 8 (1 × 2³)
x << 4; // → 16 (1 × 2⁴)

ビットを右に n 個ずらす = 2ⁿ で割る(切り捨て)と同じ効果。

00001000 (8)
>> 2
-----------
00000010 (2) ← 8 ÷ 2² = 2
const x = 20;
x >> 1; // → 10 (20 ÷ 2)
x >> 2; // → 5 (20 ÷ 4)

なぜシフト演算を使うのか? 掛け算・割り算よりも CPU の命令数が少なく高速。 組み込みシステムやパフォーマンスが重要な処理でよく使われる。

権限フラグ管理(ファイルのパーミッションなど)
READ = 100 (4)
WRITE = 010 (2)
EXECUTE = 001 (1)
// READ と WRITE を付与する
permission = READ | WRITE → 110 (6)
// WRITE 権限があるか確認する
has_write = permission & WRITE → 010 (2) → 0以外なので「あり」

コンピュータは文字も数値として扱う。「どの数値がどの文字か」を定めた規則が 文字コード

最初に普及した文字コード。128種類の文字を0〜127の数値で表す。

'A' → 65
'B' → 66
'a' → 97
'0' → 48
' ' → 32(スペース)

日本語を含む世界中の文字を扱える文字コード。Webや多くのシステムで標準。

'A' → 0x41 (1バイト)
'あ' → 0xE3 0x81 0x82(3バイト)
'😀' → 0xF0 0x9F 0x98 0x80(4バイト)

なぜ文字化けが起きるのか? 送り側と受け側で文字コードが異なる場合、「この数値はどの文字か」の解釈がずれるため文字化けが発生する。


5. OS(オペレーティングシステム)の役割

Section titled “5. OS(オペレーティングシステム)の役割”

OSは、ハードウェアとアプリケーションの間に立つソフトウェア。

┌────────────────────────┐
│ アプリケーション │ ← ブラウザ、エディタなど
├────────────────────────┤
│ OS(オペレーティング │ ← Windows、macOS、Linux
│ システム) │
├────────────────────────┤
│ ハードウェア │ ← CPU、メモリ、ストレージ
└────────────────────────┘

プロセス管理 複数のアプリを同時に動かせるよう、CPUの使用時間を切り替えながら管理する。

メモリ管理 各プログラムに必要なメモリを割り当て、互いに干渉しないよう管理する。

ファイルシステム ストレージ上のデータを「ファイル」「ディレクトリ(フォルダ)」という形で管理する。

デバイス管理 キーボード・マウス・プリンタなどの周辺機器を制御する。

セキュリティ・権限管理 ユーザーごとにアクセス権を管理し、不正なアクセスを防ぐ。


キーワード説明
CPU命令を実行する処理装置
メモリ(RAM)実行中データの一時保存場所(揮発性)
ストレージデータの永続保存場所(不揮発性)
2進数コンピュータが扱う0と1の数値体系
バイト8ビット。データ量の基本単位
ビット演算(AND/OR/XOR/NOT)ビット単位で直接操作する演算
シフト演算(<< / >>)ビットを左右にずらす演算。2の累乗の乗除と等価
UTF-8現在最も広く使われる文字コード
OSハードウェアとアプリの橋渡し役

演習問題 に取り組んで理解を確認しよう。

理解できたら 1-2. プログラムが動く仕組み へ進もう。