4

ウィキペディアから次のように書かれています。

カーネル スレッドは、カーネル スケジューリングの「最も軽い」単位です。各プロセス内には、少なくとも 1 つのカーネル スレッドが存在します。

プロセスとは、メモリ空間、ファイル ハンドル、デバイス ハンドル、システム リソースなどを格納するコンテナーであり、スレッドはカーネルによって実際にスケジュールされるものであることを学びました。

シングルスレッドアプリケーションでは、その1つのスレッド(私が信じているメインスレッド)はカーネルスレッドですか?

4

2 に答える 2

1

いいえ。最新のオペレーティング システムでは、アプリケーションとカーネルは異なるプロセッサ保護レベル (リングと呼ばれることが多い) で実行されます。たとえば、Intel CPU には 4 つの保護レベルがあります。カーネル コードはリング 0 (カーネル モード) で実行され、最も特権のあるプロセッサ命令を実行できますが、アプリケーション コードはリング 3 (ユーザー モード) で実行され、特定の操作の実行は許可されません。http://en.wikipedia.org/wiki/Ring_(computer_security)を参照してください。

于 2013-07-18T14:53:58.493 に答える
1

この記事について話していると思います: http://en.wikipedia.org/wiki/Kernel_thread

その記事によると、シングル スレッド アプリケーションでは、定義上 1 つのスレッドしかないため、カーネル スレッドである必要があります。そうしないと、スケジュールされず、実行されません。

アプリケーションに複数のスレッドがある場合は、ユーザー モードのマルチ スレッドの実装方法 (カーネル スレッド、ファイバーなど) によって異なります。

ただし、アプリケーション コードを実行するときは、ユーザー モードで実行されているカーネル スレッドになることに注意することが重要です (システム コールを作成しない限り)。ユーザー モードで実行しているときに保護された命令を実行しようとすると、最終的にプロセスが終了する原因となるエラーが発生します。

したがって、ここでのカーネル スレッドは、スーパーバイザー/特権モードおよびカーネル コードと混同しないでください。

カーネル コードを実行できますが、最初にシステム コール ゲートを通過する必要があります。

于 2013-07-18T18:43:57.123 に答える