Chengcheng OS(CCOS)は、趣味の64ビットオペレーティングシステムです。私は悲しみと悲惨さが好きなので、私はそれをx86に書いています。このプロジェクトはまだ開発中でした。私はオペレーティングシステムの設計の初心者です。私が実装したデザインの概念の多くは、CCLDR(Chengcheng OSのOSローダー)やメモリマネージャーなどのWindows NTに触発されています。そして、私がcommingの数ヶ月で学ぶ必要があるコースがもっとたくさんあります。そのため、プロジェクトを頻繁に更新しません。

uefi
CCOSはuefiを使用してccoskrnlをブートストラップします。 UEFIは、発達中のOSローダーを大幅に促進します。開発者は、UEFIが提供するインターフェイスを直接呼び出すことができます(アセンブリの代わりにC言語を使用)。ここに注意すべきことは、CCOSKRNLをロードするためにCCLDR(別のバイナリ実行可能ファイル)がまだ必要であることに注意してください。 「セカンドステージブートローダー」に少し似ています。しかし、実際には、bootx64.efiは単にカーネルスペースを分割し、ccoskrnl画像読み込みに適した物理メモリスペースを検索するだけです。次に、CCLDRはカーネルスペースを仮想アドレススペースの高いアドレスにマッピングし、GDTを設定します(X86アーキテクチャの重要な構造であるグローバル記述子テーブル)。
マルチプロセッサ
マルチプロセッサのサポートは、私にとって大きな挑戦です。マルチプロセッサシステムの適切な実装を保証するものではありません。今のところ、CCOは他のアプリケーションプロセッサを正しくアクティブにすることができます。他のオペレーティングシステムのデモとは異なり、CCOSはアプリケーションプロセッサの初期化ルーチンを分離バイナリファイルに配置し、物理メモリの最初の1 MIBにロードし、メモリスペースのページテーブルを個別に構築します。実行中のアプリケーションプロセッサの前に、CCOはバイナリプログラムの相対的なアドレスの引用を修正します。私は認めなければなりません、これは愚かなデザインです。
APIC
APIC(Advanced Programmable Inturtion Controller)は、最新のコンピューターシステムの重要なコンポーネントです。マルチプロセッサシステムの可能性を提供し、ハードウェアレベルでマルチレベル割り込み優先度をサポートします。残念ながら、APICは複雑です。 APICにはコンピューターシステムの健全な知識が必要であることを完全に理解するには、APICの基本的なドライバーのみを実装しています。
TrueType
CCOSは、TrueTypeフォントのレンダリングを介して画面上に文字を表示します(CCOSのデフォルトフォントはAdobe Source Han Sans SC VFです)。 TrueTypeレンダリングを使用して文字を出力する価値はありません。早期のOSの開発の場合、ビットマップフォントを使用することが、文字出力のより推奨される方法です。
おそらく、キャラクターをアウトラインとして保存することの最大のことは、そのキャラクターOSのすべてのサイズを生成するために必要な文字ごとに1つのアウトラインだけが必要であることです。単一のアウトラインは、さまざまなサイズの膨大な範囲にスケーリングできますが、その一部を以下に示します。これにより、同じキャラクターをさまざまな解像度のモニターに表示し、多数の異なるサイズで印刷できます。キャラクターのアウトラインをスケーリングすることは、実際に回転や反射などの他の変換と同様に、単純な数学的操作です。
TrueTypeの構造は複雑で、TrueTypeをほのめくことなくフォントラスター化装置のみを実装しました。ヒントはTrueTypeの中心にあります。その発明者は、ヒントタイプへの「正しい」方法に関する意見の多様性に留意し、タイプ開発者に課す単一のヒントパラダイムがないと判断しました。代わりに、彼らは比較的単純なラスターザーを新しい解釈プログラミング言語にリンクしました。ただし、フォントの読みやすさの場合、これで十分です。
これらはここでのカルティカルイッサスです。これは、CCOのテキスト出力の事前形成が非常にプールであるということです。悪いパフォーマンスは、CCOのランニングを深刻に遅くします。フォント描画は比較的複雑なプロセスであるため、機能を最適化する方法がわかりません。別の方法は、ビットマップフォントを使用してTrueTypeフォントを使用することです。
ワイドチャー
CCOSは、すべての文字を保存するために、2つの文字タイプ「Char」と「WCH_T」(ワイドチャー、4バイト)を提供します。文字タイプに関係なく、CCOは常にWCH_Tを最初に変換し、次に幅の広い文字列を出力します。実際、CCOSのTrueTypeパーサーは、「Unicode 2.0および以降のセマンティクス」のみを使用します。これは、プラットフォームID = 0で、CMAPでID = 3をエンコードします(CMAP - Glyphインデックスマッピングテーブル、TrueTypeのストルチュール)。したがって、Unicode Basic Multiingual Plane文字(U+0000からU+FFFF)のみをサポートします。
メモリマネージャー
メモリ管理のデザインのアイデアは、PFNデータベース、ルックサイド、ページディレクトリセルフマッピングスキーム、ラミネートメモリプール管理などを含むWindow NTに触発されていますが、すべてではありません。
マルチウィンドウによるグラフィック出力
CCOSはマルチウィンドウをサポートしています。つまり、画面上の異なるウィンドウにテキストを出力できます。各プロセッサにテキスト出力ウィンドウを開くことで、マルチプロセッサをデバッグすることはできます。マウスドライバーがいなくても、ユーザーはキーボードを使用して、文字を入力する必要があるウィンドウを選択することもできます。
バグ修正:スピンロックを追加して、複数のウィンドウの出力の競合を防ぐ
メモリリーク検出を備えた動的メモリマネージャー
システムPTE管理
PCIE管理
NVMEドライバー
キーボードドライバー(緊急ではない)
2ギブラム以上のQemu
カーネルスペースがfayouralbe RAMの4分の1のみを使用するように、メモリスペースを大まかに分割するだけです。しかし、QEMUにHigher RAM(2 GIBを超える)を割り当てようとすると、getMemoryMap()ルーチンが誤ったメモリマップ情報を返したことに気付く必要があります。私は他のOVMFファームウェアを試していないので、そのようなエラーは私のOVMFに由来するかもしれません。
AVX命令セットを備えたX86_64 CPU(IntelまたはAMD)
Intel 64とAMD64の間には、X86_64アーキテクチャプログラミングにわずかな違いがあります。 AMD CPUに基づいてCCOを開発していますが、Intel®64およびIA-32 Architecturesソフトウェア開発者のマニュアルをX86_64 ArchiteChureリファレンスマニュアルとして使用しています。ただし、今のところ、CPUベンダーが何であれ。
インストールについては、CCOSKRNLビルドを参照してください
数学ライブラリ(Refribs/libm.a)は@estrellaによって提供されました
ライセンスなし。
電子メール:[email protected]
Chengcheng OS:https://github.com/ccoskrnl/ccoskrnl
Intel®64およびIA-32アーキテクチャソフトウェア開発者のマニュアル
AMD64アーキテクチャプログラマーズマニュアルボリューム2:システムプログラミング
Cプログラミング言語
Osdev wiki
ACPI仕様
UEFI仕様