Preemption Modelsからの抜粋
The various preemption models are kernel specific. In principle, user space programs are always preemptible.
さまざまなプリエンプションモデルはカーネル固有です。原則として、ユーザースペースプログラムは常にプリエンプティブです。
Preemption of a running task is performed by the scheduler. This action can be triggered by a kernel interaction like a system call or an asynchronous event like an interrupt. The scheduler saves the context of the preempted task and restores the context of the new task.
実行中のタスクのプリエンプションは、スケジューラーによって実行されます。このアクションは、システムコールなどのカーネルの相互作用、または割り込みなどの非同期イベントによってトリガーできます。スケジューラーは、プリエンプトされたタスクのコンテキストを保存し、新しいタスクのコンテキストを復元します。
The Linux kernel implements several preemption models. The desired model is selected at build time of the kernel. The “Fully Preemptible Kernel” preemption model must be selected to obtain Linux as an RTOS. For the sake of completeness a list and a short explanation of the existing Linux preemption models is given. The last two entries are available only with the PREEMPT_RT patch.
Linuxカーネルは、いくつかのプリエンプションモデルを実装しています。カーネルのビルド時に目的のモデルが選択されます。 LinuxをRTOSとして取得するには、「完全プリエンプティブルカーネル」プリエンプションモデルを選択する必要があります。完全を期すために、既存のLinuxプリエンプションモデルのリストと簡単な説明を示します。最後の2つのエントリは、PREEMPT_RTパッチでのみ使用できます。
強制プリエンプションなし(サーバー)
No Forced Preemption (server): The traditional Linux preemption model, geared towards throughput 1). System call returns and interrupts are the only preemption points.
スループットを対象とした従来のLinuxプリエンプションモデル。システムコールのリターンと割り込みが唯一のプリエンプションポイントです。
自発的なカーネルプリエンプション(デスクトップ)
Voluntary Kernel Preemption (Desktop): This option reduces the latency of the kernel by adding more “explicit preemption points” to the kernel code [. . . ] at the cost of slightly lower throughput 2). In addition to explicit preemption points, system call returns and interrupt returns are implicit preemption points. Preemptible Kernel (Low-Latency Desktop): This option reduces the latency of the kernel by making all kernel code (that is not executing in a critical section) preemptible 3). An implicit preemption point is located after each preemption disable section.
このオプションは、カーネルコードに「明示的なプリエンプションポイント」を追加することにより、カーネルの遅延を削減します[。 。 。 ]スループットがわずかに低下します。明示的なプリエンプションポイントに加えて、システムコールリターンと割り込みリターンは暗黙的なプリエンプションポイントです。 プリエンプティブルカーネル(低レイテンシデスクトップ):このオプションは、すべてのカーネルコード(クリティカルセクションで実行されていない)をプリエンプティブにすることで、カーネルのレイテンシを短縮します3)。暗黙のプリエンプションポイントは、各プリエンプション無効化セクションの後にあります。
プリエンプティブルカーネル(基本的なリアルタイム)
Preemptible Kernel (Basic RT): This preemption model resembles the “Preemptible Kernel (Low-Latency Desktop)” model. Besides the properties mentioned above, threaded interrupt handlers are forced (as when using the kernel command line parameter threadirqs). This model is mainly used for testing and debugging of substitution mechanisms implemented by the PREEMPT_RT patch.
このプリエンプションモデルは、「プリエンプティブルカーネル(低遅延デスクトップ)」モデルに似ています。上記のプロパティに加えて、スレッド化された割り込みハンドラーが強制されます(カーネルコマンドラインパラメーターthreadirqsを使用する場合など)。このモデルは主に、PREEMPT_RTパッチによって実装された置換メカニズムのテストとデバッグに使用されます。
完全なプリエンプティブルカーネル(リアルタイム)
Fully Preemptible Kernel (RT): All kernel code is preemptible except for a few selected critical sections. Threaded interrupt handlers are forced. Furthermore several substitution mechanisms like sleeping spinlocks and rt_mutex are implemented to reduce preemption disabled sections. Additionally, large preemption disabled sections are substituted by separate locking constructs. This preemption model has to be selected in order to obtain real-time behavior.
いくつかの選択されたクリティカルセクションを除いて、すべてのカーネルコードがプリエンプティブです。スレッド化された割り込みハンドラーが強制されます。さらに、スリーピングスピンロックやrt_mutexなどのいくつかの置換メカニズムが実装され、プリエンプションが無効になっているセクションが削減されます。さらに、大きなプリエンプションが無効になっているセクションは、個別のロック構造に置き換えられます。リアルタイムの動作を取得するには、このプリエンプションモデルを選択する必要があります。