コミックマーケット96(C96)で「マルチコア本」出します!

次の夏コミ(C96)の4日目(8/12(月))に「へにゃぺんて」でブース出展します!

配置は「南リ18b」で、2019年7月1日に開業されたばかりの「南展示棟」です!(公式の開業お知らせ[PDF])
エリアとしては4Fにある「南3」です。正門というのか逆三角形の会議棟からは西展示棟を通り抜けた先にあります。
詳しくは上記PDFか↓のねとらぼの記事が分かりやすいです。

C96新刊表紙
C96新刊表紙

新刊は「x86_64自作OS」シリーズの「パート5」で、「てっとりばやくマルチコア」です。

UEFIの機能を直接呼び出すことでブートローダーでのマルチコア対応を実現するこちらの記事の書き直し(第1章)と、
ブートローダー後(UEFIを抜けた後)のカーネル・アプリでのマルチコア対応方法の紹介(第2章)の2章の構成です。

内容としては、「システムコールを通じて任意のアプリを指定されたコアで動かす」までをてっとりばやく実現します。

特定の技術要素に閉じた内容になっていますので、本シリーズに限らず、x86向けに独自の自作OSをしている方にも参考になるかと思います。

目次

  • はじめに
    • 本書の構成
    • 開発環境・動作確認環境
    • 本書の PDF 版 /HTML 版やソースコードの公開場所について
  • 第 1 章 ブートローダーを変更し各 AP をカーネルへジャンプさせる
    • 1.1 マシンで有効なプロセッサ数を取得する
      • 1.1.1 EFI_MP_SERVICES_PROTOCOL の準備
      • 1.1.2 GetNumberOfProcessors() でプロセッサ数を取得する
      • 1.1.3 動作確認
    • 1.2 プロセッサ数をカーネルへ渡す
    • 1.3 AP を動作させてみる
      • 1.3.1 StartupAllAPs() について
      • 1.3.2 動作確認
    • 1.4 AP もカーネルへジャンプさせる
      • 1.4.1 ap_main() でカーネルへジャンプするようにする
      • 1.4.2 ap_main() の呼び出し側の変更点
  • 第 2 章 カーネル側で AP を制御する
    • 2.1 ジャンプしてきた AP を認識する
      • 2.1.1 Local APIC とは
      • 2.1.2 Local APIC ID を取得してみる
      • 2.1.3 AP の場合の条件分岐を追加する
      • 2.1.4 動作確認
    • 2.2 初期化前のコンソールへのアクセスを防ぐ
      • 2.2.1 AP はコンソールの初期化を待つようにする
      • 2.2.2 動作確認
    • 2.3 spin lock を追加する
      • 2.3.1 ロックとスピンロック
      • 2.3.2 スピンロックを実装してみる
      • 2.3.3 スピンロックを使ってみる
      • 2.3.4 動作確認
    • 2.4 AP に外部アプリを実行させる
      • 2.4.1 AP の初期化処理 (ap_init()) を追加する
      • 2.4.2 AP の外部アプリ実行 (ap_run()) を追加する
      • 2.4.3 AP へ外部アプリを実行させる
      • 2.4.4 動作確認
    • 2.5 AP での外部アプリ実行をシステムコール化する
  • おわりに
  • 参考情報
    • 元ネタ
    • 参考にさせてもらった情報
    • 開発リポジトリ
    • 本シリーズの過去の著作

裏表紙

C96新刊裏表紙
C96新刊裏表紙