mrasu’s blog

読んだ物の内容など

30日でできる! OS自作入門 (2週目)

「30日でできるOS自作入門」の2週目分です

時間を図れるようになります

30日でできる! OS自作入門

30日でできる! OS自作入門


8日目

マウスの動きもIOからくるので、順次処理する

9日目

メモリサイズを出す

メモリサイズのチェックのために、

  1. メモリの場所を指定して値を代入する
  2. 代入されたかチェックする
  3. メモリの値を反転する
  4. 値をチェックする
  5. 代入場所をずらす

とやれば、メモリがない場所がわかる = メモリサイズがわかる

コンパイラ

コンパイラの最適化が走ると、意図しないコードになることがあるので、アセンブラが読めたほうがいいね!

メモリ管理

空き場所の記録方法

  1. 使っているかどうかのフラグを作る
  2. 空いている連続の場所(開始点と終了点)を記録する。解放されたら、前後を見てつなげたりもする

という方法がある。当然、後者のほうが速い

10日目

描画時には、重ね合わせ(レイヤー)で描画するようにする

理論的には、
レイヤーの描画や順位が変わった段階で画面全体を再描画すればよいが、それだと処理が重いので、
変更範囲のみを再描画するようにする

11日目

レイヤーで下から順に描くようにすると、レイヤーが重なったときに同一個所への処理が重複する
→各場所で一番上にあるものを覚えてそこだけ描く

12日目

PIT(Programmable Interval Timer)に対して、100Hzごとに通知させることで、10ms毎の割り込みを実現できる
割り込みに対して、複数の構造体それぞれでカウントすれば、複数タイマが作成できる

13日目

速度改善の結果を見るために、一定間隔で発生した無限ループ中のSTIの回数を数える。
fifoをタイマ、マウス、キーボードに分けていたのを統一して、if文の3条件チェックをなくしたら結構速度が上がる。
しかし、割り込みタイマのスタック(もどき)を配列からリンクトリストに変えても速度は変わらなかった

参考) 自環境でのSTI回数
初期:
0901049237
if文削除:
1320863127
リンクトリスト化:
1345018184

14日目

解像度はビデオカードに送信する値によって変化する