このシリーズについて
このシリーズは私がSecHack365(2023年度学習駆動コースの坂井ゼミです)を通して制作した「ぼくがつくったさいきょうのおーえす(Shizuku)」についてただただ語るだけのシリーズです。もし興味があればGitHubを覗いてくれると嬉しいです。Open Source Conference 2024 Tokyo/Springにも出展するのでもし興味がありましたら来ていただけると嬉しいです。
構成
---↓#1はここから---
- ぼくがつくったきっかけ
- さいきょうとは何か
- OSとは何か
---↑#1はここまで---
---↓この記事はここから - つくったおーえす
- オブジェクトとオブジェクトシステム
---↑この記事はここまで---
つくったおーえす
実はまだAPIドキュメントすらないOSなので恐縮ですが僕はオブジェクトシステムという概念(他のOSでいうところのVirtual File Systemに相当するもの)を搭載したShizukuというOS(というかほぼカーネル)を作りました。#1で紹介したOSの役割をもう一度整理すると
- デバイス操作
- デバイスの抽象化
- プログラム(プロセス)間通信
- リソース管理
をOSは実現するべきということが言えます。OSにはカーネルと標準アプリケーションの2つの部分に大別され、Linuxカーネルに標準アプリをインストールしたものがDebianやArchといったLinuxディストリビューションを作ります。そして↑のリストはLinuxでは基本的にカーネルが担当しています。Shizukuではプログラム間通信と処理能力(CPU時間)と記憶能力(メモリ領域)の管理(プログラムへの割り当て)のみカーネルが担当し、デバイス操作やデバイスの抽象化は標準アプリ(に位置付けることができるもの)によって行われます。設計としてはマイクロカーネル(GNU Hurd)やハイブリットカーネル(XNU)と呼ばれるものに近いですが、オブジェクトシステムによってデバイス抽象化が行われることと、全てのプログラム間通信はオブジェクトシステムを利用して行われるというところが大きな違いとなっています。
オブジェクトとは
Shizukuではオブジェクトを、
- 処理能力(管理単位はthread)と記憶能力(管理単位はメモリマップ)を持った存在(第一定義)
- オブジェクトは別のオブジェクトから呼び出せるメソッドを保有している(第二定義)
- オブジェクトは他のオブジェクトのエイリアス(ファイルディスクリプタのようなもの)を持つことができ、そのエイリアスはO(1)(最速)で呼び出せる。(エイリアス化されていないメソッドを呼び出す時はエイリアス化されてるメソッドよりも呼び出しが遅くなるかもしれない)(第三定義)
- オブジェクトは配下(手下、子)オブジェクトを持てる。親オブジェクトが終了する(消える)と子オブジェクトも終了する(消える)(第四定義)
- オブジェクトには特権オブジェクトと一般オブジェクトの二種類が存在して、一般オブジェクトは配下の一般オブジェクトのみ自由にでき、特権オブジェクトは他のすべてのオブジェクトを自由にできる(第五定義)
と定義しています。と言っても最初から第五定義まで決まっていたわけではなく、上から下へと機能が足りなくなるたびに必要な定義の拡張を行いました。(ちなみに第五定義に関してはまだ明確に定まり切れてません。)
オブジェクトシステムの機能
Shizukuのメイン機能であるオブジェクトシステムは次のような機能を一般・特権両方のオブジェクトに提供します。
- 処理能力の取得(スレッドの作成)
- 記憶能力の取得(メモリマップの作成)
- 配下オブジェクト・親オブジェクトのメソッド呼び出し(特権オブジェクトのメソッドを呼び出す時は呼び出し元オブジェクトのスレッドを使って実行、一般オブジェクトのメソッドを呼び出す時は呼び出し先のスレッドを新規作成して実行)
- 一般子オブジェクトの作成
- 子オブジェクトの削除
さらに、特権オブジェクトに対しては追加で以下のAPIを提供します
- すべてのオブジェクトを対象にできるメソッド呼び出し
- すべてのオブジェクトを対象にできるオブジェクトの削除
- すべてのオブジェクトを対象にできる処理能力記憶能力の解放(剥奪)
カーネルの構造
Shizukuはこのオブジェクトシステムを実現することに特化しているため、カーネルとしてはマイクロカーネルに近いですが、ビルド時に一部のコンポーネントを入れ替えてクロスプラットフォーム対応可能な構造に(一応)なってます。(これに1年溶かしました。もしSecHackに応募する人はターゲットアーキテクチャを絞ろうね!)
終わりに
SecHack365を通じて僕を支援してくださった方々へ感謝申し上げます。本当にありがとうございました。今年の一年はSecHack365で本当に実力も知識も伸びに伸びた一年となりました!みんなもSecHack365に応募しよう!!!