来自:http://www.cnblogs.com/wmx-learn/p/5302502.html。
这里介绍进程相关的基础概念!
一、进程
进程和程序的区别:
- 所谓进程,通俗的讲是一个具有独立功能的程序的一次运行活动。相比于进程而言,程序是静态的,如放在磁盘上的程序;而进程是动态的,必须是运行起来的。
进程特点:
- 动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡;
- 并发性:任何进程都可以同其他进程一起并发执行;
- 独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;
- 异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进
- 结构特征:进程由程序、数据和进程控制块三部分组成.
二、进程状态图(经典三态,内核七态)
- 在操作系统原理中,一个完整的进程都不可或缺的拥有以下三态:就绪态,执行态,阻塞态。
- 进程执行过程:
- 进程一旦创建起来之后,首先进入的状态是就绪态,然后通过进程调度来占有CPU进入执行态,注:假如只有一个CPU,则同一时刻只有一个进程能够占有CPU。进程在运行过程当中若要进行I/O请求,如访问网卡、串口(从串口读取数据,此时串口没有数据可读)等时,则进程会进入阻塞态,等串口有数据并将数据读完(I/O完成),进程又会跳回就绪态。整个过程为进程的基本流程。
三、进程ID
- 进程ID(PID):
- 标识进程的唯一数字;
- 父进程的ID(PPID):
- 启动进程的用户ID(UID):
四、进程互斥
- 进程互斥是指当有若干进程都要使用某一资源时,但该资源在同一时刻最多允许一个进程使用,这时其他进程必须等待,直到占用该资源者释放了该资源为止。
五、临界资源
- 操作系统中将同一时刻只允许一个进程访问的资源称为临界资源。
六、临界区
- 进程中访问临界资源的那段程序代码称为临界区。为实现对临界资源的互斥访问,应保证诸进程互斥地进入各自的临界区。
七、进程同步
- 一组进程按一定的顺序执行的过程称为进程间的同步,具有同步关系的这组进程称为合作进程,最为有名的是生产者和消费者进程。
八、进程调度
按一定算法,从一组待运行的进程中选出一个来占有CPU运行。
- 调度算法:
- 在操作系统中,常见的调度算法有:
- 1.先来先服务;
- 2.短进程优先调度;
- 3.高优先级优先调度;
- 4.时间片轮转法。
- 在操作系统中,常见的调度算法有:
九、按调度时机调度可分为:
-
- 抢占式调度:高优先级的进程会抢占处理器,让正在处理的进程处于就绪队列。
- 非抢占式调度:当就绪队列中某进程的最高优先级高于正在处理器中运行的进程的最高优先级时,并不会让正在运行的进程退出处理器,而是将高优先数的排在就绪队列的首部。
十一、进程死锁:
多个进程因竞争资源而形成一种僵局,导致这些进程都无法继续往前执行。
- 进程死锁示意图(实线为已占有资源,虚线为待占有资源)
十二、函数getpid
getpid()用来取得目前进程的进程识别码,许多程序利用取到的此值来建立临时文件,以避免临时文件相同带来的问题。
函数原型:pid_t getpid(void)
函数作用:返回调用该函数的进程的PID
所属头文件:《sys/types.h》 《unistd.h》
函数参数:无
函数返回值:调用该函数的进程的ID
#include <time.h>
#include <sys/types.h>
#include <unistd.h>
main(){
int td = 0 ;
td = getpid() ;
printf("the pid is : %d \n",td) ;
}