xen的4.***之後,引入了tasklet的概念,以下以xen-4.10為具體例子,分析xen如何進入idle domain的:
raise_softirq(schedule_softirq)
schedule(void)
| // 注意,如果next是idle domain的話,原來的sched timer是不被set的...壞了...
context_switch(prev, next); // 這裡的next是idle domain
schedule_tail(next);
continue_idle_domain(next)
reset_stack_and_jump(idle_loop);
void idle_loop(void)
}tasklet不是新東西,這個概念在linux裡面很早就已經出現。
下面看看在xen4中,以credit scheduler為背景,看看tasklet的行為被如何定義 (tasklet.h, tasklet.c).
在credit scheduler中,tasklet被賦予最高的優先順序。只要有tasklet任務,其他的vcpu都不會被schedule。任務必須在domain中執行,而tasklet就寄生在idle domain中。當有tasklet出現時,實際上是通過臨時性的將idle domain的優先順序提到最高,然後使tasklet寄託於idle domain來執行。
void do_tasklet(void)
{... ...
spin_lock_irq(&tasklet_lock);
spin_unlock_irq(&tasklet_lock);
要關中斷的...汗...
Xen的idle domain到底在幹啥
xen的4.之後,引入了tasklet的概念,以下以xen 4.10為具體例子,分析xen如何進入idle domain的 raise softirq schedule softirq schedule void 注意,如果next是idle domain的話,原來的sched timer是不被se...
Xen的裝置驅動
半虛擬化guest os無論如何都需要修改才能執行,因此,虛擬化環境必須使用guest os系統現有驅動要求就不存在了,然而讓客戶作業系統開發人員編寫大量 同樣也不是乙個很好的設計方案,因此xen的方式是提供抽象裝置,抽象裝置實現了針對特定裝置類的高階介面,如xen提供了抽象的塊裝置,而不是提供sc...
Xen的記憶體空間
32位pae模式x86架構下,xen占用了最頂部的64mb的線性位址空間。分布如下 ioremap virt end 0 ioremap virt start ffc00000 directmap virt end ffc00000 directmap virt start ff000000 map...