2.进程的特点

1.进程是程序运行的抽象

我们所写的代码仅是个存储在硬盘的静态文件,当这个文件通过预处理,编译,汇编,链接,变成可执行文件,被存放在内存上,当我们运行这个文件时,这个程序得到CPU的处理,就变成了一个进程

 2.进程是资源分配的最小单位

系统为了方便管理,在每创建一个进程时,系统都会给它分配一个0-4G的虚拟内存空间,其中0-3G属于用户空间,3-4属于内核空间(用于进程间通信)

 3.进程拥有独立的地址空间

1.每个进程的地址空间都是相互独立的,一个进程的消亡不会影响到其他进程,所以说进程是一种安全的的多任务机制

2.因为每创建一个进程,系统就会分配给进程一个4G的虚拟内存空间,所以说进程在创建的时候开销比较大

3.其次进程在进程切换时的开销比较大,相对于线程而言进程在切换过程中需要保存用户空间的虚拟内存,栈,全局变量,而且要保存内核空间的堆栈,寄存器等所以说进程的切换开销比较大

4.进程的状态

在用户空间进程主要分为三种状态,执行态,就绪态,阻塞态

1.执行态:当一个进程在CPU上正在运行时,成为执行态

2.就绪态:进程所有就绪条件都已经准备好,只差CPU的执行,成为就绪态

3.阻塞态:进程因为等待某一事件的到来,而暂时停止运行,这时及时将CPU分配给进程也                    无法运行,该状态称之为阻塞态

 5.进程的调度方式

1.先到先服务

2.时间片轮转

3.短进程优先

4.高优先级优先

 6.进程的同步和互斥

进程是并发执行的,不同进程之间存在着不同的相互制约关系,所谓进程同步,主要是解决临界资源互斥访问的问题,如多个进程访问同一片共享内存,这片共享内存必须互斥访问

临界资源:一次只允许一个进程访问的资源称之为临界资源

7.进程的创建

1.fork : 当执行到这句指令时,系统会创建一个子进程,并且将父进程的代码,数据,堆栈资源拷贝到子进程,并且子进程和父进程的先后顺序是不确定的

2.vfork : 使用vfork创建的子进程首先是共享父进程的资源,当有一方对数据进行修改,子进程才会开辟新的空间,实现了一种写时复制的效果,并且子进程先执行父进程后执行

3.exec/system: 在一个进程中执行另一个进程

 8.进程的退出

1.正常退出:return 0

2.异常退出:exit   _exit

exit是库函数对_exit系统调用的封装,exit在退出时会刷新缓冲区,_exit不会刷新

 9.僵尸进程与孤儿进程

在进程执行过程中,可能会遇到僵尸进程和孤儿进程

僵尸进程:是指子进程退出之后,父进程还在执行,没有及时回收子进程的资源,这时子进程称为僵尸进程,以为子进程的资源得不到及时释放,会产生危害

我们如何去避免僵尸进程

(1)通过信号机制,在处理函数中调用wait回收资源

(2)通过fork两次将子进程变为孤儿进程,从而使父进程变为init进程,让init进程回收资源

(3)调用wait waitpid,让父进程等待子进程退出,使父进程挂起,没有起到多进程的作用,同时浪费资源

孤儿进程:是指父进程已经退出,子进程还在执行,这时子进程的回收交给init进程处理,默认init进程为父进程

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李 同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值