目次
動作環境
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互換機は、IBM PC/ATと同様のハードウェア構成を持ち、同じようなOS(WindowsやLinuxなど)を実行できます
API
Application Programming Interface:アプリからOSへの命令の仕方
CPUの種類が違うとマシン語が異なるので、ネイティブコードも違う
CPUに合わせたネイティブコードを生成するコンパイラを使ってソースコードをコンパイルする必要がある
+---------------+ +--------------+ +------------------+ | Source Code +--->| Compiler +--->| Native Code | | (High-level) | | (Specific to | | (Machine Code, | | | | CPU type) | | CPU-specific) | +---------------+ +--------------+ +------------------+
FreeBSD Ports
ソースコード配布してるので
自分の環境で動くネイティブコード作っちゃう
Portsの語源は
porting:移植
FreeBSDソースコードはだいたいC言語で記述されている
C言語はシステムプログラミング(ハードウェアやOS)に適しているから
低レベルなプログラミング言語は
ハードウェアと密接に関連するプログラムを記述し易く
パフォーマンスを最適化できる
例えば、レジスタを直接操作しちゃう
エミュレータ
異なるOSのアプリを動作させたい
Java仮想マシン
どこでも同じ実行環境を提供したい
例;Windows
Javaソースコード ↓ コンパイラ Javaアプリ(バイトコード) ↓ Windows用Java仮想マシン ↓ Windows
例;Mac
Javaソースコード ↓ コンパイラ Javaアプリ(バイトコード) ↓ Mac用Java仮想マシン ↓ Mac
課題
- 完璧な互換性を実現するのは難しい
- 特定のハードウェアに依存する機能は使えない
- 実行速度が遅い(最適化などで改善はできる)
BIOS
ROMに記録されたコンピュータ内蔵のプログラムのこと
- キーボード基本制御
- ディスク基本制御
- グラボ基本制御
- boot strap loader を起動
boot strap
語源はつまみ革
boot strapは小さなプログラム
OSというでっかいプログラムを引き上げるために使う
PCの電源入れる ↓ BIOSがハードウェアの正常動作を確認 ↓ boot strap loader を起動(小さなプログラム) ↓ ディスクからOSをメモリにロード(でっかいプログラム)