よもぎのメモ帳

備忘録的な感じで技術的なことをストックしていきます。

よもぎのOS自作入門 15日目/30日

はじめに

これは2020年夏休み企画「30日でOS自作してみよう!」15日目の記事です。

企画についてはこちら

y0m0g1.hatenablog.com

昨日やったことを書いていきます。

昨日の進捗

f:id:y0m0g1:20200902222545p:plain
左下の2行がタスクスイッチの証拠

タイマを利用してタスクスイッチを行いました。一応……マルチタスクができるようになった?

昨日やったこと

まずとにかく別のタスクに切り替えるみたいなことをしました。

f:id:y0m0g1:20200902223036p:plain
別のタスク→停止

タスクを切り替える際に、CPUはレジスタの値をメモリに書き込んで退避させた後、切り替え後のタスクのレジスタの値をメモリから読み込みます。 レジスタの値を保存するメモリセグメントをtask status segment(タスク状態セグメント)といいます。

2つのタスクを切り替えたら、その切り替えた先でfor文回してカウントアップしました。

f:id:y0m0g1:20200902224421p:plain
左下がカウントアップ

マルチタスクの最初の実装が、あるタスクから別のタスクを直接呼び出すというものだったので、まとめて取り扱うmt_timerを用意して各タスクとタスクスイッチを切り離しました。 そんな感じです。

それと別に、いままで手作業でmake runするためのディレクトリを作っていたのを、簡単なバッチファイル書いて一部自動化しました。 今までなんでこうしてこなかったんだ。

@echo off
set /p foldername="input the folder name>>>"
md %foldername%
echo cmd.exe > %foldername%/!cons_nt.bat
echo ..\z_tools\make.exe %%1 %%2 %%3 %%4 %%5 %%6 %%7 %%8 %%9 > %foldername%/make.bat
echo done

最近ちょっとエントリ書くことに注力しすぎてしんどくなった(長続きしなくなりそうだった)ので、ちょっと手抜きしました。

今日も一日頑張るぞい!