Top

はじめに

本書をお手に取っていただきありがとうございます。

本書は64ビットのx86 CPU(x86_64)を対象にフルスクラッチでOSをステップバイステップで作ってみる本のパート2です。

本書でやること

前著では、ハードウェアを抽象化してアプリケーションへ提供する簡単なOSを作りました。

ただ、前著はシングルタスクであったため、本書ではマルチタスクを実現するために簡単なスケジューラを実装してみます。

スケジューラは短い時間(本書ではミリ秒単位)で複数のアプリを切り替えることで、同時に動いているように見せます。そのため、スケジューラを作るにはOSにタイマーの機能が必要です。

そのため、本書では、2005年頃からPCに組み込まれるようになった比較的新しいハードウェアタイマーであるHPET(High Precision Event Timer、高精度イベントタイマー)を扱う機能をOSへ追加します。

また、HPETの情報はACPI(Advanced Configuration and Power Interface)という規格に従ってハードウェアから取得します。そのため、ACPIを扱う機能も追加します。

まとめると、本書では以下の流れでスケジューラを作ります。

  1. ACPIからHPETの情報を取得
  2. 取得した情報を使ってHPETを制御する機能追加
  3. 追加したHPETの機能を使ってスケジューラ実装

前著の「はじめに」で紹介したアーキテクチャ図に、本書で作る機能を追加すると図1の通りです。

本書まででできあがるOSのアーキテクチャ図

図1: 本書まででできあがるOSのアーキテクチャ図

太い枠線・太字の箇所が本書で追加する内容です。

開発環境・動作確認環境

本書の内容は、これまで通り、開発環境としてDebian上で開発し、QEMUとThinkPad上で動作確認したもので、詳しくは以下の通りです。

開発環境

動作確認環境

環境構築と動作確認方法

前著を参照してください。

本書含め、サークル「へにゃぺんて」の発行物はすべてPDF版/HTML版は無料で公開しています。

本書のPDF版/HTML版やサンプルコードの公開場所について

これまでの当サークルの同人誌同様、本書もPDF版/HTML版は以下のページで無料で公開しています。

また、本書で扱うサンプルコードとコンパイル済みバイナリは以下のGitHubで公開しています。

前著からの差分について

前著までで作ったブートローダーとカーネルに対して変更や追加を行う形で説明していきますが、ベースとなるソースコードは一部修正等で前著から少し進んでいます。

主な差分は以下の通りです。一部の差分は本文でも言及します。

■ ブートローダー

■ カーネル

本書で始める基準となるソースコードは、サンプルコードのリポジトリ内に、ブートローダーは「A00_boot_base」というディレクトリで、カーネル・アプリは「A01_kern_app_base」というディレクトリで置いています。本書の説明通りに手を動かしてみる際はこちらを使ってみてください。


Top