LinuxやWindowsに代表されるOS(Operating System)は、ハードウエアを利用したり、管理したりするためのソフトウエアです。各種のミドルウエアやアプリケーションといったOS以外のソフトウエアは、OSを介してコンピュータを利用します。つまり、OSの役割をひと言でいうと、ハードウエアなどのコンピュータリソースへのインタフェースを提供し、それらを管理することです。
OSが他のソフトウエアに提供するインタフェースを、API(Application Program Interface)といいます。REST APIのようなWebサービスのインタフェースを指すAPIと同じ用語です。どちらも、何らかのサービスをアプリケーションが利用するためのインタフェースだからです。
OSが管理するリソースは、CPU、メモリー、ストレージ、ネットワークカードなどのハードウエアです。また、OSがソフトウエアで実装しているユーザー、アクセス権、ファイルシステム、排他制御なども、OSが管理します。
ハードウエアの違いを吸収しAPIを提供
OSは、CPUやネットワークカードなどのハードウエアの違いを吸収します。また、アプリケーションや人間にとって使いやすいインタフェースであるAPIを提供します。例えば、システム要件に応じて異なるスペックのハードウエアを導入してもシステムが動作するのは、OSがハードウエアの違いを吸収し、同一のAPIをシステムに提供しているからです。
また、ストレージ装置に格納されたデータを、人間が使いやすいファイル形式で扱えるのは、OSのAPIの働きによるものです。ストレージ装置では、磁気ディスク上ではデータは512バイト単位のブロックの羅列です。OSは、このブロック単位のデータを、ファイル名のついたファイルとして、任意の大きさのデータを読み書きできるようにしています。
OSのAPIは、プログラム作成とコンピュータの利用を容易にするだけでなく、それに従って作成されたアプリケーションの可搬性、移植性を保証します。特にエンタープライズシステムで広く使われているOSのAPIはこの点を明確に意識しているといえます。国際規格、業界規格、ベンダー公開仕様などにより、既存の仕様との互換性を長期間にわたって維持しています。
主なAPI仕様の例を表に示します。UnixやLinuxのAPIであるPOSIXは1988年の登場から既に30年が経っています。Windowsの標準APIであるWin32も1993年に登場し、現在に至るまで互換性を提供し続けています。
表●API仕様の例
APIに互換性があれば、異なるOS向けのプログラムを再コンパイルにより動作させることができます。そこで、ハードウエアやOSの保守期限切れなどにともなってサーバーを更新しなければならないような場合でも、大きな変更をすることなく、システムを延命できる可能性があります。旧システムのOSと移行先OSのAPIの互換性が高ければ高いほど、アプリケーションのプログラムの修正箇所を少なくでき、移行の難易度が低くなります。
もちろん、実際の移行検討では、OSだけでなくミドルウエアやパッケージの互換性の問題もあります。その場合、OSのAPIが完全互換だとしても、移行が容易とは限りません。
リソースを効率的に使う
OSのもう一つの大きな役割は、コンピュータのリソースを管理して、プログラムがリソースを効率的かつ安全に使えるようにすることです。
リソースが効率的に利用できていないと、データの読み書きがボトルネックになってCPUの停止している時間が長くなり、システムの処理に時間がかかってしまったりします。
リソースを効率的に利用するために、OSはさまざまな機能を備えています。例えば、入出力したデータをメモリーに保持して再利用するこキャッシュ機能、複数のI/Oを一度にまとめて行うバッファなどのソフトウエア技法を用います。これらにより、CPUの無駄な待ち時間を減らして処理を高速化できます。
こうした機能を活用する際には、プログラムがメモリーを使うつもりがなくても、OSがメモリーを消費することがあります。性能やデータ量の要件が厳しい場合、OSのリソース割当てやバッファに関するデフォルト設定を変更する必要があります。
リソースの安全な利用とは、リソースの使いすぎによるシステムの予期しない動作を防ぎ、アクセス権のないリソースにアクセスさせず、同時アクセスによるデータ破壊を防ぐことです。