アイデアメモ - 疑似マルチタスクのための仕様

  • (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を作りたい。

こめんと欄


コメントお名前NameLink

リロード   新規 編集 差分 添付   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
Last-modified: 2019-02-11 (月) 23:37:30 (247d)