固定ビットがファイルに適用されたときに最初に行うことは何ですか?

固定ビットがファイルに適用されたときに最初に行うことは何ですか?

多くの場所で「スティッキービート」という言葉を見ることができますが、今ではその機能のために完全に間違った名前という非難を受けています。ディレクトリに影響を与え、次の役割を果たす書き込み権限。削除制限バナー。

AskUbuntuの回答では、回答者は次のように書きました。「固定ビットは通常ディレクトリで動作します。」。私は現代のシステムがそれをファイルに適用していないようですが、ずっと前に観察しました。通常何が起こるかは、ディレクトリではなくファイル(実行可能プログラムイメージ)で機能することです。 (最新ファイルの使用が不足している場合は、関連する質問があります。現在のファイルシステムが固定ビットを使用していないかどうか.)

これにより、次のような質問が発生します。

した固定ビットは実行ファイルに適用されますか? setuidのようなものですか?

過去のタイプに注意してください。これはない粘着性のあるビットはどのように機能しますか?今。当時はそのように働いた。

ベストアンサー1

いいえ、固定ビットは set-UID または set-GID フラグと同じではありません。資格情報の処理に対する変更には影響しません。

固定ビットの目的は、プログラムテキストを「固定」にすることです。もともとこの言葉は間違った言葉ではありませんでした。

背景:プログラムイメージセクションと共有テキスト

デフォルトでは、実行可能ファイル形式の詳細をあまり深く扱わず(本にはこの形式で埋められている可能性があります)、プログラムを実行するためにメモリに直接ロードされるプログラムイメージファイルの部分には、機械語コード、定数、値が含まれます。開始(ゼロ以外の初期化)変数と(何らかの形で)ゼロで初期化または初期化されていない変数のスペース。

これらは「セクション」というコレクションにグループ化され、一般的な名前を持ちます。機械語コードと(時々)定数は通常、プログラムイメージの「テキスト」と呼ばれるものを形成します。同様に、ゼロで初期化されていない変数は「データ」部分であり、ゼロで初期化されていない変数は「データ」部分です。「無意味な言葉」(名前自体には民俗史全体があります)。

プロセスがプログラム実行可能イメージファイルをロードすると、イメージファイルの内容に基づいて各部分(テキスト、データ、bss)が初期化されます。

「テキスト」部分の特別な点は、マシンコード(および定数)がほとんど常に書かれていないことです。その可能性がある共有この実行可能イメージファイルがロードされたすべての実行プロセスの仮想メモリイメージ。プログラムテキストを共有するための正確なシナリオは、この回答の範囲外であり、等級やアドレス空間のレイアウトを識別するためのローダーの変更などの操作が含まれます。人々はこのトピックに関する本を書いたり書いたりすることができます。 ☺

共有テキストはカーネルが採用した最適化です。単一のランチャーイメージの各インスタンスが独自の別々のメモリイメージを持つ必要はないため、まったく同じ機械語コード(および定数)の複数のコピーを介して貴重な物理メモリを消費します。

粘着性のあるテキスト

しかし、文字を共有するよりも良いことができます。明らかに、特定の共有テキストプログラムイメージを使用する実行中のプロセスが常に1つ以上ある場合は、そのプログラムの新しいインスタンスが実行されたら、カーネルは新しいプロセスの仮想メモリスペースを既存の共有テキストセグメントに追加するだけです。ほぼ常に(例えば)/bin/loginまたは/bin/shどこかにしたがって、中規模システムでは、ログインプログラムまたはデフォルトシェルの新しいインスタンスを、カーネルがすでにメモリにロードしているテキストセグメントのロードされたコピーに簡単にリンクできます。

固定テキストはこのアイデアを手続き型イメージに拡張します。現在実行中のプロセスはありません。。実行可能なイメージファイルが固定テキストとして表示されると、カーネルはそれを使用した最後のプロセスが終了した後もテキストセグメントを保持します。プログラムの他のインスタンスがまもなく実行され、セグメントを再度追加できることを願っています。

以前のUnicesでは、ロードされた固定テキストセグメントにプロセスが関連付けられていない場合は、スワップストアに置き換えられました。 (Unicesは後で交換の使用を中止しました。)この名前を聞いたことがあります。保存したテキスト

もちろん、プログラムイメージに固定テキストビットを設定することは注意が必要です。どのプログラムがこれから利益を得ることができるかは、機械の一般的な使用によって異なります。現在接続されていないテキストセグメントはカーネルリソースを消費します。つまり、すべてのシステムで使用できるテキストセグメントの数には実質的な制限があります。したがって、操作には通常スーパーユーザー権限が必要です。

廃止

もはや正しくない固定テキスト操作の後にはいくつかの仮定がありました。スワップストアから事前に作成されたセグメントを読み取ることは、実際の実行可能なイメージファイルから単純なプル要求よりも必ずしも高速ではありません。ファイルシステム形式は、(順次ではなく)ランダム読み出しパターンに適しています。統合キャッシュ、共有ライブラリ検索の違いによる不等性外部修正、アドレス空間レイアウトのランダム化など、需要ページング自体の出現により状況が変わりました。

実行可能なプログラムイメージに粘着性のあるテキストビットを使用していた時代は、ずっと前に過ぎました。たとえば、1980年代半ばに、4.3BSDの作成者は、実行可能なプログラムイメージの明示的な固定テキストマークアップフラグが使用されなくなったと考えました。

追加読書

  • バッハ、モリスJ.(1986)。 UNIXオペレーティングシステムの設計。フレンティスホール。 ISBN 9780132017992.

おすすめ記事