忍者ブログ

Cyber Bird

   

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

OS自作入門 onLinux 11日目

429cb260.png

11日目が終わった。

ここまででしみじみと感じるのだが、やはり本を目で追うだけでなく、
たとえ理解できなくてもソースコードを手打ちするのは大いに意義がある。

人間には、タイプミスの一つや二つは余裕で紛れ込んでしまう。
そのために誘発されたバグの原因を探るため、自ずからソースコードを
努力して理解するものだ。

Twitterをご覧になっていた方は目にしたのではないかと思う。

これ、背景の下の方にウィンドウが少し表示されているので、おそらく
背景用バッファbuf_backの領域にウィンドウ用バッファbuf_winが重複してしまった
ために上書きされているのではないかと思って原因を探っていたところ…

dword mem_alloc_4k(MEMORY_MANAGE *man, dword size) {
	dword a;
	size = (size + 0xff) & 0xfffff000;
	a = mem_alloc(man, size);
	return a;
}
memory.cの135行目、本来ならば「size = (size + 0xfff) & 0xfffff000;」となるはずなのだが…

これではsizeの(16進数において)下から3桁目が強制的に切り捨てられる。
よって、メモリを確保したつもりなのに、実は領域が少し足りていなかった状態になってしまう。

そして、mem_alloc関数の仕組みとOS起動後のメモリの開放の仕方によって、
最初に確保したbuf_backの次に確保されるbuf_winには、
buf_backの最後尾アドレスからのメモリが当てられる。
そのため、メモリ領域が重複してしまっていたのだ。

動作しなければ原因を意地でも特定する。特定できたら、なぜそれでは動作しないかを考える。
こうすることでコードを読む力もコーディング力も上昇するのではないかと思う。
PR

スパコン「京」を探る

DSC_0118.jpg

先日科学の甲子園のエクスカーションで、理研の計算科学研究機構におじゃまさせていただく
機会をいただき、理研と富士通が共同開発しているスパコン「京」を見学してきました。

そのときにも書いていますが、質問攻めの挙句名刺まで頂いてしまったので、
折角ですし、きちんと質問をしてからまとめてみたいと思います。

第1回科学の甲子園



お久しぶりです。
3/23~3/26の4日間、兵庫県で行われた第1回科学の甲子園に
広島代表として参加させていただきました。

OS自作入門 onLinux 10日目



10日目が終わりましたー。
今回は、重ね合わせ処理の日です。マウスがタスクバーに重なってます。

マウスがチラチラするのは11日目で解決するっぽいです。
たぶん、ダブルバッファリングとかやるのかな?まだ読んでないからわからないけど。

今回のソースコードはこちら

OS自作入門 onLinux 9日目

e53f1a71.png

9日目できましたー。本当は2週間ほど前にできていたんですが…。

今回は、マウスが動くようになったという事で、メモリ管理に進んでいます。

今回のソースコードはこちら

では続きからどうぞ。


ブログ内検索

プロフィール

HN:
levelfour
性別:
男性
自己紹介:
ぼちぼち更新を再開する予定です。

twitter

最新コメント

[09/27 菜々氏]
[06/17 NONAME]
[04/30 mithril]
[04/29 Liva]
[01/30 NONAME]

最新トラックバック

コガネモチ

Copyright ©  -- Cyber Bird --  All Rights Reserved
Design by CriCri / Photo by Geralt / powered by NINJA TOOLS / 忍者ブログ / [PR]