1. 进程与程序的区别
- 程序是放到磁盘的可执行文件,程序是静态的
- 进程是指程序执行的实例,进程是动态的
2. 进程的概念
进程是一个具有一定独立功能的程序的一次运行活动。
进程是正在执行的一个程序或命令,每个进程都是一个运行的实体。每个进程都有自己的地址空间和执行状态,并占用一定的系统资源。
程序的概念:程序是人使用计算机语言编写的可以实现特定目标或解决特定问题的代码集合。
每个进程都有一个ID,唯一标识了系统中的这个进程,叫做进程ID(PID)。
某些进程会产生一些新的进程,这些新的进程称作子进程,产生这些进程的进程叫做父进程。
操作系统运行时的第一个进程时init进程,其PID=1
当父进程在子进程之前结束,则该子进程会变成孤儿进程,其父进程号会变成1,即变成init进程的子进程。编程时要尽量避免这种情况发生。
3. 进程的特点
动态性: 进程的实质是程序的一次执行过程,进程是动态产生、动态消亡的。
并发性: 任何进程都可以同其他进程一起并发执行。
独立性: 进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位。
异步性: 由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进
**结构特性:**进程由程序、数据和进程控制块三部分组成。
4. 进程互斥
进程互斥是指当有若干进程都要使用某一共享资源时,任何时候最多允许一个进程使用,其他要使用该资源的进程必须等待,直到占用该资源者释放了该资源为止。
例如当前操作系统中只有一个串口设备,那么这个串口设备就是系统的共享资源,且是临界资源。当进程A需要使用串口发送数据,就会占用这个临界资源,同时给这个资源进行上锁的操作。此时进程B需要使用串口时,由于进程A占用了该资源,因此进程B需要阻塞等待进程A使用完串口后解锁资源。
临界资源: 操作系统中将一次只允许一个进程访问的资源称为临界资源。
临界区: 进程中访问临界资源的那段程序代码称为临界区。
5. 进程同步
一组并发进程按一定的顺序执行的过程称为进程间的同步。
具有同步关系的一组并发进程称为合作进程,合作进程间互相发送的信号称为消息或事件。
6. 进程调度
概念:按一定的算法,从一组待运行的进程中选出一个来占有CPU运行。
调度方式有抢占式和非抢占式。
- 先来先服务调度算法(FCFS)
- 最短作业优先调度(SJF)
- 基于优先级调度(PS)
- 循环调度(RR)或时间片轮转
7. 进程死锁
多个进程因竞争资源而形成一种僵局,若无外力作用,这些进程都将永远不能再向前推进。
8. 进程的启动
启动进程有两种途径:人为启动和调度启动。
人为启动进程指由用户输入命令直接启动一个进程,可以分为前台启动和后台启动。
前台启动:当用户在终端输入一个命令并运行,就启动了一个前台进程。
后台启动:在命令结尾处添加一个" &
"符号(空格隔开),输入命令并运行后shell会输出一个进程的PID。
调度启动: 在 Linux 系统中,任务可以被配置在指定的时间、日期或者系统平均负载量低于指定值时自动启动。
9. 进程的优先级
在 Linux 系统中,表示进程优先级的有两个参数: Priority
和 Nice
命令ps -le
列出的PRI
代表 Priority,NI
代表 Nice。这两个值都表示优先级,数值越小代表该进程越优先被 CPU 处理。
不过,PRI
值是由内核动态调整的,用户不能直接修改,只能通过修改 NI 值来影响 PRI
值,间接地调整进程优先级。
PRI 和 NI 的关系如下:PRI (最终值) = PRI (原始值) + NI
因此,修改 NI 的值就可以改变进程的优先级,NI 值越小,进程的 PRI 就会降低,该进程就越优先被 CPU 处理
修改 NI 的注意事项:
- NI 范围是 -20~19。
- 普通用户调整 NI 值的范围是 0~19,而且只能调整自己的进程。
- 普通用户只能调高 NI 值,而不能降低。如原本 NI 值为 0,则只能调整为大于 0。
- 只有 root 用户才能设定进程 NI 值为负值,而且可以调整任何用户的进程。