2019-02-01から1ヶ月間の記事一覧

rustのIteratorの実装

関連するトレイト Iterator libcore/iter/traits/itetarot.rs pub trait Iterator { type Item; fn next(&mut self) -> Option<Self::Item>; ... } イテレータの関数のためのトレイト next()さえ実装すれば,あとはデフォルト定義が存在 IntoIterator libcore/iter/trait</self::item>…

rustのArcについてその2

前回 以下で利用したplaygroundのリンク スライスからのArcの作成 Arcのソースをみていて気づきましたが,impl<T: Clone> From<&[T]> for Arc<[T]>などが実装されており,CopyあるいはCloneが実装されているスライスからArcを作成することができます.(RCも同様です)</t:>…

rustのMutexの内部構造

前回に引き続き,今度はMutexの話です. Raph Levien氏の図を引用すると,Mutexは以下のような構造になっています. Raph Levien, Copyright 2017 Google Inc., released under Creative Commons BY また,データ構造としては以下のように定義されています(…

rustのArcの内部構造

rustのスマートポインタの構成については,Raph Levien氏の以下の図が参考になります. Rust container cheat sheet 今回はここで特にArcについて見ていきたいと思います. Arcは以下のように定義されています(一部抜粋). pub struct Arc<T: ?Sized> { ptr: NonNull<ArcInner<T>></arcinner<t></t:>…

QEMU/KVM上のゲストのハイパーコールをQEMU側に渡す方法

前回説明したように,KVMでは,ゲストのハイパーコール(Intel CPUの場合はVMCALL命令,AMDの場合はVMMCALL命令)はKVM側で処理され,ioctl側に戻ることなくゲストに戻ります. QEMU/KVMにおいて,独自にハイパーコールを追加してQEMU側で処理するには修正が…

QEMUコードリーディングメモ

主にイベントループとKVM周り. QEMU v3.1.0 Linux v4.20 ターゲット: x86 QEMU Main Loop QEMUの主処理はGLibを使ったイベントループ. ゲストのvCPUは別のスレッドで実行(後述) vl.c:main() => vl.c:main_loop() => util/main-loop.c:main_loop_wait() =…