xv6的设计trick(不断更新)

Posted Joker_88

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xv6的设计trick(不断更新)相关的知识,希望对你有一定的参考价值。

1、每个进程通过时钟中断出发trap.c中的

if(proc && proc->state == RUNNING && tf->trapno == T_IRQ0+IRQ_TIMER)
yield();来强制把这个进程置为Runnable状态,yield的实现如下:

acquire(&ptable.lock); //DOC: yieldlock
proc->state = RUNNABLE;
sched();
release(&ptable.lock);

在sched中

swtch(&proc->context, cpu->scheduler); 实现从当前进程的kernel Stack 切换到 CPU中专门负责程序调度的 scheduler Stack,

(gdb) p /x *cpus[0]->scheduler 
$7 = {edi = 0x0, esi = 0x80104ea4, ebx = 0x8, ebp = 0x8010c608, 
eip = 0x80104ab2}

此时,我们在 sched设置断点

(gdb)b proc.c:314

(gdb)s  进入汇编代码

在swtch的汇编代码中,我们将当前进程的esp所指向的内存地址+8 作为新的上下文的esp,然后保存老寄存值,popl加载新的寄存器的值

swtch:

   movl 

以上是关于xv6的设计trick(不断更新)的主要内容,如果未能解决你的问题,请参考以下文章

计算机经典书籍 收藏,不断更新.....

[trick]梯度累加

[trick]梯度累加

MacOS更新,设计愈加扁平

技术积累软件设计模式第一版

可更新顺序记录的数据库设计