カニゲーム攻略日記ブログ

beatmaniaIIDXやハースストーンなどのゲーム攻略日記。主にまったり勢。2016年にIIDX皆伝になった

プログラムはなぜ動くのか  第7章 プログラムはどんな環境で動くのか

目次

動作環境

OSとハードウェア

例:windows10向けアプリの動作環境

  • OS:windows10
  • ハードウェア
    • メモリ:2GB
    • ハードディスク:10GB
    • CPU:x86-64

CPUが重要

CPUそれぞれでマシン語(ネイティブコード)が異なる

windows10向けの場合
CPUはx86-64

プログラマ
↓ 作成
ソースコード
↓ コンパイル
ネイティブコード(x86-64):windows10向けのアプリ
↓
CPUが実行

Windows

PCには色々ハードウェアがあるけど
ハードウェア構成の違いを乗り換えたOSがWindows

ちょっと昔話

ハードウェアの種類ごとに
専用のアプリが必要だった

理由:
- アプリはハードウェアを直接操作してた - 実効速度向上が必要だった

最近の話

Windowsならハードウェアが違っても
同じアプリを使える

理由:
- Windowsがハードウェアを制御してる

これにより、プログラマはハードウェアの違い(メモリやI/O)を意識する必要がなくなった

ただし、一部の高性能アプリケーションやゲームなどでは、ハードウェアの特性を最大限に活用するために、ハードウェアに最適化されたプログラムを作成することが求められることがあります。

OS

PCにインストールできるOS

例:AT互換機の場合、Windows,Linux

AT互換機は、IBM PC/ATと同様のハードウェア構成を持ち、同じようなOS(WindowsLinuxなど)を実行できます

API

Application Programming Interface:アプリからOSへの命令の仕方

CPUの種類が違うとマシン語が異なるので、ネイティブコードも違う
CPUに合わせたネイティブコードを生成するコンパイラを使ってソースコードコンパイルする必要がある

+---------------+    +--------------+    +------------------+
| Source Code   +--->| Compiler     +--->| Native Code      |
| (High-level)  |    | (Specific to |    | (Machine Code,   |
|               |    |  CPU type)   |    |  CPU-specific)   |
+---------------+    +--------------+    +------------------+

FreeBSD Ports

ソースコード配布してるので
自分の環境で動くネイティブコード作っちゃう

  1. ソースコード頂きたい
  2. サーバからソースコードを頂く
  3. ソースコードコンパイル
  4. アプリを実行

FreeBSDでは数万個のソースコードがいつでも入手可能

Portsの語源は
porting:移植

FreeBSDソースコードはだいたいC言語で記述されている

C言語システムプログラミング(ハードウェアやOS)に適しているから

低レベルなプログラミング言語
ハードウェアと密接に関連するプログラムを記述し易く
パフォーマンスを最適化できる

例えば、レジスタを直接操作しちゃう

エミュレータ

異なるOSのアプリを動作させたい

Java仮想マシン

どこでも同じ実行環境を提供したい

例;Windows

Javaソースコード
↓ コンパイラ
Javaアプリ(バイトコード)
↓
Windows用Java仮想マシン
↓
Windows

例;Mac

Javaソースコード
↓ コンパイラ
Javaアプリ(バイトコード)
↓
Mac用Java仮想マシン
↓
Mac

課題

  • 完璧な互換性を実現するのは難しい
  • 特定のハードウェアに依存する機能は使えない
  • 実行速度が遅い(最適化などで改善はできる)

BIOS

Basic Input/Output System

ROMに記録されたコンピュータ内蔵のプログラムのこと

  • キーボード基本制御
  • ディスク基本制御
  • グラボ基本制御
  • boot strap loader を起動

boot strap

語源はつまみ革

boot strapは小さなプログラム
OSというでっかいプログラムを引き上げるために使う

PCの電源入れる
↓
BIOSがハードウェアの正常動作を確認
↓
boot strap loader を起動(小さなプログラム)
↓
ディスクからOSをメモリにロード(でっかいプログラム)