実際、はいです。最も効果的な方法は、単にローダーのランタイムにパッチを当てることです。カーネル/デーモンには、より良い応答性のためのカスタムパッチが含まれています。さらに、すべてのソースにアクセスできる場合は、コンパイラーでパッチを適用することができます。
パッチは、分散型スケジューラで構成できます。各プログラムは、非常に短い待ち時間タイマーを持つようにパッチすることができます。ロードすると、タイマーが設定され、スケジューラーからの各復帰時にリセットされます。単純化された方法では、コードを単純に実行することができ、パフォーマンスヒットがあまり大きくならないようにすることができます。主な問題は、それらをポップする良い点を見つけることです。すべての関数呼び出しのあいだに開始点があり、ループを検出して挿入するのは基本的ですが、実際に応答を先取りする必要がある場合は効果的です。
これは完璧ではありませんが、うまくいくでしょう。
主な問題は、タイマーリターンが低い待ち時間であることを確認することです。それはちょうど比較と支店です。また、例外処理 - 何らかの形で無限ループを引き起こすコードのエラー - を処理します。技術的には、かなり単純なハードウェアウォッチドッグタイマを使用し、RAMをクリアすることなくCPUをリセットすることができます。 RAM内のルーチンはRESETベクタがポイントし、スタックを調べてプログラム呼び出しに巻き戻す(プログラムをクラッシュさせるが他のすべてを保存する)。それは、ブルートフォースのようなもので、if-all-else-failでクラッシュするプログラムのようなものです。または、この方法でマルチタスクに変更することもできますが、割り込みとしてリセットすることもできますが、これははるかに難しいことです。
だから...はい。それは可能ですが複雑です。 JITコンパイラとダイナミックトランスレータの技術を使用しています(エミュレータで使用します)。
これはちょっと混乱した説明ですが、私は非常に疲れています。それが十分でないなら、私は戻って明日明け渡すことができます。
ところで、CPUのミッドプログラムのリセットをアサートすることは狂ったように聞こえるが、それはずっと名誉ある実績のあるテクニックだ。 Windowsの初期のバージョンでも互換モードを実行することさえできましたが、私は386を適切に考えると、16ビットモードから32ビットに切り替える方法がなかったためです。他のプロセッサとOSもそれを行っています。
EDIT:私はDCPUが何であるかについていくつかの研究を行った。それは実際のCPUではありません。ノッチのエミュレータでリセットをアサートできるかどうかは分かりませんが、私は彼に尋ねます。簡単なテクニックです。
注意を必要とする次の「機能」と、データへのポインタを渡す必要があるタスクを継続する必要がある場合は、次のタスク
に進みます。 – blueshift
それはありますか? 2014年5月4日現在、ウェブサイト(http://www/10c10d.com/doc/dcpu-16.txt)で入手可能なドキュメントのバージョンは1.1ですが、割り込みはありません。新機能に関するドキュメントはありますか? –
フォーラムをredditしたり、フォーラムを使用したりしないことを前提としています。 [このbad boy(spec 1.7)](http://pastebin.com/raw.php?i=Q4JvQvnM)をチェックしてください!あなたがドロップしたいなら、freenode IRC#0x10c-devでこれについてチャットします。 – blueshift