コンピュータシステムのリソースとは、コンピュータシステムが利用できる、利用可能なハードウェアまたはソフトウェアのあらゆる要素を指します。他のリソースと同様に、コンピュータシステムのリソースも枯渇する可能性があり、その不足によって問題が発生することがあります。
ハードウェアとソフトウェアの設計 における重要な側面であるリソース管理には、リソースリーク(使用済みのリソースを解放しないこと)の防止と、リソース競合(複数のプロセスが同じリソースにアクセスしようとする場合)の処理が含まれます。クラウドコンピューティングでは、ネットワークを介してサービスを提供するためにコンピューティングリソースが使用されます。
メモリやストレージなどの線形アドレス指定可能なリソースは、連続または非連続の割り当てに使用できます。たとえば、動的メモリは通常、開始アドレスから一定の長さにわたって続くメモリの一部で構成される連続ブロックとして割り当てられます。一方、ストレージ領域は通常、ファイルシステムによってストレージデバイス全体にわたって非連続ブロックとして割り当てられますが、ファイルの利用者はそれを線形シーケンス(論理的に連続)として扱うことができます。リソースには、全体容量と、特定のサイズの割り当てをサポートする容量があります。たとえば、RAMには1MBのブロックを1024個割り当てるのに十分な空き領域があるかもしれませんが、小さなブロックの合計が大きなブロックのサイズに等しい場合でも、1GBのブロックを1つ割り当てるのに十分な連続した空き領域がない場合があります。断片化とは、線形リソースが非連続的に格納される程度を表し、断片化が進んだリソースはパフォーマンスを低下させる可能性があります。
圧縮可能なリソースと圧縮不可能なリソースを区別することもできます。[ 1 ] CPUやネットワーク帯域幅などの圧縮可能なリソースは、無害にスロットリングできます。ユーザーはスロットリングに比例して速度が低下しますが、それ以外は通常どおり動作します。メモリなどの他のリソースは、障害(メモリを割り当てられないと通常は障害が発生します)またはスラッシング(ページングによって処理スループットが低下する)によるパフォーマンスの低下を引き起こすことなくスロットリングすることはできません。この区別は必ずしも明確ではありません。たとえば、ページングシステムでは、メインメモリ(プライマリストレージ)を圧縮(セカンダリストレージへのページングによって)できます。また、一部のシステムでは、キャッシュ用の破棄可能なメモリを許可しており、これは致命的なパフォーマンスの影響を与えることなく圧縮できます。
電力は圧縮可能である。十分な電力がなければ、電気機器は動作せず、停止または故障する。しかし、携帯電話などの一部の機器は、電力低下による動作低下に対応している。また、一部の機器では、電力が復旧するまで(データ損失なしに)動作を一時停止できる。
資源の種類や、資源不足によって生じる問題は多岐にわたる。
例えば、コンピュータのメモリ容量は固定されているため、メモリはリソースと言えます。多くのアプリケーションにとって、メモリ容量は必要量に比べて非常に大きいため、実質的に無制限のリソースと言えます。しかし、メモリ使用量が比較的少ないアプリケーションが多数同時に実行されている場合、あるいはアプリケーションが大量のメモリを必要とする場合、空きメモリ量がゼロに近づくにつれて実行時エラーが発生します。アプリケーションはメモリを割り当てることができなくなり、おそらく処理が失敗します。
もう一つよく知られているリソースはプロセッサです。メモリとは異なり、プロセッサは予約されていません。しかし、プロセッサへの負荷が増加するにつれて、プロセッサの待機時間が増加し、処理スループットが低下します。これは多くの場合、ユーザーエクスペリエンスの低下、あるいは時間制約の厳しいアプリケーションにおいては、重要なシステム機能の喪失につながります。
リソースは階層化され、相互に絡み合うことがあります。例えば、ファイルはそれぞれ固有のものであるため、リソースと言えます。ファイルは固定サイズのストレージ領域を消費します。ファイルを開く際には、通常、ファイルにアクセスするためにメモリが割り当てられます。このファイルオブジェクトは、固有のリソースであると同時に、メモリ(リソース)を消費します。
一部のリソースは、ルックアップテーブルのキーやポインタなどのハンドルを介してアクセスされます。ハンドルはメモリを消費する可能性がありますが、ハンドル自体は低コストで複製できるため、リソースとはみなされません。
最新のオペレーティングシステムのブートプロセスでは、ハードウェアリソース情報を提供するために、 ACPIプロトコル[ 2 ]またはDevicetreeプロトコル[ 3 ]がよく使用されます。
注目すべきリソースには以下が含まれます。