RustでOSを作るときに便利そうな情報(まとめ中)
はじめに
OSを自作するにあたって、C言語でできてたけどRustでどーやるの?系の情報を載せていきたい。
大本にしている情報が消えてしまうこともありそうなので
部分的に引用してくる。
構造体のメモリレイアウト系
Rustの構造体メモリレイアウト | ryocheck.blog
からコードを引用
要約すると
struct S{
int32:i32,
int16:i16,
int8:i8,
uint32:u32
}
この構造体があった時
- デフォルト
メモリ上ではパディングを入れつつ、最小限の大きさに構造体のメンバを詰めていって最適化する。 - repr(C)
メンバの順番はメモリ上でもそのままでパディングを入れていく(C言語から触るときそのまま触れて便利) - repr(packed)
パディングを入れないでとにかく詰めていく(pragma pack(1)と同じ感じ)
特定のポインタを任意の型のスライスとして扱う
Function core::slice::from_raw_parts
メモリ管理機能を作るときに、そもそも管理してないメモリに対してmallocとかできないから自力で手動mallocする必要がある。
例えば、UEFIの場合はメモリマップをとって、任意の空き部分に管理領域(配列やリンクリストの構造体の集合)を割り当てるとかしたい。
要約
use core::slice;
struct Sample{
hoge:u32,
fuga:u16,
}
let ptr = 0x1234 as *const Sample; // 何型?
let amt = 10; // 個数
// Sample構造体の要素10個のスライスができる。
let slice = unsafe{ slice::from_raw_parts(ptr, amt) };
メモリ管理(ページメモリアロケータ・デアロケータ)
自分で作ってみたもの。詳細は↓
はりぼてOSのメモリアロケータのRust移植+改良版
GitHubはこちら
使い方は上記の記事に記載しているのでそちらを。
参考・引用元
Rustの構造体メモリレイアウト | ryocheck.blog
Function core::slice::from_raw_parts
Author And Source
この問題について(RustでOSを作るときに便利そうな情報(まとめ中)), 我々は、より多くの情報をここで見つけました https://qiita.com/segfo/items/65e37c59e396262056ec著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .