Rustで書かれた低レイヤOSS

Rustで書かれたOS、VMM、Bootloaderについて調べた。 OS Tock ARM Cortex-M、、STM32、RISC-Vで動く組み込みOS 論文も出てる Multiprogramming a 64kB Computer Safely and Efficiently Redox x86-64で動くUNIX系のマイクロカーネルOS エディタ、GUI、ビルドツールもRustで書かれている intermezzOS 教育用OS VMM crosvm Chromium OSに搭載されているLinux sandbox VM Firecracker KVMを使用してmicroVMを起動できる crosvmをベースに開発した Bootloader oreboot corebootのRust移植

2020-04-29 Wed ·     "Masahiro Hiramori"

Rustの所有権、借用、ライフタイムについて雑に理解した

最近、Rustプログラミング言語に入門した。Rustの公式ページには、Rustの特徴として信頼性について記載されている。本記事では、Rustが保証するメモリ安全性とスレッド安全性を実現する、所有権システムについて雑に理解したので説明する。 所有権システム Rustは、コンパイル時にメモリ安全性に関するバグをコンパイルエラーとして開発者に教えてくれる。所有権システムは、メモリ安全性に関するバグをRustコンパイラが発見するための仕組み。所有権システムは、次の3つの概念で構成されている。 所有権 借用 ライフタイム 所有権 変数束縛において、Rustでは所有権という特性を持つ。変数は、束縛している値の「所有権」を持つ。Rustの値は、所有権を持つ変数がスコープから外れると、その値のリソースは開放される。 例えば以下の例では、内側の{}に入ると、新しい値Vec<T>が作成され、変数barが値を束縛する。変数barのスコープは内側の{}の間のため、{}の前でも後でも使えない。内側の{}を抜けると、変数barのスコープが終了し、値Vec<T>のリソースが開放(デストラクタdrop()が呼ばれる)される。 fn foo() { // barは使えない { let bar = vec![1, 2, 3]; println!("bar.0 = {}", bar.0); } // Vec<T>のリソースが開放される // barは使えない } ムーブとコピー 次のコードを実行すると期待通りの実行結果が得られる。 fn main() { let x = 1; let y = x; println!("x = {}, y = {}", x, y); // => x = 1, y = 1 } 一方、次のコードではコンパイルエラーが発生する。 fn main() { let x = String::from("hello"); let y = x; println!...

2020-04-15 Wed ·     "Masahiro Hiramori"