16章〜23章にまつわるQ&Aのまとめ
- (by K, 2006.09.06)
- いろいろQ&Aが集まったと思うので、ここにまとめておこうと思います。
- ここで答えが見つからなければ、q_and_aへ!
質問と答え
- [p.317(16-2)] タスクをスリープさせるためのtask_sleep()があるが、この処理中に割り込みが起きたりしたらタスク管理情報が乱れて危険ではないか?
- はい、そのとおりです。この関数はio_cli();下で呼ばれることを想定して書きました。実際、p.319ではそのように使っています。io_sti();の状況でも呼ばれるかもしれないのなら、io_load_eflags(), io_cli(), io_store_eflags()の組み合わせではさんでおくべきでしょう。
- [p.345(17-4)] コンソールへ文字コードを送るためのfifo32_put()があるが、この処理中に割り込みが起きたりしたらFIFOバッファが乱れて危険ではないか?
- はい、実はそのとおりです。これもio_cli();下で呼ばれることを想定して書きました。fifo32_put()を呼び出す歳には、前後にio_cli();とio_sti();を書き足すべきと思われます(io_load_eflags(), io_cli(), io_store_eflags()の組み合わせならさらによいかもしれない)。しかしそうなっていない部分も残っていて、これはp.694にあるとおり、わざと問題を残しておいた部分です。
こめんと欄
|