计算机操作系统重点概念整理-第三章 进程同步【期末复习|考研复习】

news2024/11/15 19:56:09

第三章 进程同步 【期末复习|考研复习】

计算机系统系列文章传送门:
第一章 计算机系统概述
第二章 进程管理
第三章 进程同步
第四章 内存管理
第五章 文件管理
第六章 输出输出I/O管理


文章目录

  • 第三章 进程同步 【期末复习|考研复习】
  • 前言
  • 三、进程同步
    • 3.1 临界资源
      • 3.1.1 互斥
      • 3.1.2 同步
    • 3.2 信号量
      • 3.2.1 信号量机制实现进程互斥/同步
    • 3.3 经典同步问题
      • 3.3.1 单一生产者消费者
      • 3.3.2 多生产者多消费者
      • 3.3.3 读者写者问题
    • 3.4管程
    • 3.5 死锁
      • 3.5.1 含义
      • 3.5.2 死锁、饥饿、死循环的区别
      • 3.5.3 死锁的必要条件
      • 3.5.4 什么时候发生死锁
      • 3.5.5 死锁的处理策略
      • 死锁避免——银行家算法
      • 死锁的检测与解除:
    • 3.6 进程同步的方法
    • 3.7 线程同步方法
    • 3.8 Linux的进程管理


前言

给大家整理了一下计算机操作系统中的中重点概念,以供大家期末复习和考研复习的时候使用。
参考资料是王道的计算机操作系统和西电的计算机操作系统。


三、进程同步

3.1 临界资源

我们把一个时间段内只允许一个进程使用的资源称为临界资源。许多变量、数据、内存缓冲区等都属于临界资源。对临界资源的访问,必须互斥地进行。

3.1.1 互斥

互斥,亦称间接制约关系。进程互斥指当一个进程访问某临界资源时,另一个想要访问该临界资源的进程必须等待。当前访问临界资源的进程访问结束,释放该资源之后,另一个进程才能去访问临界资源。为了实现对临界资源的互斥访问,同时保证系统整体性能,需要遵循以下原则:1、空闲让进。临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区;2、忙则等待。当已有进程进入临界区时,其他试图进入临界区的进程必须等待;3、有限等待。对请求访问的进程,应保证能在有限时间内进入临界区(保证不会饥饿);4、让权等待。当进程不能进入临界区时,应立即释放处理机,防止进程忙等待。

3.1.2 同步

同步,亦称为直接制约关系,是指为完成某种任务而建立的两个或多个进程,这些进程因为某些位置上协调他们的工作次序而等待、传递信息所产生的制约关系。进程之间的直接制约关系源于他们之间的相互合作。

3.2 信号量

用户进程可以通过使用操作系统提供的一对原语来对信号量进行操作,从而很方便的实现了进程互斥、进程同步。**信号量其实就是一个变量(可以是一个整数,也可以是更复杂的记录型变量),**可以用一个信号量来表示系统中某种资源的数量,比如:系统中只有一台打印机,就可以设置一个初值为1的信号量。原语是一种特殊的程序段,其执行只能一气呵成,不可被中断。原语是由关中断/开中断指令实现的。一对原语: wait(S)原语和 signal(S)原语,可以把原语理解为我们自己写的函数,函数名分别为 wait和 signal,括号里的信号量s其实就是函数调用时传入的一个参数。简称PV操作。

3.2.1 信号量机制实现进程互斥/同步

实现互斥是信号量semaphore mutex =1(初始为1)(初始值为N的话表示最多由于N个线程可以访问)
实现同步是信号量 semaphore cond=0 (初始为0)

3.3 经典同步问题

3.3.1 单一生产者消费者

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

3.3.2 多生产者多消费者

若缓冲区为1则可以不用加互斥,如果缓冲区大于1则必须加互斥。
在这里插入图片描述在这里插入图片描述

3.3.3 读者写者问题

1、读者优先
当有读者在时禁止写者进入,因此设置计数器count来表示当前访问buffer的读者数量
在这里插入图片描述

在这里插入图片描述
2、读写公平
在这里插入图片描述
在这里插入图片描述
3、哲学家进餐问题
在这里插入图片描述
在这里插入图片描述

4、吸烟者问题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

3.4管程

信号量机制存在的问题 : 编写程序困难、易出错。
管程的构成:管程相当于对临界区资源进行抽象而编写的一个类。管程是一种特殊的软件模块,有这些部分组成:1、局部于管程的共享数据结构说明(一个类);2、对该数据结构进行操作的一组过程:(类中的方法);3、对局部于管程的共享数据设置初始值的语句(类中的变量);4、管程有一个名字(类名);
管程的特征:1、局部于管程的数据只能被局部于管程的过程所访问(类中变量有自己的作用范围);2、一个进程只有通过调用管程内的过程才能进入管程访问共享数据;这种互斥特性是由编译器来实现的;3、每次仅允许一个进程在管程内执行某个内部过程。

3.5 死锁

3.5.1 含义

在并发环境下,各进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象,就是“死锁“。发生死锁后若无外力干涉。这些进程都将无法向前推进。

3.5.2 死锁、饥饿、死循环的区别

死锁:各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象。
饥饿:由于长期得不到想要的资源,某进程无法向前推进的现象。比如:在短进程优先(SPF)算法中,若有源源不断的短进程到来,则长进程将一直得不到处理机,从而发生长进程“饥饿”。
死循环:某进程执行过程中一直跳不出某个循环的现象。有时是因为程序逻辑bug 导致的,有时是程序员故意设计的。

3.5.3 死锁的必要条件

1、互斥条件:只有对必须互斥使用的资源的争抢才会导致死锁(如哲学家的筷子、打印机设备)。像内存、扬声器这样可以同时让多个进程使用的资源是不会导致死锁的(因为进程不用阻塞等待这种资源)。2、不剥夺条件:进程所获得的资源在未使用完之前,不能由其他进程强行夺走,只能主动释放。3、请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又被其他进程占有,此时请求进程被阻塞,但又对自己已有的资源保持不放。4、循环等待条件:存在一种进程资源的循环等待链,链中的每一个进程已获得的资源同时被下一个进程所请求。

3.5.4 什么时候发生死锁

1、对系统资源的竞争。各进程对不可剥夺的资源(如打印机)的竞争可能引起死锁,对可剥夺的资源(CPU)的竞争是不会引起死锁的。2、进程推进顺序非法。请求和释放资源的顺序不当,也同样会导致死锁。例如,并发执行的进程P1、P2分别申请并占有了资源R1、R2,之后进程p1又紧接着申请资源R2,而进程p2又申请资源R1,两者会因为申请的资源被对方占有而阻塞,从而发生死锁。3、信号量的使用不当也会造成死锁。如生产者-消费者问题中,如果实现互斥的P操作在实现同步的P操作之前,就有可能导致死锁。(可以把互斥信号量、同步信号量也看做是一种抽象的系统资源)

3.5.5 死锁的处理策略

1、预防死锁。破坏死锁产生的四个必要条件中的一个或几个。2、避免死锁。用某种方法防止系统进入不安全状态,从而避免死锁(银行家算法)。3、死锁的检测和解除。允许死锁的发生,不过操作系统会负责检测出死锁的发生,然后采取某种措施解除死锁。
预防死锁:
在这里插入图片描述

死锁避免——银行家算法

数据结构:长度为m的一维数组 Available表示还有多少可用资源,n×m矩阵Max表示各进程对资源的最大需求数,n×m矩阵Allocation表示已经给各进程分配了多少资源,n×m矩阵Max - Allocation = Need矩阵表示各进程最多还需要多少资源。用长度为m的一位数组Request表示进程此次申请的各种资源数。
算法步骤:检查当前的剩余可用资源是否能满足某个进程的最大需求,如果可以,就把该进程加入安全序列,并把该进程持有的资源全部回收。不断重复上述过程,看最终是否能让所有进程都加入安全序列。

死锁的检测与解除:

1、死锁的检测:为了能对系统是否已发生了死锁进行检测,必须:①用某种数据结构来保存资源的请求和分配信息;②提供一种算法,利用上述信息来检测系统是否已进入死锁状态。
如果按上述过程分析,资源分配图最终能消除所有边,就称这个图是可完全简化的。此时一定没有发生死锁(相当于能找到一个安全序列)。如果最终不能消除所有边,那么此时就是发生了死锁。
2、死锁的解除:资源剥夺法。挂起(暂时放到外存上)某些死锁进程,并抢占它的资源,将这些资源分配给其他的死锁进程。但是应防止被挂起的进程长时间得不到资源而饥饿。撤销进程法(或称终止进程法)。强制撤销部分、甚至全部死锁进程,并剥夺这些进程的资源。这种方式的优点是实现简单,但所付出的代价可能会很大。因为有些进程可能已经运行了很长时间,已经接近结束了,一旦被终止可谓功亏一篑,以后还得从头再来。3、进程回退法。让一个或多个死锁进程回退到足以避免死锁的地步。这就要求系统要记录进程的历史信息,设置还原点。

3.6 进程同步的方法

1.使用fork系统调用创建进程:使用fork系统调用无参数,fork会返回两次,分别返回子进程id和0,返回子进程id的是父进程,返回0的是子进程。(fork系统调用是用于创建进程的;fork创建的进程初始化状态与父进程一样;系统会为fork的进程分配新的资源)
2.共享内存:在某种程度上,多进程是共同使用物理内存的,但是由于操作系统的进程管理,进程间的内存空间是独立的,因此进程默认是不能访问进程空间之外的内存空间的。(共享存储允许不相关的进程访问同一片物理内存;共享内存是两个进程之间共享和传递数据最快的方式;共享内存未提供同步机制,需要借助其他机制管理访问;)
3.Unix域套接字,域套接字是一种高级的进程间通信的方法,可以用于同一机器进程间通信。套接字(socket):为网络通信中使用的术语。Unix系统提供的域套接字提供了网络套接字类似的功能,如Nfinx、uWSGI等。服务端和客户端分别使用Unix域套接字的过程:

3.7 线程同步方法

1、互斥锁:互斥锁是最简单的线程同步的方法,也称为互斥量,处于两态之一的变量:解锁和加锁,两个状态可以保证资源访问的串行。 原子性:指一系列操作不可被中断的特性,要么全部执行完成,要么全部没有执行。
2、自旋锁:自旋锁是一种多线程同步的变量,使用自旋锁的线程会反复检查锁变量是否可用,自旋锁不会让出CPU,是一种忙等待状态,即死循环等待锁被释放,自旋锁的效率远高于互斥锁。特点:避免了进程或者线程上下文切换的开销,但是不适合在单核CPU使用。
3、读写锁:是一种特殊的自旋锁,允许多个读操作同时访问资源以提高读性能,但是对写操作是互斥的,即对多读少写的操作效率提升很显著。
4、条件变量:是一种相对比较复杂的线程同步方法,条件变量允许线程睡眠,直到满足某种条件,当满足条件时,可以给该线程信号通知唤醒

3.8 Linux的进程管理

进程的类型:
前台进程:具有终端,可以和用户交互;
后台进程:没有占用终端,基本不和用户交互,优先级比前台进程低(将需要执行的命令以“&”符号结束);
守护进程:特殊的后台进程,在系统引导时启动,一直运行直到系统关闭(进程名字以“d”结尾的一般都是守护进程),如crond、sshd、httpd、mysqld…
进程的标记:
进程ID:非负整数,进程的唯一标记,每个进程拥有不同的ID;
进程的状态标记:R表示进程处于运行状态,S表示进程处于睡眠状态…

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

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

相关文章

腾讯云优惠券、代金券、云服务器折扣券领取方法及使用教程

腾讯云优惠券是腾讯云为用户提供的一种优惠活动,通常包括代金券和折扣券两种类型,代金券可以在购买腾讯云相关产品时直接抵扣订单金额,而折扣券则可以在购买腾讯云相关产品时享受一定的折扣。 腾讯云作为国内领先的云计算服务提供商&#xff…

构建客户门户的痛点及低代码工具解决方案

企业如何做好数字化转型呢? 如果笼统地说起“数字化转型”,这个概念太大了,它涉及到了企业管理中的方方面面。数字化转型是一个持续不断的过程,既要在整体上进行数字规划,也需要从细节入手,将每一个步骤进…

MQTT(详解)

什么是MQTT MQTT(Message Queuing Telemetry Transport)是一种轻量级的通信协议,用于在设备之间传输消息。它通常用于物联网(IoT)和传感器网络中,可以在不同设备之间进行可靠的通信,而且资源消耗…

单元测试,集成测试,系统测试的区别是什么?

实际的测试工作当中,我们会从不同的角度对软件测试的活动进行分类,题主说的“单元测试,集成测试,系统测试”,是按照开发阶段进行测试活动的划分。这种划分完整的分类,其实是分为四种“单元测试,…

分布式消息队列:Rabbitmq(2)

目录 一:交换机 1:Direct交换机 1.1生产者端代码: 1.2:消费者端代码: 2:Topic主题交换机 2.1:生产者代码: 2.2:消费者代码: 二:核心特性 2.1:消息过期机制 2.1.1:给队列中的全部消息指定过期时间 2.1.2:给某条消息指定过期时间 2.2:死信队列 一:交换机 1:Direct交…

Gloss优化

Gloss优化,Route – Gloss – Parameters .清除不必要的线和过孔,圆滑线,焊盘中间的线,把转角变成圆弧,自动布线总会产生一些布线效果不好、多余过孔等问题。此时可以利用allegro提供的Gloss命令对设计进行优化和调整&…

Facebook广告效果数据获取

一、背景 公司每年在Facebook和Google上投放了大量的广告,我总不能让老板登录Facebook广告投放平台上去看广告效果,其实老板只关注每天花了多少钱引来了多少客户,每个客户平均花费多少钱,其它的他才不关心,有Facebook…

工作小计-GPU硬编以及依赖库 nvcuvidnvidia-encode

工作小计-GPU编码以及依赖库 已经是第三篇关于编解码的记录了。项目中用到GPU编码很久了,因为yuv太大,所以编码显得很重要。这次遇到的问题是环境的搭建问题。需要把开发机上的环境放到docker中,以保证docker中同样可以进行GPU的编码。 1 定…

SpringCloud 微服务全栈体系(五)

第七章 Feign 远程调用 先来看我们以前利用 RestTemplate 发起远程调用的代码: 存在下面的问题: 代码可读性差,编程体验不统一 参数复杂 URL 难以维护 Feign 是一个声明式的 http 客户端,官方地址:https://github.…

国家数据局正式揭牌,数据专业融合型人才迎来发展良机

文章目录 每日一句正能量摘要《数据要素安全流通》《Python数据挖掘:入门、进阶与实用案例分析》《数据保护:工作负载的可恢复性 》《Data Mesh权威指南》《分布式统一大数据虚拟文件系统 Alluxio原理、技术与实践》《云原生数据中台:架构、方…

【安装tensorflow-CPU版本】

一、安装目的二、安装过程三、总结 一、安装目的 使自己的jupyter能用tensorflow 二、安装过程 首先打开anaconda prompt 接着输入conda list 查看自己是否安装了tensorflow 在 Python 中使用 pip 工具来升级 pip 自身并指定了使用清华大学的镜像源进行安装 python -m pip …

防雷接地检测方法应用方案

防雷接地是指为了保护建筑物、设备和人员免受雷电危害而采取的将雷电电流导入地面的措施。 地凯科技防雷接地的测试方案一般包括以下几个方面: 测试目的:明确测试的对象、范围、要求和依据。 测试内容:根据不同类型的防雷接地装置&#xf…

计算机操作系统重点概念整理-第二章 进程管理【期末复习|考研复习】

第二章 进程管理 【期末复习|考研复习】 系列文章传送门: 第一章 计算机系统概述 第二章 进程管理 第三章 进程同步 第四章 内存管理 第五章 文件管理 第六章 输出输出I/O管理 文章目录 第二章 进程管理 【期末复习|考研复习】前言二、进程管理2.1进程的定义&#…

【随机过程】布朗运动

这里写目录标题 Brownian motion Brownian motion The brownian motion 1D and brownian motion 2D functions, written with the cumsum command and without for loops, are used to generate a one-dimensional and two-dimensional Brownian motion, respectively. 使用cu…

JVM虚拟机:对象在内存中的存储布局

本文重点 在前面的过程中,我们学习了对象创建过程,那么一个对象在内存中的布局是什么样的呢? 对象在内存中的存储布局 普通对象 当我们创建一个对象的时候,它由三部分组成,分别为对象头(MarkWord+class指针(指向class对象)),实例数据(对象的成员变量),填充。如果…

C++——C++入门(二)

C 前言一、引用引用概念引用特性常引用使用场景传值、传引用效率比较值和引用的作为返回值类型的性能比较 引用和指针的区别 二、内联函数概念特性知识点提升 三、auto关键字类型别名思考auto简介auto的使用细则auto不能推导的场景 四、基于范围的for循环范围for的语法范围for的…

Linux操作系统的基础IO

目录 系统文件IOopen函数0 & 1 & 2文件描述符的分配规则重定向输入重定向输出重定向追加重定向dup2 FILE 文件系统inode 软硬链接软链接硬链接 动态库和静态库动静态库的命名方式静态库制作一个库使用库 动态库制作一个库使用库 系统文件IO open函数 int open(const …

tftp服务的搭建

TFTP服务的搭建 1 先更新一下apt包 sudo apt-get update2 服务器端(虚拟机上)安装 TFTP相关软件 sudo apt-get install xinetd tftp tftpd -y3 创建TFTP共享目录 mkdir tftp_sharetftp_shaer的路径是/home/cwz/tftp_share 3.1 修改共享目录的权限 sudo chmod -R 777 tftp…

网络基础-2

IEEE制定了一个名为GARP的协议框架,该框架协议包含了两个具体协议,GMRP和GVRP。GVRP可以大大降低VLAN配置过程中的手工的工作量。 IP本身是一个协议文件的名称,该协议主要定义阐释了IP报文的格式。 类型网络号位数网络号个数主机号位数每个…

element-ui vue2 iframe 嵌入外链新解

效果如图 实现原理 在路由中通过 props 传值 {path: /iframe,component: Layout,meta: { title: 小助手, icon: example },children: [{path: chatglm,name: chatglm,props: { name: chatglm,url: https://chatglm.cn },component: () > import(/views/iframe/common),me…