Yabu.log

ITなどの雑記

30日OS自作本13日目(詰む)

13日目のソースは

  • harib10a:文字列表を簡単に(文字列表示のヘルパー関数を作る)
  • harib10b:FIFOバッファを見直す(タイマーのFIFOを統合する)
  • harib10c:性能を測定してみる(パフォーマンス測定用のカウンターの導入)

ですが、harib10cのソースが正常に動作しませんでした。

diffの結果

$ diff harib10b/bootpack.c harib10c/bootpack.c
15c15
<    int mx, my, i;
---
>    int mx, my, i, count = 0;
78,79c78
<        sprintf(s, "%010d", timerctl.count);
<        putfonts8_asc_sht(sht_win, 40, 28, COL8_000000, COL8_C6C6C6, s, 10);
---
>        count++;
129a129,131
> 
>                    sprintf(s, "%010d", count);
>                    putfonts8_asc_sht(sht_win, 40, 28, COL8_000000, COL8_C6C6C6, s, 10);
131a134
>                    count = 0; /* 測定開始 */

上記のdiffの結果を参考に原因調査したところ、ウインドウに経過時間を書き込む関数をコメントアウトすると、動作が不安定になるようです。

www.youtube.com

for (;;) {
        sprintf(s, "%010d", timerctl.count);
        //putfonts8_asc_sht(sht_win, 40, 28, COL8_000000, COL8_C6C6C6, s, 10);
        //↑79行目のこれをコメントアウトすると動作が不安定になる。

        io_cli();
        if (fifo8_status(&keyfifo) + fifo8_status(&mousefifo) + fifo8_status(&timerfifo) == 0) {
            io_sti();
        } else {
            //マウス、キーボード、タイマ割り込みが発生した時の処理(略)
        }
    }

このputfonts8_asc_shtはウインドウに文字を書き込む以外のことをしていないと思うのですが、 なぜか抜くとqemuのパフォーマンスに影響が出ました。

f:id:yuyubu:20180528210833p:plain
qemuのcpu使用率が上がっています

該当行の有無別でbootpack.lstのバイナリを見比べれば何か分かりそうな気がしますが、 14日目、30日目のソースをビルドしてみましたがこちらは正常に動作しているようですので、13日目は読むだけにしようと思います。

github.com