継続
Mach 3.0では、あるタスクがスリープ中の別のタスクを実行可能とする一方、自分自身はその処理待ちでスリープする状況において継続をサポートしている。
Mach 3.0は当時既存のUnix系OSとの互換性や応用を維持しつつ本格的なマイクロカーネルを実装したが、それに伴いCPUのスレッド数に比べてタスクのスレッド数がはるかに多くなった。これらのタスクはカーネル内でスリープする際にカーネルスタックを必要とし、そのためのメモリ消費がシステム全体を圧迫する問題が生じた。この問題を軽減するため、Mach 3.0ではタスクがスリープする際にオプションとして継続の規約をサポートし、保存が必要なデータをタスクに紐付いたメモリに退避した上でカーネルスタックを回収できるようにした。継続を使用してスリープしているタスクが実行可能となった場合は、カーネルから新たにカーネルスタックを受け取った上でタスクのメモリからデータを復元し、実行を再開するようにした。実行再開時のエントリポイントはスリープ時の処理とは別の箇所でも問題なく、これにより継続のセマンティクスを実装している。
回収されたカーネルスタックは通常は実行可能になった別のタスクへそのまま渡し、直ちに再利用するようにしている。これにより、カーネルスタックは原則として各タスクではなくCPUのスレッドに紐付いたリソースとしている。
継続の概念はgoto文を持つ言語に意味論を与える。goto文を持たない場合、意味論は例えば命令文 γ、変数に対する値の割り当て ρ、抽象機械の状態遷移 θ ∊ [S → S] (S は機械の状態空間を表す) を用いて
のように与えられる。この意味論において、2つの命令の逐次実行は2つの状態遷移の合成として表すことができるが、goto文が存在する言語の場合、goto文の直後の命令は、goto文を実行した直後に実行されるわけではないため、少なくともそのように意味論を与えることはできない。
goto文を持つような言語において、意味論を与える写像 P {\textstyle {\mathcal {P}}} は例えば、命令文の集合 Cmd、環境の集合 Env、継続の集合 C、機械の状態の集合 S を用いて次のような型を持つ:
ここで継続は C = [S → S] すなわち状態の遷移として、また環境 Env は 構文解析に失敗 (SVG(ブラウザのプラグインで MathML を有効にすることができます): サーバー「http://localhost:6011/ja.