操作系统【OS】Ch2 大题 PV题型分类

  • 生产者-消费者问题:生产资源-消费资源
  • 理发师问题:服务-被服务
  • 读者-写者问题:同类进程不互斥、异类进程互斥
  • 哲学家进餐问题:只有一类进程,每个进程需要同时拥有多种资源才能运行
  • 单纯的同步问题:前驱后继图

生产者-消费者问题

  • 有几类进程?
    • 每类进程对应一个函数
  • 在每个函数内部,用中文描述进程动作
    • 只做一次:不加whlie
    • 不断重复:加while(1)
  • 分析每一动作之前是否需要p什么?
    • ⚠️隐含的互斥(eg 缓冲区的访问,需要加:P(mutex))
  • 只要有P必定有V,每写一个P,就要安排V
  • 所有PV写完之后,再去定义信号量(semaphore)
  • 定义完之后思考每个信号量的初值是多少
  • 检查多个P连续出现的地方是否可能产生死锁
    • ⚠️可以尝试调整P顺序
    • 若某个信号量PV操作总连续出现,中间没有夹其他P,则不可能因信号量产生死锁
  • 读题检查,是否满足题目要求

哲学家进餐问题

无脑让进程一口气取得所有的资源,再开始运行

- 定义大锁:`Semophore Lock = 1; //互斥信号量`

- 定义资源数:

```

//eg:有a、b、c三类资源,分别有9个、8个、5个,则:

int a = 9; // 表示a的剩余数量

int b = 8; // 表示b的剩余数量

int c = 5; // 表示c的剩余数量

```

 

- 代码模版:

```

Process(){

    while(1){

        P(Lock);

        if(所有资源都够){

            所有资源的int值减少; //题目回告知每类资源需要多少个。

            取xxx资源; //一口气拿走所有的资源。

            V(Lock); //拿完资源解锁

            break; //跳出while循环

        }

        V(Lock); //资源不够,解锁,再循环尝试一次

    }

    做进程该做的事情(例如:哲学家干饭)// 用中文说明即可。

    P(Lock);

    归还所有资源,所有资源的int值增加。

    V(Lock);

}

```

读者-写者问题

题目没有要求避免饥饿的话,用最简单的方法(读优先)可以得满分

- 读者优先:

```

semaphore lock = 1; // 用于实现对共享文件的互斥访问

int count = 0; //记录当前有几个读进程在访问文件

semaphore mutex = 1; //用于保证对count变量的互斥访问

 

writer(){

    while(1){

        P(lock); // 写之前上锁

        write;

        V(lock); // 写完了解锁

    }

}

 

reader(){

    while(1){

        P(mutex); //各个进程互斥访问count

        if(count == 0) P(lock); //第一个读者,读之前帮他的兄弟们上锁

        count ++; //访问文件的读进程数+1

        V(mutex);

       

        read;

       

        P(mutex); //各个进程互斥访问count

        count—-; //访问文件的读进程数-1

        if(count == 0) V(lock); //最后一个读进程负责解锁

        V(mutex);

    }

}

```

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

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

相关文章

自然语言处理---RNN经典案例之构建人名分类器

1 案例介绍 关于人名分类问题:以一个人名为输入, 使用模型帮助判断它最有可能是来自哪一个国家的人名,这在某些国际化公司的业务中具有重要意义,在用户注册过程中,会根据用户填写的名字直接给他分配可能的国家或地区选项&#xff…

【第三天】C++类和对象进阶指南:从堆区空间操作到友元的深度掌握

一、new和delete 堆区空间操作 1、new和delete操作基本类型的空间 new与C语言中malloc、delete和C语言中free 作用基本相同 区别: new 不用强制类型转换 new在申请空间的时候可以 初始化空间内容 2、 new申请基本类型的数组 3、new和delete操作类的空间 4、new申请…

为什么需要it企业知识库?it企业知识库能带来什么?

在企业运营过程中,会产生大量的经营数据、管理规范、资料和文档等数据,但这些数据的产生时间和空间碎片化,数据来源和结构多种多样,信息关系也较为复杂。 it企业知识库 正是因为这些问题的存在,导致了企业信息管理零散…

数据迁移一致性测试探索与实践

背景 量级庞大的日志通过mysql不足以支撑业务需求,以前通过任务调度定时跑批从mysql同步到hive存储,这种方式时效性为T1,也就是说今天的日志,明天才能同步到hive,总而言之时效性不高。为了提高时效性,改为…

【word技巧】word页眉,如何禁止他人修改?

我们设置了页眉内容之后,不想其他人修改自己的页眉内容,我们可以设置加密的,设置方法如下: 先将页眉设置好,退出页眉设置之后,我们选择布局功能,点击分隔符 – 连续 设置完之后页面分为上下两节…

shell_42.Linux移动参数

移动参数 bash shell 工具箱中的另一件工具是 shift 命令,该命令可用于操作命令行参数。跟字面上的意思一样,shift 命令会根据命令行参数的相对位置进行移动。 在使用 shift 命令时,默认情况下会将每个位置的变量值都向左移动一个位置。因此&…

JVM内存耗尽应用卡死分析

一个应用程序卡死了,查看JVM内存耗尽了,该做些什么呢? (1)整体资源查看 top命令,查看内存、CPU使用情况是否有明显问题。 (2)查看网络连接数 netstat -an | wc -l (3&#xff0…

bootstrap.properties中配置Nacos

bootstrap.properties用于在Spring Boot应用程序启动阶段加载外部配置 优先级高:在应用程序启动时首先加载,用于配置应用程序的基础设置,如配置数据源、日志、配置服务器 外部配置:加载外部配置源(如远程配置服务器&a…

【代码规范】switch 块级的作用域问题

代码规范的一些事儿 问题 今日 Git 提交代码时,出现报错: error Unexpected lexical declaration in case block no-case-declarations 解决过程 我马上就去百度,就找到了这篇文章:解决 Unexpected lexical declaration in ca…

基于OpenAPI、freemarker动态生成swagger文档

前言 spring项目中可以使用springfox或者springdoc,通过写注解的方式生成swagger文档,下面介绍一种不写注解,动态生成swagger文档的方式,在某些场景会适用,例如接口是动态生成的,此时swagger就不能通过注解…

Qt中QFile、QByteArray QDataStream和QTextStream区别及示例

在Qt中,QFile、QByteArray、QDataStream和QTextStream是常用的文件和数据处理类。 主要功能和区别 QFile: QFile是用于读写文本和二进制文件以及资源的I/O设备。可以单独使用QFile,或者更方便地与QTextStream或QDataStream一起使用。 通常在…

Cookie和Session

前言扩展&#xff1a;笔者在之前学习前端扫盲阶段&#xff0c;写过一个简单易读的&#xff1a;表白墙项目&#xff0c;具体的前端代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta ht…

mac安装+配置python3环境

一、python3下载 官网下载 https://www.python.org/ 二、python3安装 打开下载好的.pkg文件一直继续确认即可。 三、验证是否安装成功 打开终端&#xff0c;输入python3&#xff0c;如果返回python对应的版本信息&#xff0c;则安装成功。 四、python配置 如果需要输入…

2023java攻克了抖音视频去水印视频下载

2023java攻克了抖音视频去水印视频下载 1、过滤链接 /*** 过滤链接&#xff0c;获取http连接地址* param url* return*/public static String decodeHttpUrl(String url) {int start url.indexOf("http");int end url.lastIndexOf("/");String decodeu…

基于卷积优化优化的BP神经网络(分类应用) - 附代码

基于卷积优化优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于卷积优化优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.卷积优化优化BP神经网络3.1 BP神经网络参数设置3.2 卷积优化算法应用 4.测试结果…

flash-linear-attention CUDA算子成功实现(但限制极多。。)

在 C/DirectX着色器 的基础上速成CUDA编程&#xff0c;还好思维模式基本通用&#xff0c;就多了线程组排布和共享内存方面的东西&#xff0c;入门还行&#xff0c;高级加速方面就不太行了。 代码仓库&#xff1a;https://github.com/One-sixth/flash-linear-attention-pytorch…

Qt窗体设计的布局

本文介绍Qt窗体的布局。 Qt窗体的布局分为手动布局和自动布局&#xff0c;手动布局即靠手工排布各控件的位置。而自动布局则是根据选择的布局类型自动按此类型排布各控件的位置&#xff0c;使用起来比较方便&#xff0c;本文主要介绍Qt的自动布局。 1.垂直布局 垂直布局就是…

内核驱动模块分布编译

内核驱动模块代码 #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/uaccess.h> #include <linux/io.h> #include <linux/device.h> #include <linux/ioctl.h> #include <linux/cdev.…

Redis的开发利用

在Redis中&#xff0c;可以使用两个数据结构来实现阅读量和点赞量的计数。 1. 使用字符串来计数阅读量和点赞量 在Redis中&#xff0c;字符串类型的数据可以通过 INCR 和 DECR 命令来实现原子递增和递减。 例如&#xff0c;假设要对一篇文章进行阅读量统计&#xff0c;可以使…

基于WebRTC构建的程序因虚拟内存不足导致闪退问题的排查以及解决办法的探究

目录 1、WebRTC简介 2、问题现象描述 3、将Windbg附加到目标进程上分析 3.1、Windbg没有附加到主程序进程上&#xff0c;没有感知到异常或中断 3.2、Windbg感知到了中断&#xff0c;中断在DebugBreak函数调用上 3.3、32位进程用户态虚拟地址和内核态虚拟地址的划分 …