* アイデアメモ - 疑似マルチタスクのための仕様
-(by [[K]], 2019.02.06)
** (0)
-十分な説明をしないので、書いている本人しかわからないと思います。ごめんなさい。
** (1) フルC言語版
-スレッドごとに、フェーズ構造体のサイズが固定長で決まっている。
-エントリポイントから関数呼び出しがかかり、関数は次の関数ポインタを返して終了する。
-スレッドは必要に応じて自分の環境を拡大できる。そのためにisも得られる(環境の中に書いてある)。Kmlc0*やKps*もある。next-callは必要に応じて自分でやる。
{ wis, ris, Kps*, Kmlc0* }
--wisはworkのisだな。risはなんだ?リザルトを返すためのisなのかな?
-関数はenvとphsを引数に持つ。
-システムは、2つのphsを交互に与え、もし記録すべき状態になったら、両方のコピーを保存する。
-phs2strで文字列化する。
-再開の必要がなくなれば、関数は0を返すようになる。
** (2) (なんか順番が逆だけど)そもそもの要求仕様
-プログラムが複数同時に走る(走っているように見える)。
-プログラムは途中で停止して、コードを書き換えて、再開できる。
-変数を増やしたり減らしたりしても、途中から再開できる。
-変数名を変更しても、途中から再開できる。
-マルチコアでの並列実行には興味がない(ここを追及すると難易度が上がる)。
-チェックポイント命令以外の場所では、タスクスイッチを一切想定しなくてよい。
** (3) もはや疑似マルチタスクとの関係は薄くなっているけど、引き続きここを使う
-まずKmlc0は全プロセス共通で使う。無理に分ければ効率が落ちるから。
-そしてKpsはプロセスごとにローカルで持つ。そうでなければポインタスロット番号の競合が起こりうる。セーブしてロードした時に同じ番号にできる保証はない。ローカルならその心配はない。
-その上でKmlc1を作るとよい。これはKmlc0を通じて領域を確保・解放するが、・・・いや待て、これはやめよう。Kmlc1なんかいらない。そういう情報はKpsに乗せておけばいい。
--Kpsにはコメント情報がないが、それはKpsを拡張して持たせよう。
--でもなあ[[p20190131a]]を見ると、もういっぱいなんだよなあ。
--livesign付きのスロット番号と、名前やコメントの対応リストがあればいいのでは?というかそれこそディレクトリなのでは・・・。
--コメントはないにせよ、型はある。
-これとは別にKpsの空き管理の仕組みを抽出してKipol0を作りたい。
* こめんと欄
#comment