宮水の日記

宮水の日記

主に書評や資格取得について記事を書いています。

ゼロからのOS自作入門 〜画面描画からマウスの入力受付まで〜

みなさんこんにちは!宮水です。今回は、マウスの作成まで(本書の7章まで)を通して自分なりに分かったことを日記として投稿します。

f:id:kattyan53:20210513081239p:plain

環境構築・ブートローダの作成まではこちら!miyamizu.hatenadiary.jp

ゼロからのOS自作入門

ゼロからのOS自作入門

4章 ピクセル描画とmake入門

この章でやること
  • makeを使ってみる
  • OS本体から絵を描く方法を学ぶ

画面に黄緑色の四角を描くことができました。
f:id:kattyan53:20210513125516j:plain

make

コンパイルやリンクなどの作業を自動化するツール

GOP (Graphics Output Protocol)

グラフィックス表示プロトコルの一つ。(ググっても全然情報が出てこなかった…)

System V AMD64 ABI

プログラムとCPUの相互作用を機械語レベルで規定する。プログラムが動作するにあたり必要なレジスタやメモリの使い方が決まっている。重要な項目に呼出規約があり、引数、戻り値、関数の中で変更していいレジスタなどを定めている。

5章 文字表示とコンソールクラス

この章でやること
  • OS本体から画面に文字を表示する
  • フォントを読み込んだりする
  • 出力専用のコンソールを作る

こんな感じで、フォントを適用して文字が表示されるようになりました!
f:id:kattyan53:20210515184014p:plain

バッファ

データを一旦蓄えておける場所のこと。

リンカ

リンカとは、機械語のプログラムの断片を適切に結合し、実行可能なプログラムとして生成するためのプログラムです。

リンカ – プログラミング用語解説|Unity高校&ゲームスクールのG学院

ld.lldコマンド(3章の復習)

オブジェクトファイルから実行ファイルを作成する。

6章 マウス入力とPCI

この章でやること

マウス入力を受け付けられるようにします。

  • マウスカーソルの描画
  • PCIバイスの列挙
  • xHCを探して初期化
  • ポーリング方式でマウスカーソルが動くようにする

USB接続されたマウスでも、ThinkPadタッチパッドでもカーソルが動くようになりました!
f:id:kattyan53:20210515184001p:plain

PS/2のエミュレーション

PS/2は接続の規格。エミュレーションとは、ポインタを動かしたり、クリック操作をしたりマウスを動かす操作のことのようです。

バス

電気信号を送る

シリアル

1本の信号線を使って信号うが1ビットずつ送られるという意味。

ドライバ

制御チップのようなハードウェアを扱うためのソフトウェアのこと。

xHC(Extensible Host Controller Interface)

xHCIと同義…なんですかね…?これもググってもあんまり出てこなかったです…)

xHCIとは、USB接続の周辺機器とコンピュータ本体の通信を制御するUSBコントローラの種類の一つで、USB 3.x規格に対応したもの。

https://e-words.jp/w/xHCI.html


https:/https://e-words.jp/w/xHCI.html
/e-words.jp/w/xHCI.html

PCI(Peripheral Component Interconnect)

部品とマザーボードを繋ぐための規格

PCI コンフィギュレーション空間

PCIバイスのベンダIDやクラスコードなどPCIバイスに関する基礎的な情報が書かれている。

ポーリング方式

イベントが来ているかどうか問い合わせる方式。

7章 割り込みとFIFO

この章でやること
  • 先ほどポーリング方式で作ったマウス入力を割り込み方式にする

割り込み処理は、以下のサイトの図がわかりやすかったです。
「マウスが動きましたか?」と毎回問い合わせるのではなく、マウスが動いたらそのときやっている処理を一時中断してマウスを動かし、元の処理に復帰するようにコードを書き換えていくそうです。
割り込み処理 | 東芝デバイス&ストレージ株式会社 | 日本

割り込み方式

イベントが到達したときにハードウェアがOSに通知する方式。

割り込みハンドラ

割り込み発生時に実行される関数のこと。

割り込みベクタ

割り込みには色々種類がある。割り込みの種類ごとに異なる割り込み要因番号が割り振られている。これを割り込みベクタという。

IDT(割り込み記述子テーブル)

割り込み要因番号と割り込みハンドラを対応付けるための表のこと。

MSI 割り込み

PCI規格が定める割り込みの発生方法。

FIFO

先入れ先出し。キューのこと。本書ではこの方式を使って割り込み処理を高速にする。

FILO

先入れ後出し。スタックのこと。

まとめ

今回は、文字表示やマウス入力の受け付けが終わりました!
画面に何か表示されると達成感があって楽しいですね☺️

また、基本情報でなんとなく丸暗記していた単語が多く出てきました。
実際に実装されているところを見るとより意味がわかったような気がします☺️ それでもやっぱり難しいですが...。

ゼロからのOS自作入門

ゼロからのOS自作入門

ここまでお読みいただきありがとうございました!