Xen中Credit排程演算法分析
阿新 • • 發佈:2019-02-13
schedule函式 -排程核心
task_slice,排程器通過返回一個這樣的結構來確定下一個排程執行的虛擬機器
struct task_slice{
struct vcpu *task;
s_time_t time;
}
static void shcedule(void){
struct vcpu *prev=current;
...
next_slice=ops.do_schedule(now);//諮詢排程器得到下一個需要排程的VM;
r_time=next_slice.time;
next=next_slice.task;
...
set_timer;
context_switch(prev,next);
set_current(next);
...
__context_switch();
...
schedule_tail(next);//完成切換
}
static void __context_switch(void){
struct cpu_user_regs *stack_regs=guest_cpu_user_regs();
//儲存現場
//恢復現場
}
schedule_tail 函式完成最後的切換,HVM下是vmx_do_resume或svm_do_resume都要呼叫reset_stack_and_jump
task_slice,排程器通過返回一個這樣的結構來確定下一個排程執行的虛擬機器
struct task_slice{
struct vcpu *task;
s_time_t time;
}
static void shcedule(void){
struct vcpu *prev=current;
...
next_slice=ops.do_schedule(now);//諮詢排程器得到下一個需要排程的VM;
r_time=next_slice.time;
next=next_slice.task;
...
set_timer;
context_switch(prev,next);
set_current(next);
...
__context_switch();
...
schedule_tail(next);//完成切換
}
static void __context_switch(void){
struct cpu_user_regs *stack_regs=guest_cpu_user_regs();
//儲存現場
//恢復現場
}
schedule_tail 函式完成最後的切換,HVM下是vmx_do_resume或svm_do_resume都要呼叫reset_stack_and_jump