一、进程的基本概念
1. 多道程序设计
允许多个程序同时进入内存并运行,其目的是为了提高系统效率。
2. 并发环境
一段时间间隔内,单处理器上有两个或者两个以上的程序同时处于开始运行但尚未结束的状态,并且次序不是事先确定的。
并发程序指的就是在并发环境中执行的程序。
3.进程的定义(Process)————对CPU的抽象
进程是具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的独立单位。又称为任务(Task or Job)
特点:
- 程序的一次执行过程
- 是正在运行程序的抽象
- 将一个CPU变幻成多个虚拟的CPU
- 系统资源是以进程为单位分配的,如内存、文件、。。。
- 每个具有独立的地址空间
- 操作系统将CPU调度给需要的进程
- PCB:Process Control Block 又称为 进程描述符、进程属性
- 是操作系统用于管理控制进程的一个专门的数据结构
- 记录进程的各种属性,描述进程的动态变化过程
PCB是系统感知进程存在的唯一标志:进程与PCB是一一对应的
进程表: 所有进程的PCB集合
PCB所包含的信息
- 进程描述信息
- 进程标识符(Process ID),唯一。通常是一个整数
- 进程名。通常基于可执行文件名,不唯一
- 用户标识符(user ID)
- 集成组关系
- 进程控制信息
- 当前的状态
- 优先级(priority)
- 代码执行入口地址
- 程序的磁盘地址
- 运行统计信息(执行时间,页面调度)
- 进程间同步和通信
- 进程的队列指针
- 进程的信息队列指针
- 作拥有的资源和使用情况
- 虚拟地址空间状况
- 打开文件列表
- CPU现场信息
- 寄存器值(通用寄存器、程序计数器PC、程序状态字PSW、栈指针)
- 指向该进程页表的指针
5.进程状态及状态转换(三、五、七)
5.1进程的三种基本状态: 运行态, 就绪态, 等待态
运行态(Running)
占有CPU,并在CPU上运行
就绪态(Ready)
已经具备运行条件,但由于没有空闲CPU,而暂时不能运行
等待态(Waiting/Blocked)又称为: 阻塞态、封锁态、睡眠态
因等待某一时间而暂时不能运行(例如:等待读盘结果)
三状态模型及状态转换
5.2进程的其他状态
创建态(New)
已经完成创建一进程所必需的工作——PID/PCB;但尚未同意执行该文件——因为资源有限
终止态(Terminated)
终止执行后,进程进去该状态;可完成一些数据统计工作;资源回收
挂起态(Suspend)
用于调节负载;进程不占用内存空间,其进程映像交换到磁盘上
五状态进程模型
七状态模型
linux状态示意图
5.3 进程队列
- 操作系统为每一类进程建立一个或者多个队列
- 队列元素为PCB
- 伴随进程状态的改变,其PCB从一个队列进去另一个队列
注意: 多个等待队列表示等待的事件不同
就绪队列也可以有多个
但COU情况下,运行的队列中只有一个进程
5.4 五状态进程模型的队列模型
6. 进程的控制
6.1 进程控制
进程控制操作完成进程各状态之间的转换,由具有特定功能的原语完成。
原语(primitive) : 挖煤成交额美好某种特定功能的一段程序,具有不可分割性和不可中断性。即原语的执行必须是连续的,在执行过程中不允许被中断。
例如: 进程创建原语;进程撤消原语;阻塞、唤醒原语等
6.2 进程的创建
主要实现的工作:
- 给新进程分配一个唯一标识以及进程控制块
- 为进程分配地址空间
- 初始化控制块
- 设置默认值(例如:状态为New,。。。)
- 设置相应的队列指针
- 把新景程加到就绪队列链表中
UNIX: frok/exec
WINDOWS: CreateProcess
6.3 进程的撤销
主要实现的工作:
- 收回进程所占用的资源
- 关闭打开的文件、断开网络链接、回收分配的内存
- 撤销该进程的PCB
不同操作系统中主要的创建进程操作
UNIX: exit
WINDOWS: TerminateProcess
6.4 进程阻塞
处于运行状态的进程,在其运行过程中期待某一事件的发生,如等待键盘的输入、等待磁盘数据传输完成、等待其他进程发送信息,当被等待的时间未发生时,由进程自己执行阻塞原语,使自己的运行状态变为阻塞态。
不同操作系统中主要的创建进程操作
UNIX: wait
WINDOWS: WaitForSingleObject
6.5 UNIX的几个进程控制操作
- fork() 通过复制调用进程来建立新的进程,是最基本的进程建立过程
- exec() 包括一系列系统调用,它们都是通过用一段新的程序代码覆盖原来的地址空间,实现进程执行代码的转换
- wait() 提供初级进程同步操作,能使一个进程等待另一个进程的结束
- exit() 用来终止一个进程的运行
6.6 进程的深入在学习
1. 进程的分类
- 系统进程;用户进程
- 前台进程;后台进程
- CPU密集型进程;I/O密集型进程
UNIX:进程家族树;int 为根
WINDOWS:地位相同
3. 进程和程序的区别
- 进程能够更准确刻画并发,而程序不能
- 程序是静态的,进程是动态的
- 进程有生命周期的,有诞生有消亡,是短暂的;而程序相对长久的
- 一个程序可以对应多个进程
- 进程具有创建其他进程的功能
操作系统为每一个进程都分配了一个地址空间
5. 进程映像(IMAGE)
对进程执行活动全过程的静态描述
由进程地址空间内容、硬件寄存器内容以及与该进程相关的内核数据结构、内核栈组成
- 和用户相关的: 进程地址控件(包括代码段、数据段、堆和栈、共享库、。。。)
- 和寄存器相关的: 程序计数器、指令寄存器、程序状态寄存器、栈指针、通用寄存器等的值
- 和内核相关的: 动态部分内核栈(不同进程在进入内核后使用不同的内核栈)
- 静态部分:PCB及各种资源数据结构
- 动态部分:内核栈(不同进程在进入内核后使用不同的内核栈)
- 静态部分:PCB及各种资源数据结构
- 将CPU硬件状态从一个进程换到另一个进程的过程称为上下文切换
- 进程运行时,其硬件状态保存在CPU的寄存器中(程序计数器、程序状态寄存器、栈指针、通用寄存器、其他控制寄存器的值)
- 进程不运行时,这些寄存器的值保存到进程控制块PCB中;当操作系统要运行一个新的进程时,将PCB中的相关值送到对应的寄存器中