操作系统知识点大总结【进程同步与互斥】

2023-05-16

文章目录

    • 一、临界与同步
      • 1、临界资源与临界区
      • 2、进程同步
      • 3、信号量实现进程同步
    • 二、进程互斥
      • 1、进程互斥的软件实现方法
      • 2、进程互斥的硬件实现方法
      • 3、信号量实现互斥
      • 4、信号量进程互斥
    • 三、经典同步问题(4个)

一、临界与同步

1、临界资源与临界区

在计算机中,有些资源允许多个进程同时使用,如磁盘;而另一些资源只能允许一个进程使用,如打印机、共享变量。如果多个进程同时使用这类资源,就会引起激烈的竞争。操作系统必须保护这些资源,以防止两个或者两个以上的进程同时访问它们。

那些在某段时间内只允许一个进程使用的资源就称为临界资源。

而每个进程中访问临界资源的那段程序就称为临界区。

2、进程同步

进程同步是指多个进程中发生的事件存在着某种时序关系,必须协同动作,相互配合,以共同完成一个任务。进程同步的主要任务是使并发执行的诸各个进程有效地共享资源和相互合作,从而使程序的执行具有可再现性。

进程同步一种直接制约关系。这种用法比进程之间的互斥知道对方的程度要高,因为进程之间需要合作。

3、信号量实现进程同步

semaphore S = 0;
P1()
{
	 一些操作代码...;
	x; // 语句x;
	V(S)// 唤醒另外P进程
}

P2
{
	P(S); // 一直堵塞P2进程,等待唤醒
	Y;   // 被唤醒,执行正事
}

二、进程互斥

1、进程互斥的软件实现方法

01

2、进程互斥的硬件实现方法

(1)中断屏蔽方法

关中断;

临界区;

开中断;

中断屏蔽的特点:

  • 限制了CPU交替执行能力
  • 用户能力变大,甚至可以控制中断

(2)硬件指令方法

  • TestAndSet指令
boolean TestAndSet(boolean *lock)
{
	boolean old;
	old = *lock;
	*lock = true;
	return old;   // 设置old为true
}

whileTestAndSet(&lock));
{
	临界区代码段;//(进入第一件事,设置lock为true),防止他人进入
	lock = false;
	进程其他代码;
}
  • TestAndSet特点:
    02

  • Swap指令

Swap(boolean *a, boolean *b)
{
	boolean temp;
	temp = *a;
	*a = *b;
	*b = temp;
}

Main
{
	key = true;
	while(key!=false)
	Swap(&lock, &key);//只要有其他进程
								//Lock = true
进程临界区代码段;
lock = false;
进程的其他代码段	
}
  • Swap指令特点:
    03

3、信号量实现互斥

04

  • 整型信号量的操作:
wait(S)
{
	while(S<=0);
	S--;
}

signal(S)
{
	S++;
}
  • 记录型信号量的操作:
typedef struct
{
	int value;
	struct process *L;// 构造等待序列
}semaphore;

void wait(semaphore S)
{
	S.value --;
	if(S.value < 0)
	{
		add this process to S.l;
		block(S.L); // 放弃处理机,插入等待序列
	}
}

void signal (semaphore S)
{
	S.value++;
	if(S.value > 0)
		{
			remove a  process P from S.L;
			// 告诉阻塞进程P,来资源了,可以干活
			wakeup(P);
		}
}

4、信号量进程互斥

semaphore S = 1;

P1()
{
	...;
	P(S); // 准备访问临界资源,加锁
	进程P1的临界区;
	V(S); // 访问结束,解锁	
}

P2()
{
	P(S); // 准备访问临界资源,加锁
	进程P2的临界区;
	V(S);  // 访问结束,解锁 
}

三、经典同步问题(4个)

小tip:统一把P理解为消耗,V理解为释放。
主要有以下4个经典进程同步问题:
05

关于这四个问题的具体分析,在下一篇文章中:
操作系统知识点大总结【4大经典同步问题:生产者消费者问题、读者写者问题、哲学家进餐问题、睡眠的理发师问题】

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

操作系统知识点大总结【进程同步与互斥】 的相关文章

  • ARM处理器基本指令大全

    目录 一 ARM的7种运行模式和2种工作状态 二 ARM支持的异常类型 三 ARM基本指令及功能描述 一 ARM的7种运行模式和2种工作状态 1 七种运行模式 处理器工作模式 特权模式 异常模式 说明 用户 xff08 user xff09
  • 计算机组成原理4(程序查询方式、程序中断方式、DMA方式及其I/O接口电路)

    文章目录 一 程序查询方式二 程序中断方式三 DMA方式 一 程序查询方式 1 程序查询方式的接口电路 2 符号说明 amp 与非门B工作触发器D完成触发器 3 程序查询工作过程 xff08 输入 xff09 xff08 1 xff09 当
  • C/C++库函数math用法案例篇一

    文章目录 1 绝对值函数 xff08 abs xff0c fabs xff0c labs xff09 2 三角函数 xff08 cos xff0c sin xff0c tan xff09 3 反三角函数 xff08 acos xff0c a
  • C/C++库函数math用法案例篇二

    文章目录 1 floor函数 xff08 求不大于x的最大整数 xff09 2 fmod函数 xff08 返回a b的余数 xff09 3 frexp xff08 将浮点数分解成尾数和指数 xff09 5 modf函数 xff08 将浮点数
  • 从C语言到C++的进阶之C到C++的转变(篇一)

    文章目录 一 C语言到C 43 43 语言1 C语言2 C 43 43 语言3 C与C 43 43 的联系 二 C到C 43 43 的明显转变1 C 43 43 的关键字系列2 函数必列参数3 指针类型相同才能赋值4 对struct等封装类
  • 从C语言到C++的进阶之C++的非类新特性(篇二)

    文章目录 1 输出输入使用 cout lt lt 和 cin gt gt 2 访问外部变量3 从指针到引用4 引用与指针的比较5 返回引用类型的函数 1 输出输入使用 cout lt lt 和 cin gt gt span class to
  • 从C语言到C++的进阶之C++的非类新特性(篇三)

    文章目录 1 从宏到内联函数2 函数参数的缺省值3 C 43 43 的常量与引用4 函数重载5 new运算和delete运算 1 从宏到内联函数 xff08 1 xff09 写一个返回最大值的宏定义 xff08 C语言 xff09 span
  • 从C语言到C++的进阶之面向对象、using与命名空间(篇四)

    文章目录 一 面向过程到面向对象二 namespace的使用三 using的用法 一 面向过程到面向对象 1 面向过程编程思想 C语言是典型的面向过程编程语言 xff0c 面向过程是一种以过程为中心的编程思想 xff0c 通过分析出解决问题
  • Angular执行测试报错: 'router-outlet' is not a known element

    本机环境 xff1a ng version Angular CLI 7 1 1 Node 10 11 0 OS darwin x64 Angular 7 1 1 animations cli common compiler compiler
  • 从C语言到C++的进阶之一些C基础上的增强用法(篇五)

    文章目录 1 全局变量的检测增强2 新增Bool类型3 三目运算的增强4 指针与常量的引用 xff08 别名 xff09 5 内联函数的限制6 函数的占位参数7 extern 34 C 34 的用法 1 全局变量的检测增强 C 43 43
  • C语言经典排序算法之快速排序(详解)

    文章目录 一 何为算法二 排序算法三 快速排序算法 一 何为算法 1 算法 xff08 Algorithm xff09 xff0c 是程序设计的灵魂 xff0c 它是利用系统的方法描述解决问题策略的机制 2 正确算法应满足的性质 xff1a
  • C语言经典查找算法之二分查找(详解)

    文章目录 一 查找算法二 二分查找算法 一 查找算法 查找是在大量的信息中寻找一个特定的信息元素 xff0c 在计算机应用中 xff0c 查找是常用的基本运算 xff0c 例如编译程序中符号表的查找 二 二分查找算法 1 算法思想 该查找算
  • C语言经典递推算法之杨辉三角展开(详解)

    文章目录 一 递推算法二 杨辉三角展开 一 递推算法 这是一种比较简单的算法 xff0c 即通过已知条件 xff0c 利用特定关系得到中间结论 xff0c 然后得到最后结果的算法 递推算法可以分为顺推和逆推两种 二 杨辉三角展开 1 杨辉三
  • C语言经典迭代算法之求解函数定积分(详解)

    文章目录 一 迭代算法二 梯形法求解定积分 一 迭代算法 1 辗转迭代 迭代法也称辗转法 xff0c 它是一种不断用旧的变量值递推得到新值的过程 迭代法是用计算机解决问题的一种基本方法 xff0c 它利用计算机运算速度快 适合做重复性操作的
  • C语言经典递归算法之和式分解

    文章目录 一 递归算法二 和式分解 一 递归算法 1 递归 递归就是自己调用自己 xff0c 它是设计和描述算法的一种有力工具 xff0c 常常用来解决比较复杂的问题 递归是一种分而治之 xff0c 将复杂问题转化难为简单的问题的求解方法

随机推荐