コグノスケ


link 未来から過去へ表示  link 過去から未来へ表示(*)

link もっと前
2022年12月14日 >>> 2022年12月14日
link もっと後

2022年12月14日

自作OSの紹介その2 - デザイン

目次: 独自OS

最近、趣味&趣味からの発展で仕事でも独自OSを作成しています。独自OSの設計目標は下記の通りです。

  • できるだけ軽く、速くしたい
  • できるだけ便利、手軽にしたい
  • アクセラレータ向けに割り切る(汎用OSは目指さない)

最初の2つの項目は大抵トレードオフですが、3つ目の項目を活かして軽く&便利を両立させることが狙いです。

アプローチ(アクセラレータ側)

「便利、手軽」の実現のため、ソースコードレベルの互換性の確保を目指します。具体的にはLinux用に書かれたソースコードをそのままアクセラレータ用にコンパイル&実行できれば、プログラマから見てLinuxの使い勝手を実現できている、と言えるはずです。

一方で「軽く、速く」を実現するため、Linuxとのソース互換を目指しつつも、アクセラレータ向けに割り切った制限をいくつか設けます。

単一バイナリを実行
ユースケースに由来する制約です。別の仕事をしたいときはアクセラレータで実行するバイナリを切り替えます。
プロセスは未対応(常に1プロセス)
上記とほぼ同じ理由です。アクセラレータ上でマルチプロセスが連携するようなサーバーやGUIを動かしたい人はいないでしょう。
スレッドは対応
アクセラレータはマルチコアであることが多いため、スレッドの対応は必須です。
スレッド数はハードウェアスレッド数を上限とする
ソフトウェアのソースコード互換を大きく壊す可能性がありますが、機能と速度のバランスを目指しました。アクセラレータは計算が仕事であり、コア数以上のスレッド生成はオーバーヘッドが増え性能が下がるだけです。スレッド数の制御が困難な場合は、スレッドを自動的に扱うライブラリ(OpenMPなど)の利用もありでしょう。
ファイルシステム、言語対応などの機能は対応しない
コードサイズの縮小、実装期間の短縮のためです。対応すること自体に問題はないです、が、おそらく要らないと思います。
MMUや特権モードは使わない
連動して動的リンクなども未対応です。将来的には対応するかもしれませんが、必須ではありません。

これらの制限が妥当かどうか?について今は結論は出ないので、実装して使って問題があれば今後修正したいと思います。アクセラレータやOSに詳しい方々の意見も聞いてみたいです。

アプローチ(ホスト側)

アクセラレータに処理を依頼する際のインタフェースはいくつかありますが、いずれも定番ではなさそうです。今回はOpenCL風のAPIを採用しました。OpenCL規格に準拠はしませんが、ある程度(例えばclinfoに応答できる程度)のOpenCL APIを実装します(ホスト側のソースコードのリンク)。

ホストとアクセラレータ間のデータ移動や実行制御の方法も考える必要があります。ホスト側からアクセラレータ側に何か計算を依頼するケースと、もう一つアクセラレータ側のスタンドアローン実行(ホスト側から制御なしでアクセラレータ側のみ単独実行するモード)はデバッグの利便性を考えると、必須に近い機能です。

またホスト側に過度に依存しないように、ホスト側のAPIが気に入らなくなったら別のAPIを実装することができるように、アクセラレータ側の独自OSとは別のリポジトリに分離して実装します。

実現方法

独自にOSを実装する道を選びました。既存のOSSを改造するより実装期間が短く済むと思ったくらいで、独自実装しなければならない強力な理由はないです。個人的な理由も入れて良ければ、独自OS実装に対する興味があったことが大きいです。

RTOSにLinux互換レイヤを積む方法、Linuxをダウンサイズする方法、などでも実現できるのではないでしょうか。Linuxをダウンサイズする方法だとスレッド周りの制約実現が難しいですかね……?やったことがないので何とも言えません。

そんなの簡単にできるよ、という方はぜひOS作成フレンズになりましょう。

編集者:すずき(2023/01/09 05:17)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
2022年12月14日 >>> 2022年12月14日
link もっと後

管理用メニュー

link 記事を新規作成

<2022>
<<<12>>>
----123
45678910
11121314151617
18192021222324
25262728293031

最近のコメント5件

  • link 24年5月16日
    すずきさん (05/21 11:41)
    「あー、確かにdpkg-reconfigu...」
  • link 24年5月16日
    hdkさん (05/21 08:55)
    「システム全体のlocale設定はDebi...」
  • link 24年5月17日
    すずきさん (05/20 13:16)
    「そうですねえ、普通はStandardなの...」
  • link 24年5月17日
    hdkさん (05/19 07:45)
    「なるほど、そういうことなんですね。Exc...」
  • link 24年5月17日
    すずきさん (05/19 03:41)
    「Standardだと下記の設定になってい...」

最近の記事3件

  • link 22年12月22日
    すずき (06/18 19:38)
    「[x86とARMとRISC-VでCoreMark対決] 目次: RISC-VCoreMarkを以前(2019年7月5日の日記参...」
  • link 24年5月3日
    すずき (06/17 02:42)
    「[ROCK 3Cの青色LED点滅を止める] 目次: Arduinoゲーミングマシンの流行により、最近のコンピュータは意味もなく...」
  • link 24年5月19日
    すずき (06/04 00:44)
    「[Yocto - まとめリンク] 目次: YoctoHello YoctoYoctoのセットアップスクリプトとビルドディレクト...」
link もっとみる

こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDFファイル RSS 1.0

最終更新: 06/18 19:38