web-dev-qa-db-ja.com

カーネル操作

私は現在、オペレーティングシステムの概念を理解しようとしています(Unixライクなマシン上で)

カーネルはPID0のプロセスです。もちろん、プロセスはカーネルの概念であるため、カーネルは実際には「単なる別のプロセス」ではありませんが、カーネルが他のコンポーネントに制御を与えるわけではありません(...?)。

カーネルが実行できることはすべて、カーネルのソースコードで調べることができます(たとえば、LinuxカーネルはGithubにあり、誰でも見ることができます)

したがって、オペレーティングシステムは、アクティブな「プロセス」としてカーネルから開始します。次に、他のプロセス(PID 1のプロセスなど)にタイムスライスを生成しますが、同時に、カーネルに制御を戻すことを保証します。

したがって、CPUの制御は常に次のようになります。カーネル->いくつかのプロセス->カーネル->いくつかのプロセス->(...)

決して:いくつかのプロセス->いくつかのプロセス

システムコールは、カーネルが実行できるいくつかのことを実行するためのユーザーランドプロセスのAPIです。プログラムのすべての「高度な機能」(ファイルへのアクセス、Webへの接続)は、一部のシステムコールにまでさかのぼることができます。

重大な誤解はありますか?

3
hgiesel

UNIXの種類が異なれば、アーキテクチャも異なります。 Linuxおよび従来のモノリシックUNIXシステムでは、カーネルはnotプロセスです。これは、すべてのプロセスのメモリ空間(通常は上位ビットが設定されたアドレス)にマップされるコードとデータのブロックですが、 I/O特権レベル。プロセスがシステムコールを行うと、割り込みがトリガーされ、CPUがより高い特権レベルに切り替わり、割り込みが戻るまでカーネルコードとデータにアクセスできるようになります。 init(PID 1)やgetty(initで開始)のようなプロセスはカーネルではなく、システムによって自動的に開始される通常のユーザーモードプロセスです。

他のUNIXシステム、たとえばMachは、 マイクロカーネルアーキテクチャ を使用し、複数のサブシステムを別々のプロセスとして実行しています。

5