一、进程概念
- 进程是执行中的程序
- 在单核系统中,1个CPU在一个时间点,只能执行1个进程,因此不可能出现“并行”,只能是“并发”
- 进程是资源分配和调度的基本独立单位。
- 进程和程序的区别
(1)进程是一个动态概念,程序是一个静态概念; (2)进程有生命周期,有诞生有消亡,短暂的;而程序是相对长久的。 (3)进程具有并发性,而程序没有; (4)进程是竞争计算机系统资源的基本单位,其并发性受到系统本身的制约; (5)不同的进程可以包含同一程序,只要程序所对应的数据集不同。
进程的内容 :程序代码(文本段)+程序计数器+堆栈段+数据 进程=程序+数据集
-
进程具体内容
-
堆栈段:临时数据 如函数参数 返回地址和局部变量
-
数据段:全局变量
二、进程状态
- 就绪(ready):所有资源都有,只是缺少CPU的调度
- 运行(running):资源满足+CPU临幸
- 等待(waiting):缺少某个事件或者某个资源。例如:他想要调用打印机,但是打印机目前属于别的进程,没有分配给它。
- 重点:因为CPU的时间是分片的,所以在运行的这个进程在这个时间片内,当这个时间片结束了,中断就会发出。即使你没做完,不好意思,新的时间片并不属于你,请回到就绪队列等待下一次调度。
- 不可能出现的状态转换
- 就绪->等待(进程占有了资源以后不可能主动释放的)
- 等待->运行
6. 各个状态次数区间
就绪【1,∞) 运行【1,∞) 等待【0,∞)
7.单个系统 N个进程 处于各状态进程
就绪【0,N-1】 运行【0,1】 等待【0,N】 <可能会出现死锁的状态>
8.K个CPU N个进程 处于各状态进程
就绪【0,N-K】 运行【0,K】 等待【0,N】 <可能会出现死锁的状态>
三、进程控制块
- 每个进程在操作系统内用进程控制块(PCB)来表示
- 每个进程的控制块PCB要占据一定的内存
- 系统中允许并发执行的进程数是有限的
- PCB用来保存程序运行期间的重要信息
- 进程存在的唯一标识
- 记录了OS所需的用于描述进程及控制进程所需的全部信息
5.PCB内容
进程状态
程序计数器(进程要执行的下一个指令地址)
CPU寄存器
CPU调度信息
内存管理信息
记账信息
I/O状态信息
6.CPU在进程间的切换
- 当CPU切换到另一个进程的时候,系统需要保存老进程的状态,并且加载新进程的状态,这一任务称为上下文切换。
- 上下文切换的时间是系统的额外开销,切换时系统不做任何有用的工作。
四、调度程序
-
长期调度(作业调度):选择一个进程进入内存的就绪队列。
-
短期调度(CPU调度):从就绪队列中选择一个进程,并为之分配CPU
3.2 进程操作
一、进程创建
-
进程在执行过程中 ,能通过创建进程系统调用创建多个新进程。创建进程称为父进程,新进程称为子进程。
-
父进程创建子进程,子进程继续创建,从而形成一棵进程树。
- 当进程创建子进程时,有两种执行可能:
- (1)父子进程并发执行。
- (2)父进程等待,直到某个或者全部子进程执行完。
4.新进程的地址空间也有两种可能
- (1)子进程是父进程的复制品(具有与父进程相同的程序和数据)
- (2)子进程装入另一个新程序
注意点
- 父子进程任何一个修改了自己的全局或者局部变量都不影响对方进程。
- 父子进程PCBID以及他们在内存中的位置不同。
二、创建子进程代码
- 通过Fork()系统调用,可创建子进程。
- 进程都继续执行位于系统调用fork()后的指令。
- 对于子进程,系统调用fork()返回值为0,而对于父进程,返回值为子进程的进程标识符(非零)。
- 在代码中,pid=fork();子进程 pid=0 父进程 pid!=0
- 代码中 父进程中若有WAIT存在假定先运行子进程。进程可以返回状态值给父进程(通过wait)。
- 进程完成执行最后的语句并使用系统调用exit请求操作系统删除自身
3.3进程间通信
- 独立进程不能影响或被在系统内执行的其他进程所影响。
- 协作进程影响或被在系统内执行的其他进程所影响。
- 进程间通信有两种基本模式
- 消息传递:(适合数据量较小)
通过在协作进程间交换信息来实现通信。
- 共享内存:(可用于同步和互斥)【不需要用户态到内核态的开销】
建立起一个供协作进程共享的内容区域,进程通过向此共享区域读或者写入数据来交换信息。
生产者和消费者问题
- 生产者进程产生信息以供消费者进程消费。