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

【操作系统OS】学习笔记第二章 进程与线程(下)【哈工大李治军老师】


基于本人观看学习 哈工大李治军老师主讲的操作系统课程 所做的笔记,仅进行交流分享。

特此鸣谢李治军老师,操作系统的神作!

如果本篇笔记帮助到了你,还请点赞 关注 支持一下 ♡>𖥦<)!!

主页专栏有更多,如有疑问欢迎大家指正讨论,共同进步!

给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

第二章 进程与线程(下)

第二章 进程与线程(上):【操作系统】学习笔记:第二章 进程与线程 (上)【哈工大李治军老师】

更多操作系统笔记:【哈工大李治军老师】操作系统笔记专栏汇总


如果有需要markdown或者PDF可以私信我,可以在此基础上自己添加补充笔记(●’◡’●)

进程与线程(下) 目录

  • 第二章 进程与线程(下)
  • 课程链接:
  • 一、CPU调度策略
    • 1.多进程图像与CPU调度
    • 2.如何设计调度算法
    • 3.先到先服务FCFS
    • 4.短作业优先SJF
    • 5.提高响应速度——时间片轮转法RR
    • 响应时间和周转时间同时存在,怎么办?
  • 二、一个实际的schedule函数
    • 优先级动态调整
    • counter作用总结
  • 三、进程同步与信号量
    • 1.进程合作:多进程共同完成一个任务
    • 2.信号量
    • 3.P V操作
  • 四、信号量临界区保护
    • 1.竞争
    • 2.临界区
    • 3.轮换法
    • 4.标记法
    • 5.Peterson算法
    • 6.面包店算法
    • 关中断
    • 硬件原子指令法
  • 五、信号量的代码实现
    • sleep_on:
  • 六、死锁处理
    • 1.环路等待
    • 2.死锁的4个必要条件
    • 3.死锁处理:
      • 1)死锁预防
      • 2)死锁避免
      • 银行家算法
      • 3)死锁检测+恢复
      • 4)死锁忽略

课程链接:

b站: 【哈工大】操作系统 李治军(全32讲)

大学MOOC:大学慕课—操作系统—主讲:哈工大李治军



一、CPU调度策略

1.多进程图像与CPU调度

当PID:1执行结束/阻塞,切换到其他进程去执行

此时2、3都在就绪队列中,应该选择谁执行?——这就是调度策略

image-20230502215921848

例: 两种进程调度策略

image-20230502220208952

调度策略问题很难穷尽,我们研究的就是对一个实际的系统面对这些任务应该如何设计调度算法

2.如何设计调度算法

面对进程:CPU调度的目标应该是进程满意

核心:时间复杂度小,执行速度尽量快

image-20230502221654417

关键问题:操作系统在CPU调度中,需要折中,需要综合

image-20230502224142312

IO约束型任务:需要大量的输入和输出操作,例如从磁盘读取或写入大量数据、向网络发送请求等。这些操作需要较长时间完成,CPU 的使用率较低,因此这种任务的瓶颈通常在于 IO 操作的速度。解决这种任务的方法通常是使用异步 IO 操作,以便在等待 IO 操作完成时释放 CPU 资源。

CPU约束型任务:这种任务通常需要大量的计算,并且需要快速完成,例如图像处理、视频编码、加密解密等。这些操作需要大量的 CPU 时间,因此 CPU 的使用率较高,而 IO 操作通常只是一个辅助操作。解决这种任务的方法是使用多线程或分布式计算,利用多个 CPU 核心同时进行计算,提高计算速度。

3.先到先服务FCFS

平均周转时间即作业从进入系统到完成的时间,完成时间减去到达时间再除以任务个数

计算公式:平均周转时间 = (作业完成时间 - 作业提交时间)/ 作业数

其中,作业完成时间指作业执行完毕的时刻,作业提交时间指作业进入系统的时刻

周转时间越短,系统的效率就越高

image-20230502233357051

4.短作业优先SJF

image-20230502233637544

5.提高响应速度——时间片轮转法RR

RR算法采用抢占式调度,即每个进程被分配一个时间片,当时间片用完后,该进程会被挂起并放回就绪队列,等待下一次调度。同时,RR算法会按照就绪队列中进程的顺序依次调度每个进程。这样,每个进程都能够在一定程度上得到公平的CPU时间,避免了某些进程长时间占用CPU的情况,提高了系统的响应速度和吞吐量。 注意合理设置时间片大小

无论是否执行完一个进程,每次都执行一个时间片,切换下一个时间片执行其他进程

image-20230502234129559

响应时间和周转时间同时存在,怎么办?

Word很关心响应时间,而gcc更关心周转时间,两类任务同时存在怎么办?

一个调度算法让多种类型的任务同时都满意,怎么办?

image-20230502234405974

如果前台任务绝对优先: 会造成饥饿

image-20230502234523546

因此需要对优先级进行动态调整,而后台任务往往响应时间很长

image-20230502234700498

此时应该后台任务执行一段时间,优先级下降,释放出cpu,让前台任务再次执行

既要以轮转调度为核心,又要在轮转调度的基础上增加一些优先级,前台任务与后台任务协调

image-20230502235114077

二、一个实际的schedule函数

优先级动态调整

counter既作为优先级,又作为时间片,只需要维护一个counter变量

image-20230502235455360

image-20230502235702941

image-20230502235713719

counter作用总结

image-20230503000133286

三、进程同步与信号量

1.进程合作:多进程共同完成一个任务

对多个进程的推进需要有合理有序的约束

司机需要等待售票员发出信号:

image-20230503170554310

实例:生产者–消费者

image-20230503170918010

2.信号量

只发信号还不能解决全部问题,单靠counter代表缓冲区空闲的个数还不够,还需要知道有多少个进程在sleep,使用信号量 记录一些更多的信息

image-20230503171340926

使用信号量来表达更丰富的信息,是一个计数器,可以控制对共享资源的访问量

除了睡眠和唤醒,还需要记录其他信息: 量

image-20230503171620977

记录有多少个进程在sleep:1 -> 2 -> 1 -> 0

image-20230503171823884

还有一个空闲缓冲区:

image-20230503172030018

P和C可以根据信号量可以实现进程同步!

如果信号量为负数,-几代表有几个进程在等待

如果信号量为正数,代表有几个资源可以使用

3.P V操作

image-20230503172717899

P:消费资源 减

V:产生资源 加

当缓冲区为空:

多个生产者和多个消费者共享缓冲区。生产者将数据项写入缓冲区中,而消费者则从缓冲区中读取数据项。

计数器 empty用于表示缓冲区中还有多少空闲,full 表示有多少缓冲区已被占用。使用了一个互斥信号量mutex,保证同时只有一个进程能够修改缓冲区的内容。

当生产者要向缓冲区中写入数据时,首先要尝试获取空闲缓冲区的数量(也就是执行 P(empty) 操作)。如果目前empty为 0,则说明缓冲区已满,生产者需要等待某个消费者释放后才能继续写入数据(也就是进入阻塞状态)。

如果目前有空闲缓冲区,则使用互斥信号量(即执行 P(mutex)),将数据写入缓冲区中,

释放互斥信号量(互斥锁)之后,通知消费者此时缓冲区已经有数据可消费(即执行 V(full) 操作),以便消费者读取缓冲区中的数据


当消费者要从缓冲区中读取数据时,首先尝试获取空闲缓冲区的数量(也就是执行 P(full) 操作)。如果目前已经full为 0,则说明缓冲区为空,消费者需要等待某个生产者写入数据后才能继续读取数据(也就是进入阻塞状态)。

如果有已经被写入数据的单元格,则使用互斥信号量(即执行 P(mutex)),将数据从缓冲区中读取出来

消费者将读取的数据项打印出来之后,释放互斥锁并通知生产者目前缓冲区中有空闲的单元格,以便生产者继续写入数据(即执行 V(empty) 操作)。

image-20230503173231177

四、信号量临界区保护

1.竞争

由于共享数据没有保护,造成数据竞争问题:

image-20230503183046161

解决竞争条件的直观想法:上锁

image-20230503183234330

2.临界区

临界区(Critical Section):一次只允许一个进程进入的该进程的那一段代码

保护共享数据——信号量

image-20230503183346584

临界区代码的保护原则

基本原则:

1.互斥进入:如果一个进程在临界区中执行,则其他进程不允许进入

​ 这些进程间的约束关系称为互斥(mutual exclusion)

​ 这保证了是临界区

好的临界区保护原则

2.有空让进:若干进程要求进入空闲临界区时,应尽快使一进程进入临界区

3.有限等待::从进程发出进入请求到允许进入不能无限等待

3.轮换法

每个进程被赋予一个次序号(也称时间片)

所有进程按照次序号依次排队。执行上下文切换时,当前进程将释放 CPU 时间,并将接下来 CPU 时间分配给下一个进程

当某个进程需要访问共享资源(也就是进入临界区)时,它首先要等待一定长度的时间,直到轮到它使用该资源为止

这样,即使多个进程尝试同时进入共享资源,也能够以轮流使用的方式完成。

image-20230503183744235

4.标记法

标记法的flag是 boolean 类型,初始值为 false。当一个进程想要进入临界区时,它首先要获取这个标记变量,并将其设置为 true,表示自己已经进入了临界区。此时,如果有其他进程想要进入临界区,就必须等待当前进程退出临界区并释放这个标记变量。

进程在退出临界区之后,需要将这个标记变量重新设置为 false,以便其他进程可以使用它。如果同时有多个进程试图获取这个标记变量并将其设置为 true,就会出现数据竞争的问题,因此标记法通常要和其它同步机制(如信号量、互斥锁)一起使用。

标记法过度使用可能会导致系统性能下降,因为每个进程都必须轮流尝试获取临界区标志,而这种轮流获取的过程可能导致等待时间过长

image-20230503183830229

可能会导致缓冲区空闲但进程AB都不会执行,因此需要规定名字

image-20230503184009590

image-20230503184241570

5.Peterson算法

Peterson算法通过在临界区的代码中让两个进程轮流执行,保证了不会同时进入临界区的情况。

当其中一个进程想要进入临界区时,另一个进程必须等待,直到当前进程完成临界区的操作并释放它的资源后才能进入,从而避免了死锁和数据竞争问题

Peterson算法维护了两个bool型的变量 turn 和 flag,分别表示当前轮到哪个进程进入临界区,和每个进程是否想要进入临界区:

image-20230503184429975

image-20230503184435914

i的flag为true,表示它想要进入临界区。然后进入 while 循环中进行判断,检查另一个进程 j是否也想要进入临界区,如果 flag[j] 为 true 并且轮到 j 进入临界区(即 turn==j),进程 i 就需要等待。一旦它获得了进入临界区的机会,就可以执行相应操作,并将自己的标志设置为 false,这样进程 j 就可以进入临界区。

6.面包店算法

仍然是标记和轮转的结合

如何轮转: 每个进程都获得一个序号,序号最小的进入

如何标记: 进程离开时序号为0,不为0的序号即标记

面包店: 每个进入商店的客户都获得一个号码,号码最小的先得到服务;号码相同时,名字靠前的先服务

image-20230503184710875

互斥进入: P在临界区内,P试图进入,一定有(num[i],i)<(num[k],k),P循环等待。

有空让进: 如果没有进程在临界区中,最小序号的进程一定能够进入。

有限等待: 离开临界区的进程再次进入一定排在最后(FIFO),所以任一个想进入进程至多等n个进程

关中断

关中断是指在处理器上禁止中断响应,以防止其他进程或线程干扰当前正在执行的进程或线程。

当一个进程或线程需要获取共享资源时,它可以通过关闭中断来确保自己在操作期间不会被中断。

在操作完成之后,它再重新打开中断,使其他进程或线程可以获取和使用共享资源。该机制是基于硬件实现的,并且只能在处理器级别上操作

但是当多个处理器时,关中断无法影响其他处理器中的进程,一个处理器关闭了中断,其他处理器还可以继续运行他们的进程或线程。

image-20230503184955799

硬件原子指令法

硬件原子指令法提供了一组原子性的操作指令,可以在一个确保操作不会被中断的环境下,原子地执行某个操作,避免数据竞争和死锁等问题

image-20230503185305907

五、信号量的代码实现

Semaphore值是否大于0,如果不是,则将自身设为阻塞状态并加入相应的等待队列中,最后调用schedule()函数切换到其他进程或线程来运行。而在sti()指令中断后,Semaphore已经被占用,防止了其他进程或线程的访问。

image-20230503185347238

启动磁盘读以后睡眠,等待磁盘读完由磁盘中断将其唤醒,也是一种同步

image-20230503185430573

sleep_on:

image-20230503185450696

sleep_on形成的队列

image-20230503185535455

六、死锁处理

1.环路等待

如果将信号量顺序交换,生产者和消费者都会阻塞:

image-20230504075129594

我们将这种多个进程由于互相等待对方持有的资源而造成的谁都无法执行的情况叫死锁

image-20230504075714717

2.死锁的4个必要条件

image-20230504075757778

3.死锁处理:

死锁预防

破坏死锁出现的条件

死锁避免

检测每个资源请求,如果造成死锁就拒绝

死锁检测+恢复

检测到死锁出现时,让一些进程回滚,让出资源

死锁忽略

在太阳上可以对火灾全然不顾 就好像没有出现死锁一样

1)死锁预防

在进程执行前,一次性申请所有需要的资源,不会占有资源再去
请其它资源

缺点1: 需要预知未来,编程困难
缺点2: 许多资源分配后很长时间后才使用,资源利用率低

对资源类型进行排序,资源申请必须按序进行,不会出现环路等待

缺点: 仍然造成资源浪费

2)死锁避免

判断此次请求是否引起死锁?

银行家算法

都能执行完成当然就不死锁

如果系统中的所有进程存在一个可完成的执行序列P1,则称系统处于安全状态

image-20230504080653645

image-20230504080806510

请求出现时,首先假装分配,然后调用银行家算法:

image-20230504080858546

3)死锁检测+恢复

发现问题再处理

基本原因: 每次申请都执行O(mn^2),效率低

image-20230504080948544

4)死锁忽略

image-20230504081105037



更多操作系统笔记:【哈工大李治军老师】操作系统笔记专栏汇总



大家的点赞、收藏、关注将是我更新的最大动力!
欢迎留言或私信建议或问题。 大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!

相关文章:

【操作系统OS】学习笔记第二章 进程与线程(下)【哈工大李治军老师】

基于本人观看学习 哈工大李治军老师主讲的操作系统课程 所做的笔记&#xff0c;仅进行交流分享。 特此鸣谢李治军老师&#xff0c;操作系统的神作&#xff01; 如果本篇笔记帮助到了你&#xff0c;还请点赞 关注 支持一下 ♡>&#x16966;<)!! 主页专栏有更多&#xff0…...

Linux命令集(Linux文件管理命令--rmdir指令篇)

Linux命令集&#xff08;Linux文件管理命令--rmdir指令篇&#xff09; Linux文件管理命令集&#xff08;rmdir指令篇&#xff09;5. rmdir(remove directory)1. 删除空的目录 folder12. 强制删除目录 folder1&#xff08;包括非空目录&#xff09;3. 递归删除目录及其目录下所有…...

在技术圈超卷的当下,学历到底是敲门砖还是枷锁?

前言 最近&#xff0c;突然之间被“孔乙己文学”刷屏了&#xff0c;短时间内“孔乙己文学”迅速走红&#xff0c;孔乙己是中国文学中的一位经典人物&#xff0c;他的长衫被认为是他的象征之一&#xff0c;孔乙己的长衫折射出很多现象&#xff0c;既有社会的&#xff0c;也有教育…...

Linux cgroup

前言 Cgroup和namespace类似&#xff0c;也是将进程进程分组&#xff0c;但是目的与namespace不一样&#xff0c;namespace是为了隔离进程组之前的资源&#xff0c;而Cgroup是为了对一组进程进行统一的资源监控和限制。 Cgroup的组成 subsystem 一个subsystem就是一个内核模…...

PID整定二:基于Ziegler-Nichols的频域响应

PID整定二&#xff1a;基于Ziegler-Nichols的频域响应 1参考2连续Ziegler-Nichols方法的PID整定2.1整定方法2.2仿真示例 1参考 1.1根轨迹图的绘制及分析 1.2计算机控制技术01-3.4离散系统的根轨迹分析法 1.3PID控制算法学习笔记 2连续Ziegler-Nichols方法的PID整定 2.1整定…...

【tkinter 专栏】专栏前言

文章目录 前言本章内容导图1. tkinter 工具及特点2. 为什么使用 Python 进行 GUI 设计?2.1 Python 可以做什么2.2 使用 tkinter 可以干什么?3. 如何学习使用 tkinter 进行 GUI 设计?4. 开发环境搭建4.1 Python 的版本4.2 安装 Python4.2.1 下载 Python 安装包4.2.2 安装 Pyt…...

解决Linux中文字体模糊的4种方法

在Linux中&#xff0c;字体是非常重要的一部分&#xff0c;因为它们直接影响到用户的视觉体验。如果Linux字体模糊不清&#xff0c;那么用户将很难阅读文本&#xff0c;这将极大地降低用户的工作效率。本文将介绍Linux Mint中文字体模糊的问题&#xff0c;并提供一些解决方案。…...

【Android入门到项目实战-- 7.3】—— 如何调用手机摄像头和相册

目录 一、调用摄像头拍照 二、打开相册选择照片 学完本篇文章可以收获如何调用手机的摄像头和打开手机相册选择图片功能。 一、调用摄像头拍照 先新建一个CameraAlbumTest项目。 修改activity_main.xml,代码如下&#xff1a; 按钮打开摄像头&#xff0c;ImageView将拍到的…...

浅聊AIOT

引言 IoT是(Internet of Things)的简称&#xff0c;也就是人们常说的物联网&#xff1b;随着智能硬件的发展和推广&#xff0c;制造成本也随之下降&#xff0c;很多的厂家也慢慢地拥抱网络互联&#xff0c;逐步实现设备互联&#xff0c;也就进入了人们常说的万物互联时代。虽然…...

Python之模块和包(九)

1、模块 1、模块概述 模块是一个包含了定义的函数和变量等的文件。模块可以被程序引入&#xff0c;以使用该模块中的函数等功能。通俗讲&#xff1a;模块就好比是工具包&#xff0c;要想使用这个工具包中的工具(就好比函数)&#xff0c;就需要导入这个模块。 2、import 在P…...

C++-----动态规划

目录 一、动态规划的基本思想 二、设计动态规划法的步骤 三、动态规划问题的特征 4.1 矩阵连乘积问题 4.1.1 分析最优解的结构 4.1.2 建立递归关系 4.1.3 计算最优值 4.1.3 计算最优值 4.1.3 构造最优解 4.2 动态规划算法的基本要素 4.2.1 最优子结构 4.2.2 重叠子问题 …...

2.2 Linux控制台访问CLI

系列文章目录 第1章 Linux Shell简介 第2章 Shell基础 <本章所在位置> 第3章 Bash Shell基础命令 第4章 Bash Shell命令进阶 第5章 Linux Shell深度理解 第6章 Linux环境变量 第7章 Linux文件权限 第8章 Linux文件系统的管理 第9章 Linux软件安装 第10章 Linux文本编辑器…...

代码随想录补打卡 509 斐波那契数列

代码如下 //斐波那契数列的第0项是0 第一项是1 func fib(n int) int { if n < 1 { return n } dp : make([]int,n1) dp[0] 0 dp[1] 1 for i : 2 ; i < n ; i { dp[i] dp[i-1] dp[i-2] } return dp[n] } 70 爬楼梯 代码如下 func climbStairs(n int) int …...

【每日一题Day195】LC1003检查替换后的词是否有效 | 栈

检查替换后的词是否有效【LC1003】 给你一个字符串 s &#xff0c;请你判断它是否 有效 。 字符串 s 有效 需要满足&#xff1a;假设开始有一个空字符串 t "" &#xff0c;你可以执行 任意次 下述操作将 t 转换为 s &#xff1a; 将字符串 "abc" 插入到 t…...

简单理解什么是序列化

为什么要序列化 序列化的目的就是为了对象可以在网络层进行传输&#xff0c; 比如通过后端传给前端数据。 什么是序列化 我们以Java为例。 序列化就是把对象转化为可传输的字节序列过程&#xff0c;这个字节序列可以是字符串&#xff0c;比如JSON格式的字符串&#xff0c;把…...

Django初识

1、简介 Django&#xff0c;是用python语言写的开源web开发框架&#xff0c;并遵循MVC设计。劳伦斯出版集团为了开发以新闻内容为主的网站&#xff0c;而开发出来了这个框架&#xff0c;于2005年7月在BSD许可证下发布。这个名称来源于比利时的爵士音乐家DjangoReinhardt&#…...

ARM嵌入式编译器-volatile关键字对编译器优化的影响

volatile限定符告知计算机&#xff0c;其他agent&#xff08;而不是变量所在的程序&#xff09;可以改变该变量的值。通常它被用于硬件地址以及在其他程序或同时运行的线程中共享数据。要求编译器不要对其描述的对象作优化处理&#xff0c;对它的读写都需要从内存中访问。 使用…...

销售数据分析怎么做?这篇文章说清楚了

如何分析销售数据&#xff1f;分析销售数据有哪些指标&#xff1f;销售数据分析有什么作用&#xff1f; 销售数据是不是得通过数据分析软件啊&#xff1f; 本文将为您解答疑惑—— 一、分析销售数据的指标 从两个层面上来讲&#xff0c;一个是对销售情况的整体把控&#xf…...

二十六、ISIS技术总结

文章目录 ISIS 概述一、路由协议总结1、路由优先级2、分类 二、ISIS 协议特点1、特点2、ISIS 路由器的种类 三、ISIS 配置1、基础配置2、network-entity含义3、router id 和系统id转换规则 四、ISIS 开销计算1、Narrow 模式2、Wide 模式 五、 ISIS 和 OSPF 的区别 ISIS 概述 I…...

三菱m70 m80系统解密 三菱m80机床到期解锁

我们从操作系统的发展讲起&#xff0c;为什么要有线程这个概念出现。《Java多线程学习笔记(一) 初遇篇》讲Java平台下的线程&#xff0c;如何使用和创建&#xff0c;以及引入线程后所面临的问题&#xff0c;为了解决线程安全问题&#xff0c;Java引入的机制&#xff0c;这也是《…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

Ubuntu系统多网卡多相机IP设置方法

目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机&#xff0c;交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息&#xff0c;系统版本&#xff1a;Ubuntu22.04.5 LTS&#xff1b;内核版本…...

Matlab实现任意伪彩色图像可视化显示

Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中&#xff0c;如何展示好看的实验结果图像非常重要&#xff01;&#xff01;&#xff01; 1、灰度原始图像 灰度图像每个像素点只有一个数值&#xff0c;代表该点的​​亮度&#xff08;或…...

ThreadLocal 源码

ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物&#xff0c;因为每个访问一个线程局部变量的线程&#xff08;通过其 get 或 set 方法&#xff09;都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段&#xff0c;这些类希望将…...

[拓扑优化] 1.概述

常见的拓扑优化方法有&#xff1a;均匀化法、变密度法、渐进结构优化法、水平集法、移动可变形组件法等。 常见的数值计算方法有&#xff1a;有限元法、有限差分法、边界元法、离散元法、无网格法、扩展有限元法、等几何分析等。 将上述数值计算方法与拓扑优化方法结合&#…...

【深尚想】TPS54618CQRTERQ1汽车级同步降压转换器电源芯片全面解析

1. 元器件定义与技术特点 TPS54618CQRTERQ1 是德州仪器&#xff08;TI&#xff09;推出的一款 汽车级同步降压转换器&#xff08;DC-DC开关稳压器&#xff09;&#xff0c;属于高性能电源管理芯片。核心特性包括&#xff1a; 输入电压范围&#xff1a;2.95V–6V&#xff0c;输…...

Qt学习及使用_第1部分_认识Qt---Qt开发基本流程

前言 学以致用,通过QT框架的学习,一边实践,一边探索编程的方方面面. 参考书:<Qt 6 C开发指南>(以下称"本书") 标识说明:概念用粗体倾斜.重点内容用(加粗黑体)---重点内容(红字)---重点内容(加粗红字), 本书原话内容用深蓝色标识,比较重要的内容用加粗倾…...