操作系统复习笔记4

news2024/11/15 21:50:11

1、queueType队列类型

队列中的数据也呈线性排列。虽然与栈有些相似,但队列中添加和删除数据的操作分别是在两端进行的。

线性表有顺序存储和链式存储,队列作为一种特殊的线性表,也同样存在这两种存储方式。

1.1 顺序队列

用数组存储队列,即利用一组地址连续的存储单元依次存放队列中的元素。为了避免当只有一个元素时,队头和队尾重合使得处理变得麻烦,所以引入两个指针(头尾指针):front指针指向队头元素,rear指针指向队尾元素的下一个位置。初始化时的头尾指针,初始值均为0。入队时尾指针rear加1,出队时头指针front加1,头尾指针相等时队列为空。

初始化为空队列,头尾指针相等

每一次有元素入队,尾指针加1,头指针不变,尾指针始终指向队尾元素的下一位

每一次有元素出队,则尾指针不变,头指针加1

最后所有元素出队,则头指针再次和尾指针相等,说明队列空了

当尾指针已经指向了队列的最后一个位置的下一位置时,若再有元素入队,就会发生“溢出”。

如何解决“溢出”问题呢:循环队列。

1.2 循环队列

顺序队列的 “假溢出” 问题:队列的存储空间未满,却发生了溢出。比如尾指针现在虽然已经指向了最后一个位置的下一位置,但是之前队头也删除了一些元素,那么头指针经历若干次的加1之后,留出了很多空位置,但是顺序队列还在傻乎乎的以为再有元素入队就溢出呢!肯定不合理。故循环队列诞生!

所以解决"假溢出"的办法就是后面满了,就再从头开始,也就是头尾相接的循环。我们把队列的这种头尾相接的顺序存储结构称为循环队列。将新元素插入到第一个位置上,入队和出队仍按先进先出的原则进行,操作效率高,空间利用率高。

虽然使用循环队列,解决了假溢出问题,但是又有新问题发生——判空的问题,因为仅凭 front = rear 不能判定循环队列是空还是满。比如如图:

空循环队列front = rear

满循环队列front = rear

解决办法:

  1. 设置一个标志变量flag, 当front == rear,且flag = 0时为队列空,当front== rear,且flag= 1 时为队列满。
  2. 办法二是当队列空时,条件就是front = rear,当队列满时,我们修改其条件,保留一个元素空间。也就是说,队列满时,数组中还有一个空闲单元。

2、信号量

2.1 整型信号量

除了初始化之外,只能用P、V操作

2.2 记录型信号量

添加了链表结构。

2.3应用

信号量一般用于进程的同步和互斥,后面结合方法再细说。

3、经典同步问题

3.1 生产者-消费者问题

总的来说,就是三个部分,一个生产,一个存放,一个取走。

Semaphore full = 0; 满缓冲区数目
Semaphore empty = n; 空缓冲区数目
Semaphore mutex = 1; 对有界缓冲区进行操作的互斥信号量

Producer()
{
    while(true)
    {
        Produce an item put in nextp; nextp为临时缓冲区
        P(empty);    申请一个空缓冲区
        P(mutex);    申请使用缓冲池
        将产品放入缓冲池
        V(mutex);    缓冲池使用完毕,释放互斥信号量
        V(full);    增加一个满缓冲池
      }
}

Consumer()
{
    while(true)
    {
        P(full);     申请一个满缓冲区
        P(mutex);     申请使用缓冲池
        取出产品
        V(mutex);    缓冲池使用完毕,释放互斥信号量
        V(empty);    增加一个空缓冲池
        Comsumer the item in nextc;    消费掉产品
    }
}

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

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

相关文章

C语言学习(二十五)---指针练习题(一)

在上一节内容中,我们学习了递归与冒泡排序法的有关内容,今天我们将继续往下学习,主要内容为指针练习题,好了,话不多说,开整!!! 在之前的第18—22的内容中,我…

lnmp框架的应用

目录 应用一 nginx访问状态统计 1.先查看http_stub_status有没有安装 2.进入nginx的配置文件改配置 3.nginx-检查配置 重启服务 最后这个20就是显示的状态统计 应用二 给网站加密 1.首先安装http-tools软软件 2.把nginx设置锁也要有执行权限 3.进入nginx配置文件 4. 检查…

【Windows个性化设置篇】StartAllBack更改win11任务栏设置

【Windows个性化设置篇】StartAllBack更改win11任务栏设置 Windows11目前不支持更改任务栏位置固定的修改,因为想把任务栏固定到旁边,从而充分利用电脑屏幕位置。之前试过TranslucentTB可以把任务栏透明化,很漂亮,但在分屏操作时…

【Vue3】Vue3+Vite+TS使用npm包引入百度地图

文章目录 Vue3ViteTS引入百度地图一、注册二、安装依赖包三、参考文档四、全局注册五、局部导入六、断网地图的使用八、项目使用成功图片九、使用卫星图 Vue3ViteTS引入高德地图npm包查找地图依赖包 Vue3ViteTS引入百度地图 一、注册 官网👉百度地图开放平台 注册…

python---案例分析(1)

标准库 python自带的 第三方库 其他人做出来的 例1: 实现一个日期计算器 EG: 计算2012年2月14日和2016年2月3日之间的差值 使用datetime 1.根据日期构造出datetime类型的变量 2.把两个变量进行相减,得到的结果即为所求 1) 2) 3) 例2: 实现单词逆序 翻转单词顺序 i am a s…

MySQL数据库表的操作

创建表 语法: CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎; 说明: field 表示列名。 datatype 表示列的类型。 character set 字符集,如果没有指…

hutool包下的BeanUtil工具使用、SQL中的and和OR的优先级

SQL中的and和OR的优先级 首先and的优先级大于or,通俗理解其实or查询其实会把条件分为左右两边来查。 如select * from user where id 1 and status 2 or status 3,本来想查询user表中id为1的状态为2或者3的数据,其实只会这样执行,and比or…

大数据分析案例-基于LightGBM算法构建航空公司满意度预测模型

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

DOD Digital Engineering Vision 数字工程策略与实施

DOD Digital Engineering Vision DOD的数字工程策略与实施,仅供个人学习使用,不代表个人意见和观点!!! Digital Engineering Strategy and Implementation Ms. Philomena Zimmerman Office of the Under Secretary …

day1

在linux内核中,当用户打开设备文件时,内核中的VFS层会调用设备驱动中的sys_open()函数,在sys_open()函数中,内核会根据文件的inode号判断文件是否存在于文件系统中,如果存在,内核会找到这个文件的文件信息结…

Python:使用钉钉dingtalk发送通知消息

通过钉钉的开放API接口,可以很容易的将消息发送到钉钉dingtalk,比起邮件发送更稳定,及时 文档 官网:https://www.dingtalk.com/API Explorer调试 https://open-dev.dingtalk.com/apiExplorer 目录 方式一:webhook方式…

Search space set group switching(一)

欢迎关注同名微信公众号“modem协议笔记”。 根据R17 38.300的描述,UE可以通过PDCCH monitoring adaptation机制实现power saving的目的,这其中就包括PDCCH monitoring skipping和search space set group (SSSG) switching两种机制。PDCCH monitoring s…

dom4j 解析 mybatis mapper xml 文件

01: CarMapper.xml : <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace"car"…

代码随想录 回溯算法 Java

文章目录 组合&#xff08;*中等&#xff09;77. 组合&#xff08;*中等&#xff09;17. 电话号码的字母组合&#xff08;中等&#xff09;39. 组合总和&#xff08;中等&#xff09;40. 组合总和II&#xff08;中等&#xff09;216. 组合总和||| 分割&#xff08;*中等&#x…

【王道操作系统】内存管理

内存管理概念 1.C 2.D 存储保护的作用&#xff1a;保证各道作业在各自的存储空间内运行&#xff0c;互不干扰 实现虚拟内存管理需要请求分页&#xff08;请求分段、请求段页&#xff09;等技术的支持&#xff0c;故需要硬件支持&#xff0c;比如页表机制、中断机构、地址变换…

【五子棋实战】第1章 项目架构与开发思路

【五子棋实战】第1章 项目总览 前言 ## 项目技术栈 ## 项目可配置性 博客目录 项目预览 项目代码获取 项目架构 ## 架构&#xff1a;前端页面 算法接口 ## 前端页面 ## 算法接口 开发思路 前言 五子棋是一种古老而受欢迎的棋类游戏&#xff0c;本博客将介绍如何使用…

Matplotlib-直方图、箱型图

1. 直方图 hist函数来创建一个直方图。下面是对各个参数的解释&#xff1a; x&#xff1a;要绘制直方图的数据序列。bins&#xff1a;指定直方图的边界范围和间隔。这里使用range(40, 110, 6)表示边界从40到110&#xff0c;间隔为6。facecolor&#xff1a;直方图的填充颜色。…

unity UGUI源码分析(4)Text与TextMeshPro

这一篇博客用于分析Text的内容的更新机制&#xff0c;并分析text mesh pro。 首先我们分析Text的文字是如何渲染出来的。 PupulateWithErrors方法会根据字符串生成顶点数据。其实Text会根据所给定的字符串生成相关的图集&#xff0c;然后对图集进行采样就可以渲染出文字了。由…

【五子棋实战】第3章 算法包装成第三方接口

【五子棋实战】第3章 算法包装成第三方接口 使用Flask开放接口 ## 定义接口输入 ## 开放接口、跨域配置、数据解析 数据预处理 ## 数据检查与异常捕获 ## 预处理数据 ## 定义接口输出 开启接口 继续学习下一篇实战&#xff01; 我们在上一章实现了博弈树负值极大alpha…

最适合入门的100个深度学习实战项目

&#x1f6a8;注意&#x1f6a8;&#xff1a;最近经粉丝反馈&#xff0c;发现有些订阅者将此专栏内容进行二次售卖&#xff0c;特在此声明&#xff0c;本专栏内容仅供学习&#xff0c;不得以任何方式进行售卖&#xff0c;未经作者许可不得对本专栏内容行使发表权、署名权、修改…