本篇博客参考书籍:操作系统概念 第七版 高等教育出版社
首先我们应该搞懂几个概念然后再进行讨论进程同步
首先什么是进程?
进程是操作系统结构的基础;是一次程序的执行;是一个程序及其数据在处理机上顺序执行时所发生的活动。 进程在执行时的状态包括:新的,运行,等待,就绪,终止。进程区别于线程,一个进程是一个只能进行单个执行线程的程序。进程一次只能执行一个任务。
什么是进程调度?
进程调度是选择一个可用的进程(可能从多个可用进程集合中选择)到CPU上执行。
什么是线程?
线程是CPU的基本单元,它由线程ID,程序计数器,寄存器集合和栈组成。它与属于同一进程的其他线程共享代码段,数据段,和其他操作系统资源。如打开文件和信号。
下面我们还是讨论进程同步
协作进程是可以与在系统内执行的其他进程相互影响的进程。互相协作的进程可以直接共享逻辑地址空间(即代码和数据)或者只通过文件或消息来共享数据。前者可通过轻量级进程或线程实现。共享数据的并发访问可能会产生数据的不一致。下面我们们讨论一下各种机制,以确保共享同一逻辑地址空间的协作进程可有序的执行,从而能维护数据的一致性。
多个进程并发访问和操作同一数据且执行结果与访问发生的特定顺序有关,成为竞争条件。为了避免这种情况,需要确保一个时间内只有一个进程能操作变量。为了实现这种保证,要求进行一定形式的进程同步。因此引出了临界区问题。
临界区问题
假如某个系统有N个进程,每个进程有一个代码段称为临界区(不同进程访问同一共享数据的代码段),在该区中进程可能改变共同变量,更新一个表,写一个文件等。临界区问题是护色剂一个以便进程协作的协议。
一个进程的通用结构。
do{
进入去
临界区
退出区
剩余区
}
while(TRUE);
临界区必须满足如下三项要求:
互斥,如果进程Pi在其临界区执行那么其他进程就不能在其临界区执行、
前进,如果没有进程在其临界区内执行,且有进程需要进入临界区,那么只有那些不在剩余区内执行的进程可以参加选择,以确定谁能进入临界区,且这种选择不能无限推迟
有限等待,从一个进程做出进入临界区的请求,直到该请求允许为止,其他进程允许进入临界区的次数有限。