* アイデアメモ - 疑似マルチタスクのための仕様
 -(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

リロード   新規 編集 差分 添付   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS