オペレーティングシステム
オペレーティングシステムはアプリケーションソフトウェアを動作させるのが第一の目的である。このためのインタフェースがアプリケーションプログラミングインタフェース (API) とアプリケーションバイナリインタフェース (ABI) である。カーネルはシステムコールによってアプリケーションにサービスを提供する。さらに基本ライブラリも含めた形でアプリケーションに対してAPI/ABIを提供する。アプリケーションによってはオペレーティングシステム上のミドルウェアやアプリケーションフレームワークなどをAPIとして使用する場合もある。
APIはプログラミングのためのインタフェースであり、プログラムを作成する際の規則を構成する。例えば、C言語での関数やFORTRAN/Pascalなどのライブラリ呼び出しの仕様といったものがそれにあたる。
現代的CPUには複数の運用モードがある。その場合、少なくともユーザーモードとスーパーバイザモードの2つが存在する。スーパーバイザモードはオペレーティングシステムのカーネルが使用するモードで、ハードウェアに無制限にアクセスでき、メモリの読み書きの方法を制御したり、グラフィックスカードなどのデバイスとやりとりしたりできる。一方ユーザーモードはカーネル以外のほぼ全てが使用する。アプリケーションはユーザーモードで動作し、ハードウェアとのやりとりはカーネルを通す必要がある。CPUは2つ以上のモードを持つこともあり、古いプロセッサをエミュレートするのに使ったりする。
コンピュータが起動した際は、自動的にスーパーバイザモードで動作する。BIOSやEFI、ブートローダー、オペレーティングシステムのカーネルといったごく一部のプログラムがスーパーバイザモードで動作する。このようになっているのは、ユーザーモードの環境の初期化はその外側にあるプログラムでないと行えないためである。しかし、オペレーティングシステムが他のプログラムに制御を渡す際には、CPUをユーザーモードに設定できる。
ユーザーモードでは、プログラムが使用できるCPUの命令セットが制限されている。ユーザープログラムでユーザーモードを抜け出すには、割り込みを発生させ、カーネルに制御を戻す。そのようにしてハードウェアやメモリへのアクセスといったことへの独占的制御をオペレーティングシステムが保持している。