I ノードとファイル記述子 (簡易バージョン)

I ノードとファイル記述子 (簡易バージョン)

私は現在、オペレーティングシステムのコースを受講している数学の学部生ですが、コンピュータサイエンスの背景知識はほとんどありません。

私が知っている基本は次のとおりです。オペレーティングシステムは正確に2つの部分で構成されています。

  1. Linuxのすべてをファイルとして処理できるファイル管理システム
  2. ハードドライブやその他のデバイスを制御するデバイスドライバ

ここで、アプリケーションAを実行してアプリケーションAを実行するには、ハードディスクからメモリにアプリケーションAの実行可能ファイルをロードする必要があるとします。

今、それを達成する方法についての私の考えは次のとおりです。これが正しいかどうかはわかりません。助けてくれて本当にありがとう。

  1. オペレーティングシステムのファイル管理システムは、アプリケーションAを実行するためにハードディスクにアプリケーションAの実行可能ファイルが必要であることを知っている。このファイルのアドレスはファイル記述子テーブルにあります(わかりませんが、アドレスを指定したいかどうかを推測します)。ファイルA.outのアドレスは2475であり、ファイル記述子テーブルにはファイルA.outのアドレスと、プロセスがファイルから読み取るポインタを格納する変数iがあります。他のプロセスの記述子テーブルは異なりますか?このファイル記述子テーブルはRAMに保存されていますか?)

  2. 今、私たちが扱うべきことについての十分な情報があるので、「バフ」(メモリ空間であると仮定)という空の空間から始めます。今、ハードドライブを処理するデバイスドライバは、おそらく与えられたスペースで起動します。ハードドライブ情報の場所をアップロードし、「バフ」にアップロードします。

これが私の理解です。私が理解した内容が事実と矛盾している場合は、許してください。私の概念を明確にする方法についての助けと助言が必要です。

編集1:アプリケーションの実行可能ファイルをメモリにロードすると仮定すると、実際にアプリケーションの実行可能ファイルを開くときに開くファイル数のインデックスであるファイル記述子があります。これで、このファイル記述子はファイルテーブルを指します(1つだけです)。カーネルのファイルテーブルには、そのファイルを指すファイル記述子の数、現在のモード、ID(メモリに相対的なもの)などのファイルの詳細が格納されます。記述子テーブルは同じリソースを指すことができます。

答え1

これが講座で学んだ内容であれば、講座の質に深刻な疑問を持つようになります。オペレーティングシステムとディスクアクセス機能の完全な説明は、Q&Aサイトの範囲をはるかに超えています。それで、多くの詳細とニュアンスが欠けている簡単で大きな絵の説明をします。これも全体的な単純化です。

オペレーティングシステムは、2つの基本機能以上の機能を実行できます。これは、使用している用語の正確な定義と使用しているオペレーティングシステム(オペレーティングシステムにGUIを含むWindowsなど)によって多少異なりますが、少なくとも次の機能が含まれます。

  • 作業スケジュール
  • メモリ管理
  • ファイル/ファイルシステムへのアクセス
  • プロセス管理とプロセスコミュニケーション
  • ネットワーキング

したがって、説明を確認するには:

オペレーティングシステムのファイル管理システムは、アプリケーションAを実行するためにハードディスクにアプリケーションAの実行可能ファイルが必要であることを知っている。このファイルのアドレスは、ファイル記述子テーブルから提供されます。

いいえ。オペレーティングシステムのファイル管理システムではありません。最初のプロセス(他の形式のinit)を除いて、プロセスはすべて別のプロセスによって作成されます。たとえば、ls端末で操作を実行すると、使用中のシェルはオペレーティングシステムにプログラムをロードするように要求します。

Linux および Unix では、「ファイル記述子」という用語は、プロセスで意味するものとは異なる意味を持つことができます。 (少なくとも今は)「ファイル記述子テーブル」を「iノードテーブル」に置き換える必要があります。

その後、オペレーティングシステムのファイル(システム)機能は、iノードテーブルからディスク上のファイルの場所を取得します。 iノードテーブルはファイルシステムの一部であり、ディスクに保存されます。ただし、オペレーティングシステムは、不要なディスクアクセスを防ぐためにメモリにコピー(キャッシュ)を保持します。

それでは、ファイルを開くとどうなりますか?ユーザープロセスは、ファイル名を使用してオペレーティングシステムへのファイルオープン呼び出しを作成します。オペレーティングシステムは、名前をディスクの場所に変換し(Iノードテーブルを使用)、ファイルが再び閉じられるまで後でファイルを参照できるようにファイル記述子を割り当てます。

以下では、オペレーティングシステムのデバイス機能はディスクコントローラにディスク上の特定のセクタをメモリにロードし、ファイルシステム機能がそれをバイトまたはブロックストリームに変換できるように指示します。

答え2

I ノードとファイル記述子 (簡易バージョン)

  • プロセスは、iノードでディレクトリのリストを探します。
  • 次にiノードを使用してファイルを開きます。
  • open 呼び出しは、ファイル記述子テーブルにインデックスを返します。
  • 他のすべてのファイルシステム呼び出しはこのファイル記述子を使用します。

ファイル記述子索引は、プロセスのユーザー・スペースに保管されます。テーブルはカーネルスペースにあります(編集できればセキュリティが壊れる可能性があります)。ファイル記述子テーブルのフィールドには、ファイルのiノード、照会オフセット、読み取りおよび書き込みフラグ(読み取りおよび/または書き込み可能)などが含まれます。

各プロセスには独自のファイル記述子テーブルがあります。プロセスでどのファイルを開いたかを追跡します。権限の確認はファイルが開いているときにのみ発生するため、カーネルはそれを追跡する必要があります。これがファイル記述子テーブルがカーネルに存在する理由です(セキュリティなしでプロセスが自分で追跡できる)。

関連情報