L13操作系统之树(过程)
PC置初值,不断的取指执行
边烧水边去洗衣服
从而造成程序切换:跳转(用栈)
用户栈 内核栈 TCB1 TCB2
TCB切换完成后内核栈切换
再用户栈切换
交替的在屏幕打出A B(linux0.01):进程的切换
fork就是系统调用执行的就是int 0x80
jne 208 :
父进程返回就要进行调度了(schedule)
因为创建了打出A的进程,那么还需要进行打出B,则又一次int 0x80
wait() 父进程进入阻塞态,调用schedule
他的核心结构就是:一个进程产生出两个子进程(打出A,打出B),子进程的TCB分别贴好,分别是打A和B的函数,父进程进入阻塞态,调用schedule
schedule选择一个进程阻塞(A),选择完了就可以切换回去(switch to)
发现TSS可以完成任务的切换:CPU的寄存器拍在照片里保存在TSS中,用下一个TSS的内容扣在CPU上
A的TSS扣给CPU,把CPU的内容拍照拍给当前进程(current)的TCB里
拍下来-》扣过来
当前eip等于100,从4行继续往下执行,eax返回的0那么就是返回的A
现在屏幕出现A
需要调度点,
当前在用户态打A,怎么才能打B?调度B 则需 schedule ,那么久要进入内核? 考的是中断,时钟中断
2初始化时钟中断。
每到一个进程时,就让当前进程的counter-1,剪刀0时,调用schedule
有那么一次时钟中断。counter刚好等于0,A的时间片用完了。就不再执行
调用schedule,进行switch to,switch to找到B,从B的TSS取出内容,发现eip=300,Bj就开始执行了
完成了切换,怎么切?把当前CPU的东西放给A进程的PCB的TSS
再把B的TSS东西赋给CPU
此时取出的地址是300,执行300,,打出B