プリエンティブって何だ

てコトで google 先生にお伺いを立てたら e-Words にプリエンプティブマルチタスク 【preemptive multitasking】という項目を発見。

OSはハードウェアタイマーを参照しながら、実行待ち命令のあるアプリケーションソフトに短時間ずつCPUの実行権限を与える。

プリエンプティブマルチタスク 【preemptive multitasking】より引用
OS がプリエンティブな環境を管理しているんだけど、OS 自身がプリエンティブだとしたらそれを誰が管理するんだ、って世界か。OS 自身はプリエンティブではあり得ないという訳ですか。
amazon:詳解 Linux カーネルな説明を要約すれば、

  • カーネルモードなプロセスは誰にも邪魔されぬ
  • ただし割り込みや例外はカーネルモードなプロセスへの割り込みが可能
  • 割り込みや例外な処理 (コンテキスト?) には別な割り込みや例外な処理の割り込みが可能

という事のようで (やや理解が微妙かも

色々なトコロで述べられているのは Linux カーネル自体はそれ自身が自発的に何かをするモノではなく、たしか Abstraction Data Type (抽象データ型) 的なモノであるとの説明があった。
amazon:Linux カーネル解析入門によれば

「上位層](ユーザー空間)か「下位層」(ハードウェア)からの通知によってアクションが発生する「受け身的なソフトウェア」であると言えます。

amazon:Linux カーネル解析入門より引用
という事か。

上記箇条書きの最初にある「誰にも邪魔されん」という部分に若干の違和感を持っていたんですが、それぞれのリクエストに対する処理、というのは基本的にそれほどの時間がかからないんだろな、と。ってか、割り込みなナニを見た時に感じたのは、時間の感覚が全然異なるんだろな、という事でした。

ポイントとしては、カーネルな処理については割り込みや例外という特別なモノに対してグローバルなデータの保護が必要、という事か。そしてそれは割り込みや例外という特別なモノに対しても同様、という事である、と。

追記

# とほほ。呑んで書いてるのが一目瞭然やっさ。
グローバル変数の保護って普通のアプリでも当然に必要だよな。ノンプリエンティブという部分にフォーカスを当てると、カーネルの上位ににおいて何かのソフトウェアが実行管理をしている訳ではないから、自分が大切なデータを競合状態から守る必要がある、という事でしょうか。