情報技術において、ベアマシン(またはベアメタルコンピュータ)とは、オペレーティングシステムを持たないコンピュータのことである。[ 1 ]ベアマシンで実行されるソフトウェアは、ベアメタルプログラムまたはベアメタルアプリケーションと呼ばれるスタンドアロンプログラムであり、[ 2 ]ハードウェアと直接やり取りするように設計されている。ベアマシンは、特にリソースが限られている場合や高性能が要求される場合に、組み込みシステムで広く使用されている。 [ 3 ]
ベアマシンコンピューティングは、オペレーティングシステムやデバイスドライバなしで、アプリケーションソフトウェアが単一のスタンドアロン実行ファイルとしてベアマシン上で直接実行されるコンピューティングパラダイムです。アプリケーションソフトウェアはハードウェアリソースに直接アクセスでき、通常、ユーザーモードとカーネルモードの区別はありません。これは、他のソフトウェアコンポーネントを使用せずに起動、ロード、実行される自己管理型ソフトウェアです。ベアメタルプログラムは通常、C言語やアセンブリ言語などのハードウェアに近い言語で記述されます。[ 4 ]
通常、ベアメタルアプリケーションは、オペレーティングシステムに依存する同等のプログラムよりも高速に動作し、メモリ使用量が少なく、電力効率が高くなります。これは、システムコールによって課される固有のオーバーヘッドが原因です。たとえば、ハードウェアの入出力はベアメタルソフトウェアから直接アクセスできますが、OSを使用する場合は通常、システムコールを介してアクセスする必要があります。[ 5 ] OSがないため、OS関連の脆弱性はありません。
ベアメタルアプリケーションは、メモリ管理やタスクスケジューリングといったオペレーティングシステムのサービスが利用できないため、一般的に開発に多くの労力を要する。
ベアメタルプログラムのデバッグは、次のような要因によって複雑になる場合があります。
PDP-11などの初期のコンピュータでは、プログラマは機械語で記述されたプログラムをRAMにロードすることができた。プログラムの実行状況はランプで監視でき、出力は磁気テープ、印刷装置、またはストレージから得られた。
ベアマシンプログラミングは組み込みシステムでよく行われる手法で、マイクロコントローラやマイクロプロセッサはオペレーティングシステムをロードせずに、単一の目的のモノリシックソフトウェアを直接起動します。このような組み込みソフトウェアは構造が異なる場合があります。たとえば、フォアグラウンド・バックグラウンドまたはスーパーループアーキテクチャとして知られるプログラムパラダイムの1つは、各タスクが順次実行され、自発的にループに制御を戻す必要がある無限のメインループで構成されています。[ 6 ]ループは、時間制約のない協調的なバックグラウンドプロセスを実行し、割り込みサービスルーチンは、時間制約のあるフォアグラウンドタスクを処理するために、一時的にループを中断します。[ 7 ]
アプリケーションは、目的の操作を実行するために 1 つ以上の関数を連続して呼び出す無限ループで構成されます (バックグラウンド)。割り込みサービスルーチン (ISR) は、アプリケーションの非同期のリアルタイム部分 (フォアグラウンド) を処理するために使用されます。