30日でできる!OS自作入門パート5(10日目)
いよいよ10日目です。これで大体1/3の進捗ですね。
前回はメモリ管理を行いましたがその続きからやっていきます。
メモリの確保と解放を繰り返しているうちに連続しない小さな空きがたくさんできてしまうため0x1000バイト単位で確保と解放をする関数を作り管理するようです。その際、0x1000バイト単位に切り上げたり切捨てたりするという話で4Pくらい使っています。ちなみに0x1000バイトは4KBです。
重ね合わせ処理
10日目のサブタイトルは『重ね合わせ処理』ということでここがこの日のメインとなります。
一応おさらいしておくと、マウスを動かした時にステータスバーに触れるとステータスバーが虫に食われたようになってしまっていました。これを解消するための処理です。今回は一緒にウインドウの重ね合わせ処理もやります。
ということでまずどうするかというとレイヤーのようなイメージで管理をするようです。具体的にはウインドウを開くとそれをレイヤー1、マウスはレイヤー2のようにすることで重ねても上手く動作するようにする…ということのようです。
ウインドウを開くとメモリを確保し、新規レイヤーを持ってきます。レイヤーは配列になっていて新規レイヤーを使うとその配列のフラグが使用中になり、高さを指定したら配列内でループさせて順番を決める…のような作りです。ソースをみないとなんともわかりづらいですね…。そしてこんな処理をするとめちゃくちゃ重そうです。
重ね合わせ処理の高速化
動作を確認してみると上手く重ね合わせ処理はできていますが、案の定動きが重たいです…。ということで高速化をしていきます(今回はなかなかボリューミー)
ここでは7Pに渡り高速化の説明が書かれています。具体的にはマウスを動かした時の計算範囲を狭めたり、無駄なif文を通らないようにしたりまぁそんな感じです。こういう自分の作ったものをより改善していくのが結構面白かったりしますよね。僕は好きです(今回自分は何もしていませんが…)
なんやかんやで快適に高速化されてめでたしめでたしでこの日は終了です。
10日目の終わりに
ソースは付属のCDに全てついているのでいつでも自分で動かせるのですが、結局本の中で筆者が苦労して改善したものをただ持ってくるだけなのでどうもソースを持ってきて動かそうという気になりません。結構内容は難しいので本を読んでいるだけでも勉強になるのですが、実際にOSが出来上がってくる後半か完成したくらいに実際に動かして自分で改良してみたいと思います。まぁC言語なんでその辺も勉強しなければいけないのですが…。