メモリ管理を追加しました
タスク管理を追加しました - へにゃぺんて@日々勉強のまとめ
こちらの記事からの続きで、OS作りについての記事です。
今回は見た目の差分は無いので、いつものGIFアニメは無いです。
ついに、メモリ管理機能を追加しました。
ソースコード
いつもどおり、以下のGitHubからダウンロードできます。
ビルド方法、使い方なども上記のURL先を参照してください。
また、今回の記事時点のタグを"blog-20151031"という名前で追加しました。
GitHub上でのURLは以下のとおりです。
追加したメモリ管理機能について
今回追加したメモリ管理機能は、MMUを使用したページングの機能です。
ページングとは、メモリをページという単位(たいてい4KBで、今回の実装でも4KB)で分割して管理する仕組みで、
ページングを使用する際に、各ページには仮想アドレスというアドレスでアクセスします。
MMUはMemory Management Unitの略で、仮想アドレスを物理アドレスに変換する、CPUが持つ機能です。
今回は仮想アドレスのアドレス空間上で
アプリケーション用のメモリ空間(ユーザ空間)を0x2000 0000からと決めてました。
そして、すべてのアプリケーションを仮想アドレス上では同じアドレス空間で動作するようにすることで、
アプリケーション間でのメモリ保護を実現しています。
ただし、特権管理をまだ実装しておらず、
カーネルもアプリケーションも常に最高の特権レベルで動作しているため、
アプリケーションからカーネル空間のメモリにはアクセスできてしまいます。。
感想
まだまだそれぞれの機能としては未熟なところもありますが、
「時間管理」・「タスク管理」・「メモリ管理」を実装できたので、
「カーネル」と呼べるものは実装できたのかな、と思います。