操作系统【一】进程同步和信号量

基本概念

进程异步性特征:各并发执行的进程以各自独立的,不可预知的速度向前推进。

进程同步又称作直接制约关系,他是指为完成某种任务而建立的两个或者多个进程,这些进程因为需要在某些位置上协调他们的工作顺序而产生的制约关系。(源于进程需要相互合作)

但是因为进程本身的异步性,因此需要操作系统进行处理。

两种资源共享方式:互斥共享、同时共享
临界资源:一个时间段内只允许一个进程使用的资源
进程互斥:当某一个进程访问某临界资源时,另一个想要访问临界资源的进程必须等待。

do
{进入区临界区退出区剩余区
}while(true)
  • 进入区:判断能够进入临界区,如果可以进入,则设置正在访问临界资源的标志,阻止其他进程进入临界区
  • 临界区/段:访问临界资源的代码
  • 退出区:解除正在访问临界资源的标志
  • 剩余区:其他处理

实现进程互斥应该遵循的原则:

  • 空闲让进:临界区空闲时可以允许一个进程进入临界区
  • 忙则等待:如果已经有进程进入临界区则其他试图进入临界区的进程必须等待
  • 优先等待:对于请求访问的进程,应该保证能在有限时间内进入临界区(保证不会饥饿)
  • 让权等待:如果进程不能进入临界区,应该立即释放处理机,防止进程忙等待

实现进程互斥的软件实现

单标志法

每个进程进入临界区的权限只能被另一个进程赋予
在这里插入图片描述违背空闲让进、让权等待

双标志先检查法

在这里插入图片描述flag数组的访问因为进程的异步性有可能导致违反忙则等待原则

双标志后检查法

在这里插入图片描述可能违背空闲让进、有限等待原则

Peterson算法

在这里插入图片描述
违背让权等待的原则,可能需要“忙等”。但是比前面几种方法好。

进程互斥的硬件实现

中断屏蔽方法

利用“开/关中断指令”实现。即在某进程开始访问临界区到结束访问为止都不允许被中断,也就不能发生进程切换,因此也不可能发生两个同时访问临界区的情况。

优点:简单、高效
缺点:不适用多处理机;只适用操作系统内核进程,不适用于用户进程(因为开/关中断指令只能运行在内核态)

TestAndSet指令(TS)

也叫做TestAndSetLock(TSL)

在这里插入图片描述上锁和检查操作变成了原子操作
优点:实现简单;适用多机处理环境
缺点:不满足让权等待原则

Swap指令

也叫做Exchange指令,或者简称XCHG指令
在这里插入图片描述优点:实现简单,适合多机系统
缺点:不满足让权等待

信号量机制

信号量其实就是一个变量,可以用一个信号量来表示系统中某种资源的数量4
原语:一种特殊的程序段,其执行只能一气呵成,不可被中断。(用来解决检查和上锁无法一气呵成的问题)

信号量S
Wait(S) P操作
Signal(S) V操作

整型信号量

对信号量的操作只能有三种,初始化、P、V

在这里插入图片描述不满足让权等待原则,会发生忙等

记录型信号量

在这里插入图片描述
S.value<0时表示该类资源已经分配远比,因此该进程自我阻塞。

当进行V操作发现S.value<=0时,表示在将这个资源还给系统之前有进程在阻塞等待资源,因此唤醒一个进程。

满足进程互斥的所有原则

信号量机制实现进程互斥

在这里插入图片描述

信号量机制实现进程同步

为了保证进程执行的顺序:

  • 设置同步信号量S,初始化为0
  • 在需要首先进行的操作后执行V(S)操作
  • 在条件满足情况下执行的操作前执行P(S)操作
    如果有多个约束关系就设置多个信号量

信号量机制实现前驱关系

对于每条边设置一个信号量,然后同进程同步(这也是一种进程同步)

在这里插入图片描述

生产者-消费者问题

系统中有一组生产者进程和一组消费者进程,生产者进程每次生产一个产品放入缓冲区,消费者进程每次从缓冲区中取出一个产品并适用。

生产者、消费者共享一个初始为空、大小为n的缓冲区

对临界资源的访问必须互斥访问,缓冲区也是一种临界资源(否则多个进程同时向缓冲区写入数据可能造成数据的覆盖)

PV操作题目分析:

  • 关系分析,找出题目中描述的各个进程,分析他们之间的同步、互斥关系
  • 确定P、V操作的大体顺序:因为生产者每次要消耗一个空闲缓冲区,并且生产一个产品。消费者每次要消耗一个产品,并释放一个空闲缓冲区。
  • 设置信号量

在这里插入图片描述对于临界资源的访问一定要满足访问条件以后再进行访问,否则有可能导致死锁。即先满足进程同步条件再进行互斥操作

平时设计的时候要尽可能缩小互斥访问PV操作覆盖的区域,即尽可能减少临界区中的操作,不仅是为了避免死锁,同时还是为了提高进程的并行性。

多生产者-多消费者问题

多类生产者和多类消费者

在这里插入图片描述

当缓冲区资源只为1的时候我们有可能可以不专门设置访问缓冲区的互斥信号量。不过出于良好的习惯我们还是在访问缓冲区的时候专门加上互斥信号量。需要注意的是对互斥信号量的P操作一定要在进程同步的P操作之后,否则会引起死锁。

我们在分析的时候理解为事件的行为(对资源的占用等等),而不是进程之间的行为。

吸烟者问题

在这里插入图片描述在这里插入图片描述

读者-写者问题

在这里插入图片描述在这里插入图片描述

潜在的问题:只要有都进程还在读,写进程就要一直阻塞等待,可能“饿死”。因此,这种算法中读进程是优先的。

在这里插入图片描述

哲学家进餐问题

在这里插入图片描述
每个哲学家进程需要同时持有两个临界资源才能开始吃饭,所以需要避免资源分配不当导致死锁。

  • 最多只允许四个哲学家进餐
  • 对于奇数号的哲学家必须先拿左边的筷子,偶数号的哲学家必须先拿右边的筷子
  • 只允许一个哲学家拿筷子
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/383680.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络【四】数据链路层基本概念+点到点通信(PPP协议)

数据链路层基本概念 路由器是网络层设备 数据链路层&#xff1a;数据管道&#xff0c;传输的是数据包加上发送地址&#xff0c;接收地址&#xff0c;校验的数据帧 数据链路层的信道类型&#xff1a; 点到点信道&#xff1a;使用一对一的点到点通信方式&#xff08;两个设备…

Linux网络编程——tcp并发服务器(poll实现)

https://blog.csdn.net/lianghe_work/article/details/46535859想详细彻底地了解poll或看懂下面的代码请参考《Linux网络编程——I/O复用之poll函数》 代码&#xff1a;#include <string.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#…

Linux网络编程——I/O复用函数之epoll

https://blog.csdn.net/lianghe_work/article/details/46544567一、epoll概述epoll 是在 2.6 内核中提出的&#xff0c;是之前的 select() 和 poll() 的增强版本。相对于 select() 和 poll() 来说&#xff0c;epoll 更加灵活&#xff0c;没有描述符限制。epoll 使用一个文件描述…

操作系统【三】内存管理基础+连续内存分配

内存的基础知识 内存分为按字节编址&#xff08;8位&#xff09;和字编制&#xff08;不同计算机不一样&#xff0c;64位计算机就是64位&#xff0c;即8个字节&#xff09; 相对地址逻辑地址 绝对地址物理地址 从逻辑地址到物理地址的转换由装入解决。 装入的三种方式 绝对…

MSG_PEEK标志

https://blog.csdn.net/aspnet_lyc/article/details/28937229 MSG_PEEK标志可以用来读取套接字接收队列中可读的数据&#xff0c;一些情况会用到它&#xff0c;比如为了避免不阻塞而先检查套接字接收队列中可读的数据长度&#xff0c;再采取相应操作。当然&#xff0c;不阻塞也…

C++的单例模式与线程安全单例模式(懒汉/饿汉)

https://www.cnblogs.com/qiaoconglovelife/p/5851163.html1 教科书里的单例模式我们都很清楚一个简单的单例模式该怎样去实现&#xff1a;构造函数声明为private或protect防止被外部函数实例化&#xff0c;内部保存一个private static的类指针保存唯一的实例&#xff0c;实例的…

计算矩阵的逆和行列式的值(高斯消元+LU分解)

计算矩阵的逆 选主元的高斯消元法 朴素的高斯消元法是将矩阵A和单位矩阵放在一起&#xff0c;通过行操作&#xff08;或者列操作&#xff09;将A变为单位矩阵&#xff0c;这个时候单位矩阵就是矩阵A的逆矩阵。从上到下将A变为上三角矩阵的复杂度为O(n3n^3n3)&#xff0c;再从下…

Linux网络编程——tcp并发服务器(epoll实现)

https://blog.csdn.net/lianghe_work/article/details/46551871通过epoll实现tcp并发回执服务器&#xff08;客户端给服务器发啥&#xff0c;服务器就给客户端回啥&#xff09; 代码如下&#xff1a;#include <string.h>#include <stdio.h>#include <stdlib.h&g…

证明AVL树的上界和下界

对于n个节点的AVL树&#xff0c;其高度最低的时候肯定为叶子节点只在最后一层和倒数第二层的时候。即对于2k−1<n≦2k1−12^k-1< n\leqq 2^{k1}-12k−1<n≦2k1−1的时候下界都为kkk。因此下界为h┌log2(n1)┐−1h\ulcorner log_2(n1)\urcorner-1h┌log2​(n1)┐−1 对…

浅谈dup和dup2的用法

https://blog.csdn.net/u012058778/article/details/78705536一、dup和dup2函数 这两个函数都可以来复制一个现有的文件描述符&#xff0c;他们的声明如下&#xff1a;#include <unistd.h>int dup(int fd);int dup2(int fd, int fd 2); 123 关于dup函数&#xff0c;当我…

C++ cin 实现循环读入

习惯了使用while(~scanf("%d",x)){}来实现循环读入&#xff0c;但是有时候使用泛型编程的时候就必须使用C中的cin&#xff0c;但是当我想要实现循环读入的时候却发现有些困难。 我们可以看一下下面这个简单的例子&#xff1a; #include <iostream>using name…

BFPTR算法详解+实现+复杂度证明

BFPTR算法是由Blum、Floyed、Pratt、Tarjan、Rivest这五位牛人一起提出来的&#xff0c;其特点在于可以以最坏复杂度为O(n)O(n)O(n)地求解top−ktop-ktop−k问题。所谓top−ktop-ktop−k问题就是从一个序列中求解其第k大的问题。 top−ktop-ktop−k问题有许多解决方法&#xff…

随机化快速排序+快速选择 复杂度证明+运行测试

对于快速排序和快速选择我之前的文章已经有详细的说明&#xff0c;需要了解的同学可以移步 传送门&#xff1a;快速排序&#xff5c;快速选择(BFPTR) 所谓随机化其实就是选择枢纽的时候使用随机数选择而已&#xff0c;实现起来很简单。但是我们使用随机数如何保证复杂度呢&am…

【Linux基础】Linux的5种IO模型详解

引入 为了更好的理解5种IO模型的区别&#xff0c;在介绍IO模型之前&#xff0c;我先介绍几个概念 1.进程的切换 &#xff08;1&#xff09;定义 为了控制进程的执行&#xff0c;内核必须有能力挂起正在CPU上运行的进程&#xff0c;并恢复以前挂起的某个进程的执行。即从用户…

计算机网络【五】广播通信+以太网

局域网的拓扑 广域网使用点到点通信 局域网使用广播通信 可以随意向网络中添加设备。 总线网星形网&#xff0c;使用集线器。现在多使用星形网络。环状网树形网 其中匹配电阻用来吸收总线上传播的信号。 共享通信媒体 静态划分信道 频分复用、时分复用、波分复用、码分复用…

聊聊Linux 五种IO模型

一篇《聊聊同步、异步、阻塞与非阻塞》已经通俗的讲解了&#xff0c;要理解同步、异步、阻塞与非阻塞重要的两个概念点了&#xff0c;没有看过的&#xff0c;建议先看这篇博文理解这两个概念点。在认知上&#xff0c;建立统一的模型。这样&#xff0c;大家在继续看本篇时&#…

操作系统【四】分页存储管理

连续分配方式的缺点&#xff1a; 固定分区分配&#xff1a;缺乏灵活性&#xff0c;产生大量的内部碎片&#xff0c;内存的利用率较低 动态分区分配&#xff1a;会产生许多外部碎片&#xff0c;虽然可以用紧凑技术处理&#xff0c;但是紧凑技术的时间代价较高 基本分页存储管理…

操作系统【五】分段内存管理+段页式内存管理

基本分段存储管理 与分页最大的区别&#xff1a;离散分配时所分配地址空间的基本单位不同 进程的地址空间&#xff1a;按照程序自身的逻辑关系划分为若干个段&#xff0c;每个段都有一个段名&#xff0c;每段从0开始编址 内存分配规则&#xff1a;以段位单位进行分配&#xff…

计算机网络【六】网络层协议

网络层负责在不同网络之间尽力转发数据包&#xff08;基于数据包的IP地址转发&#xff09;。不负责丢失重传&#xff0c;也不负责顺序&#xff08;每一个数据包都是单独选择路径&#xff09;。 可靠传输是由传输层实现。 网络设备和OSI参考模型 通过分层&#xff0c;屏蔽了…

计算机网络【3】网络层

主要任务时把分组从源端发送到目的端&#xff0c;为分组交换网上的不同主机提供服务。网络层传输单位是数据报 功能&#xff1a; 路由选择与分组转发&#xff08;最佳路径 &#xff09;异构网络互联拥塞控制 数据交换方式 电路交换&#xff1a;通信时延小、有序传输、没有冲…