上下文切换及进程控制(创建、加载、执行、等待和终止)

寄存器:程序计数器、栈指针(调用关系以及相应局部变量的所在位置)等,进程切换后,将信息存储入进程控制块

上下文切换及进程控制(创建、加载、执行、等待和终止)

恢复至CPU

上下文切换及进程控制(创建、加载、执行、等待和终止)

僵尸队列

上下文切换及进程控制(创建、加载、执行、等待和终止)

上下文切换及进程控制(创建、加载、执行、等待和终止)

上下文切换及进程控制(创建、加载、执行、等待和终止)

上下文切换及进程控制(创建、加载、执行、等待和终止)

上下文切换及进程控制(创建、加载、执行、等待和终止)

上下文切换及进程控制(创建、加载、执行、等待和终止)

fork是一个完全的复制,怎么执行的呢?想一想进程的定义!

上下文切换及进程控制(创建、加载、执行、等待和终止)

上下文切换及进程控制(创建、加载、执行、等待和终止)

exec之后:

上下文切换及进程控制(创建、加载、执行、等待和终止)

在一个3次循环中,fork出不止8个!

上下文切换及进程控制(创建、加载、执行、等待和终止)

进程的创建顺序

上下文切换及进程控制(创建、加载、执行、等待和终止)

卧槽,好多

copy_memory\copy_thread

上下文切换及进程控制(创建、加载、执行、等待和终止)

空闲进程:放置于就绪队列中,优先级最低的进程,当没有进程在执行时,就执行空闲进程

创建内核线程与创建用户态进程,最终都落到do_fork函数上

用户态进程的初始化之前,需要先创建一个内核线程

上下文切换及进程控制(创建、加载、执行、等待和终止)

fork()的实现开销,复制父进程的地址空间、内存和它的寄存器状态(??进程的地址空间与内存,一实际,一虚拟么??)

上下文切换及进程控制(创建、加载、执行、等待和终止)

现在都支持写时复制技术,因此可以节约开销!

上下文切换及进程控制(创建、加载、执行、等待和终止)

???写exec后面那个printf的意义:如果执行到这句话了,说明exec执行出现了问题,若exec执行无问题,printf应该无问题

wait(等子进程)

上下文切换及进程控制(创建、加载、执行、等待和终止)

上下文切换及进程控制(创建、加载、执行、等待和终止)

看!这个变化!

所执行的代码已经发生了变化!

上下文切换及进程控制(创建、加载、执行、等待和终止)

上下文切换及进程控制(创建、加载、执行、等待和终止)

在地址空间中的变化

上下文切换及进程控制(创建、加载、执行、等待和终止)

实际只负责了页表,写操作时,触发异常,做出不同的页/读操作则不需要如此麻烦

等待和终止进程:

父进程要等待子进程的结束

PCB是代表进程存在的唯一标识

用户态的资源,操作系统可以帮忙释放掉,但内核态的资源比如PCB是难以释放的,因此由父进程帮忙释放

上下文切换及进程控制(创建、加载、执行、等待和终止)

wait为了配合子进程的exit(),进而实现释放子进程所有资源的目标

exit()执行完毕,但wait()尚未执行完毕,这样的一个状态被称作僵尸态,即将死未死的状态,等着被回收(被父进程),不是就绪、等待与执行。

父进程先于子进程死亡的话?

上下文切换及进程控制(创建、加载、执行、等待和终止)

上下文切换及进程控制(创建、加载、执行、等待和终止)

执行excute,进程可能在不同的状态!

执行exec时,进程可能被阻塞!

 

 

相关文章: