無限ループVSスケジューラ

無限ループVSスケジューラ

アセンブリの観点から、シェドラーが使用できる制御機能にジャンプせずにいくつかのコマンドでジャンプするコードを書いたとき、Unixはこのようなコードに分割されますか?

タイマーと割り込みを使っていると思います。もしそうなら、問題はハードウェアでUnixシステムを中断することなく実装しながら、限られた時間内に無限ループコードを解決できることです。

それとも、Unixが「while(true){}」などのコードを処理する唯一の方法は、割り込み付きのハードウェアタイマーを介していると仮定するのが正しいですか?

もしそうなら、ハードウェアタイマー+割り込みなしでハードウェアでUnixシリーズシステムを実装するための最小要件は何ですか?

ベストアンサー1

非プリエンプティブスケジューリングとプリエンプティブスケジューリングの違いについて説明します。

非プリエンプティブ(協調的とも呼ばれる)はより簡単で(タイマーは不要)、スレッド通信にロックは必要ありません。たとえば、Apple Mac OS9以前では、初期のMS-Windows、多くの組み込みシステム、およびマイクロスレッドが使用されていたと思います。

はい、タイマーが必要です。しかし、最も簡単なハードウェアに関する質問です。 Unixではタイマーよりもはるかに複雑なMMUが必要です。 (実際にはMMUを持たないいくつかのUnixシリーズシステムがあり、ほとんどの場合同じ方法で動作します(違い:セキュリティなし、スワップ/ページングなし)。

ケースジョブの切り替えを許可する別の方法ですwhile true。コード挿入を使用できます。コンパイラまたはローダは、歩留まりを調整するためにコードを挿入します。これは実行するのが難しい場合があります。ローダーが必要な場所を知るのに十分な情報がない場合があります。原子性仮定が壊れる可能性があります。正しい言語とコンパイラが与えられたらおそらくとてもよくできます。しかし、私はどんな例も知りません。

おすすめ記事