ハンドル(計算)

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

コンピュータプログラミングではハンドルは、アプリケーションソフトウェアがデータベースオペレーティングシステムなどの別のシステムによって管理されているメモリまたはオブジェクトのブロックを参照するときに使用されるリソースの抽象的な参照です。

リソースハンドルは不透明な 識別子にすることができます。この場合、整数(多くの場合、そのタイプのリソースを管理するために使用される配列または「テーブル」内の配列インデックス)であるか、アクセスを許可するポインターである可能性があります。詳細については。一般的なリソースハンドルには、ファイル記述子ネットワークソケットデータベース接続プロセス識別子(PID)、およびジョブIDが含まれます。PIDとジョブIDは、明示的に表示される整数です。ファイル記述子とソケット(多くの場合、ファイル記述子の形式として実装されます)は整数として表されますが、通常は不透明と見なされます。従来の実装では、ファイル記述子は(プロセスごとの)ファイル記述子テーブルへのインデックスであり、それから(システム全体の)ファイルテーブルになります。

ポインタとの比較

ポインターには、それが参照するアイテムのアドレスが含まれていますが、ハンドルは、外部で管理される参照の抽象化です。その不透明性により、ハンドルを無効にすることなく、システムによって指示対象をメモリ内に再配置できます。これは、ポインタでは不可能です。間接参照の追加レイヤーは、管理システムが指示対象で実行される操作に対して持つ制御も強化します。通常、ハンドルは、トゥームストーンのグローバル配列へのインデックスまたはポインタです。

ハンドルリークは、コンピュータプログラムがリソースへのハンドルを要求したが、使用されなくなったときにハンドルを解放しない場合に発生するソフトウェアバグ一種です。これは、メモリへのポインタ のメモリリークに似た、リソースリークの形式です。

セキュリティ

安全なコンピューティング用語では、ハンドルを介したリソースへのアクセスは別のシステムによって仲介されるため、ハンドルは機能として機能します。つまり、オブジェクトを識別するだけでなく、アクセス権も関連付けます。たとえば、ファイル名は偽造可能ですが(推測可能な識別子にすぎません)、ハンドルは外部システムによってユーザーに与えられるため、IDだけでなく、アクセスも許可されます。

たとえば、プログラムがシステムパスワードファイル(/etc/passwd)を読み取り/書き込みモード(O_RDWR)で読み取りたい場合、次の呼び出しを介してファイルを開こうとする可能性があります。

int fd = open "/ etc / passwd" O_RDWR );    

この呼び出しは、指定されたアクセス権で指定されたファイルを開くようにオペレーティングシステムに要求します。OSがこれを許可している場合、OSはファイルを開き(プロセスごとのファイル記述子テーブルにエントリを作成し)、ハンドル(ファイル記述子、このテーブルへのインデックス)をユーザーに返します。実際のアクセスはOSによって制御されます。ハンドルはそのトークンです。逆に、OSはアクセスを拒否する可能性があるため、ファイルを開いたり、ハンドルを返したりすることはできません。

機能ベースのシステムでは、関連するアクセス権を使用して、プロセス間でハンドルを渡すことができます。これらの場合、ハンドルはシステム全体で一意の小整数以外のものでなければならないことに注意してください。そうでない場合、偽造可能です。それでも、このような整数は、プロセス内の機能を識別するために使用できます。たとえば、Linuxのファイル記述子は、その数値だけでは意味がなく、プロセスコンテキストでのみ何かを参照できるため、偽造できません。ただし、このようなハンドルの転送には特別な注意が必要です。これは、送信プロセスと受信プロセスでその値が異なることが多いためです。

一方、非機能ベースのシステムでは、各プロセスは、リソースのIDと必要なアクセス権を指定することにより、独自の個別のハンドルを取得する必要があります(たとえば、各プロセスは、ファイル名とアクセスモード)。このような使用法は、ハンドルの受け渡しをサポートする最新のシステムでも一般的ですが、混乱した副問題などの脆弱性の影響を受けます。

ハンドルは、Mac OS [1]Windowsなどの1980年代のオペレーティングシステムにおけるメモリ管理の一般的なソリューションでした。C標準I / OライブラリのFILEデータ構造は、基になるファイル表現から抽象化されファイルハンドルです( Unixではこれらはファイル記述子です)。他のデスクトップ環境と同様に、Windows APIはハンドルを頻繁に使用して、システム内のオブジェクトを表し、オペレーティングシステムとユーザースペース間の通信経路を提供します。たとえば、デスクトップ上のウィンドウは、タイプのハンドルで表されますHWND(ハンドル、ウィンドウ)。

利用可能なメモリの増加と仮想メモリアルゴリズムの改善により、より単純なポインタの使用が増えたため、二重間接ハンドル(ハンドルは必ずしもポインタではないが、たとえば整数である可能性があります)は最近人気がなくなりました。魅力的。ただし、多くのオペレーティングシステムでは、不透明な「プライベート」データ構造へのポインタ(不透明なポインタ)、または1つのプロセスからクライアントに渡される内部配列へのインデックスにこの用語を適用しています

も参照してください

参考文献

  1. ^ Hertzfeld、Andy(1982年1月)、The Original Macintosh:Hungarian 、 2010年5月10日取得

外部リンク