https://github.com/zuki/os_from_zero
「ゼロからのOS自作入門」実習記録
https://github.com/zuki/os_from_zero
Last synced: 5 months ago
JSON representation
「ゼロからのOS自作入門」実習記録
- Host: GitHub
- URL: https://github.com/zuki/os_from_zero
- Owner: zuki
- Created: 2021-03-24T08:55:16.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2021-05-11T00:04:17.000Z (about 5 years ago)
- Last Synced: 2025-05-17T21:06:09.668Z (about 1 year ago)
- Size: 11.9 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 「ゼロからのOS自作入門」自習メモ
## [Linuxでの開発環境の構築](src/day00.md.md)
## [第1章: PCの仕組みとハローワールド](src/day01.md)
- バイナリ入力によるhello world
- UEFIアプリによるhello world
## [第2章: EDK II入門とメモリマップ](src/day02.md)
- EDK IIを使ったUEFIアプリによるhello world
- UEFI機能を使ったメモリマップの取得
## [第3章: 画面表示の練習とブートローダ](src/day03.md)
- カーネル(Cプログラム)作成
- ブートローダ(UEFIアプリ)作成
- ブートローダからカーネルを呼び出して実行
- ブートローダからカーネルへ引数を渡す
- フレームバッファ(ブートローダで用意してカーネルに渡す)を使ったピクセル描画
## [第4章: ピクセル描画とmake入門](src/day04.md)
- 配置newによるメモリ確保
- ブートローダの改良(LOADセグメントの選択ロード)
## [第5章: 文字表示とコンソールクラス](src/day05.md)
- フォントの描画原理
- printk()
## [第6章: マウス入力とPCI](src/day06.md)
- USBホストドライバ(xHC)、マウスデバイスドライバ(HIDマウス)の導入(説明なし)
- PCIデバイスの解説(PCIデバイスリストの作成)
- xHCの使用法
## [第7章: 割り込みとFIFO](src/day07.md)
- X86_64割り込みの解説
- FIFO(queue)の実装(イベントキューとして使用)
## [第8章: メモリ管理](src/day08.md)
- カーネルによるメモリ管理(スタック、セグメンテーション設定、ページング)
## [第9章: 重ね合わせ処理](src/day09.md)
- sbrk()の実装によるNew演算子の実現
- レイヤー導入
- シャドウバッファによる高速化
- memcpy()による高速化
## [第10章: ウィンドウ](src/day10.md)
- ウィンドウの作成
- intersection領域の更新による高速化
- バックバッファによる画面のチラツキ防止
- ウィンドウのドラッグ
## [第11章/第12章2節: タイマとACPI](src/day11.md)
- タイマ割り込みを実現
## [第12章: キー入力](src/day12.md)
- USBキーボードドライバの作成
- キー押下イベントの処理
## [第13章: マルチタスク (1)](day13.md)
- コンテキストスイッチ
- プリエンプティブマルチタスク
## [第14章: マルチタスク (2)](day14.md)
- SleepとWakeup
- タスク優先度を導入
## [第15章: ターミナル](src/day15.md)
- ウィンドウ描画を専用タスクで行う
- アクティブウィンドウ機能
- ターミナルを作成(入力機能はまだない)
## [第16章: コマンド](src/day16.md)
- ターミナルに入力機能を追加
- `echo`, `clear`, `lspci`コマンドを実装
- コマンド履歴機能を実装
- TaskBを削除
## [第17章: ファイルシステム](src/day17.md)
- UEFIの機能でボリュームデータをメモリに読み込んで使用する
- FAT32の仕様書の解説
- lsコマンドを実装
## [第18章: アプリケーション](src/day18.md)
- ファイルからアプリケーションを呼び出して実行
- アセンブリ言語による
- C言語による(ライブラリ関数を自作)
- C言語による(標準ライブラリを使用)
## [第19章: ページング](src/day19.md)
- アドレス変更
- 仮想アドレスの物理ページへの変換
- 4階層ページング
- アプリケーション(高位アドレスに配置)のロード・実行
- アプリケーション実行でシステムがリセットする問題発生
- lldbによるデバッグ
## [第20章: システムコール](src/day20.md)
- ユーザ権限のセグメントの作成、ユーザスタックの割当
- TSSによるカーネルスタックの設定
- 例外ハンドラの設定によるデバッグ出力
- MSRを介したシステムコールの実現
## [第21章: アプリからウィンドウ](src/day21.md)
- newlibを使うためのグルー関数とシステムコール
- アプリケーションからカーネルに戻るExitシステムコール
- アプリケーションからWindowを開き、文字を描くシステムコール
## [第22章: グラフィックとイベント (1)](day22.md)
- 画面に線を描画するアルゴリズム
- 大量描画を最適化する方法
- システムコール時にOS用スタックに入れ替える方法
## [第23章: グラフィックとイベント (2)](day23.md)
- マウス入力、キーボード押下の取得
- タイマ作成システムコール
- eye, paint, timer, アニメーション、ブロック崩しアプリケーションの作成
## [第24章: 複数のターミナル](src/day24.md)
- アプリ専用の階層ページング機構を用意して複数アプリの同時起動を可能にする
- ターミナルに表示フラグをもたせてターミナルなしにアプリを起動する
- アプリが例外処理を行った場合に終了させる。
## [第25章: アプリでファイル読み込み](src/day25.md)
- ディレクトリ操作を可能にする
- fopen, freadの実装(open, readシステムコールの実装)
## [第26章: アプリでファイル書き込み](src/day26.md)
- ファイルディスクリプタを抽象化し、stdin, stdout, stderrを実装
- fwriteの実装(writeシステムコールの実装)
## [第27章: アプリのメモリ管理](src/day27.md)
- デマンドページングの実装
- メモリマップトファイルの実装
- コピーオンライトの実装
## [第28章: 日本語表示とリダイレクト](src/day28.md)
- FreeTypeを使い、日本語TrueTypeフォントを表示する。
- Printの出力先をfdとし、リダイレクト機能を実装(出力のみ)
## [第29章: アプリ間通信](src/day29.md)
- パイプの実装
## [第30章: おまけアプリ](src/day30.md)
- 各種アプリの実装
- 閉じるボタンの実装
## [Macでの環境構築](src/mac.md)
## [MikanLoaderPkg](src/MikanLoader.md)