进程二

进程二

一、进程控制

​ 进程控制是指对进程的创建、切换、中止等行为的管理和控制。

1.异常

​ 异常是允许操作系统内核提供进程概念的基本构造块。异常就是控制流中的突变,用来相应处理器状态的某些变化。

​ 处理器中的状态被编码为不同的位和信号,状态变化称为事件。当有事件发生时,处理器会通过异常表来间接过程调用异常处理程序。

​ 通常包含四种异常:中断、陷阱、故障、终止

中断

​ 中断是异步发生的,它是来自外部的信号产生的结果。如某个进程的IO操作完成了,IO设备会发送信号给处理器,处理器产生中断。

时钟中断:操作系统确定当前进程的执行时间是否超过分配的时间片,若超过则将进程切换到就绪态。这会引发时钟 断。

IO中断:操作系统确定是否发生IO活动

缺页中断:当处理器需要的数据不在内存中,而在虚存中时,操作系统必须把包含数据的内存块载入到内存中。这通过缺页中断的异常处理程序完成。

陷阱

​ 陷阱是同步发生的,它是有意的异常,是执行指令的结果。它的最重要的用途是在用户程序和内核之间提供一个像过程意义的接口,即系统调用。系统调用运行在内核模式中。

故障

​ 故障 由错误引起,它可能被故障处理程序修正。如果无法被修正,处理器就返回内核中的abort例程,这会终止引起故障的进程。

终止

​ 终止是不可恢复的致命错误造成的结果。当它发生时,进程会立刻被abort例程关闭。

2.执行模式

                 为了保护操作系统内部不被用户进程损坏,操作系统提供了模式机制来限制进程可执行的指令和能访问的地址空间。

​ 用户模式:正常情况下进程处于用户模式,此时它不允许执行特权指令。如IO操作,引用内核区的代码和数据等。用户模式的进程必须通过异常来进入内核模式。

​ 内核模式:内核模式中的进程可以执行指令集中的任何指令,访问系统中的任意位置。异常处理是在内核模式下完成的。

模式切换的过程

​ 先将程序计数器置为中断处理程序的开始地址,再从用户模式切换为内核模式,保存进程控制块中的进程状态信息,以便将来恢复进程的运行,之后就运行中断处理程序。

3.进程创建

何时创建一个进程

​ 从磁盘中载入一个批处理程序、终端用户登录到系统(如shell)、为提供服务而由操作系统创建(如打印服务)、从父进程派生。

如何创建

​ (1)为新进程分配一个唯一的标识符。

​ (2)为进程分配空间并初始化进程控制块

​ (3)设置正确的链接。如操作系统为每个调度队列维护一个链表,新进程必须放入就绪或就绪/挂起链表中

​ (4)创建或 扩充其他数据结构

4.进程切换

​ 1.保存处理器的上下文,包括程序计数器和其他寄存器

​ 2.更新当前运行进程的程序控制块,包括改变状态、退出运行态的原因和记账信息。

​ 3.把该进程的程序控制块移动到相应的队列(状态队列、等待事件队列)

​ 4.选择另一个进程执行

​ 5.当调度器又选择了这个进程运行,更新所选进程的进程控制块,包括改变状态

​ 6.更新内存管理数据结构。是否需要更新取决于管理地址转换的方式。

​ 7.载入程序计数器和其他计数器先前的值,将处理器上下文恢复为退出运行时的状态

二、进程间通信

一共有五种方式:管道,FIFO,消息队列,信号量,共享内存
管道:通常指无名管道
1)半双工的(数据只能在一个方向上流动),有固定的读端和写端
2)只能在具有亲缘关系的进程中通信(父子进程或兄弟进程)
FIFO:命名管道,也是一种文件类型
1)先进先出机制
2)与无名管道不同,可以在无关的进程中进行数据交互
3)与路径名相关,以一种特殊的文件形式存在于文件系统中
消息队列:
1)消息队列即消息的链接表,存放在内核中,一个消息队列有其对应的ID标识符
2)消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级。
3)消息队列独立于发送与接收进程。进程终止时,消息队列及其内容并不会被删除。
4)消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。
信号量:
1)信号量用于进程间同步,若要在进程间传递数据需要结合共享内存。
2)信号量基于操作系统的 PV 操作,程序对信号量的操作都是原子操作。
3)每次对信号量的 PV 操作不仅限于对信号量值加 1 或减 1,而且可以加减任意正整数。
4)支持信号量组。
共享内存:
1)共享内存是最快的一种 IPC,因为进程是直接对内存进行存取。
2)因为多个进程可以同时操作,所以需要进行同步。
3)信号量+共享内存通常结合在一起使用,信号量用来同步对共享内存的访问。