十六日目マルチタスク2
はい、マルチタスクの二日目です。今日やったんは、まず複数ウインドウを作ってウインドウ、1タスクと割り当てるようにした。んでから全部が同じように動いてたら他の処理が重くてマウスの動きが悪くなったりするんで、タスクに優先順位をつけれるようにしたわけ。
流れとして
- task_alloc()でメモリ領域確保。
- 確保したタスクの値を設定。
- 優先度とレベルを指定してtask_run()。
でタスクを動かす。んで切り替える時は
- TASKCTLから現在動いてるTASKLEVELを取得。
- TASKLEVELからスイッチさせるTASKを取得。
- task_switchsub()を呼び出して次にどのレベルにするかを決定。
- レベルに合わせてタスクのタイマーを変更。
てな感じ。
だいぶ端折ってるけど雰囲気は伝わると思うw
OSなんて難攻不落の要塞のように感じてたけど、実際に作ってみると「あ、できないこともないかも」と思う。いや、この本にはそう思わせるだけのモノがある。ブラックボックスに見えてたOSなんてやつも個々を取り出してみれば割り込みの処理だとか配列の値の書き換え(画面の描画の話)でできてるんやね。いや、本当はそういったことはCPUの仕様やらに沿わないといけないし、アセンブラで書かないといけないし、デバッガは使えないしで難しいことなんやけど、いかにも簡単にできるように感じさせてしまうのがすごいな。