1.当操作系统一边输入,一边输出时。显然,在打印输出时,CPU必须等待,为了使CPU更好地工作,就出现了线程调度
2.所以就要把进程切出去,就要跳转,跳转去执行后要返回到程序执行,所以就需要栈。
3.使用一个栈,在连个程序段之间切换时,出现了混乱,为了解决混乱,所以引入了两个栈。
4.使用两个栈,就实现了yiled切换到另外一段程序,再在另外一段程序切换回来。
5.一直用户态执行,切换,是不够的!想要切换内核态,怎么办呢?
6.所以就引入了内核态的切换 。
用户态切换至内核栈,内核栈中TCB1切换,就切换TCB2,就切换到内核栈2,再切换到用户栈2,于是就切换了两个核心态的切换。
7.如何在操作系统界面打出A,B呢?
如下:
8.fork是如何操作的呢?
100行的res,是完成 int 0x80 的返回值
9.那么int 0x80是如何操作的呢?
10.执行sys_call_table,就要执行sys_fork,执行sys_process
11.copy_process 做什么?
创建一个PCB,把当前的PCB保存,等待切换。
12.执行完copy_process
ret 返回到cmpl $0,state(current)
接下来就进行调度。
要怎样切换进程B呢?
时钟中断!!A进程到了时间后,把寄存器等数据拍下来,保存在A的PCB中,把B的PCB取出来恢复寄存器状态。同样B也是通过时钟中断,通过切换,在屏幕中输出A和B。
L13 操作系统的这棵树
最新推荐文章于 2022-07-14 10:55:28 发布