①プロセス化
「メモリ」という資源を複数のスレッドが共通資源として扱っている点に問題があるわけですが、タスク毎に独立した仮想的なメモリ空間を割り当て、まるでそのコンピュータのメモリ上には自分しか存在しないかのように振舞えばよいわけです。

それを実現するのが仮想メモリでMMUという専用ハードウェアを使用します。仮想メモリにより動作するアドレス空間が独立しているタスクをプロセスと呼びます。


②OS化
カーネル内部の処理中には割込み禁止になっています(KOZOSではそのようです。CCRのIbitが立てられ割込み禁止になります。が、他のOSでは一般的なことなのか知りません)。その特徴を利用してサービスをカーネルで実現するということで再入を防ぐことができるようです。

しかし、OSのカーネル肥大化、ポリシーのないカーネルになりあまりよくないとのこと。


③リエントラント化
グローバル変数やstatic変数をみんな自動変数にしてスタック領域を利用するようにしようというところです。なんか一番いいような気がします。

注意すべきは関数中で使用される関数の中でもスタック領域を使用しているよう関数設計時から明確に方向性を示しておく必要があります。