Linuxはハードディスクパーティションのデバイスファイルを使用してハードディスクにアクセスしますか?

Linuxはハードディスクパーティションのデバイスファイルを使用してハードディスクにアクセスしますか?

オンラインで次の写真を見つけました。

ここに画像の説明を入力してください

この図で私が理解しているのは、例えば次のとおりです。プロセス1ファイルを読み取るには:

  • read()ファイルのファイル記述子を呼び出して、引数として渡しますread()
  • 仮想ファイルシステムは、ファイルが ext2 ファイルシステムにあると仮定し、ファイルがどのタイプのファイルシステムにあるかを確認します。
  • ext2ドライバ(「ドライバ」であるかどうかはわかりません)は、HDDからファイルを取得するために適切なデバイスドライバを要求します。

今私が知りたいことは:絵の「デバイスドライバ」ボックスは何を表していますか? 、/dev/sda1などのデバイスファイルを表すか?/dev/sda2/dev/sdb1

したがって、デフォルトでは、Linuxは実際にこれらのデバイスファイルを使用してHDDにアクセスします(たとえば、Linuxが特定のファイルを読み取ろうとするとデバイスファイルを呼び出し、返されたファイル記述子open()から/dev/sda1読み込みます)。または、これらのデバイスファイルをユーザーおよびプログラムにのみ使用します。これを使用する場合、LinuxはHDDパーティションにアクセスするために他のどの方法を使用しますか?

ベストアンサー1

したがって、デフォルトでは、Linuxは実際にこれらのデバイスファイルを使用してHDDにアクセスします(たとえば、Linuxが特定のファイルを読み取ろうとするとデバイスファイルを呼び出し、返されたファイル記述子open()から/dev/sda1読み込みます)。または、これらのデバイスファイルをユーザーおよびプログラムにのみ使用します。これを使用する場合、LinuxはHDDパーティションにアクセスするために他のどの方法を使用しますか?

いいえ。

Linuxカーネルは実装するシステムコール(2);これはいいえまっすぐそれを書く

システムコール次の場合にのみ意味があります。ユーザーモードアプリケーションコード。カーネルコードはカーネルモードで実行されます。読むCPUモード

確かに、オープン(2)-その後読書(2)- 一部のディスクパーティションを指定します。例:/dev/sda1 間接的に一部が含まれていますコア他のカーネルコードで共有して使用するコード(例:ページキャッシュそしてファイルシステムパスワード)。

これらのデバイスファイルはユーザーとプログラムのためのものですか? LinuxはHDDパーティションにアクセスするために他の手段を使用していますか?

はい、カーネルコードはデバイスファイルを使用しません。標準偏差(4)(しかし、いくつかのコードレイヤーはどこかに共有されます)。カーネルは使用しません(ただし、供給ユーザープロセスがシステムコールを使用するとき)ファイル記述子カーネルの処理インデックスノードその他のデータ(dentries、vfsmounts...)。他のタイプの inode はファイルシステム層によってディスクに書き込まれます。

画像の「デバイスドライバ」ボックスはどういう意味ですか?

これはカーネルコードを表します(読み取りデバイスドライバWikiページ)関連SATAディスクとチップセット

読むオペレーティングシステム:3つの簡単な部分(無料ダウンロード) 全てを説明するには、書籍全体が必要だからです。それから見てカーネルの新機能Linuxカーネルについては、カーネルソースコードを調べてください(フリーソフトウェア)からkernel.org

(これは一般的な単純化です。カーネルコードはモジュール式で、ソフトウェア層で構成されています。仮想FS、SATAバスなど...)

おすすめ記事