Submit Search
Upload
RustでHypervisor.frameworkを触ってみた 〜DOSを動かしてみた〜
•
0 likes
•
17 views
S
Satoshi Moriai
Follow
RustでHypervisor.frameworkを触ってみた
Read less
Read more
Software
Report
Share
Report
Share
1 of 10
Download now
Download to read offline
Recommended
くみこみからひとこと
くみこみからひとこと
kishima7
第1回Hadoop関西勉強会参加レポート
第1回Hadoop関西勉強会参加レポート
You&I
OS development beginner with breadboard version 20161126
OS development beginner with breadboard version 20161126
Langur
20150228_渋谷Webエンジニア朝会LT資料
20150228_渋谷Webエンジニア朝会LT資料
慎平 仁藤
コミュニティのある風景
コミュニティのある風景
Ryunosuke SATO
WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3
mganeko
Sprocketsを捨てたい
Sprocketsを捨てたい
Masato Noguchi
J-AMS 勉強会 その1(AWS)
J-AMS 勉強会 その1(AWS)
Hiroyuki Kiyomizu
Recommended
くみこみからひとこと
くみこみからひとこと
kishima7
第1回Hadoop関西勉強会参加レポート
第1回Hadoop関西勉強会参加レポート
You&I
OS development beginner with breadboard version 20161126
OS development beginner with breadboard version 20161126
Langur
20150228_渋谷Webエンジニア朝会LT資料
20150228_渋谷Webエンジニア朝会LT資料
慎平 仁藤
コミュニティのある風景
コミュニティのある風景
Ryunosuke SATO
WebRTC mediasoup on raspberrypi3
WebRTC mediasoup on raspberrypi3
mganeko
Sprocketsを捨てたい
Sprocketsを捨てたい
Masato Noguchi
J-AMS 勉強会 その1(AWS)
J-AMS 勉強会 その1(AWS)
Hiroyuki Kiyomizu
XamarinStudio勉強会 2014/09/08
XamarinStudio勉強会 2014/09/08
孝文 田村
Osc2008 Opensuse Moonlinx
Osc2008 Opensuse Moonlinx
Kazuhisa Hara
Macで快適にプログラミング
Macで快適にプログラミング
Yusuke Sakurai
サブドメイン前提のチーム機能開発で踏んだ OAuthの罠の話 in express
サブドメイン前提のチーム機能開発で踏んだ OAuthの罠の話 in express
Takahiro YAMAGUCHI
Makeblockでキミだけの最強ロボットをつくろう!
Makeblockでキミだけの最強ロボットをつくろう!
nmrmsys
Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編
Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編
Yoshito Tabuchi
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
Tetsuo Yamabe
Status Board 面白いよ!
Status Board 面白いよ!
Hishikawa Takuro
Mrubyの始め方
Mrubyの始め方
Masaki Muranaka
Parse.comからの脱出
Parse.comからの脱出
Muta Yutaro
Dockerプレゼン
Dockerプレゼン
よしだ あつし
ロボットシステム学2015年第5回
ロボットシステム学2015年第5回
Ryuichi Ueda
私とOSSの25年
私とOSSの25年
MITSUNARI Shigeo
Using LXC on Production
Using LXC on Production
Isao Shimizu
190731 chalice
190731 chalice
Takuya Nishimoto
minneで学ぶクラウド脳
minneで学ぶクラウド脳
Uchio Kondo
Making Editor written in Ruby version 20160611
Making Editor written in Ruby version 20160611
Langur
WordBench Kagawa番外編「いちばんやわらかいconcrete5のはなし」
WordBench Kagawa番外編「いちばんやわらかいconcrete5のはなし」
Tetsuo Kawakami
コンテナ技術と普及がシステム・インテグレータに与える影響
コンテナ技術と普及がシステム・インテグレータに与える影響
Masahito Zembutsu
murakumo クラウドコントローラ
murakumo クラウドコントローラ
Shingo Kawano
More Related Content
Similar to RustでHypervisor.frameworkを触ってみた 〜DOSを動かしてみた〜
XamarinStudio勉強会 2014/09/08
XamarinStudio勉強会 2014/09/08
孝文 田村
Osc2008 Opensuse Moonlinx
Osc2008 Opensuse Moonlinx
Kazuhisa Hara
Macで快適にプログラミング
Macで快適にプログラミング
Yusuke Sakurai
サブドメイン前提のチーム機能開発で踏んだ OAuthの罠の話 in express
サブドメイン前提のチーム機能開発で踏んだ OAuthの罠の話 in express
Takahiro YAMAGUCHI
Makeblockでキミだけの最強ロボットをつくろう!
Makeblockでキミだけの最強ロボットをつくろう!
nmrmsys
Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編
Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編
Yoshito Tabuchi
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
Tetsuo Yamabe
Status Board 面白いよ!
Status Board 面白いよ!
Hishikawa Takuro
Mrubyの始め方
Mrubyの始め方
Masaki Muranaka
Parse.comからの脱出
Parse.comからの脱出
Muta Yutaro
Dockerプレゼン
Dockerプレゼン
よしだ あつし
ロボットシステム学2015年第5回
ロボットシステム学2015年第5回
Ryuichi Ueda
私とOSSの25年
私とOSSの25年
MITSUNARI Shigeo
Using LXC on Production
Using LXC on Production
Isao Shimizu
190731 chalice
190731 chalice
Takuya Nishimoto
minneで学ぶクラウド脳
minneで学ぶクラウド脳
Uchio Kondo
Making Editor written in Ruby version 20160611
Making Editor written in Ruby version 20160611
Langur
WordBench Kagawa番外編「いちばんやわらかいconcrete5のはなし」
WordBench Kagawa番外編「いちばんやわらかいconcrete5のはなし」
Tetsuo Kawakami
コンテナ技術と普及がシステム・インテグレータに与える影響
コンテナ技術と普及がシステム・インテグレータに与える影響
Masahito Zembutsu
murakumo クラウドコントローラ
murakumo クラウドコントローラ
Shingo Kawano
Similar to RustでHypervisor.frameworkを触ってみた 〜DOSを動かしてみた〜
(20)
XamarinStudio勉強会 2014/09/08
XamarinStudio勉強会 2014/09/08
Osc2008 Opensuse Moonlinx
Osc2008 Opensuse Moonlinx
Macで快適にプログラミング
Macで快適にプログラミング
サブドメイン前提のチーム機能開発で踏んだ OAuthの罠の話 in express
サブドメイン前提のチーム機能開発で踏んだ OAuthの罠の話 in express
Makeblockでキミだけの最強ロボットをつくろう!
Makeblockでキミだけの最強ロボットをつくろう!
Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編
Xamarin 概要 @ 2014/11/08 第2回 Japan Xamarin User Group Conference 西日本編
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
Status Board 面白いよ!
Status Board 面白いよ!
Mrubyの始め方
Mrubyの始め方
Parse.comからの脱出
Parse.comからの脱出
Dockerプレゼン
Dockerプレゼン
ロボットシステム学2015年第5回
ロボットシステム学2015年第5回
私とOSSの25年
私とOSSの25年
Using LXC on Production
Using LXC on Production
190731 chalice
190731 chalice
minneで学ぶクラウド脳
minneで学ぶクラウド脳
Making Editor written in Ruby version 20160611
Making Editor written in Ruby version 20160611
WordBench Kagawa番外編「いちばんやわらかいconcrete5のはなし」
WordBench Kagawa番外編「いちばんやわらかいconcrete5のはなし」
コンテナ技術と普及がシステム・インテグレータに与える影響
コンテナ技術と普及がシステム・インテグレータに与える影響
murakumo クラウドコントローラ
murakumo クラウドコントローラ
RustでHypervisor.frameworkを触ってみた 〜DOSを動かしてみた〜
1.
Rust で Hypervisor.framework
を 触ってみた 〜 DOS を動かしてみた 〜 2020/1/27 Rust LT #8 @moriai19
2.
自己紹介 • 盛合 敏(Satoshi
Moriai / Shiisaa Moriai) • https://github.com/moriai • https://twitter.com/moriai19 • 昔は OS(Mach / Real-Time Mach, Linux)や 分散システムの開発をしていた • 今は … • 趣味で Rust や Swift と戯れる
3.
やってみたいこと • Rust や最新技術で分散型
OS の開発が少しは楽になるかも • Mach を C で開発するのは大変だった • インターフェースが矛盾したコードでもビルドでき、 デバッグに無駄な労力を費やした • フルビルドは時間かかりすぎ、インクリメンタルビルドは 不完全 • macOS が好きなので、もっと弄んでみたい
4.
ということで、 Rust で macOS
の Hypervisor framework を 触ってみることにした
5.
macOS Hypervisor framework
とは Virtual Memory Threads Mach AppleHV.kext hv_task_trap() hv_thread_trap() VMX Driver Hypervisor Virtualized XXX (仮想マシン、仮想OSなど) ユーザプロセス (ユーザタスク) Rust crate xhypervisor crate hypervisor もあるが メンテされてない模様 Apple から提供される API は C, Swift macOS kernel (Darwin) ・・・ BSD • 仮想化のための軽量なハイパバイザフレームワーク • Intel VMX をユーザプロセスから簡単に利用できる • カーネルエクステンション AppleHV への橋渡しをする Hypervisor.framework
6.
ハイパバイザをプログラムしてみる
7.
fn main() ->
Result<(),Error> { create_vm()?; let mut mem = vec![0u8; MEMSIZE]; map_mem(&mem, 0, &perm)?; let handle = thread::spawn(|| { // VCPUが複数なら、その数のスレッドを起動 let vcpu = vCPU::new()?; VCPUの設定; メモリ上にプログラムやデータを配置; レジスタの設定; loop { vcpu.run(); // VMENTER → VCPUの実行 → VMEXIT match vcpu.read_vmcs(VMCS_RO_EXIT_REASON)? { vmx_exit::VMX_REASON_EXC_NMI => 例外やNMIの処理, vmx_exit::VMX_REASON_HLT => break, ... } } vcpu.destroy()?; }); handle.join()?; unmap_mem(0, MEMSIZE)?; destroy_vm()?; }
8.
DOSを動かしてみる • C++ DOS
エミュレータ(https://github.com/mist64/hvdos.git)を利用 • ハイパバイザと同じ空間で動作 • DOSシステムコール(INT xxH, AH=yy)相当を Unix システムコールで実装 • DOS 2.x システムコール 87 個のうち 29 個を実装(オリジナルに3個追加) • ハイパバイザ(Rust) • VCPU を 16bit リアルモード用に設定し、DOS プログラムをメモリに貼り付け、IP と SP を設定して、vcpu.run() • INT が発生 → VMEXIT → 割り込み番号を取り出し、ラッパー経由でDOS エミュレー タを呼び出す
9.
DOSプログラムが動きました • ネット上で見つけたバイナリが動きました • HELLO.COM •
MORE.COM • COMP.COM • PKUNZJR.COM
10.
• ソースコードは github
で公開 • https://github.com/moriai/hvdos.rs.git • 次回は 64bit OS & 完全 Rust 化にトライ? おわりに
Download now