软考89-上午题-【操作系统】-同步与互斥

2024-03-22 00:28

本文主要是介绍软考89-上午题-【操作系统】-同步与互斥,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、进程间的通信

        在多道程序环境的系统中存在多个可以并发执行的进程,故进程间必然存在资源共享(互斥)和相互合作(同步)的问题。进程通信是指各个进程交换信息的过程。

同步是合作进程间的直接制约问题,互斥是申请临界资源进程间的间接制约问题.

1-1、同步

在计算机系统中,多个进程可以并发执行,每个进程都以各自独立的、不可预知的速度向前推进,即,异步执行。

但是需要在某些确定点上协调相互合作进程间的工作。例如,进程 A 向缓冲区送数据,进程 B 从缓冲区取数据加工,当进程 B 要取数据加工时,必须是进程 A 完成了向缓冲区送数据的操作,否则进程 B 必须停下来等待进程 A 的操作结束。

可见,所谓进程间的同步是指在系统中一些需要相互合作,协同工作的进程,这样的相互联系称为进程的同步。

1-2、互斥

进程的互斥是指系统中多个进程因争用临界资源而互斥执行。

在多道程序系统环境中,各进程可以共享各类资源,但有些资源一次只能供一个进程使用,称为临界资源 (CriticalResource,CR),如:打印机、共享变量和表格等。

1-3、临界资源管理的原则

临界区,是进程中对临界资源实施操作的那段程序。

对互斥临界区管理的 4 条原则如下:

(1)有空即进

        当无进程处于临界区时,允许进程进入临界区,并且只能在临界区运行有限的时间。(不能一直占用资源不放)

(2) 无空则等

        当有一个进程在临界区时,其他欲进入临界区的进程必须等待,以保证进程互斥地访问临界资源。

(3)有限等待

        对于要求访问临界资源的进程,应保证进程能在有限的时间进入临界区以免陷入“饥饿”状态。

(4) 让权等待

        当进程不能进入自己的临界区时,应立即释放处理机(CPU),以免进程陷入忙等状态。

忙等状态:

当一个进程因某个事件(如等待某个资源或条件成立)而无法继续执行时,它仍然占用着CPU。任何试图进入其临界区的进程都必须等待,进入忙等状态。

忙等状态的主要缺点是它会浪费CPU的时间,因为进程在等待期间仍然占据着CPU资源,不能进行其他有用的工作。

1-4、信号量机制  

信号量机制,是一种有效的进程同步、互斥工具。

1-4-1、整型信号量

信号量是一个整型变量,根据控制对象的不同被赋予不同的值。

信号量分为如下两类:

(1) 公用信号量。实现进程间的互斥,初值为 1 或资源的数目。

(2) 私用信号量。实现进程间的同步,初值为 0 或某个正整数。

信号量 S 的物理意义:

  • S>=0 表示某资源的可用数
  • S<0,则其绝对值表示阻塞队列中等待该资源的进程数

S=-1,即:阻塞队列中有一个资源在等待。

1-5、PV操作

对于系统中的每个进程,其工作的正确与否不仅取决于它自身的正确性,而且与它在执行中能否与其他相关进程正确地实施同步、互斥有关。

PV 操作是实现进程同步、互斥的常用方法。

P 操作和 V 操作是低级通信原语,在执行期间不可分割。其中,P 操作:表示申请一个资源,V操作:表示释放一个资源。

P操作和V操作:成对出现。

1-5-1、P操作(申请一个资源)

P 操作的定义: S:=S-1

若 S>=0,则执行 P 操作的进程继续执行;

若 S<0,则置该进程为阻塞状态/等待队列(因为无可用资源),并将其插入阻塞队列

1-5-2、V操作(释放一个资源)

V操作定义:S:=S+1

若 S>0,则执行V操作的进程继续执行;

若 S<0,则从阻塞队列唤醒一个进程,并将其插入就绪队列,然后执行V操作的进程继续。

S+1<0,说明有进程在阻塞队列中等待资源,如:P2。此时,有资源被释放,则将资源给P2,将P2插入就绪队列。

1-5-3、真题

真题1:

真题2:

真题3:

真题4: 

真题5:

1-6、利用PV操作实现进程的互斥

令信号量 mutex 的初值为 1,当进入临界区时执行P操作,退出临界区时执行V操作。

这样,利用 PV操作实现进程互斥的代码段如下:

P(mutex)

    临界区

V(mutex)

示例:

1-7、利用PV操作实现进程的同步

进程的同步是由于进程间合作引起的相互制约的问题,要实现进程的同步可用一个信号量与消息联系起来,当信号量的值为0时,表示希望的消息未产生,当信号量的值为非0时,表示希望的消息已经存在。

假定用信号量S表示某条消息,进程可以通过调用P操作测试消息是否到达,调用V操作通知消息已准备好。

最典型的同步问题是单缓冲区的生产者和消费者的同步问题。

1-7-1、生产者、消费者问题

  • 生产者进程P1:不断地生产产品送入缓冲区;
  • 消费者进程P2,不断地从缓冲区中取产品消费。

1、单缓冲区

缓冲区可以存放1件产品。

为了实现P1与P2,进程间的同步问题,需要设置两个信号量S1、S2方案:

信号量S1,初值为1,表示缓冲区空,可以将产品送入缓冲区;

生产者可以往缓冲区中可以放几个产品

信号量S2,的初值为0,表示缓冲区有产品。

消费者可以往缓冲区中取几个产品。

【回顾】:

P 操作的定义: S:=S-1

  • 若 S>=0,则执行 P 操作的进程继续执行;
  • 若 S<0,则置该进程为阻塞状态/等待队列(因为无可用资源),并将其插入阻塞队列

V操作定义:S:=S+1

  • 若 S>0,则执行V操作的进程继续执行;
  • 若 S<0,则从阻塞队列唤醒一个进程,并将其插入就绪队列,然后执行V操作的进程继续。

2、多缓冲区

缓冲区可以存放n件产品。 

生产者不断地生产产品,消费者不断地消费产品,为了实现P1与P2,进程间的同步问题,需要设置三个信号量:S、S1、S2:

S1:初值=n,是否可以将产品放入缓冲区;

生产者可以往缓冲区中可以放几个产品

S2:初值=0,缓冲区是否存有产品;

消费者可以往缓冲区中取几个产品。

S:互斥信号量初值=1,因为缓冲区是一个互斥资源,所以要进行互斥控制。

3、真题

真题1:

S1,S2是同步信号量;

S是互斥信号量。

真题2:

真题3:

这篇关于软考89-上午题-【操作系统】-同步与互斥的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/834171

相关文章

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

Linux操作系统 初识

在认识操作系统之前,我们首先来了解一下计算机的发展: 计算机的发展 世界上第一台计算机名叫埃尼阿克,诞生在1945年2月14日,用于军事用途。 后来因为计算机的优势和潜力巨大,计算机开始飞速发展,并产生了一个当时一直有效的定律:摩尔定律--当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。 那么相应的,计算机就会变得越来越快,越来越小型化。

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

【软考】希尔排序算法分析

目录 1. c代码2. 运行截图3. 运行解析 1. c代码 #include <stdio.h>#include <stdlib.h> void shellSort(int data[], int n){// 划分的数组,例如8个数则为[4, 2, 1]int *delta;int k;// i控制delta的轮次int i;// 临时变量,换值int temp;in

java线程深度解析(二)——线程互斥技术与线程间通信

http://blog.csdn.net/daybreak1209/article/details/51307679      在java多线程——线程同步问题中,对于多线程下程序启动时出现的线程安全问题的背景和初步解决方案已经有了详细的介绍。本文将再度深入解析对线程代码块和方法的同步控制和多线程间通信的实例。 一、再现多线程下安全问题 先看开启两条线程,分别按序打印字符串的

MySQL主从同步延迟原理及解决方案

概述 MySQL的主从同步是一个很成熟的架构,优点为: ①在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力; ②在从主服务器进行备份,避免备份期间影响主服务器服务; ③当主服务器出现问题时,可以切换到从服务器。 相信大家对于这些好处已经非常了解了,在项目的部署中也采用这种方案。但是MySQL的主从同步一直有从库延迟的问题,那么为什么会有这种问题。这种问题如何解决呢? MyS

使用条件变量实现线程同步:C++实战指南

使用条件变量实现线程同步:C++实战指南 在多线程编程中,线程同步是确保程序正确性和稳定性的关键。条件变量(condition variable)是一种强大的同步原语,用于在线程之间进行协调,避免数据竞争和死锁。本文将详细介绍如何在C++中使用条件变量实现线程同步,并提供完整的代码示例和详细的解释。 什么是条件变量? 条件变量是一种同步机制,允许线程在某个条件满足之前进入等待状态,并在条件满

mysql创建新表,同步数据

import os import argparse import glob import cv2 import numpy as np import onnxruntime import tqdm import pymysql import time import json from datetime import datetime os.environ[“CUDA_VISIBLE_DEVICE