本節は読み物でしたが、頭が整理できて良かったです。

実行中の処理を再開するのに必要な情報を保存してから中断し条件が整えば再開するという仕組みを処理毎に作りこむのではなく、共通のものとして持たせることを考えるとOSの必要性が出てくる。

処理切り替えのきっかけは割込みであり、前章で作った割込み処理の仕組みを発展させてOSにすることができる。

OSが持つサービスの呼び出し(システムコール)はライブラリ関数の呼び出しという形にするとアプリの影響を受けてしまうので、アプリはシステムコール命令を発行することでシステムコール割込みを発生させ、OSはあくまでも割込みを介してその向こう側で動作するという役割分担を保つことができる。

次節からが山場になります。腰を据えて取り組もうと思います。

なぜkozosをブートローダーでloadした後runするとハングするのかコードを見直してもなかなか分からないため、12ステップ本のサポートページからソースコードをダウンロードしてビルドしてみました。

その結果、問題があるのはOSではなくブートローダーであることが分かりました。

ブートローダーのソースコードで7章で手を加えた箇所を順に見ていきましたがサポートページからダウンロードしたものと差が見つかりません。startup.s, intr.Sと見ても差がないのでまいったなと思っていたら最後に見たリンカースクリプトが間違っていました!

ソフトウェア割込みベクタの開始アドレスの設定を間違えていました( ̄□ ̄;)!!

考えて見れば割込みが入ったとたんにハングするのだから最初にリンカースクリプトを疑うべきだったかな。。ここ辺が経験の無さですね。f^_^;

とりあえず解決してほっとしました。次、またがんばります。
7章の最後までコードを理解してから入力し、ビルド、実行してみました。

ブートローダを書き込み、OSをロードするところまではできたのですが、runするとハングアップしてしまいます。

コードの入力ミスがないか見直しているのですが今のところ見つかっていません。こういうパターンは初めてです。引き続き見直ししてみますがちょっと心配になってきました。

割込みを実装してからが組み込みOSの本番なのに足踏み状態です。(TωT)