システムコールはカーネルの一部ですか、それともオペレーティングシステムの一部ですか?

システムコールはカーネルの一部ですか、それともオペレーティングシステムの一部ですか?

ユーザーがシステムコールを実行すると、割り込みが発生し、実行がカーネルモードに移行した後、システムコールの実行を担当する割り込みハンドラが実行されます。今、私はこの割り込みハンドラ(そして他のすべての割り込みハンドラ)がカーネルの一部だと思います。

しかし、システムコールの実装(ファイルにデータを書き込むコマンドやソケットを開くコマンドなど)はどうですか?これらの命令はカーネルの一部と見なされますか、それともオペレーティングシステムの一部ですが、外部にありますか?コア?

ベストアンサー1

システムコールを実装する方法はいくつかありますが、「ソフトウェア割り込み」(トラップ)はそのうちの1つであり、まだ使用されていますが、コマンドなどの他の方法もありますsyscallここ詳細は)。

したがって、システムコールはカーネルコードを呼び出す方法です。呼び出されるコードはカーネルの一部でなければなりません。呼び出しコードはユーザー空間にあり(明らかに)、通常はライブラリの一部です(例:)libc

「XはYの一部です」という質問は、主にYの定義に依存します。 「カーネル」、「オペレーティングシステム」、および「〜の一部」が何を意味するかを定義した場合(人によって異なる方法で定義)、「システムコールはカーネルまたはオペレーティングシステムの一部です」と言えます。

これについて考えるより良い方法は、システムコールがカーネルコード用のアプリケーションプログラミングインタフェース(API)を定義することです。したがって、カーネル(場合によっては特定のバージョンのカーネル)と緊密に結合されます。

おすすめ記事