その間、私はmkdirがディレクトリだけを作成できると思いました。しかし、特定の条件でファイルを生成することができるという事実に驚きました。私は最近cgroupを使い始めましたが、/ cgroupで "mkdir"コマンドを実行するとファイルとディレクトリが作成されます。
[abc@master ~]$ which mkdir
/bin/mkdir
[abc@master ~]$ mkdir /cgroup/cpu/group0
[abc@master ~]$ ls /cgroup/cpu/group0/
cgroup.event_control cpu.cfs_period_us cpu.rt_period_us cpu.shares
notify_on_release cgroup.procs cpu.cfs_quota_us cpu.rt_runtime_us
cpu.stat tasks.
このコマンドはどのようにmkdir
ファイルとディレクトリを生成できますか?
私はこれがcgroupsでのみ起こるのを見ることができます。オペレーティングシステムは、cgroupのmkdirと他の場所のmkdirをどのように区別しますか?
オンラインで答えを探しましたが、実際に役立つものが見つかりませんでした。関連情報をいただきありがとうございます。
ベストアンサー1
cgroup
これはコマンドではなくファイルシステムの機能ですmkdir
。このコマンドはシステムコールmkdir
のみを呼び出します。mkdir
システムコールmkdir
の呼び出し仮想FSコマンドの一部を分析するカーネルの階層で、特にディレクトリツリーのマウントポイント階層を分析して、ディレクトリを作成するファイルシステムを決定します。その後、VFS層はそのファイルシステム用のドライバ、つまりcgroup
ファイルシステムドライバのコードを呼び出します。
各ファイルシステムの操作(ファイルの開く、読み取り、書き込み、ディレクトリの作成、ディレクトリの削除など)に対してファイルシステムドライバが実行する操作は、ファイルシステムドライバによって異なります。ディスクの保存に使用されるファイルシステムは、指示に従ってディレクトリの存在を記録するようにディスクの内容を変更します。ネットワークファイルシステムはネットワーク経由でコマンドを送信します。これprocファイルシステムは、プロセスとカーネルに関する情報を報告します。、cgroupファイルシステムも同様のことを行います。
cgroupファイルシステムの動作は次のとおりです。カーネル文書。
mkdirシステムコールまたはシェルコマンドを使用して新しいcgroupを作成します。上記のように、cgroupsディレクトリ内の対応するファイルに書き込むことで、cgroupの属性(フラグなど)を変更できます。
cgroup ファイルシステムドライバがmkdir
その階層レベルでコマンドを受け取ると、そのコマンドは指定された名前の「新しい cgroup の生成」と解釈されます。readdir
(ディレクトリエントリを列挙するシステムコール)からコマンドを受信すると、/cgroup/cpu0
そのCPUのcgroupを一覧表示します。readdir
からコマンドを受け取ると、/cgroup/cpu0/group0
メモリに保存されている対応するcgroupのパラメータを反映する固定ファイルセットが報告されます。これらのファイルからread
コマンドを受信すると、そのパラメータを報告またはwrite
変更します。
cgroupの設計者は、新しいシステムコールを追加するのではなく、ファイルシステムを介して完全に制御することにしました。これにより、多くのライブラリコードとユーティリティを開発することなく簡単に使用できます。