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

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

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

取り組んだ内容

[1] OS自作入門,pp.96-114

[2] 低レイヤを知りたい人のためのCコンパイラ作成入門,step.3-6

 

取り組んだ内容の詳細

[1] OS自作入門

・構造体を導入し,アセンブリ側でメモした画面表示に関するメモリ情報をポインタを介して受け取るようにした

・フォントファイルを作成した

・フォントファイルの内容はバイナリの並びであることを利用して繰り返し処理によってフォントを描画する関数を定義

・メモリ操作命令であるsprintfを使って変数の内容をメモリ内に生成し画面表示できるようにした

・マウスカーソルのデータを配列で用意しフォント描画のときと似た関数を使って表示した

f:id:oirom0528:20201006234224p:plain

マウスカーソルが出たよ

[2] 低レイヤを知りたい人のためのCコンパイラ作成入門

・演算式に空白文字列が混ざっていてもコンパイルできるようにトークナイザを導入した

・エラー発生時にエラー部分が分かりやすいよう改良

再帰下降構文解析を勉強

・スタックマシンの勉強

再帰下降構文解析とスタックマシンをコンパイラに導入して四則演算を可能にした

・単項プラスと単項マイナスの導入

 

所感

OSらしい見た目になってきましたが,マウスカーソルがまだ動かないです.はやく操作できるようにしたいですね.マウス操作は割り込み処理に分類されるため,割り込みについて記述した割り込み記述指標(Interrupt Descriptor Table: IDT)について設定しなくてはならないのですが,そのためにはセグメントの設定を完了しておかなくてはいけないので必然的に大域セグメント記述子表(Global Descriptor Table: GDT)の設定も行わなければならないらしいです.

ここにきて急に難易度が上がったように感じますが,セグメンテーションや割り込みテーブルの話はコンピュータアーキテクチャの基礎でつい先日読んだばかりなので理解し易そうです.楽しいですね~.

コンパイラ構文解析の話が少し難しく,コードも完全には理解できていないので復習必須ですね.

明日も頑張りますよ~!