0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

バイナリとCPUの深い関係を理解する

Posted at

はじめに

仮想化技術について理解を深める中でモヤモヤするのは、そもそもコンピュータの仕組みの理解不足だと感じた。そこで、「コンピュータはなぜ動くのか」という本をきっかけに色々理解を深めてみた。


1. バイナリコードはCPUに依存する

CPUには「命令セットアーキテクチャ」という仕様があり、各命令がどのようなバイナリ(0と1の列)で表されるかが決まっている。

  • x86(Intel、昔のMac)
  • ARM(Apple Silicon)

同じ処理でも、CPUが違えば命令の形もバイナリ列も異なる。

たとえば、「レジスタに1を入れる」という処理でも:

  • x86では 0xB8 0x01 0x00 0x00 0x00
  • ARMではまったく異なる命令とバイト列

つまり、バイナリコードは「どのCPU向けか」が明確に決まっている


2. OSの正体:OSも結局はバイナリ

OS(Operating System)とは、基本的には カーネルというソフトウェア本体 を指す。これはCなどで書かれたプログラムで、最終的に CPUが理解できるバイナリコードにコンパイルされる。

たとえば:

  • macOS(Intel用)
  • macOS(Apple Silicon用)
  • Ubuntu(x86用)
  • Ubuntu(ARM用)

など、それぞれ別のバイナリとして存在している。だからこそ、違うCPUにOSを移植するには「命令を理解できるように作り直す」必要がある。


3. コンパイラ言語とインタプリタ言語の違い(CPUとの関係)

コンパイラ言語

  • ソースコード → コンパイラ → そのCPU用のバイナリに変換
  • CPUが違えば再コンパイルが必要

例:C, C++, Rust, Go

インタプリタ言語

  • ソースコード → インタプリタ(バイナリ) が1行ずつ実行
  • スクリプト自体はCPU非依存
  • ただし インタプリタはCPU依存のバイナリ(Python自身がARM用 or x86用)

例:Python, Ruby, Bash, PHP


4. 仮想化とエミュレーション:CPUの違いを吸収する技術

仮想化(Virtualization)

  • CPUアーキテクチャが同じ前提で、仮想マシン上に別のOSをインストール
  • 命令はそのまま物理CPUで実行(=高速)

例:

  • Intel Mac上にVirtualBoxでWindows(x86)を動かす → 仮想化でOK

エミュレーション(Emulation)

  • CPUが異なる場合、命令が通じない
  • QEMUなどが 1命令ずつ読み取り、翻訳して実行(=遅いが動く)

例:

  • Apple Silicon Mac(ARM)でx86用Windowsを動かす → エミュレーションが必要

5. まとめ:重要なのは「誰がCPUの違いを吸収するか」

項目 誰が命令を変換・吸収するか
コンパイラ言語 コンパイラ(ビルド時)
インタプリタ言語 インタプリタ(実行時)
仮想化 OSそのまま、変換不要(CPU一致)
エミュレーション QEMUなどが命令を変換(CPU不一致)

6. 補足:OSインストールとISOファイルについて

仮想化環境でOSを動かすには、ISOファイルを使う。これは、

OSインストール用のCD/DVDの中身を、丸ごと1ファイルにしたもの

仮想化の手順(例:Intel Mac)

1. 仮想マシンを作成(名前:Windows)
2. 仮想ハードディスクを作成(例:50GB)
3. WindowsのISOファイルを読み込む
4. 仮想マシンを起動 → インストーラが走る
5. 仮想ディスクにOSをインストール


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?