Bootstrap

操作系统_进程管理_进程的控制与同步

目录

1.进程控制的概念

2.进程的创建

3.进程间互斥与同步的概念

4.临界资源和临界区

5.同步机制应遵循的原则

6.信号量与P/V操作

7.生产者与消费者问题


1.进程控制的概念

        进程由创建产生,由调度执行,由撤销消亡。

2.进程的创建

        申请PCB空间,为新进程分配资源,把有关信息填入PCB,将PCB插入就绪队列中。

3.进程间互斥与同步的概念

        因直接制约关系(各个程序段要求共享信息)而需要相互等待,相互合作,以达到各进程相互协调而执行的过程称为同步。

        因间接制约关系(各个程序竞争使用同一个资源)而导致进程交替执行的过程称为互斥。

  • 同步:多个进程按一定顺序执行;
  • 互斥:多个进程在同一时刻只有一个进程能进入临界区。

4.临界资源和临界区

        把某段时间只允许一个程序使用的资源称为临界资源。

        把访问临界资源的代码段称为临界区。

5.同步机制应遵循的原则

        空闲让进 忙则等待 有限等待 让权等待

6.信号量与P/V操作

        信号量:表示临界资源可用的数目。

        P/V操作:在信号量上定义了两个操作P原语和V原语。该信号量的值只能被P/V修改且不可被中断。

        信号量(Semaphore)是一个整型变量,可以对其执行 down 和 up 操作,也就是常见的 P 和 V 操作。

  • down : 如果信号量大于 0 ,执行 -1 操作;如果信号量等于 0,进程睡眠,等待信号量大于 0;
  • up :对信号量执行 +1 操作,唤醒睡眠的进程让其完成 down 操作。

        down 和 up 操作需要被设计成原语,不可分割,通常的做法是在执行这些操作的时候屏蔽中断。

        如果信号量的取值只能为 0 或者 1,那么就成为了 互斥量(Mutex) ,0 表示临界区已经加锁,1 表示临界区解锁。

7.生产者与消费者问题

        

问题分析:

同步关系:直接制约关系。

当生产者速度大于消费者时,生产者会阻塞,等消费者消费后才能继续生产产品。

互斥关系:直接制约关系。

缓冲池中只能由消费者或生产者其中之一使用。

设变量:

设 mutex 公有信号量 初值为1 用于实现临界区互斥 

设 empty 生产者私有信号量 初值为n 表示空缓冲区数目

设 full 生产者私有信号量 初值为0 表示满缓冲区数目

设 整型 i , j 分别为空缓冲区的头指针和满缓冲区的头指针

注:p操作顺序不可颠倒。

代码:

semaphore mutex = 1;
semaphore empty = n;
semaphore full  = 0;
int i = 0;
int j = 0;
void P(){
	while(1){
		produce next product;
		p(empty);
		p(mutex);
		buf[i] = product;
		i=(i+1)%n;
		v(full);
		v(mutex);
	}
}
void C(){
	while(1){
		p(full);
		p(mutex);
		product = buf[j];
		j=(j+1)%n;
		v(empty);
		v(mutex);
		consume product;
	}
}
int main(){
	parbegin(p(),c());
}

 

;