いくつかのシステムコールが必要です

いくつかのシステムコールが必要です

私はシステムコールがどのように機能するのか、システムコールの一般的な要件をよく理解しています。しかし、なぜcreate()ファイル、read()ファイル、close()などの特定のシステムコールがカーネルモードでのみ実行できるのかわかりません。

たとえば、create() および read() ファイルのユーザー空間またはユーザーモードでは、なぜこれが発生しないのですか?ユーザーがファイルを作成して読み取ってシステムを破損する方法は何ですか? close() システムコールについても同じ質問があります。

ベストアンサー1

create() ファイル、read() ファイル、close() などのシステムコールがカーネルモードでしか実行できない理由はわかりません。

定義によると、システムコールはカーネルモードで実行されます。ユーザースペースでは、通常、同じ名前のライブラリラッパー関数を介して使用できます。からman 2 intro

システムコールはLinuxカーネルのエントリポイントです。通常、システムコールは直接呼び出されません。代わりに、ほとんどのシステムコールには、システムコールを呼び出すために必要なステップ(カーネルモードでトラップなど)を実行する対応するCライブラリラッパー関数があります。したがって、システムコールを実行することは、通常のライブラリ関数を呼び出すのと同じように見えます。

(あなたも確認できますman 2 syscall

@dirktと@StephenKittがコメントで述べたように、言及したシステムコールはファイル記述子テーブルに書き込み、ファイルI / Oドライバにアクセスし、アクセスを確認する必要があるため、カーネルスペースで実行する必要があります。

おすすめ記事