Linux的多任务多进程

一、多任务

多任务并不是一起执行,只是因为所有程序都在获取执行权,CPU处理速度很快,看上去是在进行多任务

二、进程

(一)、进程是一个具有一定独立功能的程序的一次运行活动,同时也是资源分配的最小单元
相关术语:
1、资源:一般指内存    2、CPU时间片:比如给5秒的时间处理一个事件    3、进程控制块:保存进程的启动信息
Linux命令行下查看所有进程:ps -a
(二)、进程状态
执行状态:正在占用CPU
就绪状态:进程已经具备一切条件,正在等待分配CPU的处理时间片
等待状态:进程不能使用CPU,若等待事件发生则可将其唤醒

图释:


(三)、进程特点:
1、并行性    2、互不干扰    3、开销大(缺点)
(四)、Linux进程结构
1、数据段:存放全局标量、常数
2、代码段:存放的为程序代码和数据
3、堆栈段:子程序的返回值,子程序的参数,程序的局部变量
(四)、进程互斥
当有若干个进程都要使用某一共享资源时,任何时刻最多允许一个进程使用,所以需要进程同步,且并发进程需要按顺序执行。
(五)、临界资源
同意时刻只允许一个进程访问的资源,进程中访问临界资源的那段程序代码称为临界区
(六)、进程调度
1、方式:1>抢占式    2>非抢占式
2、死锁:多个进程因竞争资源而形成一种僵局,若无外力作用这些进程,这些进程都将永远无法获取资源,不能再前进。
(七)、创建进程
1、fork
头文件:#include <unistd.h>    #include <sys/tyeps.h>
pid_t fork(void);
执行过程:
1>给子进程分配空间
2>将父进程的数据段、堆栈段拷贝到子进程
3>将父进程的代码段共享给子进程
4>给父进程的PID返回一个大于0的数,给子进程的PID返回等于0的数,错误返回-1
所以fork产生的子进程只共享代码段,不共享堆栈段,数据段,所以父子进程之间互不影响
2、vfork
pid_t vfork(void);
只有当子进程执行之后,父进程才可执行,且共享数据段和堆栈段
vfork在执行完子进程之后应该加exit(1),因为其共享数据段,不加exit(1)异常退出,其数据会被子进程释放,父进程无法执行
3、exec函数族
exec函数族启动一个新程序,替换原有的进程,但不产生新的PID
具体见数p225(不常用)
4、system
可以在一个程序中执行另一个进程,等该程序执行完毕再执行接下来的进程,例如:system("./hello");
(八)、僵尸进程
子进程的资源一定是由父进程交还给系统,如果父进程先于子进程退出,则会出现僵尸进程,可以在父进程中调用wait(NULL);将父进程挂起,等子进程结束再释放

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值