ゼロからのOS自作入門 | マイナビブックス

ゼロからのOS自作入門

  • 著作者名:内田公太
    • 書籍:4,180円
    • 電子版:4,180円
  • B5変:744ページ
  • ISBN:978-4-8399-7586-9
  • 発売日:2021年03月22日
  • mixiチェック
  • このエントリーをはてなブックマークに追加

内容紹介

すべて自分で作るOSの世界。

[OSを手づくりするワクワクを体験!]
"知識ゼロ"からはじめて、本書オリジナルOS「MikanOS」を手づくりする本です。

紹介記事:なぜOSを作るのか? ただ面白いからだけじゃない!  新刊『ゼロからのOS自作入門』が大ヒット中!

パソコンの電源を入れOS本体を呼び出すところから様々なアプリを動かせるようになるまで、OSづくりを一通り体験します。読み進めるにつれ、いままでブラックボックスだと思っていたパソコンの中身「OS」の仕組みが分かってくることでしょう。

MikanOSはUEFI BIOSにより起動してIntel 64モードで動作、ページングを用いてメモリ管理を行い、USB3.0ドライバを搭載。ウィンドウシステム、プリエンプティブマルチタスク、ファイルシステムを持つOSです。これらの専門用語の意味もOSを作りながら解説します。MikanOSは C++ で記述します。数百行程度のプログラミング経験があれば無理なく読み進められるはずです。

本書は『30日でできる!OS自作入門』の流れを汲み「小さく作ってすぐ動かす」ステップバイステップ方式をとっていますので、無理なくマスター可能です!エンジニアなら誰もが一度は夢見る「OSづくり」を本書で学ぼう。

第0章 OSって個人で作れるの?
第1章 PCの仕組みとハローワールド
第2章 EDK II入門とメモリマップ
第3章 画面表示の練習とブートローダ
第4章 ピクセル描画とmake入門
第5章 文字表示とコンソールクラス
第6章 マウス入力とPCI
第7章 割り込みとFIFO
第8章 メモリ管理
第9章 重ね合わせ処理
第10章 ウィンドウ
第11章 タイマとACPI
第12章 キー入力
第13章 マルチタスク(1)
第14章 マルチタスク(2)
第15章 ターミナル
第16章 コマンド
第17章 ファイルシステム
第18章 アプリケーション
第19章 ページング
第20章 システムコール
第21章 アプリからウィンドウ
第22章 グラフィックとイベント(1)
第23章 グラフィックとイベント(2)
第24章 複数のターミナル
第25章 アプリでファイル読み込み
第26章 アプリでファイル書き込み
第27章 アプリのメモリ管理
第28章 日本語表示とリダイレクト
第29章 アプリ間通信
第30章 おまけアプリ
第31章 これからの道

付録:開発環境のインストール / MikanOSの入手 / EDK IIのファイル説明 / C++のテンプレート / iPXE / ASCIIコード表

商品を選択する

フォーマット 価格 備考
書籍 4,180
PDF 4,180 ※ご購入後、「マイページ」からファイルをダウンロードしてください。
※ご購入された電子書籍には、購入者情報、および暗号化したコードが埋め込まれております。
※購入者の個人的な利用目的以外での電子書籍の複製を禁じております。無断で複製・掲載および販売を行った場合、法律により罰せられる可能性もございますので、ご遠慮ください。

電子書籍フォーマットについて

  

備考

内田 公太(うちだ こうた、uchan)
小学生の頃にPICマイコンのアセンブリ言語に出会い、プログラマの道に進む。高校時代は『30日でできる! OS自作入門』(川合秀実、2006年)の校正を手伝う。東京工業大学の計算工学専攻を卒業後、サイボウズ株式会社でインフラ系のプログラミングに従事したり、東京工業大学でソフトウェア系の授業を担当したりしていた。2017年から2020年にかけて、セキュリティ・キャンプ全国大会でOS開発系のゼミを受け持った。2020年にサイボウズ・ラボ株式会社へ転籍し、OSや言語処理系の研究開発をしている。著書に『自作エミュレータで学ぶx86アーキテクチャ』(マイナビ出版、2015年)がある。

関連ページ

目次

はじめに
対象読者

第0章 OSって個人で作れるの?
0.1 OSの作り方
0.2 そもそもOSって何?
0.3 OS自作の手順
0.4 OS自作の楽しみ方
0.5 OS自作の全体像

第1章 PCの仕組みとハローワールド
1.1 ハローワールド
1.2 USBメモリのデバイス名の探し方
1.3 WSLでのやり方
1.4 エミュレータでのやり方
1.5 結局、何をやったのか?
1.6 とにかく手を動かそう
1.7 UEFI BIOSによる起動
1.8 OSを作る道具
1.9 C言語でハローワールド

第2章
EDK II入門とメモリマップ
2.1 EDK II 入門
2.2 EDK IIでハローワールド(osbook_day02a)
2.3 メインメモリ
2.4 メモリマップ
2.5 メモリマップの取得(osbook_day02b)
2.6 メモリマップのファイルへの保存
2.7 メモリマップの確認
2.8 ポインタ入門(1):アドレスとポインタ
2.9 ポインタとアロー演算子

第3章 画面表示の練習とブートローダ
3.1 QEMUモニタ
3.2 レジスタ
3.3 初めてのカーネル(osbook_day03a)
3.4 ブートローダからピクセルを描く(osbook_day03b)
3.5 カーネルからピクセルを描く(osbook_day03c)
3.6 エラー処理をしよう(osbook_day03d)
3.7 ポインタ入門(2):ポインタとアセンブリ言語

第4章 ピクセル描画とmake入門
4.1 make入門(osbook_day04a)
4.2 ピクセルを自在に描く(osbook_day04b)
4.3 C++の機能を使って書き直す(osbook_day04c)
4.4 vtable
4.5 ローダを改良する(osbook_day04d)

第5章 文字表示とコンソールクラス
5.1 文字を書いてみる(osbook_day05a)
5.2 分割コンパイル(osbook_day05b)
5.3 フォントを増やそう(osbook_day05c)
5.4 文字列描画とsprintf()(osbook_day05d)
5.5 コンソールクラス(osbook_day05e)
5.6 printk()(osbook_day05f)

第6章 マウス入力とPCI
6.1 マウスカーソル(osbook_day06a)
6.2 USBホストドライバ
6.3 PCIデバイスの探索(osbook_day06b)
6.4 ポーリングでマウス入力(osbook_day06c)

第7章  割り込みとFIFO
7.1 割り込み(osbook_day07a)
7.2 割り込みハンドラ
7.3 割り込みベクタ
7.4 割り込み記述子の設定
7.5 MSI 割り込み
7.6 割り込みのまとめ
7.7 割り込みハンドラの高速化(osbook_day07b)
7.8 FIFOとFILO
7.9 キューの実装
7.10 キューを使った割り込み高速化

第8章 メモリ管理
8.1 メモリ管理
8.2 UEFIメモリマップ(osbook_day08a)
8.3 データ構造の移動(osbook_day08b)
8.4 スタック領域の移動
8.5 セグメンテーションの設定
8.6 ページングの設定
8.7 メモリ管理に挑戦(osbook_day08c)

第9章 重ね合わせ処理
9.1 重ね合わせ処理(osbook_day09a)
9.2 new演算子
9.3 重ね合わせ処理の原理
9.4 重ね合わせ処理の時間計測(osbook_day09b)
9.5 重ね合わせ処理の高速化(osbook_day09c)
9.6 スクロール処理の時間計測(osbook_day09d)
9.7 スクロール処理の高速化(osbook_day09e)

第10章 ウィンドウ
10.1 もっとマウス(osbook_day10a)
10.2 はじめてのウィンドウ(osbook_day10b)
10.3 高速カウンタ(osbook_day10c)
10.4 チラチラ解消(osbook_day10d)
10.5 バックバッファ(osbook_day10e)
10.6 ウィンドウのドラッグ移動(osbook_day10f)
10.7 ウィンドウだけドラッグ移動(osbook_day10g)

第11章 タイマとACPI
11.1 ソースコード整理(osbook_day11a)
11.2 タイマ割り込み(osbook_day11b)
11.3 細かく時間を計る(osbook_day11c)
11.4 複数のタイマとタイムアウト通知(osbook_day11d)
11.5 ACPI PMタイマとRSDP(osbook_day11e)

第12章 キー入力
12.1 FADTを探す(osbook_day12a)
12.2 ACPI PMタイマを使う(osbook_day12b)
12.3 USBキーボードドライバ(osbook_day12c)
12.4 モディファイアキー(osbook_day12d)
12.5 テキストボックス(osbook_day12e)
12.6 カーソル(osbook_day12f)

第13章 マルチタスク(1)
13.1 マルチタスクとコンテキスト
13.2 コンテキストの切り替えに挑戦(osbook_day13a)
13.3 コンテキストスイッチの自動化(osbook_day13b)
13.4 マルチタスクの検証(osbook_day13c)
13.5 タスクを増やす(osbook_day13d)

第14章 マルチタスク(2)
14.1 スリープしてみる(osbook_day14a)
14.2 イベントが来たら起床する(osbook_day14b)
14.3 性能測定
14.4 タスクに優先度を付ける(osbook_day14c)
14.5 アイドルタスク(osbook_day14d)

第15章 ターミナル
15.1 ウィンドウ描画はメインスレッドで(osbook_day15a)
15.2 アクティブウィンドウ(osbook_day15b)
15.3 ターミナルウィンドウ(osbook_day15c)
15.4 描画の高速化(osbook_day15d)

第16章 コマンド
16.1 ターミナルでキー入力(osbook_day16a)
16.2 echoコマンド(osbook_day16b)
16.3 clearコマンド(osbook_day16c)
16.4 lspciコマンド(osbook_day16d)
16.5 コマンド履歴(osbook_day16e)
16.6 省電力化(osbook_day16f)

第17章 ファイルシステム
17.1 ファイルとファイルシステム
17.2 BIOSパラメータブロック
17.3 ディレクトリエントリ
17.4 ボリュームを読み出す(osbook_day17a)
17.5 lsコマンド(osbook_day17b)

第18章 アプリケーション
18.1 ファイルアロケーションテーブル(osbook_day18a)
18.2 初アプリ(osbook_day18b)
18.3 C++で計算機(osbook_day18c)
18.4 標準ライブラリ(osbook_day18d)

第19章 ページング
19.1 実行ファイルとメモリアドレス
19.2 アドレス変換
19.3 アプリのロードと実行(osbook_day19a)
19.4 仮想アドレスと4 階層ページング
19.5 アプリケーションを後半で動かす
19.6 アプリケーションのロード
19.7 階層ページング構造の設定
19.8 階層ページング構造の片付け

第20章 システムコール
20.1 アプリがOSの機能を使う方法(osbook_day20a)
20.2 OSを守ろう(1)(osbook_day20b)
20.3 TSSを設定しよう(osbook_day20c)
20.4 バグ発見を手伝おう(osbook_day20d)
20.5 システムコール(osbook_day20e)
20.6 システムコールの登録処理
20.7 システムコールの本体

第21章 アプリからウィンドウ
21.1 ISTを設定しよう(osbook_day21a)
21.2 文字列表示システムコール(osbook_day21b)
21.3 システムコールの作成
21.4 write() の作成
21.5 終了システムコール(osbook_day21c)
21.6 スタックポインタの復帰
21.7 コード整理(osbook_day21d)
21.8 ウィンドウを開く(osbook_day21e)
21.9 ウィンドウに文字を書く(osbook_day21f)

第22章 グラフィックとイベント(1)
22.1 exit()を使う(osbook_day22a)
22.2 点を描く(osbook_day22b)
22.3 タイマ値の取得(osbook_day22c)
22.4 ウィンドウ描画の最適化(osbook_day22d)
22.5 線を引く(osbook_day22e)
22.6 ウィンドウのクローズ(osbook_day22f)
22.7 キー入力を待つ(osbook_day22g)

第23章 グラフィックとイベント(2)
23.1 マウス入力(osbook_day23a)
23.2 お絵描きソフト(osbook_day23b)
23.3 タイマコマンド(osbook_day23c)
23.4 アニメーション(osbook_day23d)
23.5 ブロック崩しゲーム(osbook_day23e)

第24章 複数のターミナル
24.1 ターミナルを増やす(osbook_day24a)
24.2 カーソル点滅を自分で(osbook_day24b)
24.3 複数アプリの同時起動(osbook_day24c)
24.4 ウィンドウの重なりのバグ修正(osbook_day24d)
24.5 ターミナル無しのアプリ起動(osbook_day24e)
24.6 OSをフリーズさせるアプリ(osbook_day24f)
24.7 OSを守ろう(2)(osbook_day24g)

第25章 アプリでファイル読み込み
25.1 ディレクトリ対応(osbook_day25a)
25.2 ファイル読み込み(osbook_day25b)
25.3 正規表現検索(osbook_day25c)

第26章 アプリでファイル書き込み
26.1 標準入力(osbook_day26a)
26.2 ファイルディスクリプタの抽象化
26.3 キーボード入力を受け取る
26.4 EOFとEOT(osbook_day26b)
26.5 ファイル書き込み(1)(osbook_day26c)
26.6 ファイル書き込み(2)(osbook_day26d)

第27章 アプリのメモリ管理
27.1 デマンドページング(osbook_day27a)
27.2 メモリマップトファイル(osbook_day27b)
27.3 メモリ使用量を測ろう(osbook_day27c)
27.4 コピーオンライト(osbook_day27d)

第28章 日本語表示とリダイレクト
28.1 日本語と文字コード(osbook_day28a)
28.2 日本語フォント(osbook_day28b)
28.3 リダイレクト(osbook_day28c)

第29章 アプリ間通信

29.1 終了コード(osbook_day29a)
29.2 パイプ(osbook_day29b)
29.3 コマンドラインの解析とタスクの起動
29.4 パイプ処理の本体PipeDescriptor
29.5 ターミナルの起動と終了
29.6 タスクの終了
29.7 sortコマンド(osbook_day29c)
29.8 ターミナルのバグ修正(osbook_day29d)
29.9 共有メモリ

第30章 おまけアプリ
30.1 アプリにパスを通す(osbook_day30a)
30.2 moreコマンド(osbook_day30b)
30.3 catを入力に対応させる(osbook_day30c)
30.4 閉じるボタン(osbook_day30d)
30.5 テキストビューア(osbook_day30e)
30.6 画像ビューア(osbook_day30f)

第31章 これからの道

付録A 開発環境のインストール
A.01 WSLのインストール
A.02 WSLでQEMUを使う準備

付録B MikanOSの入手
B.01 MikanOSのバージョン間の差分確認
B.02 ソースコードの検索
付録C EDK IIのファイル説明
付録D C++のテンプレート
付録E iPXE
E.01 iPXEのビルドとインストール
E.02 HTTPサーバの起動
E.03 ネットワーク起動の実践
付録F ASCIIコード表

参考文献
謝辞

この商品を買った人はこんな商品も買っています


最近チェックした商品

Tポイント利用手続き

         Tポイント利用手続きに関する同意事項

                                株式会社マイナビ出版

株式会社マイナビ出版が提供するマイナビBOOKSにおいてTポイントご利用続きをされる方は、以下に掲げるお客様の個人情報の取り扱いについてご確認の上、ご同意下さい。

マイナビBOOKSにおいてTポイントサービスをご利用いただいた場合に、当社から、次に掲げる<提供情報>を、<提供目的>のためにカルチュア・コンビニエンス・クラブ株式会社(以下「CCC」といいます)へ提供します。

  <提供目的>:CCCの定める個人情報保護方針及びマイナビBOOKSにおけるT会員規約第4条に定める利用目的で利用するためTポイントサービスを利用するため
  <提供情報>:
   1)お客様が【マイナビBOOKS】の正当な利用者であるという情報
   2)ポイント数・利用日
   3)その他、Tポイントサービスを利用するにあたり必要な情報

  <提供方法>: 電磁的記録媒体の送付またはデータ通信による。ただし、提供するデータについては暗号化を施すものとする。

なお、CCCに提供された、以下の情報の利用については、CCCの定める個人情報保護方針及びT会員規約 に沿って取り扱われます。
上記の情報提供の停止をご希望される場合には、【マイナビBOOKS】におけるTポイント利用手続きの解除を実施していただく必要があります。
Tポイント利用手続きの解除、およびTポイントサービスにおける個人情報に関するお問い合わせ先は、以下のとおりです。
お客様お問い合わせ先:Tサイト(http://qa.tsite.jp/faq/show/22612)

 なお、Tポイント利用手続きの解除が完了しますと、マイナビBOOKSにおけるTポイントサービスをご利用いただけなくなりますので、予めご了承ください。

Tポイント利用手続きを行いますか?