作品タイトル不明
第八十九話:結果
数日後。
今川が開発室に顔を出したのは、午後だった。
「……少し問題が出た」
開口一番、そう言った。
高村が顔を上げる。
「コンパイラ側でブロック転送命令を吐き出すルールを追加したところまではよかった。だが、多重割り込みを許可したシミュレーションを回したら問題が見つかった」
今川は帳票を机の上へ広げた。
「割り込み処理の最中に、さらに別の割り込みが重なる『多重割り込み』が発生した時に、退避先が競合する。一回目の退避データを保存したまま、二回目の割り込みデータが入ると、同じ領域へ上書きしてしまう」
忠夫は帳票を覗き込んだ。
頭の中で回路とメモリ配置を追った。
割り込みの中でさらに割り込みが発生する。
その瞬間、最初の退避データが消える。
「……退避先の管理が必要ですね」
忠夫が静かに言った。
「擬似SRAMブロックは六十四バイトです。十六本のレジスタを退避すると一杯になります。多重割り込みに対応するなら容量を増やすか、退避先をスタックとして扱うかのどちらかです」
「容量を増やすだと!?」
大門が製図台から血走った目を向けた。
「ふざけるな、今の六十四バイトの配線を通すだけでも外周のセルをミリ単位で動かしてるんだぞ!」
「分かっている。だからハードへの追加要求は最小限にしたい」
今川が片手で大門を制し、腕を組む。
「ソフトウェア側で管理するなら?」
高村が聞いた。
「それなら、管理変数をOS側に持たせます」
忠夫が答える。
「メモリ上に管理変数を一つ用意します。割り込みの入り口でチェックして、使用中ならバッファの中身をメインメモリへ退避させてから通常の退避処理に入ります。空いていればそのまま変数を立てて退避処理を行い、最後に変数をクリアするだけです。通常時は今まで通り高速に動きます」
大門が眉をひそめた。
「つまりコアは触らねえんだな?」
「はい。ハードウェアの変更はありません」
大門はしばらく忠夫を睨み、それから鼻を鳴らした。
「……なら文句はねえ」
今川はしばらく黙り込んだ。
やがて小さく頷く。
「……それでいい。割り込みが重なるのは例外だ。通常時の性能を犠牲にする必要はない」
「了解です」
忠夫も頷いた。
「では、通常時は擬似SRAMへ直接退避。割り込みが重なった時だけソフトウェアで補います」
◇
さらに数日後。
今川が再び開発室に現れた。
前回とは違い、顔には疲労と同時にわずかな満足感が浮かんでいた。
「終わった」
今川は端末の前に腰を下ろし、キーボードを叩いた。
シミュレーターが走り始めた。
大門は腕を組んだまま立ち尽くし、西村は眼鏡の位置を直した。
小林は無意識に顎の無精髭へ手を伸ばしかけて、そのまま動かなくなった。
やがて画面に結果が表示された。
今川が静かに読み上げる。
「……通常ケースは数十サイクル程度。多重割り込みが発生しても百サイクル台で収まる」
部屋が静まり返る。
だが、その数字の意味は全員が理解していた。
ソフトウェアだけでレジスタを一つずつ退避していた頃とは比較にならない。
今川は画面を見つめたまま言った。
「……これなら間に合う」
高村がゆっくり煙を吐く。
「……なら次だな」
誰も異論を挟まなかった。
次に待っているのは、その数字を本物のシリコンへ変えるための、終わりのないレイアウト作業だった。