进程的基本概念及操作

1.进程的基本概念

进程是一个具有一定独立功能程序的一次运行活动

特点:动态性、并发性、独立性、异步性。
进程三态:
就绪态、执行态、阻塞态。
进程创建后,首先属于就绪态。
就绪态的进程经过调度程序的调度会占领CPU,这个时候就是执行态
进程ID
在同一时刻,在一个CPU上只有一个进程
如果要访问串口,串口上没有数据,就会进入阻塞态。
进程ID(PID):标示进程的唯一数字
父进程的ID(PPID)
启动进程的用户ID(UID)

进程互斥:资源不允许多个进程同时对它访问,两个进程同时要去访问,就会互斥。在同一时刻只允许一个进程对它访问的资源叫临界资源,访问临界资源的那段代码称为临界区。
进程的同步:一组并发进程按照一定的顺序执行的过程叫做进程的同步。A进程必须先运行,运行完了之后B进程才能接着去运行,类似于生产和消费的关系。
进程的调度:可能有几千个就绪的程序,但是只能有一个进程去执行。
分为抢占式调度和非抢占式调度。
假设有AB两个进程,A正在运行,B突然就绪了,B的优先级比较高。B就会打断A优先运行,这就是抢占式调度。如果B不能打断A,那么就是非抢占式调度。
调度算法:
先来先服务:A先就绪,紧接着B就绪,C就绪,D目前占用CPU,D运行结束后先运行A,接着运行B,最后运行C。
短进程优先调度算法:ABC依次就绪,A需要10s,B需要5S,C需要1s,因为C运行时间最短,所以C先执行。
高优先级优先调度算法:Linux中优先级高的数字小,windows优先级高的数字大。
时间片轮转算法:A需要10s,B需要5s,C需要1s,cpu会依次执行1s,每个进程运行1s后由下个进程接力运行。

死锁:由于多个进程抢占一个资源,谁也不愿意退出,无外力作用将无法继续执行下去。
2.进程的创建
进程创建:
pid_t fork(void)
功能:创建子进程
fork的奇妙之处在于,它被调用一次,却能返回两次,它可能有三种不同的返回值。
在父进程中fork返回创建子进程的ID;
在子进程中fork返回0;
如果出现错误,fork返回一个负值;
子进程和父进程共用下面的一段代码,但是两个的数据段是各自用的。
vfork也可以创建一个子进程。
与fork的区别主要是以下两个方面:
1.fork:子进程拷贝父进程的数据段,但是这个数据段是独立的。
  vfork:子进程共享父进程的数据段。
2.fork:父、子进程执行的顺序不确定
  vfork:子进程先运行,父进程后运行
exec:用被执行的程序替换调 用它的程序 。fork会创建一个新的pid,exec启动一个新的程序,替换原有的进程,进程的pid不会改变。
exec函数族:
include <unistd.h>
int execl(const char *path,const char *arg1,...);
参数:path被执行程序(含有完整路径名);
arg1-argn被执行程序所需的命令行参数,含程序名,以空指针结束。
include <unistd.h>
int execlp(const char *path,const char *arg1,...);
参数:path被执行程序(不含有路径名);从path环境变量中查找;
arg1-argn被执行程序所需的命令行参数,含程序名,以空指针结束。
include <unistd.h>
int execlv(const char*path,char *const argv[]);argv[]是一个字符串数组。
argv[]被执行程序所需命令行参数的字符串数组。
include <unistd.h>
int system(const char*string);
调用fork产生子进程,由子进程来调用/bin/sh -c string来执行参数string的命令。
include <sys/types.h>
include <sys/wait.h>
pid_t wait(int *status);
功能:阻塞该进程,直到某个其子进程退出。



















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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值