読者です 読者をやめる 読者になる 読者になる

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日目

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