21日目、終了。今回は OS の保護がメイン。今回からアプリを C言語でつくれるようになる。
またまた間が空いてしまった。いかん(^^;
OS の保護はコードセグメントとデータセグメントを OS用とアプリ用にわけて使うことにより行う。コードが設定に違反してセグメントを使おうとすると例外が発生するので例外処理を行う(アプリの強制終了等)。
なんかようやく「OS」って感じ。
21日目、終了。今回は OS の保護がメイン。今回からアプリを C言語でつくれるようになる。
またまた間が空いてしまった。いかん(^^;
OS の保護はコードセグメントとデータセグメントを OS用とアプリ用にわけて使うことにより行う。コードが設定に違反してセグメントを使おうとすると例外が発生するので例外処理を行う(アプリの強制終了等)。
なんかようやく「OS」って感じ。
19〜20日目、終了。原始的なアプリケーションと API。
FAT のファイルデータを読込んで実行するだけの原始的なアプリケーション。システムコールはソフトウェア割込みを使用して INT で呼出し。
17〜18日目、終了。今回のメインはコンソールとコマンド処理(mem, cls, dir)。
メインの前に前回のやり残しで番兵として最下位レベルにアイドルタスクを入れる。
入力ウィンドウの切り替え(といってもマウスのイベントは切り替わらない)、コンソールで簡単なコマンド(mem, cls, dir)を入れて処理結果を表示できるようになる。
正直なところこの本は C言語の中上級者にはストレスになるところが多々ある。もともと C言語を使ったことがない初心者も対象にしていると言われてしまえばそれまでなんだけど、、、わかってはいてもちょっと辛い。「難しい」からつらいのではなく、普通ならもっとシンプルにわかりやすいコードを書くだろうというところを「わざわざ初心者が書くように」に書かれているのが辛いのである。
15〜16日目、終了。今回はマルチタスク、ようやく OS らしい内容になった。
x86 のタスクスイッチ、タスクの優先順位とレベル。Linux や *BSD、それに Mach のタスクスイッチがどういう戦略をとっているのか比べてみたいところ。
あと、割込み禁止とタスクスイッチのタイミングが気持ち悪い。なんとかならないものか。
14日目、終了。今回のメインは表示の高解像度化(VESA対応)、キー入力の表示、ウィンドウがようやく動くようになる。
14日目のメインテーマに入る前に 13日目のやり残し(性能測定)。普段 C言語しか使っていないのであまり意識したことがないけど JMP 命令って飛び先の番地が変わると処理速度が遅くなったりするのか。これって x86系だけの特性、それとも他の CPU でもありうるのかな???
VBE(VESA BIOS extention)の使い方を学習。
文字が入力できたり、ウィンドウが動くようになったのはちょっとうれしい。でも途中でハングる(^^;
訂正:ハングして見えたのは次のタスクスイッチのサンプルだった。タスクスイッチしたあとに HLT しているのでこの動作は正常
# ところで厚い本で無線綴じなので既に崩壊の兆しが、、、
12〜13日目、終了。今回はタイマ割込みを使って時間のカウント。
その他、コード整理と性能改善のためのリファクタリング(といっても普通は最初からやってるだろという程度のものだけど)。Cプログラムではおなじみのリストも登場する。
サンプルのプログラムだとタイマ構造体が再利用されないだろとか、割込みイベントのFIFOバッファの値は使いやすいようにイベントタイプとイベントデータに分けるだろとか、ツッコミどころはあるけどいちいち気にしていたらこの本は読めないのでスルー。
11日目、終了。だいぶ間が空いてしまったのでかなり忘れてる(^^;
カーソルが画面をはみ出したときの処理はプログラムをある程度書いている人ならおなじみのもの。11日目のメインはウィンドウの描画だけど、描画だけでウィンドウのイベント処理はなし。まさに“はりぼて”ウィンドウといったところ。
描画されているウィンドウを描画マップで管理するのはちょっと面白いかな。もっともこの方法では作れるウィンドウ数の上限が決まってしまう。とはいえ、これなら不定形ウィンドウにも対応できるのでそんなに悪い方法ではないかも。
10日目、終了。カーソルやシート(この書籍ではこういう名称を使用している。まだウィンドウではない)の重ね合わせ。
ベテラン向けではないけどトライ&エラーで初心者にはいいかも。
9日目、終了。メモリ容量チェックとメモリ管理(確保・解放)。
なるほど BIOS を使わないメモリ容量チェックってこうやるのか。メモリ管理は昔見た「Lions’ Commentary on UNIX」;(*1)が確かこんな感じだった気がする。
*1) (大昔の)UNIX カーネルの全ソースコードが載っているという伝説的なコメンタリブック。読もうと思って図書館から借りたはいいけど三日坊主で挫折(^^;
5〜8日目、終了。文字表示、GDT/IDTの初期化、キーボード入力とマウス入力。マウスを動かしてカーソルが動くまで。
キーボードとマウス入力のための PIC 初期化と割り込みハンドラがメイン。
8日目の最後に32ビットモードへの移行についての説明あり。ただし、x86 の仕様や一次資料が並記されていないのでわかりにくい。結局 x86 や PC互換機のちゃんとした資料を探してこないとだめだなぁ。
(さらに…)