Linuxカーネルコミッタの夢を見る

10年以内にLinuxカーネルにコミットしたい(2020/10/1).無理だって?まあ見てなさい.

低レイヤー学習記【14日目】

取り組んだ内容

[1] OS自作入門,pp.231-249

[2] オペレーティングシステム ~設計と理論およびMINIXによる実装~,pp.

取り組んだ内容の詳細

[1] OS自作入門

・タイマを扱うためにPITの設定を行った,IRQ0につながれたPITに対して10msごとに割り込みを行うようにinit_pit関数を定義,そしてIRQ0発生時に呼び出される割り込みハンドラを作成し,IDTに登録

タイムアウト機能を実装するために時間管理用の構造体に新たにtimeout変数を追加し,割り込みハンドラが呼び出されるたびに減少するようにした

・複数のタイマを扱うために構造体内のtimeout変数を配列化,さらにそれぞれのタイマの状態を記憶するためのフラグを用意

・複数のタイマを実行するためのCプログラムも実装,意外にもシンプル

・点滅するカーソルを実装,これはタイマが切れるたびに新たにタイマを設定し直すこと点滅間隔を実現していた

・割り込みハンドラ内の無駄な処理(タイムアウト変数を一つ一つ減らしていく処理)を変更,タイムアウト予定時刻と現在時刻との比較によってタイムアウト判定を行うように改良した

・割り込みハンドラ内でタイムアウト変数の数だけ実行されていた if 文(ほとんど空打ち)を廃止し,次のタイムアウト時間を保持する next 変数を導入することで,この next 変数と現在時刻を比較して無駄な空打ち処理をなくすよう再実装した

f:id:oirom0528:20201020231257p:plain

カーソルが点滅してるよ

[2] オペレーティングシステム ~設計と理論およびMINIXによる実装~

 

所感

タイマを実装したので,将来プログラムが一定時間内に終了しなかった場合に強制終了させることができるようになりましたね(デッドロックの回避とか??).次章以降もまだタイマに関する話が続きそうです,ちょっと退屈なのでこの機会にしっかり復習してみようかな~.

MINIXの本は読み進めてはいるんだけどなかなか理解で来ていない気がします.システムコールの説明ばかりなのが原因か(一体何の説明なら理解できる?).そういえば付属のCD-ROMをまだ使ってなかったので,早くインストールして実際に操作しながら本を読み進めたほうが理解が深まる気がする.

余談

少し前になるが図書館の選書ツアーに参加して読みたい本を10冊ほど購入依頼した.まだ発注をかけている段階で届くのがいつになるかは分からないらしいが非常に楽しみ.選書したほんのほとんどが低レイヤー関係の技術書.卒業するまでに何としてでも読み切りたいけど果たして可能なのか.とりあえず今借りている5冊を年末までに読み切ろうと思う.