文章目录

  • 一、临界与同步
    • 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、进程互斥的软件实现方法

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

(1)中断屏蔽方法

关中断;临界区;开中断;

中断屏蔽的特点:

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

(2)硬件指令方法

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

  • 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指令特点:

3、信号量实现互斥

  • 整型信号量的操作:
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个经典进程同步问题:

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

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

  1. 操作系统c语言实现进程同步与互斥代码

    使用DEV C++打开: 这是进程同步与互斥代码,第一次自己写的,写得不好多多支持 #include<stdio.h> #include<windows.h> #include ...

  2. 操作系统知识点大总结

    文章目录 一.操作系统的特征 1.特征关系图 2.四大特征 二.操作系统的发展 三.操作系统提供的接口 四.CPU的运行状态 1.运行状态关系图 2.核心态与用户态 3.核心态与用户态之间的转换 4. ...

  3. 操作系统原理教程:进程同步与互斥

    在一个进程使用这些变量尚未结束期间,另一个进程也开始使用,这种错误通常称为"与时间有关的错误".导致出错的原因有两个:共享了变量.同时使用了这些共享变量.较好的解决办法是允许共享, ...

  4. 操作系统知识点大总结【进线程管理与调度】

    文章目录 一.进程管理 二.进程的组成 1.进程的概念 2.进程的程序段.数据段.PCB 三.进程的特征与状态 1.进程的特征 2.进程的基本状态 3.进程的运行状态 四.进程的控制 五.进程的通信与 ...

  5. 操作系统知识点大总结【管程与死锁】

    文章目录 一.管程 二.死锁 一.管程 1.管程的概念 用信号量可以实现进程之间的同步与互斥,但要设置很多信号量,使用大量的P.V操作,还要仔细安排多个P操作的排列次序,否则将出现错误的结果或死锁现象 ...

  6. 操作系统:第二章 进程管理3 - 进程同步与互斥

    本文已收录至 Github(MD-Notes),若博客中有图片打不开,可以来我的 Github 仓库:https://github.com/HanquanHq/MD-Notes,涵盖了互联网大厂面试必 ...

  7. 计算机操作系统专题一:多道环境下进程同步与互斥制约关系的学习

    1. 问题描述 设自行车生产线上有一只箱子,其中有N个位置(N≥3),每个位置可存放一个车架或一个车轮,又设有三名工人,其活动分别为: 2. 问题分析(包括涉及的知识点.制约关系分析.问题的解决思路等 ...

  8. 【操作系统基础】进程管理(三)进程同步与互斥

    一.进程同步.互斥的基本概念 1. 什么是进程同步 进程具有异步性的特征.异步性是指各并发执行的进程以各自独立的.不可预知的速度向前推进.举一个线程通信的例子,管道通信: 读进程和写进程并发运行,由于 ...

  9. 操作系统——进程同步与互斥

    文章目录 进程同步与互斥 简介 进程间合作 进程间合作的问题 竞争条件 原子操作 临界区相关的几个概念 忙等待的互斥 基于硬件的同步解决办法:屏蔽中断 基于软件的同步解决方法 严格轮换法 Peters ...

最新文章

  1. R使用lm构建单变量线性回归模型
  2. vue连线 插件_vue 插件集合
  3. CNC加工中心刀柄类型
  4. 用 LaTeX 排版编程技术书籍的一些个人经验
  5. AC Automaton
  6. jsp输出所有请求头的名称
  7. 陶陶摘苹果(信息学奥赛一本通-T1103)
  8. PHPer的水平区分 (转)
  9. SpringBoot项目文件上传
  10. 大数据之flume数据采集
  11. 微信公共号开发教程java版——微信网页授权(八)
  12. 如何生成SSH key?
  13. S4 HANA 1809 FPS03 Standard装机总结(刘欣2019.11.7)
  14. initialize php,php中_initialize()函数与 __construct()函数的区别说明
  15. 仙剑永恒的经典──仙剑诗集
  16. 海康威视监控下载下来的mp4格式的视频,小类别MPEG-PS格式,这种格式在浏览器中没法播放,跪求播放方法。
  17. IDEA中如何设置滚轮缩放字体大小
  18. 研究量子计算机学什么,量子计算,量子信息技术,要学什么专业?
  19. 字节跳动面试--二面算法题复盘
  20. 提供家用咖啡电子秤厨房秤方案芯片CS1238

热门文章

  1. android 开发传输安全,移动应用安全开发指南(Android)--数据传输
  2. Mysql表用自增主键的选型
  3. android 清除应用程序数据,清除Android应用程序用户数据
  4. php table转json,html table表数据转Json格式示例代码分析
  5. 服务器双网卡设置安全_服务器的基础知识
  6. python文件批量重命名以数字~n的方式重命名_利用Python对文件进行批量重命名
  7. ros如何订阅关节力矩信息_ROS中阶笔记(二):机器人系统设计—URDF机器人建模...
  8. c开头英文语言,C开头的考研英语词汇
  9. python两个数组合并、找出中位数_leetcode刷题记录-找出这两个有序数组的中位数(python版本)...
  10. php是什么电荷,科学网—蛋白质的表面静电势、ζ-电位和表面电荷 - 朱俊向的博文...