(4)操作系统--进程撤销与创建

进程的创建

建立PCB
分配存储空间
加载程序
入就绪链

在Unix系统中:
pid = fork()创建一个子进程(父进程的复制品)
execl(prog, args)加载并执行一个新的程序

进程的撤销

去配资源
撤销PCB
通知父进程

在Unix系统中:
exit() vs.kill
进入操作系统判断结束

除初始进程外,其他进程都由父进程创建,并形成了进程家族

Unix

pid = fork()
创建子进程,子进程是父进程的复制品,子进程与父进程并发执行
返回值:pid
子进程返回0,父进程返回子进程的编号

execl(prog, args)加载并执行一个新的程序,覆盖原来的程序
prog: 执行的程序
args:程序执行的参数,最后以0结束

exit(status) :进程自我结束
进程自我结束,通知父进程,唤醒父进程
系统做善后处理:收回存储程序,撤销PCB
status:子进程结束时的状态

pid = wait(&status)
如果没有结束子进程,父进程等待,有结束的子进程,直接返回
参数status为子进程exit(status)的参数子进程结束时的状态,返回值是终止子进程的编号

fork() 创建子进程
PCB分为两个数据结构,一个是proc结构,包含着常用信息,常驻内存,一个是user结构,可以随进程进入外存
在这里插入图片描述
执行到fork(),将父进程复制到子进程中,但是p_pid(进程编号)&&p_ppid(父进程编号)需要改变
在这里插入图片描述
程序代码理解:
首先PCB包含两部分内容,一部分是proc结构,另一部分是user结构proc结果常驻在内存中,包含着进程id,父进程id等信息。
然后执行pid = fork() 创建一个新的子进程,将父进程中的信息复制到子进程中,父进程pid返回不是0执行父进程代码,子进程pid是0 执行子进程代码
子进程执行父进程中原来有的execl(“P”,0)程序为P,无参数,需要有参数结尾标志0,然后P程序覆盖掉原来的程序,执行完毕后有exit(status),父进程(根据情况)wait(&s),子进程结束,返回值为子进程编号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值