Hatena::ブログ(Diary)

へにゃぺんて@日々勉強のまとめ

2015-10-31

メモリ管理を追加しました

タスク管理を追加しました - へにゃぺんて@日々勉強のまとめ

こちらの記事からの続きで、OS作りについての記事です。

今回は見た目の差分は無いので、いつものGIFアニメは無いです。


ついに、メモリ管理機能を追加しました。


ソースコード

いつもどおり、以下のGitHubからダウンロードできます。

ビルド方法、使い方なども上記のURL先を参照してください。


また、今回の記事時点のタグを"blog-20151031"という名前で追加しました。

GitHub上でのURLは以下のとおりです。


追加したメモリ管理機能について

今回追加したメモリ管理機能は、MMUを使用したページングの機能です。


ページングとは、メモリをページという単位(たいてい4KBで、今回の実装でも4KB)で分割して管理する仕組みで、

ページングを使用する際に、各ページには仮想アドレスというアドレスでアクセスします。


MMUはMemory Management Unitの略で、仮想アドレスを物理アドレスに変換する、CPUが持つ機能です。


今回は仮想アドレスのアドレス空間上で

アプリケーション用のメモリ空間(ユーザ空間)を0x2000 0000からと決めてました。

そして、すべてのアプリケーションを仮想アドレス上では同じアドレス空間で動作するようにすることで、

アプリケーション間でのメモリ保護を実現しています。


ただし、特権管理をまだ実装しておらず、

カーネルアプリケーションも常に最高の特権レベルで動作しているため、

アプリケーションからカーネル空間のメモリにはアクセスできてしまいます。。


感想

まだまだそれぞれの機能としては未熟なところもありますが、

「時間管理」・「タスク管理」・「メモリ管理」を実装できたので、

カーネル」と呼べるものは実装できたのかな、と思います。

Hand Craft MasterHand Craft Master 2015/11/09 22:16 応援しています。頑張ってください!

cupnescupnes 2015/11/10 08:00 いつもありがとうございます
楽しみながら、がんばっていきます!

skyblueskyblue 2016/02/22 20:22 0x9fc00以降はacpiに対応するのなら、使わない方がいい。
きちんとメモリマップを取得すること

cupnescupnes 2016/02/25 00:15 ご指摘ありがとうございます。
確かに、考え無しで好きな場所を好きなように使ってしまっているので、
他にも何かの機能を潰してしまっているかもしれないですね。

ブートローダーでメモリマップを取得する機能は、
今後追加しようと思います。

そして、カーネル動作時のメモリマップについても、
現在が完成形とは考えていませんので、
必要に応じて変えていこうかと思います。

コメントありがとうございます。
勉強になりました。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証