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

本文深入探讨了进程管理的核心概念,包括寄存器的作用、进程切换的机制、fork和exec系统调用的执行流程,以及进程状态的变化。特别关注了僵尸进程的产生与清理,以及父进程如何通过wait系统调用释放子进程的资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

恢复至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时,进程可能被阻塞!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值