30日でできる!OS自作入門パート5(10日目)

いよいよ10日目です。これで大体1/3の進捗ですね。

前回はメモリ管理を行いましたがその続きからやっていきます。

メモリの確保と解放を繰り返しているうちに連続しない小さな空きがたくさんできてしまうため0x1000バイト単位で確保と解放をする関数を作り管理するようです。その際、0x1000バイト単位に切り上げたり切捨てたりするという話で4Pくらい使っています。ちなみに0x1000バイトは4KBです。

重ね合わせ処理


10日目のサブタイトルは『重ね合わせ処理』ということでここがこの日のメインとなります。

一応おさらいしておくと、マウスを動かした時にステータスバーに触れるとステータスバーが虫に食われたようになってしまっていました。これを解消するための処理です。今回は一緒にウインドウの重ね合わせ処理もやります。

 

ということでまずどうするかというとレイヤーのようなイメージで管理をするようです。具体的にはウインドウを開くとそれをレイヤー1、マウスはレイヤー2のようにすることで重ねても上手く動作するようにする…ということのようです。

ウインドウを開くとメモリを確保し、新規レイヤーを持ってきます。レイヤーは配列になっていて新規レイヤーを使うとその配列のフラグが使用中になり、高さを指定したら配列内でループさせて順番を決める…のような作りです。ソースをみないとなんともわかりづらいですね…。そしてこんな処理をするとめちゃくちゃ重そうです。

 

重ね合わせ処理の高速化


動作を確認してみると上手く重ね合わせ処理はできていますが、案の定動きが重たいです…。ということで高速化をしていきます(今回はなかなかボリューミー)

ここでは7Pに渡り高速化の説明が書かれています。具体的にはマウスを動かした時の計算範囲を狭めたり、無駄なif文を通らないようにしたりまぁそんな感じです。こういう自分の作ったものをより改善していくのが結構面白かったりしますよね。僕は好きです(今回自分は何もしていませんが…)

なんやかんやで快適に高速化されてめでたしめでたしでこの日は終了です。

10日目の終わりに


ソースは付属のCDに全てついているのでいつでも自分で動かせるのですが、結局本の中で筆者が苦労して改善したものをただ持ってくるだけなのでどうもソースを持ってきて動かそうという気になりません。結構内容は難しいので本を読んでいるだけでも勉強になるのですが、実際にOSが出来上がってくる後半か完成したくらいに実際に動かして自分で改良してみたいと思います。まぁC言語なんでその辺も勉強しなければいけないのですが…。

スポンサーリンク

LPICとLinuCの試験について

Linuxの認定資格として超有名なLPICですが最近この資格の周りがやけに騒がしいです。いや、周りというより家元がといったほうがいいのでしょうか?

内容としては以下の記事がわかりやすいと思います。

Linux認定資格をめぐる主導権争いのまとめ | LPI-Japan vs. LPI日本支部

 

結果的には今までLPICを日本で扱ってきたLPI-JapanがLPICをやめてLinucを作り、新しく日本に出来たLPI日本支部が引き続きLPICを継続していくということでいいのかな?外から見たらただLinuCという資格が増えただけのようにも思えますが合ってますかね?

自分はまさにLPICを秋くらいに受験する予定なのでもろに影響を受けております。今年の1月に仕事でLinuxを触ったのをきっかけに基本情報の試験が終わった4月くらいからLPICを受けようと思っていました。そのころはLPI-JapanがLPICもLinuCも並行して提供するみたいな話になっていたはずですがいつの間にやらこんなことになっていたとは…。

いずれにせよネームバリューでLPICのほうを受験しようと思っていたのですが提供元が変わることで試験内容まで変わらないことを祈っております…。

スポンサーリンク

30日でできる!OS自作入門パート4(9日目)

少し空いてしまいましたが続けていきます。

9日目(メモリ管理)


マウスポインタが一区切りついたので次はメモリ管理です。32ビットモードになってPCの全部のメモリを利用できるようになったので使ってみたいということでこのタイミングで行うようです。

で、まずはメモリがどこまであるかのチェックです。普通はBIOSがチェックしてくれるそうですがBIOSに聞くとアセンブラのソースが長くなったりBIOSのバージョンによって呼び出しを変えなければいけないということでややこしいみたいです。ということで自力でメモリチェックをします(勉強になるなー)。

メモリキャッシュを無効にする


ということでメモリチェックをするためにメモリキャッシュを一時的に無効にします。でないとキャッシュが勝手に反応してしまい上手くメモリチェックができないからです(言われればそんな気がしますね)。で一時無効にしつつチェックをするC言語のソースとアセンブラのソースが記載されております。ふむふむ…。

チェックが上手くいかない?


実際に動かしてみると問題発生。チェックしてみると期待値が32MBのはずが3072MBと表示されます。なんで?

(筆者が)頑張って確認したところ、どうやらコンパイラが原因のようです。コンパイラが優秀過ぎて(?)処理を最適化してしまい結果的に処理が飛ばされ期待値通りにならなかったんですね。

で結局アセンブラで書くことにして無事解決しましたとさ。

メモリ管理に挑戦


ようやく下準備が出来たところでメモリ管理です。現行OSの管理方法をふまえどういう管理方法にするかなど説明があり実装していきます。正直よくわからない部分もありますがちょくちょく筆者が「ここまでの原理がわかっていればすんなり頭に入ってきます」などとあおってきます。そ、そうですね…。

ということで9日目は終了です。

 

ここまでやってみて


自作OSの本を読んでOS作るぜーと言っているくせに、実はLPICの勉強も並行して行っています。一方をがーっとやってもいいのですが、その日の気分でどっちをするかわけているので飽きずに出来ています。

LPICはLinuxのコマンド問題もたくさん出てくるのですがハードの問題もあり、OSの起動方法やMBR、BIOS、ブートローダーとか出てきて結構自作OSで勉強した知識が使えます(windowsとLinuxで違いはあるが)

LPICは今年いっぱいにとれればいいかなと思っているので自分のペースでOS自作と並行して進めていきたいと思います。

スポンサーリンク

『カイゼンジャーニー』を読みました

プログラマーが読む本と言えば言語とかフレームワークとかデザインパターンとか資格対策とかそういうものだと思っていましたが、よく考えてみると開発手法の本があってもおかしくないですよね。

そういうわけで会社の人に進められて『カイゼンジャーニー』を読んでみました。アジャイル手法のひとつである『スクラム』の開発手法をストーリー仕立てで書いてある本で発売当初はアマゾンで入荷待ちになるほど人気だったようです(自分は近所の本屋で買いました)

さて、内容としてはストーリーが面白くてこういう現場もあるのかなぁ?といった感じ。主人公が少しずつ周りを巻き込んで成長して大円団を迎えるのは読んでて爽快でした。

ただ一方でプログラマーとはなんて勝手な人種なんだとも再認識しました。確かに誰が何と言おうがやりたいようにやるという人は多い気がします。登場人物も自己中心的な人が多かったです(最後はチームプレーをするけど)

ひとつ気になったのは最初の方のお話。主人公が自分がなにもなしとげていないことに気がつき、『カイゼン』のため1人朝会や振り返りをしていくのですが忘れられたタスクが後から発覚しこれではいかんと『カンバン』なるものを作るのですが、振り返っているのになぜタスク漏れがあるのか謎でした。忙しすぎてまわらないのであれば上長なりに相談して現状を知ってもらうとかするべきだと思うのですがこういう現場もあるのでしょうか?結構勉強会には顔を出しているのでそこまで炎上はしていなさそうですが、上手くいかないからひとりで始めるのではなくまずは上長に相談だと思ったのは自分だけでしょうか?そっからチームを巻き込んでいくのが普通のルートのように思えますが…。ここだけはちょっとよくわかりませんでした。

 

現時点でひとりで開発して納品するという作業が続いているのでチームでスクラムをやるという場面に出くわすのはなさそうです。

でもこの本を通じてスクラムを知っておくことで今後チームで開発する時にイメージがしやすくなると思いました。

 

スポンサーリンク

30日でできる!OS自作入門パート3(5~8日目)

まとまった時間がとれたため、今日は3日目~8日目を読みました。PCを動かす環境にいなかったため手は動かせていませんが結構読み進めることができました。

3日目(32ビットモード突入とC言語導入)


この日から空のOSを作り『はりぼてOS』という名前で機能を少しずつ追加していくことになるようです。

フロッピーディスクの断面図の絵があり、アセンブラを書いてシリンダを読み込んでみるところからスタートしました。そしてC言語が登場します。C言語は扱ったことはありませんが、今までのアセンブラから比べるとかなり読みやすくなにがしたいのかすぐわかります。

アセンブラからC言語を呼び出すところで3日目は終了です。

4日目(C言語と画面表示の練習)


4日目の目標は3日目で呼び出したC言語のソースでメモリに書き込んで画面表示をすることです。

白い画面を出したり縞模様の画面を出したりしながら進みました。

途中色の設定をしたり四角形を出したりしながら最終的にはタスクバーが表示された画面が出来て4日目は終了です。

この辺まで読んでみて、筆者のノリが『科学読本』ぽいなぁと思いました。

5~8日目


5~8日目は端的に言うとマウスカーソルを動かすのを頑張ります

サブタイトルは

5日目:構造体と文字表示とGDT/IDT初期化

6日目:分割コンパイルと割り込み処理

7日目:FIFOとマウス制御

8日目:マウス制御と32ビットモード切り替え

となっております。

アルファベットを描いて表示したりテキストファイルを読み込んだり、ソースファイルを分割して整理したりしました。ただ主にマウスカーソルを動かすことを頑張っています。

マウスカーソルを動かすために割り込み、スタック、GDT、IDT、PIC、FIFOバッファなど説明が続きます。

GDT、IDT辺りは内容が高度になると筆者が言っていますが初めから結構難しいのであまり気になりません(笑)。

この辺の話は基本情報技術者の勉強をしていたことを思い出しました。

どんどん読み進めてみようと思いました


ここまで読んでみて、まずは読破するのを目標にしようと思います。

全てを理解して進めれば一番いいのですが、現時点で今の自分にはわからないことが多すぎます。

まずは読破してはりぼてOSが出来てから読み返しつつ改良することを目標にしていければと思います。

そういう意味では付録のディスクにソースがついているのはとてもありがたいですね。

30日でできる!OS自作入門パート4(9日目)

スポンサーリンク