6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

はりぼてOSのメモリアロケータのRust移植+改良版

Last updated at Posted at 2018-08-15

Rust+UEFIでOS作りたいので、はりぼてOSのメモリアロケータをRustに移植できないかなーと思ってやってみた。(あるものを流用した方が楽だよね。)
双方向線形リスト化するなどの改良が入ってるけど本質は同じもの。
このGitHubに上げてます。

ざっくりとした使い方はこんな感じ

    // インスタンスを生成する
    let mut manager = PageMemoryManager::new();
    
    unsafe{
        // UEFIのメモリマップとかから、情報をもらって
        // メモリ管理モジュールにメモリの空き情報を登録する
        manager.free_page_frames(memtranse(0x10000,0x1000));
        manager.free_page_frames(memtranse(0x14000,0x2000));
        manager.free_page_frames(memtranse(0x13000,0x1000));
        // 使う。領域は1ページの倍数で降ってくる。
        let mem1=manager.get_page_frames(0x2000).unwrap();
        let mem2=manager.get_page_frames(0x1000).unwrap();
        let mem3=manager.get_page_frames(0x1000).unwrap();

        println!("{:?}  pages:{}",mem1.memory(),mem1.pages());
        println!("{:?}  pages:{}",mem2.memory(),mem2.pages());
        println!("{:?}  pages:{}",mem3.memory(),mem3.pages());
    }

アロケートできなければpanicする。便利だなぁ。
C言語だったらifが確実に入って読みにくいコードになってた気がする。

Rustほんと便利なのでベアメタル環境とかで積極的に使われていくべきなんだよなぁ

きょうはここまで。

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?