操作系统之《PV操作》【知识点+详细解题过程】

1、并发进程 :

并发的实质是一个处理器在几个进程之间的多路复用,并发是对有限的物理资源强制行使多用户共享,消除计算机部件之间的互等现象,以提高系统资源利用率。

(1)并发进程——互斥性:

进程互斥是指若干个进程因相互争夺独占型资源时所产生的竞争制约关系。

(2)并发进程——同步性:

进程同步指两个以上进程基于某个条件来协调它们的活动。一个进程的执行依赖于协作进程的消息或信号,当一个进程没有得到来自于协作进程的消息或信号时需等待,直到消息或信号到达才被唤醒。

(3)两者关系:

进程互斥关系是一种特殊的进程同步关系,即逐次使用互斥共享资源,是对进程使用资源次序上的一种协调。

2、临界区管理:

(1)并发进程中与共享变量有关的程序段叫“临界区”,指进程中用于访问共享资源的那段代码。

(2)共享变量代表的资源叫“临界资源”。

(3)为了保证临界资源的正确使用,可以把临界资源的访问过程分成以下几部分:  

  • 进入区—增加在临界区前面的一段代码,用于检查欲访问的临界资源此刻是否被访问。
  • 退出区—增加在临界区后面的一段代码,用于将临界资源的访问标志恢复为未被访问标志。

3、临界区(互斥)问题的几类方法:

 (1)软 件 方 法

 (2)硬 件 方 法

 (3)P、V 操 作

  • 设s为一个记录型数据结构,一个分量为整形量value,另一个为信号量队列list为等待此类资源的指针。
  •  P(s);将信号量s减去l,若结果小于0,则调用P(s)的进程被置成等待信号量s的状态。
  •  V(s):将信号量s加1,若结果不大于0,则释放一个等待信号量s的进程。

4、习题演练:

1、在一个盒子里,混装了数量相等的黑白围棋子。现在用自动分拣系统把黑子、白子分开,设分拣系统有二个进程P1 和P2,其中P1 拣白子;P2 拣黑子。规定每个进程每次拣一子;当一个进程在拣时,不允许另一个进程去拣;当一个进程拣了一子时,必须让另一个进程去拣。试写出两进程P1 和P2 能并发正确执行的程序。

main(){
    Semaphore mutex,S1,S2;
    mutex=1;
    S1=1;
    S2=0;
    conbegin;
    Process P1(){
    While(1){
        P(S1);
        P(mutex);
        {捡白子}
        V(mutex);
        V(S2);
    }
    }
    While(1){
    Process P2(){
        P(S2);
        P(mutex);
        {捡黑子}
        V(mutex);
        V(S1);
    }
    }
    conend;
}

2、系统中有二个进程WriteData和ReadData,有一个缓冲区BUF。假设BUF中最多可放5个信息,初始值有2个信息。WriteData进程负责输入信息并送入BUF中,ReadData进程负责取出BUF中的信息并输出。编写实现WriteData和ReadData的同步与互斥的算法程序。

main(){
    Semaphore mutex,empty,message;
    mutex=1;
    empty=3;
    message=2;
    conbegin;
    Process Write(){
    While(1){
        P(empty);
        P(mutex);
        {输入信息}
        V(mutex);
        P(message);
    }}
    While(1){
    Process Read(){
        P(message);
        p(mutex);
        {输出信息}
        V(mutex);
        V(empty);
    }}
    conend;

}

 3、设公共汽车上有一个司机和一个售票员,它们的活动如下:
司机:启动车辆,正常行车,到站停车。
售票员:开车门、关车门,售票,
车辆初始状态:停放在总站、车门关闭、乘客还未上车
要求:当发车时间到,售票员开车门、乘客上(或下)车、关门后,司机才能启动车辆,售票员开始售票;当到站后,司机停车后,售票员才能打开车门,乘客下车、关门。

Semaphore: S_stop,S_run; //定义同步信号量
    S_stop=1;
    S_run=0; // 据车辆初始状态设初值
    cobegin
    {
        driver ( );
        busman ( );
    }
    coend

    process driver ( ){
        while(true)
        {
            P(S_run)
            启动车辆;正常行车;
            到站停车;
            V(Sstop);
         } 
    }

    process busman (){
        while(true)
        {
            P(Sstop);
            开车门;
            上下乘客;
            关车门;
            V(S_run);
            售票;
        }
    }

4、一个网上购物平台,假设有三类职员:

(1)接单员,负责做接收顾客采购商品清单的工作:

(2)打包员,负责顾客购置商品的打包;

(3)快递发货员,负责把包裹发送给顾客。

每类职员看做一个进程,用同步机制编写出能让这三类职员正确并发的工作程序。(接单员进程OrderTaker();打包员进程Packer();快递发货员进程Courier())

main(){
    Semaphore text,goods,car;
    text=1,goods=0,car=0;
    conbegin;

    Process OrderTaker(){
    While(){
        P(text);
        接收清单;
        V(goods);
    }}

    Process Packer(){
    While(1){
        P(goods);
        打包商品;
        V(car);
    }}

    Process Courier(){
    While(1){
        P(car);
        发货;
        V(text);
    }}
    conend;
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用Jetpack Compose实现具有多选功能的图片网格

使用Jetpack Compose实现具有多选功能的图片网格 在现代应用中,多选功能是一项常见且重要的需求。例如,Google Photos允许用户轻松选择多个照片进行分享、添加到相册或删除。在本文中,我们将展示如何使用Jetpack Compose实现类似的多选行为,最终效果如下: 主要步骤 实现…

【redis】Redis AOF

1、AOF的基本概念 AOF持久化方式是通过保存Redis所执行的写命令来记录数据库状态的。AOF以日志的形式来记录每个写操作(增量保存),将Redis执行过的所有写指令记录下来(读操作不记录)。AOF文件是一个只追加的文件&…

Redis 高级数据结构业务实践

0、前言 本文所有代码可见 > 【gitee code demo】 本文会涉及 hyperloglog 、GEO、bitmap、布隆过滤器的介绍和业务实践 1、HyperLogLog 1.1、功能 基数统计(去重) 1.2、redis api 命令作用案例PFADD key element [element ...]添加元素到keyPF…

PortSip测试

安装PBX 下载 免费下载 PortSIP PBX 安装PBX,安装后,运行 ,默认用户是admin 密码是admin,然后配置IP 为192.168.0.189 设置域名为192.168.0.189 配置分机 添加分机,添加了10001、10002、9999 三个分机&#xff0c…

深度学习实验第T2周:彩色图片分类

>- **🍨 本文为[🔗365天深度学习训练营](https://mp.weixin.qq.com/s/0dvHCaOoFnW8SCp3JpzKxg) 中的学习记录博客** >- **🍖 原作者:[K同学啊](https://mtyjkh.blog.csdn.net/)** 目录 一、前言 目标 二、我的环境&#…

【Linux进程通信】进程间通信介绍、匿名管道原理分析

目录 进程通信是什么? 进程通信的目的 进程通信的本质 匿名管道:基于文件级别的通信方式 站在文件描述符角度-深度理解管道原理 进程通信是什么? 进程通信就是两个或多个进程之间进行数据层面的交互。 进程通信的目的 1.数据传输&#x…

已解决java.security.acl.LastOwnerException:无法移除最后一个所有者的正确解决方法,亲测有效!!!

已解决java.security.acl.LastOwnerException:无法移除最后一个所有者的正确解决方法,亲测有效!!! 目录 问题分析 出现问题的场景 报错原因 解决思路 解决方法 1. 检查当前所有者数量 2. 添加新的所有者 3. 维…

mac Canon打印机连接教程

官网下载安装驱动: 选择打印机类型和mac系统型号下载即可 Mac PS 打印机驱动程序 双击安装 系统偏好设置 点击“”添加: OK可打印玩耍!! 备注: 若需扫描,下载扫描程序: 备注:…

设置小蓝熊的CPU亲和性、CPU优先级再设置法环的CPU亲和性

# 适用于Windows系统 # 时间 : 2024-06-28 # 作者 : 三巧(https://blog.csdn.net/qq_39124701) # 文件名 : 设置小蓝熊的CPU亲和性、CPU优先级再设置法环的CPU亲和性.ps1 # 使用方法: 打开记事本,将所有代码复制到记事本中,保存文件时候修改文件后…

Hugging Face Accelerate 两个后端的故事:FSDP 与 DeepSpeed

社区中有两个流行的零冗余优化器 (Zero Redundancy Optimizer,ZeRO)算法实现,一个来自DeepSpeed,另一个来自PyTorch。Hugging FaceAccelerate对这两者都进行了集成并通过接口暴露出来,以供最终用户在训练/微调模型时自主选择其中之…

zabbix-server的搭建

zabbix-server的搭建 部署 zabbix 服务端(192.168.99.180) rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm cd /etc/yum.repos.d sed -i s#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix# zabbix.r…

关于FPGA对 DDR4 (MT40A256M16)的读写控制 4

关于FPGA对 DDR4 (MT40A256M16)的读写控制 4 语言 :Verilg HDL 、VHDL EDA工具:ISE、Vivado、Quartus II 关于FPGA对 DDR4 (MT40A256M16)的读写控制 4一、引言二、DDR4 SDRAM设备中模式寄存器重要的模式寄存…

Arduino - LED 矩阵

Arduino - LED 矩阵 Arduino - LED Matrix LED matrix display, also known as LED display, or dot matrix display, are wide-used. In this tutorial, we are going to learn: LED矩阵显示器,也称为LED显示器,或点阵显示器,应用广泛。在…

“Hello, World!“ 历史由来

布莱恩W.克尼汉(Brian W. Kernighan)—— Unix 和 C 语言背后的巨人 布莱恩W.克尼汉在 1942 年出生在加拿大多伦多,他在普林斯顿大学取得了电气工程的博士学位,2000 年之后取得普林斯顿大学计算机科学的教授教职。 1973 年&#…

C++ | Leetcode C++题解之第203题移除链表元素

题目: 题解: class Solution { public:ListNode* removeElements(ListNode* head, int val) {struct ListNode* dummyHead new ListNode(0, head);struct ListNode* temp dummyHead;while (temp->next ! NULL) {if (temp->next->val val) {…

小柴冲刺软考中级嵌入式系统设计师系列一、计算机系统基础知识(1)嵌入式计算机系统概述

flechazohttps://www.zhihu.com/people/jiu_sheng 小柴冲刺嵌入式系统设计师系列总目录https://blog.csdn.net/qianshang52013/article/details/139975720?spm1001.2014.3001.5501 根据IEEE(国际电气电子工程师协会)的定义,嵌入式系统是&q…

Linux高并发服务器开发(六)线程

文章目录 1. 前言2 线程相关操作3 线程的创建4 进程数据段共享和回收5 线程分离6 线程退出和取消7 线程属性(了解)8 资源竞争9 互斥锁9.1 同步与互斥9.2 互斥锁 10 死锁11 读写锁12 条件变量13 生产者消费者模型14 信号量15 哲学家就餐 1. 前言 进程是C…

哪吒汽车,正在等待“太乙真人”的拯救

文丨刘俊宏 在360创始人、哪吒汽车股东周鸿祎近日连续且着急的“督战”中,哪吒汽车(下简称哪吒)终究还是顶不住了。 6月26日,哪吒通过母公司合众新能源在港交所提交了IPO文件,急迫地希望成为第五家登陆港股的造车新势力…

uniapp中实现瀑布流 短视频页面展示

直接上干货 第一部分为结构 <swiper class"list" :currentindex change"swiperchange" scrolltolower"onReachBottom"><swiper-item style"overflow: scroll;" v-for"(item,index) in 2" :key"index"&g…

DataV大屏组件库

DataV官方文档 DataV组件库基于Vue &#xff08;React版 (opens new window)&#xff09; &#xff0c;主要用于构建大屏&#xff08;全屏&#xff09;数据展示页面即数据可视化&#xff0c;具有多种类型组件可供使用&#xff1a; 源码下载