ねこめもmkII(マークツー)

本家ねこめも (http://nekomemo2.site)の補助用。 主に勉強ネタ。

15日目(タスクスイッチとマルチタスク)

ちょうど半分まで来た。
本書によると、OSの開発に最低限必要な知識は13日目辺りまでらしい。
なのでこの辺りに来ると構造がだいぶわかりやすくなってくると思う。
C言語にもだいぶ慣れてきたが、未だになんとなくわかった感じしかしていない。

また、実機で起動してみたくてUSBメモリにimgファイルを書き込んでみたが、どうしてもできないので諦めた。
BIOSの設定を変えれば起動できている人もいるようだが、簡単には行かないような話もよく見るのでよく解らない。
でもせっかくOSを作っているので、これはまたいずれ検討したい。

では続き。

マルチタスクの検証だが、最初は入力を止めたりまた動かしたりする程度でやることは地味。

いつものことだがnasmfanc.nasのsection .txtに追記を忘れて、エラーにかなり悩んだ。
(GLOBAL load_trとGLOBAL taskswitch4)
18行目あたりにいきなり出てくるvoid task_b_main(void)はプロトタイプ宣言だろうか?
だったら最後の行にあるやつはここに持って来れば良いんじゃないだろうか。(でも最後にあったほうがわかりやすいので、結局やってない)

harib12cではbootpack.cの構造体TIMERで*timer_tsの追記に気付いてなかった。

harib12d以降のカウントの数字は、いつものように"%10d"を"%d"に変更。
こうしないと数字が出なかった。
スピードアップのカウントは速すぎて、数字が全然追えなかったので正確にチェックできていない。
とにかく見ていると、速くなったことはなんとなくわかった。

あとはまたファイルが増えたので、mtask.c関連の追記をbootpack.hとMakefileに忘れないように。

ちょっと間が長かったので、忘れていることが多いのもミスの原因。
出来るだけこまめに進めていきたい。

14日目(少し13日目の続き、解像度等)

11日目に各ファイルに追記する箇所がわかりやすくなったと書いたが、嘘だった。
13日目あたりから、またかなりの修正が必要だった。
しかたないのでタイプミス(だと思われる)のエラーが起こったときはコピペした。

それと13日目の-enable-kvmをつけて動くようになった件、詳細が記載されているところがあったので参考にさせていただいた。
自分の環境では、

 $ sudo gpasswd kvm -a ユーザー名

と、しておいた。
これでMakefileのmake run時のsudoは不要になった。
少し速くなった気がしなくもない。

14日目の内容に入るが、harib11a〜cの内容は割愛した。
いろいろ試してみたが、現状のimgファイルでうまく実機から起動できなかったため。

harib11dで久々にasmhead.nasを編集。
修正内容は単純だが、make runすると黒い画面しか出てこない。
これについても、先ほど参照させていただいたブログの14日目に記載されていた。
「VRAMのベースアドレスが合っていない」とのことだが、これについてもまた自力で解読したい。
とりあえずの対策を自分の環境でも実行するため、asmhead.nasの26行目の変更を

 MOV DWORD [VRAM],0xfd000000

に書き換えた。
しかしこれもうまくいかない。
なので一度元に戻し、harib11eの修正を反映。これで高解像度になった。

これでキー入力に進む。またbootpack.cの編集、これは問題なく完了。
harib11gで@を押すとwが出ると本書にはあったが、自分の環境ではちゃんと@が表示された。

おまけの2章も続けて実行。修正はbootpack.cのみだが、おまけ1は修正箇所が多く、タイプミスに苦労した。

これもなんとか完了、無事実行できたので次に進める。
このペースだと、残念ながら年内完了は無理そうだ。

 


今回参照させて頂いたサイト:
https://wisteria0410ss.hatenablog.com/entry/2019/02/10/222931
https://wisteria0410ss.hatenablog.com/entry/2019/02/13/053201

13日目(タイマー追加と見直し)

タイマの話の前に、いつものプログラムの長さ見直し。

harib10aとbでbootpack.cのみ編集。
本書を見ながらでは全部修正できないので、CD-ROMのデータを参照。
最終的に204行になればOKだが、最初間違えて2,3箇所そのままでmake runしてしまった。
それでも普通に動いてしまうので、行数での確認は必要。

harib10cで、カウンタの数字が表示されない状態になった。
が、他の方のブログを参照し、Makefileの編集で動くようになった。
修正はmake runのみ。

img:
 make img
 sudo qemu-system-i386 -m 32 -fda haribote.img -enable-kvm

「-enable-kvm」のみを追加したところエラーになったので、sudoも追加。
ちょっと面倒になったが、qemuのバグ(?)回避のため。
これの理由を探してみたが、今のところ見つからない。

その後Harib10cはいじり直すので、いったん別フォルダにコピーして、コピーした方を使って性能測定した。(harib10d〜f)
環境が違い過ぎるので飛ばそうかと思ったが、勉強だと思い、一応作業した。
(ただし、実機ではチェックしていない)
ちなみに一番早かったのはharib10fだったような気がしたが、いつも結果が微妙に変わるので気にしないことにする。

※後で思ったのは、どうもsudoしないとmake runできないので、それがちょっと動作を遅くしている感じがする

harib10gでバックアップしておいたharib10cを使う。
修正箇所が多く、タイプミスが続出した。
本文で行ったり来たりして書き直すところがあり、途中で諦めて最終的なCD-ROMの内容と合わせることにした。
timerと番兵についての説明が丁寧だが自分にはかなり難しくついていけなかったが、とりあえずいつものようにとりあえず進めて、この後も何度も読み直すことにする。

ちなみにカウンタの動作は全然早くなっていない。 

 


 今回参照させて頂いたサイト:
https://blog.haramishio.xyz/entry/hariboteos