操作系统知识点总结(四)进程同步和临界区互斥问题

2023-11-10

一)进程同步的基本概念:临界资源、同步和互斥

在多道程序环境下,进程是并发执行的,不同进程之间存在着不同的相互制约关系。为了协调进程之间的相互制约关系,引入了进程同步的概念。

临界资源

虽然多个进程可以共享系统中的各种资源,但其中许多资源一次只能为一个进程所使用,我们把一次仅允许一个进程使用的资源称为临界资源。许多物理设备都属于临界资源,如打印机等。此外,还有许多变量、数据等都可以被若干进程共享,也属于临界资源。

对临界资源的访问,必须互斥地进行,在每个进程中,访问临界资源的那段代码称为临界区。为了保证临界资源的正确使用,可以把临界资源的访问过程分成四个部分:

  • 进入区。为了进入临界区使用临界资源,在进入区要检查可否进入临界区,如果可以进入临界区,则应设置正在访问临界区的标志,以阻止其他进程同时进入临界区。
  • 临界区。进程中访问临界资源的那段代码,又称临界段。
  • 退出区。将正在访问临界区的标志清除。
  • 剩余区。代码中的其余部分。
 
  1. do {
        entry section;  //进入区
        critical section;  //临界区
        exit section;  //退出区
        remainder section;  //剩余区
    } while (true)

     

同步

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

例如,输入进程A通过单缓冲向进程B提供数据。当该缓冲区空时,进程B不能获得所需数据而阻塞,一旦进程A将数据送入缓冲区,进程B被唤醒。反之,当缓冲区满时,进程A被阻塞,仅当进程B取走缓冲数据时,才唤醒进程A。

互斥

互斥亦称间接制约关系。当一个进程进入临界区使用临界资源时,另一个进程必须等待, 当占用临界资源的进程退出临界区后,另一进程才允许去访问此临界资源。

例如,在仅有一台打印机的系统中,有两个进程A和进程B,如果进程A需要打印时, 系统已将打印机分配给进程B,则进程A必须阻塞。一旦进程B将打印机释放,系统便将进程A唤醒,并将其由阻塞状态变为就绪状态。

为禁止两个进程同时进入临界区,同步机制应遵循以下准则:

  • 空闲让进。临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区。
  • 忙则等待。当已有进程进入临界区时,其他试图进入临界区的进程必须等待。
  • 有限等待。对请求访问的进程,应保证能在有限时间内进入临界区。
  • 让权等待。当进程不能进入临界区时,应立即释放处理器,防止进程忙等待。

二 )实现临界区互斥的基本方法

软件实现方法

在进入区设置和检查一些标志来标明是否有进程在临界区中,如果已有进程在临界区,则在进入区通过循环检查进行等待,进程离开临界区后则在退出区修改标志。

1) 算法一:单标志法。

该算法设置一个公用整型变量turn,用于指示被允许进入临界区的进程编号,即若turn=0,则允许P0进程进入临界区。该算法可确保每次只允许一个进程进入临界区。但两个进程必须交替进入临界区,如果某个进程不再进入临界区了,那么另一个进程也将进入临界区(违背“空闲让进”)这样很容易造成资源利用的不充分。

// P0进程
while(turn!=0);
critical section;
turn=1;
remainder section;
// P1进程
while(turn!=1); // 进入区
critical section; // 临界区
turn = 0; // 退出区
remainder section; // 剩余区

2) 算法二:双标志法先检查。

该算法的基本思想是在每一个进程访问临界区资源之前,先查看一下临界资源是否正被访问,若正被访问,该进程需等待;否则,进程才进入自己的临界区。为此,设置了一个数据flag[i],如第i个元素值为FALSE,表示Pi进程未进入临界区,值为TRUE,表示Pi进程进入临界区。

// Pi 进程
while(flag[j]); // ①
flag[i]=TRUE; // ③
critical section;
flag[i] = FALSE;
remainder section;
 
// Pj 进程
while(flag[i]); // ② 进入区
flag[j] =TRUE; // ④ 进入区
critical section; // 临界区
flag[j] = FALSE; // 退出区
remainder section; // 剩余区
优点:不用交替进入,可连续使用;缺点:Pi和Pj可能同时进入临界区。按序列①②③④ 执行时,会同时进入临界区(违背“忙则等待”)。即在检查对方flag之后和切换自己flag 之前有一段时间,结果都检查通过。这里的问题出在检查和修改操作不能一次进行。

3) 算法三:双标志法后检查。

算法二是先检测对方进程状态标志后,再置自己标志,由于在检测和放置中可插入另一个进程到达时的检测操作,会造成两个进程在分别检测后,同时进入临界区。为此,算法三釆用先设置自己标志为TRUE后,再检测对方状态标志,若对方标志为TURE,则进程等待;否则进入临界区。

 
  1. // Pi进程
  2. flag[i] =TRUE;
  3. while(flag[j]);
  4. critical section;
  5. flag[i] =FLASE;
  6. remainder section;
 
  1. // Pj进程
  2. flag[j] =TRUE; // 进入区
  3. while(flag[i]); // 进入区
  4. critical section; // 临界区
  5. flag [j] =FLASE; // 退出区
  6. remainder section; // 剩余区


当两个进程几乎同时都想进入临界区时,它们分别将自己的标志值flag设置为TRUE,并且同时检测对方的状态(执行while语句),发现对方也要进入临界区,于是双方互相谦让,结果谁也进不了临界区,从而导致“饥饿”现象。

4)算法四:Peterson’s Algorithm。

为了防止两个进程为进入临界区而无限期等待,又设置变量turn,指示不允许进入临界区的进程编号,每个进程在先设置自己标志后再设置turn 标志,不允许另一个进程进入。这时,再同时检测另一个进程状态标志和不允许进入标志,这样可以保证当两个进程同时要求进入临界区,只允许一个进程进入临界区。

 
  1. // Pi进程
  2. flag[i]=TURE; turn=j;
  3. while(flag[j]&&turn==j);
  4. critical section;
  5. flag[i]=FLASE;
  6. remainder section;
 
  1. // Pj进程
  2. flag[j] =TRUE;turn=i; // 进入区
  3. while(flag[i]&&turn==i); // 进入区
  4. critical section; // 临界区
  5. flag[j]=FLASE; // 退出区
  6. remainder section; // 剩余区


本算法的基本思想是算法一和算法三的结合。利用flag解决临界资源的互斥访问,而利用turn解决“饥饿”现象。

硬件实现方法

本节对硬件实现的具体理解对后面的信号量的学习很有帮助。计算机提供了特殊的硬件指令,允许对一个字中的内容进行检测和修正,或者是对两个字的内容进行交换等。通过硬件支持实现临界段问题的低级方法或称为元方法。

1) 中断屏蔽方法

当一个进程正在使用处理机执行它的临界区代码时,要防止其他进程再进入其临界区访问的最简单方法是禁止一切中断发生,或称之为屏蔽中断、关中断。因为CPU只在发生中断时引起进程切换,这样屏蔽中断就能保证当前运行进程将临界区代码顺利地执行完,从而保证了互斥的正确实现,然后再执行开中断。其典型模式为:

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


这种方法限制了处理机交替执行程序的能力,因此执行的效率将会明显降低。对内核来说,当它执行更新变量或列表的几条指令期间关中断是很方便的,但将关中断的权力交给用户则很不明智,若一个进程关中断之后不再开中断,则系统可能会因此终止。

2) 硬件指令方法

TestAndSet指令:这条指令是原子操作,即执行该代码时不允许被中断。其功能是读出指定标志后把该标志设置为真。指令的功能描述如下:

 
  1. boolean TestAndSet(boolean *lock){
  2. boolean old;
  3. old = *lock;
  4. *lock=true;
  5. return old;
  6. }


可以为每个临界资源设置一个共享布尔变量lock,表示资源的两种状态:true表示正被占用,初值为false。在进程访问临界资源之前,利用TestAndSet检查和修改标志lock;若有进程在临界区,则重复检查,直到进程退出。利用该指令实现进程互斥的算法描述如下:

 
  1. while TestAndSet (& 1 ock);
  2. // 进程的临界区代码段;
  3. lock=false;
  4. // 进程的其他代码


Swap指令:该指令的功能是交换两个字节的内容。其功能描述如下。

 
  1. Swap(boolean *a, boolean *b){
  2. boolean temp;
  3. Temp=*a;
  4. *a = *b;
  5. *b = temp;
  6. }


注意:以上对TestAndSet和Swap指令的描述仅仅是功能实现,并非软件实现定义,事实上它们是由硬件逻辑直接实现的,不会被中断。

应为每个临界资源设置了一个共享布尔变量lock,初值为false;在每个进程中再设置一个局部布尔变量key,用于与lock交换信息。在进入临界区之前先利用Swap指令交换lock 与key的内容,然后检查key的状态;有进程在临界区时,重复交换和检查过程,直到进程退出。利用Swap指令实现进程互斥的算法描述如下:

 
  1. key=true;
  2. while(key!=false)
  3. Swap(&lock, &key);
  4. // 进程的临界区代码段;
  5. lock=false;
  6. // 进程的其他代码;


硬件方法的优点:适用于任意数目的进程,不管是单处理机还是多处理机;简单、容易验证其正确性。可以支持进程内有多个临界区,只需为每个临界区设立一个布尔变量。
硬件方法的缺点:进程等待进入临界区时要耗费处理机时间,不能实现让权等待。从等待进程中随机选择一个进入临界区,有的进程可能一直选不上,从而导致“饥饿”现象。

 

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

操作系统知识点总结(四)进程同步和临界区互斥问题 的相关文章

  • 操作系统第一章阶段性测试题——教材:计算机操作系统(第4版)汤小丹、汤子瀛

    操作系统 xff08 第一章 xff09 阶段性测试 一 单选题 xff08 15 题 xff0c 每题 4 分 xff0c 共 60 分 xff09 1 操作系统负责管理计算机系统的 xff08 C xff09 xff0c 其中包括处理机
  • Java面试必背八股文[12]:计算机操作系统

    进程和线程有什么区别 xff1f 进程 xff08 Process xff09 是系统进行资源分配和调度的基本单位 xff0c 线程 xff08 Thread xff09 是CPU调度和分派的基本单位 xff1b 线程依赖于进程而存在 xf
  • 操作系统重要概念——异步性

    在多道程序环境下 允许多个进程并发执行 进程在使用资源时可能需要等待或放弃 进程的执行并不是一气成的 而是以走走停停的形式推进 如下举例 进程以不可预知的速度向前推进 何时执行 何时暂停 何时完成都是未知的 这就造成了系统的异步性
  • CentOS 7下go环境配置(超多问题)

    文章目录 1 安装Visual Code 2 获得golang安装包并安装 3 第一个GO语言程序 hello go 4 安装必要工具与插件 1 安装Visual Code 在终端中安装VScode 使用以下命令 sudo rpm impo
  • 计算机指令格式

    计算机的指令格式与机器的字长 存储器的容量及指令的功能都有很大的关系 从便于程序设计 增加基本操作并行性 提高指令功能的角度来看 指令中应包含多种信息 但在有些指令中 由于部分信息可能无用 这将浪费指令所占的存储空间 并增加了访存次数 也许
  • 【Linux开发】编写属于你的第一个Linux内核模块

    曾经多少次想要在内核游荡 曾经多少次茫然不知方向 你不要再对着它迷惘 让我们指引你走向前方 内核编程常常看起来像是黑魔法 而在亚瑟 C 克拉克的眼中 它八成就是了 Linux内核和它的用户空间是大不相同的 抛开漫不经心 你必须小心翼翼 因为
  • 如何做代码评审(code review)

    1 定义 Code Review 即日常所说的代码评审或代码回顾 主要是在软件开发的过程中 对功能源代码进行评审 其目的是找出并修正软件开发过程中出现的错误的过程 提高和改进代码质量的过程 2 目的 2 1 提前发现缺陷 code revi
  • 操作系统系列(三)——编译和链接

    往期地址 操作系统系列一 操作系统概述 操作系统系列二 进程 本期主题 编译和链接 文章目录 1 被隐藏了的过程 1 1 预编译 1 2 编译 1 3 汇编 1 4 链接 1 模块拼接 静态链接 2 空间地址与分配 3 符号解析和重定位 核
  • 计操理论课09 -- openEuler实验第八章网络管理

    文章目录 任务1 编写基于socket的udp发送接收程序 45min 任务要求 任务代码 任务截图 任务2 使用 tshark 抓包 10min 任务要求 任务过程及截图 任务3 使用 setsockopt 发送记录路由选项 25min
  • 【计算机操作系统】第四章 存储器管理

    1 存储器的结构层次 1 1 多级存储结构 对于通用计算机而言 存储层次至少应具有三级 最高层为 CPU 寄存器 中间为主存 最底层是辅存 在较高档的计算机中 还可以根据具体的功能分工细划为寄存器 高速缓存 主存储器 磁盘缓存 固定磁盘 可
  • 计算机操作系统知识架构整理

    计算机操作系统 操作系统引论 操作系统的目标与应用 操作系统的目标 操作系统的作用 推动操作系统发展的主要动力 操作系统的发展过程 无操作系统的计算机系统 单道批处理系统 多道批处理系统 分时系统 实时系统 微机操作系统的发展 操作系统的基
  • 操作系统知识点总结(四)进程同步和临界区互斥问题

    一 进程同步的基本概念 临界资源 同步和互斥 在多道程序环境下 进程是并发执行的 不同进程之间存在着不同的相互制约关系 为了协调进程之间的相互制约关系 引入了进程同步的概念 临界资源 虽然多个进程可以共享系统中的各种资源 但其中许多资源一次
  • 计算机操作系统之期末考试复习——进程的基本状态及转换

    进程的基本状态 就绪状态 Ready 进程已处于准备好运行的状态 即进程已分配到除CPU以外的所有必要资源后 只要获得CPU 便可立即执行 执行状态 Running 进程以获得CPU 其程序正在执行的状态 阻塞状态 Block 正在执行的进
  • 计算机操作系统面试题

    一 认识汇编语言 汇编的本质是机器语言的助记符号 汇编语言本质就是机器语言 二 CPU的基本组成 PC 程序计数器 记录将要执行的指令的地址 Registers 暂时存储CPU计算需要用到的数据 ALU 寄存器中取到数据 进行运算然后将结果
  • 计操理论课08 -- openEuler实验第七章文件系统

    文章目录 任务1 为 Ext4 文件系统添加扩展属性 25min 任务描述 任务过程及截图 任务2 注册一个自定义的文件系统类型 15min 任务描述 任务代码 任务截图 任务3 在 proc下创建目录 20min 任务描述 任务代码 任务
  • 考研OR工作----计算机操作系统简答题及疑难知识点总结(第三章 处理机调度与死锁)

    上一篇文章总结了一些关于进程的知识点 这章的目的也是根据 计算机操作系统 第四版 汤子瀛 的书来总结一下进程调度和死锁的相关知识点 这一章其实和上一章紧密相连 所以如果没有基础或基础较差 对一些概念还有些模糊 的朋友们先去看上一章的简答题总
  • Linux系统(二)——Linux环境下的开发工具

    接着上一篇博客 把Linux环境下常用的vim编辑器 gcc工具链 makefile和gdb等工具的使用理一理 一 vim编辑器 1 工作模式 vim是Linux常用文本编辑器 vim有两种基本工作模式 命令模式 输入的字符作为命令使用 不
  • 计算机操作系统实验三 进程间的通信

    一 实验目的 1 了解什么是管道 2 熟悉UNIX LINUX支持的管道通信方式 3 了解什么是消息 4 熟悉消息传送的机理 二 实验内容 1 编写程序实现进程的管道通信 用系统调用pipe 建立一管道 二个子进程P1和P2分别向管道各写一
  • 系统调用:用户级函数如何通过INT 80中断进入操作系统内核

    以printf 打印内核中的一段字符串为例 printf 是用户函数无法进入内核 因此需要进行系统调用 进入内核的方式是使用int 0x80中断 printf 函数想要进入系统内核是通过系统调用write 实现 位置 linux lib w
  • unity: C#的Action Event Delegate的异同

    目录 一 Action 二 Event 三 Action和Event区别 四 Delegate 总结 Action Event Delegate的异同 前言 Action Event和Delegate都是C 语言中的重要概念 分别用于管理函

随机推荐

  • Coverless Image Steganography Based on Generative Adversarial Network

    基于生成对抗网络的无载体图像隐写技术 摘要 传统图像隐写技术 修改 嵌入到载体图像来传输秘密信息 gt 隐写工具很容易检测到载体图像的失真 gt 秘密信息的泄露 无载体图像隐写技术 不修改载体图像就可以隐藏秘密信息 但存在容量低 质量差等问
  • 操作系统地址重定位相关练习题

    一 问题描述 某虚拟存储器的用户空间共有32个页面 每页1KB 主存16KB 假定某时刻系统为用户的第0 1 2 3页分配的物理块号为5 10 4 7 而该用户作业的长度为6页 试将十六进制的虚拟地址0A5C 103C转换成物理地址 二 正
  • ★【动态规划】【线段树】基站选址

    问题描述 有N个村庄坐落在一条直线上 第i i gt 1 个村庄距离第1个村庄的距离为Di 需要在这些村庄中建立不超过K个通讯基站 在第i个村庄建立基站的费用为Ci 如果在距离第i个村庄不超过Si的范围内建立了一个通讯基站 那么就成它被覆盖
  • 华为od机考题目-IPv4地址转换成为整数

    while 1 try nums list map int input split if len nums 4 有效ip 为 4段
  • Leetcode No. 136. Single Number

    Given an array of integers every element appears twice except for one Find that single one Note Your algorithm should ha
  • 面试官:你对Kafka了解吗?这41个问题你能答出几个

    一 请说明什么是Apache Kafka Apache Kafka是由Apache开发的一种发布订阅消息系统 它是一个分布式的 分区的和重复的日志服务 二 请说明什么是传统的消息传递方法 传统的消息传递方法包括两种 排队 在队列中 一组用户
  • 微信小程序真机调试实现获取本地服务器数据

    一般来说 如果不涉及到后端数据 我们通过微信小成开发工具预览功能是可以直观看到项目的情况的 但是一旦涉及到后端本地服务器数据 预览是无法获取到的 而真机调试得按下面操作才能实现 通过win r 打开命令行工具 输入ipconfig 如果你是
  • 关于RT-Thread中优先级翻转问题的简记

    最近在学习RT Thread的相关知识 记录一下心得 优先级翻转 是指当一个高优先级线程试图通过信号量机制访问共享资源时 如果该信号量已被低优先级线程持有 而这个低优先级线程在运行过程中可能又被其他一些中等优先级的线程抢占 从而造成高优先级
  • python-opencv 调取摄像头并保存图片

    通过opencv python 调用摄像头并保存图片 import torch coding utf 8 import numpy as np import cv2 import matplotlib pyplot as plt cap c
  • Hadoop(部署篇)

    目录 Hadoop三种运行模式 本地运行模式 伪分布式运行模式 完全分布式运行模式 开发重点 Hadoop三种运行模式 Hadoop 运行模式包括 本地模式 伪分布式模式以及完全分布式模式 Hadoop 官方网站 http hadoop a
  • this指针

    文章目录 this指针 this指针的引出 this指针的特性 this指针的样子 this指针能空吗 this指针 this指针的引出 首先我们来看一下下面这段简单的代码 include
  • 推拉模式

    推 push 模式是一种基于客户器 服务器机制 由服务器主动将信息送到客户器的技术 联想一下木马的端口反弹技术 在push模式应用中 服务器把信息送给客户器之前 并没有明显的客户请求 push事务由服务器发起 push模式可以让信息主动 快
  • 手机连电脑USB选择MTP连接方式,并解决没有MTP选项的问题

    MTP全称是 Media Transfer Protocol 中文译作 文件传输 usb选择MTP的一般步骤 手机连电脑 usb连接方式选择MTP 如果没有MTP 选择 File Transfer或文件传输或设备文件管理 即为打开usb的M
  • React:非受控组件&ref

    非受控组件 在受控组件中 表单数据由react处理 让表单数据由dom处理 就是非受控组件 使用ref从DOM中获取表单数据 点击按钮 Input输入框获得焦点 import React from react class H extends
  • 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接

    启动服务失败 报错信息 com microsoft sqlserver jdbc SQLServerException 驱动程序无法通过使用安全套接字层 SSL 加密与 SQL Server 建立安全连接 错误 sun security v
  • IDEA 代码质量规范插件SonarLint

    IDEA 安装SonarLint插件 1 打开setting 找到Plugins选项 安装SonarLint 插件 如果有就跳过这一步 检索 SonarLint 安装成功后 重新启动IDEA编辑器 2 使用SonarLint 手动检测类文件
  • linux部署web服务器-Nginx

    linux部署web服务器 Nginx 前言 有很多小伙伴想要建立一个自己的web站点 今天就给大家演示一下 准备工作 1 Nginx安装包 2 Linux服务器 3 PCRE安装包 4 手 方式一 手动编译安装 1 安装编译库 yum y
  • jpa利用Specification实现多条件查询排序

    Entity实体类 import java time Instant import javax persistence Column import javax persistence Entity import javax persiste
  • js大纲(流程控制语句对象,函数,数组等)

    一 运算符 1 逻辑运算符 非运算 与运算 像爱情 或运算 像亲情 2 赋值运算符 3 关系运算符 gt gt lt lt 非数值比较时先转换为数字再比较 比较字符串中字符的Unicode编码 4 相等运算符 5 条件运算符也叫三元运算符
  • 操作系统知识点总结(四)进程同步和临界区互斥问题

    一 进程同步的基本概念 临界资源 同步和互斥 在多道程序环境下 进程是并发执行的 不同进程之间存在着不同的相互制约关系 为了协调进程之间的相互制约关系 引入了进程同步的概念 临界资源 虽然多个进程可以共享系统中的各种资源 但其中许多资源一次