私は実験として C 言語とアセンブリで簡単な小さなおもちゃの OS を開発していますが、システム メモリに関する知識が不足しているため、自分自身を心配し始めています。
カーネルをコンパイルし、Bochs (GRUB によってロード) で実行して、「Hello, world!」と出力することができました。今、私は簡単なメモリ マネージャーを作成しようとしています。
メモリ管理に関するリソースをいくつか見つけましたが、実際には十分なコードがありませんでした (概念は理解していましたが、実際に実装する方法を知ることができませんでした)。
多かれ少なかれ複雑な戦略をいくつか試した後、変更が必要になるまで、途方もなく単純な戦略 (メモリにオフセットを保持し、割り当てられたオブジェクトのサイズだけ増加させるだけ) に落ち着きました。断片化の制御、保護などはまだありません。
そのため、より堅牢なマネージャーが必要な場合に、どこでより多くの情報を見つけることができるかを知りたい. また、ページング、セグメンテーション、およびその他の関連事項についても学びたいと思います。ページングについては今のところまったく扱っていませんが、OS の開発現場でよく言われているので、そのうち対応しなければならないと思います。
また、メモリ マネージャーによって実際の場所にリダイレクトされるポインターをアプリケーションが保持する、何らかの形式の間接ポインターについても読みました。それは私にとってはかなり先のことだと思いますが、仮想メモリやデフラグを試してみたいと思った場合は重要なようです.
また、メモリオフセットをどこに置くべきですか? 最適な場所がどこなのかわからなかったので、ランダムに選んだだけで0x1000
、後でカーネルなどを上書きしたときに戻ってくると確信しています。
また、パフォーマンスに関して何を期待すべきか (割り当てと解放の Big-O 値など) と、実際に管理されているメモリに対するメモリ管理構造の妥当な比率を知りたいです。
もちろん、これらの質問のサブセットだけに自由に答えてください。どんなフィードバックでも大歓迎です!