当前位置: 首页 > news >正文

详解操作系统各章大题汇总(死锁资源分配+银行家+进程的PV操作+实时调度+逻辑地址->物理地址+页面置换算法+磁盘调度算法)

文章目录

  • 第三章:死锁资源分配图
    • 例一
    • 例二
  • 第三章:银行家算法
  • 第四章:进程的同步与互斥
  • 做题步骤
    • PV操作的代码
      • 小心容易和读者写者混
    • 1.交通问题(类似读者写者)
      • 分析
      • 代码
    • 2.缓冲区问题(第二个缓冲区是复制缓冲区)(答案看下面的.19)
      • 分析
      • 代码
    • 3.售票员问题(生产者消费者)(好好吃透,进程同步不在话下)
      • 分析
      • 代码
    • 4.水果盘进餐问题
    • 5.水果盘进餐拓展(见下面课后题20)
    • 6.仓库入库出库问题
    • 7.缓冲区问题
      • (1)尹老师单缓冲区但中间需要处理问题(三个信号量)
      • (2)课本单缓冲区,但缓冲区不需要处理(俩个信号量)
      • (3)双缓冲区问题(本质上是俩个单缓冲区)(四个信号量)
  • 课后习题讲解
    • 16.生产偶数奇数问题(只要有操作访问临界区,就得上锁之后解锁)
      • 分析
      • 代码
      • 总结
    • 17.销售服务问题(我认为最难的一道)
      • 分析
      • 代码
      • 总结
    • 18.单缓冲区问题(easy,但得注意答案格式)
    • 19.令我痛彻心扉的缓冲区问题
      • 分析
      • 代码
      • 总结
    • 20.可以放下五个水果的水果盘子问题
      • 分析
      • 代码
      • 拓展:如果妈妈进程负责生产橘子的话
      • 总结
    • 21.不会发生死锁的哲学家进餐问题
  • 考试真题汇总
    • 三个进程既是生产者又是消费者(未知年份)(难度五个星)
  • 第四章:实时调度
  • 第五章:利用逻辑地址计算物理地址
  • 做题步骤
    • 1.计算页表中块号的位数
      • 计算页号和页内地址(逻辑地址空间的格式)
      • 计算页表有多少项及至少(因为地址块不一定连续)页表项的位数
    • 2.给出逻辑地址和页表计算物理地址
    • 3.计算段表的逻辑地址与物理地址
  • 第六章:页面置换算法
  • 做题步骤
      • 1.OPT最佳页面置换算法
      • 2.FIFO先进先出页面置换算法
      • 3.LRU最近最久未使用页面置换算法(看横轴谁最长)
  • 第七章:磁盘调度算法
  • 做题步骤
    • 1.FCFS先来先服务
    • 2.SSTF最短寻道时间优先
    • 3.SCAN撞墙回头算法

第三章:死锁资源分配图

小插曲:也是关于死锁的一个题目

image-20231228195335631

做题原则:分配大于请求(包括进程本身自己也得遵守这个规则)

资源指向进程,是分配

进程指向资源,是请求

一句话:先把资源都分配了,再看我们进程想要的资源能否得到

例一

img

我们先分析线少的:对于P2来说,P2有一个,而且这个还是资源分配,一定可以删除

接着再看P1:P1先获得了R2,接着P1想请求R1,但是R1必须先给P3,此时还剩下一个R1,说明P1也可以删除

img

接着再看P3:R1给一个,R2给一个,那么P3直接高枕无忧了,随便去

最后P4,它就想要一个R2,而且也没有人和它抢,自然可以删除

img

例二

image-20231227214003142

我们先看P4:先获得R5,R4,这个是符合我们的优先分配的规则,之后再看P4能否请求到R3;R3给了P5一个,但是还剩下一个,所以P4可以走

image-20231227214356357

我们再看P5:先获得R3,再请求R5的时候没有人抢,自然P5也可以走了

image-20231227214434729

再看P3:R2给了P2,P3,这就导致P3再请求R2的时候,无法请求到,所以P3走不了

再看P2:R2给了P2,P2想要R1的时候,R1已经全部给了P1,无法请求到,所以P2走不了

再看P1:R1给了P1,R2给了P2和P3,所以P1想要R2的时候,无法请求到,所以P1走不了

第三章:银行家算法

  1. 计算当前可用资源量
  2. 写出全部进程的所需资源量 (MAX-Allocation=Need数组)
  3. 满足条件的,删除进程并且加上对其分配的资源量(不是加Max)(我们加的 本质上就是计算Need数组时候的被减数!
  4. 循环上述步骤
  5. 写安全序列的时候,遇到多个进程可删时,尽量满足从小到大或者从大到小的基本顺序走

image-20240101211839884


要点:

1.计算出我们拥有的可用资源

2.可用资源和每个进程的所需资源进行比较,不是和Max资源比较,而是和Max-Allocation进行比较(换句话讲,就是已经分配给一部分了)

3.我们回收资源的时候,一定是 Need + Allocation 数组才可以 而不是 Need + Available 数组 这样就大错特错了

而且要点三是最容易出问题的,有时候算的算的就走火入魔了! 上一个加的还是已分配资源量,下一个加的就是所需资源总量了

第四章:进程的同步与互斥

做题步骤

  1. 排列进程
  2. 分析进程自身与进程之间的关系
  3. 建立信号量对应某种资源
  4. 只要需要访问临界区,就得上锁!
  5. 前V后P 前后都指的是事件!

关于变量的初值:

信号量的初值为n,表示系统中共有n个资源

mutex的初值为n,表示临界资源共有n个

如果需要互斥访问临界区,那么需要互斥信号量=1

如果信号量小于0,那么信号量的绝对值就是当前阻塞队列当中进程的个数

关于书写方法:

写函数–>写动作–>观察是同步还是互斥书写PV操作

对我来说判断进程同步或者互斥的方法:

image-20231226094537099

对于生产者消费者来说,是进程同步,因为如果发生阻塞的话,只要有生产,就可以唤醒消费,这就是同步

对于读者写着来说,是进程互斥,但是有争议的地方就是,当只有一个读者的时候,如果此时写者来了,被阻塞,读者走后,看起来就像是读者唤醒的写者,二者不能说是一点同步关系也没有,间接来讲肯定是有的。现在我们看一种情况:如果有5个读者进程正在读取文件,又来了一个写者,写者被阻塞,此时走1个走2个走3个读者并不会唤醒写者,而是只有最后一个读者走了才可以唤醒写者,所以这并不是进程同步,而是进程互斥访问文件临界资源的体现(回看的时候,还得是我自己能给我解决问题啊!)

因为我分析同步的时候喜欢用前V后P,所以就有一种误区是只要可以用只有…才…就是进程同步,实则不然,二者没有必然联系

思考进程同步的时候,多考虑考虑极端情况,比如缓冲区为空,缓冲区为满,缓冲区为一个三种情况必须全部考虑清楚才可以答对题目

解题步骤:

注意事项:

  • 生产者消费者同步问题一定是先p(empty),p(full)才p(mutex),否则会发生死锁!
  • 对于生产者消费者这类型的同步问题,如果临界资源的大小是1,那么就不必为临界资源加上mutex(当然加上也很好的)
  • 分析俩个进程并发是否会产生死锁,可以通过A->B,B->A,A->B->A(过桥问题)这样三个操作来判断,基本上有没有问题就可以甄别出来了;对于生产者消费者的死锁,还得改变一下信号量的初始值,这样有利于分析

PV操作的代码

小心容易和读者写者混

image-20231226100815218

1.交通问题(类似读者写者)

有桥如下图所示,车流方向如箭头所示。

假设桥上不允许两车交会,但允许同方向多辆车依次通过(即桥上可有多个相同方向行驶的车辆),试用wait和signal操作实现桥上的交通管理

image-20231203120520389

分析

这个俩个互斥的问题,临界资源是我们的桥,一次只可以由一边通过,之前我有误区,我认为这个也存在同步关系,实则不然,二者完全是对临界资源的互斥访问,假设车向右走的时候,左车来了被阻塞,当右车走完左车被唤醒,这个看起来是右车唤醒的左车(我刚开始理解的),但是后来其实是右车将互斥资源放出来了,左车等的只是资源,和右车没有直接关系(间接多多少少有点,但不是同步)

这个题麻烦就麻烦在:左车和左车进程不互相阻塞,但是左车在的时候右车不可以来;反之

image-20231203121505979

所以这样是解决不了问题的,我们必须引入count变量,而且还得小心这个代码书过程中的进程阻塞问题(小心写反)

但是上面这个代码的意思是:每次只能有一辆车行驶

代码

经过分析,不难写下以下代码:

image-20231203123110632

这段代码是有死锁风险的!

尹老师回复如下:当左边车正在行走的时候,right第一个车来了,那么会阻塞在p(bridge_mutex),但是这个时候,mutex的值变成了0,左边车本来明明可以进去的,现在也被阻塞了,所以俩个mutex必须搞成不一样的才对!

为什么左右的第一行要用不同的mutex?

原因一:这俩个mutex的本质作用就是保护count变量,俩边的count不同,怎么可以用相同的mutex变量来互斥访问count?

原因二:会出现死锁!

信号量的初始值:

semaphore count_left=0;//通过左边汽车的数量

semaphore count_right=0;//右边汽车

semaphore left_mutex=1;//保护count left

semaphore right_mutex=1;

semaphore bridge_mutex=1;//临界资源 桥

标准答案:

image-20231203155038156

void left()
{p(left_mutex);if(count_left==0) p(bridge_mutex);count_left++;v(left_mutex);//过桥p(left_mutex);count_left--;if(count_left==0) v(bridge_mutex);v(left_mutex);
}
void right()
{p(right_mutex);if(count_right==0) p(bridge_mutex);count_right++;v(right_mutex);//过桥p(right_mutex);count_right--;if(count_right==0) v(bridge_mutex);v(right_mutex);
}

2.缓冲区问题(第二个缓冲区是复制缓冲区)(答案看下面的.19)

用wait、signal操作解决下图之同步问题提示:分别考虑对缓冲区S和T的同步,再合并考虑

image-20231203155728677

分析

这不妥妥的进程同步,而且进程同步的代码有个特点,就是对于一个信号量来说PV操作交叉

我认为这个题的难点在于==初始值的大小,不可以一味的全部设置为1,得分析后再得出结论==

而且容易想的简单,因为复制缓冲区进行的动作本质上是俩个!

代码

初始变量赋值:

semaphore sin=1;

semaphore sout=0;

semaphore tin=1;

semaphore tout=0;

为什么我感觉这种方法没有很好的保护process缓冲区呢??

image-20231203160434946

semaphore sin=1;
semaphore sout=0;
semaphore tin=1;
semaphore tout=0;
semaphore mutex=1;
void p(semaphore a)
{}
void v(semaphore a)
{}
void get()
{p(sin);//写入Sv(sout);
}
void process()
{p(sout);//放入局部缓冲v(sin);//处理ingp(tin);//给出去v(tout);
}
void put()
{p(tout);//取走v(tin);
}

3.售票员问题(生产者消费者)(好好吃透,进程同步不在话下)

为保证车辆行驶安全,售票员必须关好车门,然后通知司机启动车辆,在行驶过程中售票员不能打开车门

待车到站停稳后,司机通知售票员才能打开车门,如此不断重复。

分析

由于售票员关门,司机就可以开车;司机停下,售票员就可以开门,一对一直接可以影响不需要等到最后一个,所以这是同步关系

为此,须设置两个信号量S1,S2用来控制司机和售票员的行为,初值都为0

这个题的难点在于动作较多,能不能正确书写PV操作的位置,就必须使用我们的前V后P操作来书写:

只有停车才可以开门 只有关门才可以开车

则停车 v 开门 p 关门 v 开车 p

代码

初始值变量:

semaphore S1=0;

semaphore S2=0;

动作如下:

image-20231203162731573

ed026de7b2d81675fbee60b90162636

4.水果盘进餐问题

这个就是生产者消费者同步问题,而且临界资源大小为1,所以不需要加mutex(加上肯定不错)

770b3ce5c43d4af8730e7fa32369d80

e3cbad25dc984eedc0f38e051ae68dc

5.水果盘进餐拓展(见下面课后题20)

6.仓库入库出库问题

d50622d68305b2ae0495d0caaab6739

59d612e4074566be8978d2a01f13363

7.缓冲区问题

(1)尹老师单缓冲区但中间需要处理问题(三个信号量)

尹老师的这个单缓冲区内部还得对信息进行处理,否则无法被打印进程给取走的!

image-20231210175406794

semaphore Sget=1;

semaphore Sprocess=0;

semaphore Stransfer=0;

image-20231210180137331

(2)课本单缓冲区,但缓冲区不需要处理(俩个信号量)

image-20231210175717479

(3)双缓冲区问题(本质上是俩个单缓冲区)(四个信号量)

为什么我突然想把这三个整合在一起呢? 是因为我发现双缓冲区的第三个进程的最后生成的变量,与进程一无关,不禁让我引起思考:很明显,双缓冲区实则上是俩个单缓冲区的结合,最后一个进程和第一个进程并没有了直接的关系

image-20231204170928331

课后习题讲解

16.生产偶数奇数问题(只要有操作访问临界区,就得上锁之后解锁)

image-20231210180958491

分析

N个单元,那么mutex初始值为N

而且题目上也说,互斥使用!缓冲区是临界资源,想要互斥访问,就得写一个互斥信号量mutex=1,临界资源就必须得互斥访问!!!

put()送入缓冲区,表明put前后需要加上互斥信号量,因为是访问临界区

P2:getodd()countodd()都是在访问缓冲区,所以必须上锁

P3:geteven也是在缓冲区内,counteven统计偶数,缓冲区统计

本质上就是生产者消费者,有点像水果盘子一个父亲既给苹果又给橘子

注意我们这个时候已经没有了full变量,而是拆分成了俩个

代码

image-20231210180935577

总结

这个if else写的很妙 考试考出来一定得多加思考

你比如 题上和你说 我从缓冲区拿数字啦 统计数字啦 等等 就得把这些操作都放在锁里 这个是我最想说的心得!!!!!!!

17.销售服务问题(我认为最难的一道)

咬文嚼字:1个服务窗口 10个座位(seat=10)有空座位 则取号(取号时一次只有一个人 )

取号机是临界资源 seatnumber=1 互斥访问

一个同步关系:当营业员空闲 则叫顾客

image-20231204173112440

分析

寻找互斥(某个东西竞争使用)和同步(有一定的执行顺序)的关系:

取号机的使用是互斥

顾客取到号通知营业员是同步

营业员叫号顾客是同步

将俩个进程都写出来,对比着写,会更清楚一点

只有取到号,才可以叫号 这是一个同步关系 但是它为了简单,并没有写只有叫号才可以有顾客来这个操作,是为了简化

但是不知道为什么 它即使写出一个同步 也感觉非常的合理 这就是有点疑惑的地方 让我不经怀疑 是不是只有本身就是只有一个同步

和尹老师交流完之后,老师说这个题没有写成俩个同步,本意就是想要简化一下,只要逻辑通顺就是最好了

代码

信号量的设置:

image-20231204174726884

numget换成mutex也可以,因为只有一个人可以取号,是互斥信号量

seat是互斥信号量

custom是同步信号量,设置初始值为0(只有当取完号后,才可以通知营业员可以叫人了)

座位少了一个,人才可以多一个

人被叫走了,座位才可以多一个

取号 v(custom) p(custom) 叫号

image-20231204174714317

总结

关于座位和顾客的关系,就像盘子和苹果的问题,如果盘子中有苹果和橘子,那么我想访问盘子资源,那就是p(plate),当我拿走苹果之后,就是v(apple),盘子的数量减一,那么苹果的数量加一,并不是说PV是同一种资源,是俩种不同的资源,但是二者也会有关系

在这个题也是一样,empty和full是俩个不同的资源,能写成PV操作,正是因为少一个空的座位,就多一个顾客这样的逻辑

18.单缓冲区问题(easy,但得注意答案格式)

image-20231210175406794

image-20231210175717479

19.令我痛彻心扉的缓冲区问题

image-20231204172001331

分析

image-20231204170415805

从分析缓冲区的箭头来说,一共有三个箭头,我就误以为需要三个信号量,但是再看看进程这边,发现是俩个信息,所以本质上我们需要的信号量是俩组

对于缓冲区1来说,P1生产,P2消费

对于缓冲区2来说,P2生产,P3消费

正是因为P2既是生产者又是消费者,所以内部代码才应该有俩组进程存在

而且缓冲区1和缓冲区2只可以存放一个记录,所以不需要mutex来保证临界资源的互斥,empty和full最大值不超过1就可以保证了

代码

信号量的初始化:

我们需要empty1=1,full1=0,empty2=1,full2=0

注意:P2进程的俩个P操作不可以颠倒,否则一定会死锁的,我们接收的是P1来的数据,所以一定得先p(full1)才可以,表明收到了P1发来的数据

image-20231204170928331

总结

本质上是俩组生产者消费者问题,注意好信号量的取值和pv操作的顺序即可

而且我感觉第二个缓冲区写出俩个P 再写俩个V 这样是为了更好的保护缓冲区2

20.可以放下五个水果的水果盘子问题

image-20231204172018595

咬文嚼字:5个水果 plate=5;盘子是临界资源 mutex=1;

分析

这个题本质上和16题是一样样的,消费者给生产者提供的是empty,但是由于消费者有俩个,所以生产者不可以单纯的提供一个full,而是通过if判断

而且由于此时水果盘是临界资源,所以我们需要加上mutex来进行互斥访问才可以的

代码

信号量初始值:

semaphore empty=5,orange=0,apple=0,mutex=1;

image-20231204172431988

拓展:如果妈妈进程负责生产橘子的话

b92679b6ff049e149e5fb3a10f6d1e0

8de8b60ae83558d058bb5f1741a26ad

总结

本题是生产者-消费者问题的变形,相当于一个能生产两种产品的生产者(爸爸)向两个消费者(儿子和女儿)提供产品的同步问题,因此,须设置两个不同的full信号量apple和orange,它们的初值均为0。

而且水果盘可以放几个水果,就直接修改empty的值就可以了!

21.不会发生死锁的哲学家进餐问题

image-20231210181457165

标准答案是采用了方法一:只允许四个哲学家同时进来拿筷子

设置一个SUM=4的值,给哲学家进餐代码前后加上 P(SUM) 和 V(SUM)即可!

诶哟 我服了 尹老师强调不可以多一个筷子 幸好听到了 要不然就寄了

考试真题汇总

三个进程既是生产者又是消费者(未知年份)(难度五个星)

image-20231203102741959

image-20231210184233462

image-20231210184241935

image-20231210184255790

image-20231210184304334

第四章:实时调度

LLF 和 EDF一共有俩个调度时机

image-20231228195633730

第五章:利用逻辑地址计算物理地址

做题步骤

  1. 画出页表的结构(页号 块号)
  2. 用逻辑地址 ➗ 页面大小(也就是我们的块大小) 得到结果 结果为页号 同时还有余数 余数为偏移量
  3. 观察页表,看页号对应哪一个块号 使用块号*页面大小(即块大小)+偏移量 = 物理地址

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.计算页表中块号的位数

计算页号和页内地址(逻辑地址空间的格式)

首先必须声明一下,这都是逻辑的,和物理无关

image-20231207202121711

前一部分为页号P,后一部分为位移量W,即页内地址

页号:页的数量

页内地址:页的大小

计算页表有多少项及至少(因为地址块不一定连续)页表项的位数

有多少个页面,页表项就是多少,有32页,项就有32个,也就是说页表有32行,有32个页号

==计算页表项位数:==关键在于计算物理块有多少个 因为页表的存在本来就是一个块号对应一个物理块,那么想知道块号位数,算出有几个就好了

将页面(内存块)大小理解成内存的横轴

将块号理解成内存块的纵轴

长方形的面积=横轴*纵轴

长方形的面积=内存块大小

横轴=页面大小

纵轴=块号

块号是物理地址的纵轴,但它是页表的横轴

2.给出逻辑地址和页表计算物理地址

在这里插入图片描述

3.计算段表的逻辑地址与物理地址

在这里插入图片描述

不可想当然认为就是K =1000 这是非常致命的错误想法

第六章:页面置换算法

做题步骤

  1. 写出序列
  2. 确定内存块数
  3. 根据不同算法在每个序列数字下面画出对应的页面情况
  4. 缺页率=画出的页面/总序列个数

中断就是缺页 刚开始页面为空的时候也是中断


1.OPT最佳页面置换算法

这个算法的本质是淘汰以当前页面为基准向后找最后一个出现的

2.FIFO先进先出页面置换算法

上中下一个一个淘汰就好

3.LRU最近最久未使用页面置换算法(看横轴谁最长)

淘汰呆的时间长的 但是一定要小心更新 一旦更新虽然页表内容没有变化,但是这个被更新的数字变得活跃了!

难点:这里虽然是更新,但是更新的意思是==前面的时间一笔勾修,更新这一次也得记录入呆的时间中去!==

1 2 4 2 6 2 1 5 6 1 的LRU 缺页率

在这里插入图片描述

客官请看:在第六个序列的时候 2来了,此时是更新,但是也得写入6 2 4 只要写入,就会被记录一次时间,当到了第8个序列的时候,2本质上是已经呆了三个时间段了! 这里是我之前的盲区

第七章:磁盘调度算法

做题步骤

当计算SSTF 和 SCAN 的时候,建议把流程图画出来!尤其是SCAN 只要画出来图,寻道长度计算非常快!

对于SSTF SCAN 一定要对访问磁道进行排序!


image-20231210171139232

image-20231210171035947

6d90e5923aa7c94983eff0c77a67152

ade256a464490cf62c8e054e66cc054

1.FCFS先来先服务

我特别想要强调的是:FCFS不会造成磁盘黏着!!!! 有且仅有这一个算法是这样的!

2.SSTF最短寻道时间优先

3.SCAN撞墙回头算法

这个是双向的,就是如果是100开始且递增的话,那么刚开始就是递增,等撞到南墙之后回来就是递减

相关文章:

详解操作系统各章大题汇总(死锁资源分配+银行家+进程的PV操作+实时调度+逻辑地址->物理地址+页面置换算法+磁盘调度算法)

文章目录 第三章:死锁资源分配图例一例二 第三章:银行家算法第四章:进程的同步与互斥做题步骤PV操作的代码小心容易和读者写者混 1.交通问题(类似读者写者)分析代码 2.缓冲区问题(第二个缓冲区是复制缓冲区…...

用ASM HEMT模型提取GaN器件的参数

标题:Physics-Based Multi-Bias RF Large-Signal GaNHEMT Modeling and Parameter Extraction Flow (JEDS 17年) 模型描述 该模型的核心是对表面势(ψ)及其随施加的栅极电压(Vg)和漏极电压(Vd&#xff09…...

github ssh ssh-keygen

生成和使用 SSH 密钥对是一种安全的身份验证方式,用于在你的本地系统和 GitHub 之间进行身份验证。以下是在 GitHub 上生成和使用 SSH 密钥对的基本步骤: 1. 生成 SSH 密钥对 在命令行中执行以下命令来生成 SSH 密钥对: ssh-keygen -C &q…...

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例5-2 JavaScript 获取HTML元素对象

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>JavaScript 获取 HTML 元素对象</title> </head><body> <input type"text" value"admin" /> <br> <input …...

微信实现如何批量自动添加好友?

在快节奏的社交环境中&#xff0c;我们常常需要扩展我们的社交圈子并与更多人建立联系。那么&#xff0c;有没有一种方法可以帮助我们更高效地批量添加微信好友呢&#xff1f;答案是肯定的&#xff01;借助微信管理系统&#xff0c;你将能够轻松实现这一目标。 首先&#xff0…...

vue3+echarts绘制某省区县地图

vue3echarts绘制某省区县地图 工作中经常需要画各种各样的图&#xff0c;echarts是使用最多的工具&#xff0c;接近春节&#xff0c;想把之前画的echarts图做一个整合&#xff0c;方便同事和自己随时使用&#xff0c;因此用vue3专门写了个web项目&#xff0c;考虑之后不断完善…...

MyBatis详解(2)-- mybatis配置文件

MyBatis详解&#xff08;2&#xff09; mybatis配置文件 mybatis配置文件 1.构建SqlSessionFactory的依据。 2.MyBatis最为核心的内容&#xff0c;对MyBatis的使用影响很大。 3.配置文件的层次顺序不能颠倒&#xff0c;一旦颠倒会出现异常。 < c o n f i g u r a t i o n…...

蓝桥杯备战——8.DS1302时钟芯片

1.分析原理图 由上图可以看到&#xff0c;芯片的时钟引脚SCK接到了P17,数据输出输入引脚IO接到P23,复位引脚RST接到P13。 2.查阅DS1302芯片手册 具体细节还需自行翻阅手册&#xff0c;我只截出重点部分 总结&#xff1a;数据在上升沿写出&#xff0c;下降沿读入&#xff0c;…...

freeRTOS / day02

1. 定时器使用流程 1.1 ST32CubeMX 设置 1.1.0 选择定时器 --> TIM1 1.1.1 Clock Source --> Internal Clock 1.1.2 Prescaler --> 预分频系数 1.1.3 Counter Period -- > 重装值 1.1.4 Prescaler 和 Counter Period 计算公式 定时时间&#xff08;s) &…...

Ubuntu 18.04 x86_64 上交叉编译 boost 库(ARMv7L)

先安装 ARMv7L 交叉编译器环境&#xff1a; 在 Ubuntu 18.04 x86_64 上面安装 Linux-ARMv7 A/L GCC编译器-CSDN博客 1、下载 boost 1.84 的源代码访问要编译的目录&#xff0c;并且解压出来源代码&#xff0c;切入源代码根目录 2、./bootstrap.sh --with-librariesfilesyste…...

为什么 FPGA 比 CPU 和 GPU 快?

FPGA、GPU 与 CPU——AI 应用的硬件选择 现场可编程门阵列 (FPGA) 为人工智能 (AI) 应用带来许多优势。图形处理单元 (GPU) 和传统中央处理单元 (CPU) 相比如何&#xff1f; 人工智能&#xff08;AI&#xff09;一词是指能够以类似于人类的方式做出决策的非人类机器智能。这包…...

js常用函数总结

js常用函数总结 1、模糊搜索 export const fuzzyQuery (list, keyWord, attribute name) > {const reg new RegExp(keyWord)const arr []for (let i 0; i < list.length; i) {if (reg.test(list[i][attribute])) {arr.push(list[i])}}return arr } list 原数组 ke…...

cartographer离线建图报错:data_.trajectory_nodes.SizeOfTrajectoryOrZero

cartographer离线建图报错: data_.trajectory_nodes.SizeOfTrajectoryOrZero [FATAL] [1706177325.876019302, 1706015603.398505596]: F0125 18:08:45.000000 17607 pose_graph_2d.cc:1314] Check failed: data_.trajectory_nodes.SizeOfTrajectoryOrZero(trajectory_id) &…...

【YOLO系列算法俯视视角下舰船目标检测】

YOLO系列算法俯视视角下舰船目标检测 数据集和模型YOLO系列算法俯视视角下舰船目标检测YOLO系列算法俯视视角下舰船目标检测可视化结果 数据集和模型 数据和模型下载&#xff1a; YOLOv6俯视视角下舰船目标检测训练好的舰船目标检测模型舰船目标检测数据YOLOv7俯视视角下舰船…...

python进程间使用共享内存multiprocessing.shared_memory来通讯

python多个进程通讯使用共享内存 1、multiprocessing.shared_memory ​ 使用这个模块可从进程直接访问共享内存,该模块提供了一个 SharedMemory 类,用于分配和管理多核或对称多处理器(SMP)机器上进程间的共享内存。 ​ 为了协助管理不同进程间的共享内存生命周期,multi…...

经典目标检测YOLO系列(三)YOLOv3的复现(2)正样本的匹配、损失函数的实现

经典目标检测YOLO系列(三)YOLOv3的复现(2)正样本的匹配、损失函数的实现 我们在之前实现YOLOv2的基础上&#xff0c;加入了多级检测及FPN&#xff0c;快速的实现了YOLOv3的网络架构&#xff0c;并且实现了前向推理过程。 经典目标检测YOLO系列(三)YOLOV3的复现(1)总体网络架构…...

编程笔记 html5cssjs 061 JavaScrip简介

编程笔记 html5&css&js 061 JavaScrip简介 一、JavaScript概述二、JavaScript的主要特点三、历史延革四、JavaScript与前端开发小结 JavaScript 是 web 开发者必学的三种语言之一&#xff1a;HTML 定义网页的内容&#xff1b;CSS 规定网页的布局&#xff1b;JavaScript…...

计算机网络 第5章(运输层)

系列文章目录 计算机网络 第1章&#xff08;概述&#xff09; 计算机网络 第2章&#xff08;物理层&#xff09; 计算机网络 第3章&#xff08;数据链路层&#xff09; 计算机网络 第4章&#xff08;网络层&#xff09; 计算机网络 第5章&#xff08;运输层&#xff09; 计算机…...

pythonSM4加密

数据安全法及密评要求&#xff0c;敏感数据系统需要使用国密算法进行加解密处理。 敏感数使用SM4/ECB加解密方式 #密钥参数epidemic_key #加密信息参数 message #加密算法SM4/ECB/PKCS5Padding #加密类型SM4-ECB #添加模式PKCS5Padding from cryptography.hazmat.primitives.…...

JSP在线阅读系统myeclipse定制开发SQLServer数据库网页模式java编程jdbc

一、源码特点 JSP 小说在线阅读系统是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库 &#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为SQLServer2008&#…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

Java后端检查空条件查询

通过抛出运行异常&#xff1a;throw new RuntimeException("请输入查询条件&#xff01;");BranchWarehouseServiceImpl.java // 查询试剂交易&#xff08;入库/出库&#xff09;记录Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…...