Serenaは、普及している先制の同時実行と複数のユーザーをサポートする最新の設計原則に基づいた実験的オペレーティングシステムです。カーネルはオブジェクト指向であり、クロスプラットフォームおよび将来の証明になるように設計されています。 68030以上のCPUがインストールされているAmigaシステムで実行されます。
従来のスレッドベースのOSSとは別に設定されている1つの側面は、AppleのGrand Central Dispatchに多少似たディスパッチキューを中心に純粋に構築されていることです。ユーザースペースやカーネルスペースにスレッドを作成するサポートはありません。代わりに、カーネルは仮想プロセッサの概念を実装し、仮想プロセッサのプールを動的に管理します。プールのサイズは、ディスパッチキューのニーズに基づいて自動的に調整され、仮想プロセッサは必要に応じてプロセスに割り当てられます。すべてのカーネルとユーザーのスペースの並行性は、ディスパッチキューを作成し、キューをディスパッチするために作業項目を送信することにより達成されます。作業項目は、ユーザーの観点から単に閉鎖(関連状態を持つ関数)です。
もう1つの興味深い側面は、割り込み処理です。割り込みに反応したいコードは、処理する割り込みのために、割り込みコントローラーにカウントセマフォを登録できます。割り込みコントローラーは、割り込みが発生するたびにセマフォを信号します。カウントセマフォの使用により、割り込みに関心のあるコードが割り込みの発生を見逃さないことが保証されます。中断されたセマフォでの信号に割り込みを変換する利点は、割り込み処理コードが他の種類のコードが実行されるのと同じ種類のコンテキストである明確に定義されたコンテキストで実行されることです。また、割り込み処理コードの柔軟性を与え、すぐに割り込みに反応する必要がないためです。割り込みハンドラーコードがたまたま他のことで忙しかったかどうかにかかわらず、割り込みが発生した情報は決して失われません。
カーネルは一般にリエントラントです。これは、CPUがカーネル内で実行されている間、仮想プロセッサが引き続きスケジュールされ、コンテキストが先制的に切り替えられたことを意味します。さらに、セマフォ、条件変数、ロックAPIのカウントの完全な賛辞がカーネル内で利用できます。これらのオブジェクトのAPIは、従来のOSのユーザースペース実装で見つけられるものによく似ています。
Serenaは、POSIXと同様の階層プロセス構造を実装します。プロセスは多くの子プロセスを生成する可能性があり、コマンドラインと環境の変数を子供に渡すことがあります。プロセスは、POSIXのファイル記述子に似たI/Oチャネルを介してI/Oリソースにアクセスします。
ただし、POSIXスタイルプロセスモデルとSerenaモデルには2つの顕著な違いがあります。最初にfork()を使用する代わりに、exec()を使用して新しいプロセスを生成するため、Process_spawn()と呼ばれるSerenaで単一の関数を使用します。これにより、プロセスがはるかに速く、エラーが発生しやすくなります。
第二に、子のプロセスでは、デフォルトで親のファイル記述子を継承しません。唯一の例外は、端子入力と出力ストリームを表すファイル記述子0、1、2です。このモデルは、POSIXモデルに比べてエラーが発生しやすくなります。PoSIXモデルでは、子供を生成する前に子供のプロセスに渡したくないファイル記述子を閉鎖するように注意する必要があります。これを行うことは、アプリケーションがほとんど自立していたとき、そして動的ライブラリのサポートがなかったUNIXの初期の時代には簡単でした。アプリケーションははるかに複雑で、多くのサードパーティライブラリに依存するため、今日は逆です。
現時点での実行可能ファイル形式は、AOUT実行可能ファイル形式に相対的なAtari St Gemdosファイル形式です。このファイル形式は、最終的に動的ライブラリをサポートできるファイル形式に置き換えられます。しかし今のところ、仕事を成し遂げるのに十分です。
カーネルは、権限とユーザーおよびグループ情報を備えた階層ファイルシステムであるSerenafsを実装しています。ファイルネームスペースを展開するために、別のファイルシステムにあるディレクトリの上にファイルシステムをマウントできます。これはすべて、POSIXシステムでの動作に似ています。子プロセスを生み出したいプロセスでは、子どものプロセスがグローバルファイルシステム名空間のサブツリーに限定されることを指定できます。
ブートファイルシステムは現在RAMベースです。 ROMには、ディスキメージツールで作成され、RAMディスクのテンプレートとして機能するディスクイメージが含まれています。このROMディスクイメージは、ブートタイムでRAMにコピーされます。
ユーザースペースは、LIBC、Libsystem、LIBCLAP、およびLIBMの始まりをサポートしています。 Libsystemは、カーネルインターフェイスのユーザースペース側を実装するライブラリです。 LIBCLAPは、コマンドラインインターフェイスプログラムの引数解析を実装するライブラリです。
Serena OSには、正式に定義されたシェル言語を実装するシェルが付属しています。ここでシェルドキュメントを見つけることができます。
現時点では、次のカーネルサービスが実装されています。
現時点では、次のユーザースペースサービスが利用可能です。
現時点では、次のユーザースペースプログラムが利用可能です。
さまざまなモジュールの完全性と正確性のレベルは、現時点ではかなり異なります。物事は時間の経過とともに改善するために一般的に計画されています:)
現時点では、次のハードウェアがサポートされています。
開発のためにプロジェクトを設定し、OSを実行することは少し関与しています。以下の指示はWindows用ですが、LinuxとMacOSではほぼ同じように動作するはずです。
最初に必要なのは、Amiga Computer Emulatorです。 https://www.winuae.net/downloadからダウンロードできるWinuaeを使用しています
Winuaeインストーラーをダウンロードして実行します。これにより、エミュレータはブートドライブの「プログラムファイル」ディレクトリ内に配置されます。
次に、オペレーティングシステムの構築に必要なVBCCコンパイラとアセンブラーをダウンロードしてインストールします。プロジェクトのホームページは、http://www.compilers.de/vbcc.htmlにあり、http://sun.hasenbraten.de/vbccのツールのダウンロードページにあります。
私が自分の開発に使用しているバージョンであり、Windows 11で正しく動作することがわかっているバージョンは0.9時間です。ディスク上のVBCCフォルダーを指す名前VBCCの環境変数を必ず追加し、 vbccbinフォルダーをPATH環境変数に追加してください。
Microsoft CコンパイラがWindowsにビルドツールを構築するために必要であるため、Microsoft Visual Studioとコマンドラインツールをインストールする必要があることに注意してください。
最後に、GNU Make for Windowsをインストールし、 PATH環境変数にあることを確認します。これを行うための簡単な方法は、シェルウィンドウで次のWingetコマンドを実行することです。Winget winget install GnuWin32.Make 。
OSを構築しようとする前に、このステップを1回実行する必要があります。このステップの目的は、カーネルとユーザーのスペースライブラリを構築するために必要ないくつかのツールを構築することです。これらのツールのドキュメントはこちらで見つけることができます。
最初にWindowsターミナルで開発者コマンドプロンプトを開き、次にCDをSerena/Toolsフォルダーに開きます。タイプmakeとヒットリターン。これにより、必要なすべてのツールが構築され、 Serena/build/toolsフォルダー内に配置されます。 OSプロジェクトを完全にクリーンにしても、ツールはこの場所で保持されます。
Visual StudioコードでSerenaプロジェクトフォルダーを開き、[ Run Build Task...メニューからBuild Allを選択します。これにより、カーネル、Libsystem、LIBC、LIBM、およびShellが構築され、 Serena/product/Kernel/ Folder内に単一のSerena.romファイルが生成されます。このROMファイルには、カーネル、ユーザースペースライブラリ、シェルが含まれています。
最初に、まだ68030 CPU(つまり、Amiga 3000または4000)をwinuaeに備えたAmiga構成を作成する必要があります。これを行う最も簡単な方法は、クイックスタートしてモデルとしてA4000を選択することです。次に、ハードウェア/ROMページに移動し、「メインROMファイル」テキストフィールドを更新して、ディスク上のSerena/build/product/ folder内のSerena.romファイルを指すようにします。最後に、ハードウェア/RAMページに移動し、「スロー」エントリを1MBに設定することにより、少なくとも1MBの高速RAMを仮想アミガに与えます。この構成を保存して、次回OSを実行するときに再作成する必要がないようにします。
構成をロードしてから、[スタート]ボタンを押すか、構成ページの構成をダブルクリックしてOSを実行します。エミュレータは、ブートメッセージを表示し、シェルプロンプトを表示する画面を開く必要があります。シェルでサポートされているコマンドのリストについては、シェルページを参照してください。
MITライセンスの下で配布されます。詳細については、 LICENSE.txt参照してください。
Dietmar Planitzer -@linkedin
プロジェクトリンク:https://github.com/dplanitzer/serena