「30日でできる!OS自作入門」をRustで。17日目

Posted on July 10, 2019 , Tags: OS自作入門, OS, Rust

「30日でできる!OS自作入門 」のC言語の部分をできるだけRustですすめてみる。今回は17日目の内容。

アイドルタスクを作成する

現在タスクA(メインのharibote_os)とタスクBが3種類ある状態となっている。
これでタスクBをすべて起動しない場合、タスクAはスリープしようとするが、切り替える先のタスクがなくなってしまう。
この問題を解消するため、アイドル(hlt)するだけのタスクを最初に設定するようにする。

タスクBがをrunしないようにする。

実行結果

以下の通り、前回までのカウンター表示がないが、無事に動いている。

アイドルタスクの導入

コンソール画面の表示

本ではこの後、コンソール画面を作っていく。こちらも本の流れにそって実装していく。

まずはtask_b_main用の準備をしていたところを書き換えて、console_taskというタスクをよびだすようにする。
同時にコンソールの見た目をつくる。

console_taskはこのようにharibote_osでやっているようにカーソルが表示されるようにする。

実行結果

以下の通り、コンソール風の画面が表示された。

コンソール表示

文字入力の切り替え

コンソール画面にもフォーカスを切り替えて文字入力ができるようにする。
Tabキーの入力をうけとり、フォーカスするウィンドウを切り替える。
あまり面白い箇所はないので、詳細な差分はGitHubのcommit log参照として、重要なところだけ記載する。

文字入力については、文字入力用のstruct Taskにfifoを持たせて、そのfifo経由でやりとりする。
これでfifoからtask、taskからfifoの双方向の参照ができ、若干気持ち悪さが増したが、一旦気にせずそのまま進める。

記号入力、大文字小文字の切り替えができるようにする

記号入力や大文字、小文字の切り替え用に、Shiftキー、CapsLockキーの処理も追加していく。
このあたりも素直な実装なので、差分の詳細はGitHubのcommit logを参照とする。

まずはShiftキーのハンドリングから説明する。

次にkeyboard.rsに追加した*Lock系のキーの状態管理用のstructとShiftキーを押したとき用のKEYTABLEを説明する。

あとはこれらを使って、適切な文字が表示されるようにする。

実行結果

以下の通り、コンソールとtask_aウィンドウへのフォーカスの切り替え、および記号や小文字の入力ができるようになった。

コンソール入力

17日目は以上となる。ここまでの内容のコードはyoshitsugu/hariboteos_in_rustのday17としてタグを打ってある。