Slide 1

Slide 1 text

フルスクラッチOS格闘記 〜タイマ割り込みをメインに〜 seccamp 2019 OS開発ゼミ フルスクラッチOSを作ろう! 広瀬智之

Slide 2

Slide 2 text

自分のOSのコンセプト - x86_64アーキテクチャ対応 - UEFI対応 - 64-bit modeで動く - ページングを用いたメモリ管理 _人人人人人人人_ > モダンなやつ <  ̄Y^Y^Y^Y^Y^Y ̄

Slide 3

Slide 3 text

事前学習ではこんな事をしました - OSローダを作りました - 画面描画をしました - GDT、IDTの設定をしました - ページングの初期化を行いました - コンソールっぽいものを作った(途中)

Slide 4

Slide 4 text

キャンプではこんな事をしました - コンソールっぽいものを作った(完成) - echoコマンドを作った - Local APICを有効にしてタイマを有効にしました - sleepコマンドを作りました

Slide 5

Slide 5 text

トホホなバグの苦労話 -mno-red-zone - -mno-red-zoneのつけ忘れで割り込みが死んだ - Red Zoneとは - 他の関数を呼び出さない関数において - スタックポインタを動かさずに、スタックポイン タよりも 128 byte 小さい アドレスまでのメモリ 領域を勝手に使うというコンパイラの最適化 - 赤い部分にある値が勝手に使われる 画像はWriting an OS in Rust(2nd Edition) Disable the Red Zone https://os.phil-opp.com/red-zone/ から引用

Slide 6

Slide 6 text

トホホなバグの苦労話 -mno-red-zone - -mno-red-zoneのつけ忘れで割り込みが死ん だ - 通常の割り込みでのスタックの挙動は→ - 割り込みが終わったら右に積まれたスタッ クがpopされてスタックポインタがもどる 画像はWriting an OS in Rust(2nd Edition) Disable the Red Zone https://os.phil-opp.com/red-zone/ から引用

Slide 7

Slide 7 text

トホホなバグの苦労話 -mno-red-zone - -mno-red-zoneのつけ忘れで割り込みが死ん だ - こんな感じのことが起きた i. 普通の関数がRedZoneに書き込む ii. 割り込みが来て→のように書き込ま れる iii. もとの関数がRedZoneを読み出す iv. \(^q^)/ 画像はWriting an OS in Rust(2nd Edition) Disable the Red Zone https://os.phil-opp.com/red-zone/ から引用

Slide 8

Slide 8 text

sleepを作りました ここで動画を見せる

Slide 9

Slide 9 text

これからの展望 - MSI割り込みを有効化し、キーボード入力を美しく - マルチタスク化 - メモリアロケータ - ドキュメント作成 - などなど…

Slide 10

Slide 10 text

ありがとうございました!