L13操作系统之树(过程)
发布日期:2021-07-01 02:21:00 浏览次数:2 分类:技术文章

本文共 777 字,大约阅读时间需要 2 分钟。

在这里插入图片描述

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

转载地址:https://mapengsen.blog.csdn.net/article/details/105927357 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:操作系统中的一些基本概念
下一篇:内核模块编程之入门(二)—必备知识

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月11日 19时11分56秒