2017-02-07 7 views
2

私は最初のOSクラスを取っている途中ですので、ここで大きな誤解はありません。getpidがシステムコールとして実装されているのはなぜですか?

Linuxでgetpid()がシステムコールとして実装されているのはなぜかと思います。私が理解しているように、特定の機能はOSが保護したい情報にアクセスしたり変更したりするため、システムコールとして行われるため、カーネルに制御を移すためにシステムコールとして実装されます。

私が理解するように、getpid()は呼び出し元プロセスのプロセスIDを返すだけです。この情報の許可が与えられない場合はありますか?単にgetpid()を普通のユーザ関数にするのは安全でしょうか?

ありがとうございました。

+2

これは保護のためではなく、プロセス内部構造がカーネルに実装されているだけで、ユーザーモードライブラリではないからです。 – Barmar

答えて

0

GetPid()はある場所から読み込んでいるだけかもしれませんが、誰かがその場所に書き込む必要があります。オペレーティングシステムで使用されている場所にゴミを書き込む古いプロセスを提供するためには、ユーザーモードアクセスから保護する必要があります。アプリケーションがその場所にアクセスするには、カーネルモードでアプリケーションを実行する必要があります。したがって、システムコールとして実行する必要があります。

0

pidの処理にセキュリティ上の問題はありません。プロセスアドレス空間の分離は、オペレーティングシステムによって強制されます。私が正しく覚えていれば、getpid()への最初の呼び出しはシステムコールですが、getpid()への今後の呼び出しは(おそらくlibcによって)キャッシュされ、ローカルで処理されます。

関連する問題