一、定义
(1)进程是程序的一次执行过程
(2)进程是程序及其数据在处理机制上顺序执行时所发生的活动
(3)进程是具有独立功能的程序在数据集合上运行的过程,它是系统进行资源分配和调度的基本单位
二、PCB
1. 概念
进程=PCB+程序(程序段+数据段),PCB是进程存在的唯一标志。创建进程就是创建PCB,撤销进程就是撤销PCB。
系统为每个运行的程序(一个指令序列)配置一个数据结构,称为进程控制块(PCB),用来描述进程的各种信息(如程序代码存放的位置)
描述进程:PCB(将进程的信息用一个结构体存储起来,这个结构体相当于一个结点)
组织进程:用双向链表将PCB连接起来。在数据结构里面,一般的数据结构都会用到结构体,而PCB也是一个数据结构,所以这里用到struct,在Linux下PCB是task_struct的结构体。在别的平台下,存放PCB信息的可能是别的struct
2. 操作系统通过PCB来管理进程,因此PCB中应该包括操作系统对其进行管理所需的各种信息,Linux下task_struct结构体内容有:
(1)标识符:(进程ID)用来唯一标识该进程,区别其他进程
(2)状态:每个进程都有自己的状态,还有退出码、退出信号等
(3)优先级:相对于其他进程的优先级,标识CPU资源分配的先后顺序
(4)程序计数器:程序中下一条被执行指令的地址
(5)内存指针:内存代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
(6)上下文数据:进程执行过程中寄存器中的数据
(7)I/O状态信息:I/O请求,分配的I/O设备等
(8)其他信息
三、进程标识
每一个进程都有一个非负整型的表示的唯一的进程ID,常将其用来作其他标识符的一部分保证其唯一性,虽然是唯一的,但是进程ID是可复用的,当一个进程终止后,其进程ID就成为复用的候选者,ID为0的进程通常是调度进程,也被称为交换进程和系统进程,ID为1的进程通常是 init 进程,在某些 UNIX 的虚拟存储器中,进程ID2是页面守护进程,该进程是负责支持虚拟存储系统的。
除了进程ID,进程还有一些其他标识符,来看一下下列函数返回的标识符
getpid | 调用进程的进程ID |
getppid | 调用进程的父进程ID |
getuid | 调用进程的实际用户ID |
geteuid | 调用进程的有效用户ID |
getgid | 调用进程的实际组ID |
getegid | 调用进程的有效组ID |
四、进程三种基本状态
运行态:占有CPU,在CPU上运行
就绪态:已经具备运行条件,但是没有空闲CPU,暂时不能运行
阻塞态:因等待某一件事而暂时不能运行
另外两种状态:
创建态:进程正在被创建,操作系统为进程分配资源、初始化PCB
终止态:进程正在从系统中撤销,操作系统会回收进程拥有的资源、撤销PCB
五、查看进程(ps命令)
常见的选项:
a:显示当前终端下的所有进程信息,包括其他用户的进程。
u:使用以用户为主的格式输出进程信息。
x:显示当前用户在所有终端下的进程。
-e:显示系统内的所有进程信息。
-l:使用长(long)格式显示进程信息。
-f:使用完整的(full)格式显示进程信息。
需要注意的是,有一部分选项是不带“-”前缀的(添加“-”前缀后含义可能会有出入)。习惯上将上述选项组合在一起使用,如,“ps aux”或“ps -elf”
六、CPU调度算法 (在就绪序列中怎么挑选进程让CPU执行)
1. 基本概念
- 周转时间: 从开始申请执行任务,到执行任务完成
- 响应时间: 从开始申请执行任务到开始执行任务
2. 调度算法
- 先来先服务调度算法FCFS:按作业或者进程到达的先后顺序依次调度;(平均周转时间可能会很长 )
- 短作业优先调度算法SJF:算法从就绪队列中选择估计时间最短的作业进行处理,直到得出结果或者无法继续执行(周转时间短,但是响应时间长 )
- 高相应比算法HRN:响应比=(等待时间+要求服务时间)/要求服务时间;
- 时间片轮转调度RR:按到达的先后对进程放入队列中,然后给队首进程分配CPU时间片,时间片用完之后计时器发出中断,暂停当前进程并将其放到队列尾部,循环 ;(响应时间可以得到保证)
- 多级反馈队列调度算法:目前公认较好的调度算法;设置多个就绪队列并为每个队列设置不同的优先级,第一个队列优先级最高,其余依次递减。优先级越高的队列分配的时间片越短,进程到达之后按FCFS放入第一个队列,如果调度执行后没有完成,那么放到第二个队列尾部等待调度,如果第二次调度仍然没有完成,放入第三队列尾部…。只有当前一个队列为空的时候才会去调度下一个队列的进程。