1 ,进程:一个具有一定独立功能的程序的一次运行活动
进程是一个正在执行的实例;
2,进程ID:
每个进程都有一个ID(正整数),唯一标识系统的进程;
每个进程都有一个创建他的进程,叫父进程;
进程 ID(PID)
父进程ID(PPID)
启动进程的用户ID(UID)
getpid()头文件:
#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void);
pid_t getppid(void);
示例:输出子进程和父进程ID
int main()
{
printf("子进程ID :%d\n",getpid());
printf("父进程ID :%d\n",getppid());
return 0;
}
3,子进程有其父进程,父进程也有其父进程,那最原始的进程是 init 进程!
所有进程的祖先都是init 进程,其PID为 1 .可以用 pstree 命令查看关系;
下面是关系图一部分:
init─┬─/usr/bin/sealer
├─VGAuthService
├─acpid
├─atd
├─auditd─┬─python
│ └─{auditd}
├─automount───4*[{automount}]
├─avahi-daemon───avahi-daemon
├─bonobo-activati───{bonobo-activati}
├─bt-applet
├─clock-applet
├─crond
├─cupsd
4,当一个进程的父进程在其之前终止,此时进程变为孤儿时,次进程会被init 进程所领养。
5,进程的生命周期
创建:每个进程都有其父进程创建
运行:多个进程可以同时运行,进程之间可以进行通信
终止:结束一个进程的运行
6,进程的特点:
动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的
并发性:任何进程都可以同其他进程一起并发执行
独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位
异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进
结构特征:进程由程序、数据和进程控制块三部分组成.
7,进程互斥:
当有若干个进程都要使用某一共享资源时,任何时候最多允许一个进程使用,其他使用该资源的进程必须等待,直到占用该资源者释放了该资源
临界资源:
操作系统中一次只允许一个进程访问的资源称为临界资源
8,临界区:
进程中访问临界资源的那段代码区称为临界区,为实现对临界资源的互斥访问,应保证各进程互斥的进入各自的临界区
9,进程调度:
先来先服务调度算法:按先后顺序启动进程
最短作业有限调度:选取执行时间最短的进程运行,难点是执行时间的测量,有时候可以通过历史数据来预测或者用提交进程时输入执行时间上限作为依据。
基于优先级调度:每个进程都关联一个优先级,内核将CPU分配给最高优先级的进程
循环调度:内核从ready队列中选取第一个进程将CPU分配给他,并且设计一个计时器在一个时间后终断该进程
10,进程死锁:
多个进程因竞争资源而形成的一种僵局