进程
一、什么是进程
-
进程是指在系统中正在运行的一个应用程序,程序一旦运行就是进程。
-
进程是系统进行资源分配的独立实体, 且每个进程拥有独立的地址空间。
-
进程由三部分组成:
(1) 一段可执行的程序。
(2) 程序所需要的相关数据。
(3) 程序的执行上下文。
执行上下文又称为进程状态,是操作系统用来管理和控制进程所需的内部数据。这种内部数据和进程是分开的,因为操作系统不允许被进程直接访问。 -
进程控制块:用于存放表征进程的元素信息,可以中断一个进程的执行,并在后来恢复进程的执行,就好像进程未被中断过一样。
二、进程的组成部分
- 进程由三部分组成
- 一段可执行的程序。
- 程序所需要的相关数据。
- 程序的执行上下文。
执行上下文又称为进程状态,是操作系统用来管理和控制进程所需的内部数据。这种内部数据和进程是分开的,因为操作系统不允许被进程直接访问。
- 进程控制块
进程控制块用于存放表征进程的元素信息,操作系统根据进程控制块来对并发执行的进程进行控制和管理。
- 标识符:与进程相关的唯一标识符,用来区分其他进程。
- 状态:若进程正在执行,则进程处于运行态。
- 优先级:相对于其他进程的优先顺序。
- 程序计数器:程序中即将执行的下一条指令的地址。
- 上下文数据:进程执行时处理器的寄存器中的数据。
三、进程的创建
- 创建进程的原因
- 进行作业调度
- 用户登录
- 操作系统提供服务:操作系统可以创建一个进程,代表用户执行一个功能,使用户无需等待。
- 由现有进程派生:用户程序指示创建多个进程。
- 创建进程的步骤
(1)为新进程分配一个唯一的进程标识符。此时,主进程表中会添加一个新表项,每个进程一个表项。
(2)为进程分配空间。
(3)初始化进程控制块。
(4)设置正确的链接。
(5)创建或扩充其他数据结构。
四、进程的终止
导致进程终止的原因
五、进程的状态
1. 两状态模型
在任何时刻,一个进程要么正在执行,要么未执行。因此可以构建最简单的模型,进程处于运行态或未运行态。
- 如下图所示,操作系统创建一个新进程时,它将该进程以未运行态加入系统。时不时地,当前正在运行的进程会被中断,此时操作系统中的分派部分选择一个新的进程运行。前一个进程从运行态转为非运行态,后一个进程则转换为运行态。
- 未运行进程必须于某种类型的队列中,并等待执行时机。队列中的每项可以由数据块构成的链表组成,每个数据块表示一个进程。(如下图所示)
2. 五状态模型
如果所有的进程都做好了执行的准备,则两状态模型的排队原则是有效的。但是若存在一些处于非运行态但已就需等待执行的进程,同时还存在另外一些处于阻塞态等待I/O操作结束的进程,两状态模型的实现是不合适的。
解决该问题较好的方法是:将非运行态分成就绪态(ready)和阻塞态(blocked),还增加其他两个状态。如下图所示:
- 新建态(new):刚刚创建的进程,操作系统还未把它加入可执行进程组。
- 就绪态(ready):进程做好了准备,只要有机会就开始执行。
- 阻塞/等待态(blocked):进程在某些事件发生前不能执行,如I/O操作完成。
- 运行态(run):进程正在执行。
- 退出态(terminate):操作系统从可执行进程组中释放出的进程,要么它自身已停止,要么它因某种原因被取消。
(1) 可能发生的转化如下:
- 空—>新建
- 新建—>就绪: 操作系统准备好接纳一个进程时,把一个进程从新建态转换到就绪态。
- 就绪—>运行: 需要选择一个新进程运行时,操作系统选择一个处于就绪态的进程。
- 就绪—>退出: 在某些系统中,父进程可在任何时刻终止一个子进程。如果父进程终止,那么与该父进程相关的所有子进程都将被终止。
- 运行—>就绪:操作系统发生抢占,或进程资源释放对处理器的控制。
- 运行—>阻塞: 进程请求其必须等待的某些事件时,则进入阻塞态。
- 运行—>退出: 若当前正在运行的进程表示自身已完成或取消,则它被操作系统终止。
- 阻塞—>就绪: 所等待的事件发生时,处于阻塞态的进程转换到就绪态。
- 阻塞—>退出: 同就绪—>退出。
(2) 进入系统的每个进程都放置在就绪队列中,当操作系统选择另一个进程运行时,将从就绪队列中进行选择。当一个正在运行的进程被移出处理器时,它根据情况要么终止,要么放置在阻塞队列中。放在阻塞队列中的进程在事件发生时,进入就绪队列中。
- 对于无优先级的方案,这是一个先进先出的队列。
- 如果按照优先级分派进程,则每个优先级一个队列,操作系统很容易就可以确定哪个就绪进程具有最高优先级且等待时间最长。
(3) 挂起进程
挂起进程等价于不在内存中的进程。不在内存中的进程,不管它是否在等待一个事件,都不能立即执行。
六、进程控制
1. 操作系统的控制结构
- 进程映像:程序、数据、栈和属性的集合。
2. 进程控制结构
操作系统在管理和控制进程时,首先要知道进程的位置,其次要知道进程的属性。
3. 执行模式
- 非特权模式:也称用户模式 (User mode)
- 特权模式:也称内核模式 (Kernel mode)、系统模式 (System mode)、控制模式 (Control mode)
(1) 使用两种模式的原因是保护操作系统和重要的操作系统表(如进程控制块)不受用户程序的干扰。
(2) 那么处理器如何才能知道它在什么模式下执行?模式是如何变化的?
- 程序状态字中通常存在一个指示执行模式的位,该位会因事件的改变而变化。
- 当用户调用一个操作系统服务或中断来触发系统例程的执行时,执行模式被置为内核模式;
- 而当从系统服务返回到用户进程时,执行模式则置为用户模式。
4. 进程的切换
(1) 何时切换进程?
进程切换可在操作系统从当前运行进程中获得控制权的任何时刻发生。
(2) 什么事件触发了进程的切换?
(3) 进程切换与模式切换的区别?
-
进程切换指从正在运行的进程中收回处理器,让待运行进程来占有处理器运行。实质上就是被中断运行进程与待运行进程的上下文切换,处理过程是:
(1) 保存被中断进程的上下文
(2) 转向进程调度
(3) 恢复待运行进程的上下文 -
进程切换必须在操作系统内核模式下完成,这就需要模式切换。模式切换又称处理器状态切换,包括:
(1) 用户模式到内核模式:由中断/异常/系统调用中断用户进程执行而触发;
(2) 内核模式到用户模式:由OS执行中断返回指令将控制权交还用户进程而触发
七、进程间通信的方式
- 管道pipe
- 命名通道FIFO
- 消息队列MessageQueue
- 共享存储SharedMemory
- 信号量Semaphore
- 套接字Socket
- 信号