[A-08]ARMv8/ARMv9-Memory-内存空间(动态内存控制器与物理内存设备)

news2024/9/21 23:39:19

ver0.2
1-0

更多精彩内容,请关注微信公众号 # 前言 前序的文章中,已经讲解了ARM架构下管理内存的核心组件MMU的相关背景知识。MMU需要借助页表(Translation Table)衔接起虚拟地址空间和物理内存的空间,实现在一个硬件环境下软件任务的并发执行效果。这里可以看出MMU管理的主要对象就是内存的空间,本文会通过一篇文章围绕“空间”这个概念,大致搞清楚如下几方面的问题:物理内存是如何接入基于ARM体系的SOC系统;物理内存到底是个啥; 内存的空间在ARM体系下是如何分类 ,如何确定容量等等。正所谓“饮水思源”,无论我们通过MMU怎么折腾虚拟或者物理内存的空间,他们都是默默的承受,从来没有一句怨言,因此本文花一点时间来介绍一下,让他们从幕后走到前台,也为我们进军内存管理的核心课题之路打下基础。 # 正文 ## 1. 内存空间 脱离总线架构谈内存空间,就会犯孤立主义的错误,我们还是要对内存子系统有一个全局的视角。作为一个总线架构上的一个必备的节点,必须服从于框架和体系的约束才能融入soc中,进而发挥它动态存储指令和数据的作用。本文我们要研究的范围就是红色虚线内的节点(物理内存子系统),如图1-1所示。 ![1-1](https://i-blog.csdnimg.cn/direct/7124f016d9d448f9803138f654058791.jpeg#pic_center =80%x)
图1-1 典型ARM体系下SOC中的内存子系统

ARM搞定了芯片的架构,搞定了总线的架构,搞定了Soc的架构,但是都是设计图纸,是骨架,要让Soc能够真正的工作起来,光有骨头没有肉可不行,各个芯片厂商拿到图纸后,还需要做二次设计,除了CPU外,还需要设计其他的IP-Core,例如DPU、GPU、NPU、VPU等等,但是总不能自己把这个行业的饭都吃了,总要留一碗饭给别人,比如内存和外设。通常Soc上会预留出相应的接口,给其他生产外设和内存的设备厂家留一个机会上车(有钱大家一起赚)。比如高通或者MTK在定型一代SOC之后生产出了核心板,就要预留出相应的接口,可以让下一级供应商拿到之后做二次设计,根据不同的需求和定位,接入性价比更高的外设,这里的外设之一就是内存,不同厂家的内存和不同标准的内存价格自然也不一样。手机上的内存和汽车座舱上用的内存,品质就不一样,毕竟两者工作的环境不一样,那汽车开出去太阳晒一天,发动机散热再加持一下,工作温度都能干到50度,总不能选择和手机一样的内存条吧,这还只是温度一个维度。所以,专业的事情就让专业的厂家来做,我搞好Soc的设计保证它的品质,你搞好内存的设计保证它的品质,大家通过标准接口接合到一起就可以工作了。硬件准备好了,剩下的事情就是交给软件了,那么这里就涉及到管理硬件资源、抽象隔离硬件资源、调度使用软件资源的课题了,一样需要设计思想去驱动,还是以内存为例,为了任务的并发,首先就需要对内存资源做抽象虚拟达到对其他任务隔离的目的,但是硬件资源又是唯一的,那么就需要在任务运行时通过OS和MMU软硬两个维度配合对虚拟的内存资源做调度管理,这个虚拟的体系在ARM框架下有一个专门的名字叫:VMSA(AArch64 Virtual Memory System Architecture)。VMSA体系庞大而复杂,包括但不限于:地址翻译、翻译过程、页表格式、内存访问控制、内存属性、加密管理、虚拟化扩张、TLB等等。作为码农,我们需要花费一点时间才能深入这些课题、但是也要抓住重点,那就是“地址翻译”,或者说地址在不同维度空间的映射转换。

1.1 外部内存控制器

前面章节我们说到芯片厂商给了下游的内存供应商留了一个接口,那么本节我们就在ARM的框架下研究一下这个接口,看看内存厂商和芯片厂商是何如协作共赢的,也就是搞清楚内存相关的总线拓扑,看一看外部的存储设备是如何接入到Soc上,了解一下外存的控制器。
MPMC
先来看一下早期的ARM体系下的关于内存的拓扑,如图1-2所示。能有多早呢?大概要早到2003年。怎么形容那个时候的手册呢?就是真的很清纯。其实这一套架构现在早就过时了,可还是忍不住贴上来给大家看看,追根溯源是一方面,主要还是觉得那个时代的Block图能帮助大家理解很多东西,特别是嵌入式系统早期的存储体系架构是个啥样子,这个图梳理的还是很清楚的,方便大家以后研究别的方向,能有一个感性的认识。说到底还是希望大家能够从一个更宏观的角度去看问题,在宏观的基础上再去进行微观的分析和研究。这就跟历史学派中一个分支-综合派,这个派系做学问的时候都是要花费相当的笔墨讲清楚时代的背景、文化的背景、生产力的背景、一些重点的事件分析甚至要讲清楚当时哲学发展的背景。大家都知道最近大火的3A大作:黑神话.悟空。可是也可以想想悟空为什么在明朝的那个时代诞生,一定是有原因的。三国这一段历史中,为什么历代学者连小说家中的大部分人同情刘备。农民起义中,为什么黄巢造反的影响对于今天的中国影响仍然很深,都需要通过宏观的视角先看过去。普通人看个3、4分就差不多了,历史学家能看懂6、7分,一般政治家能看懂8、9分,伟大的政治家能看懂10分,哈哈哈哈,实在是扯得有点远,不过也没关系,我们不是写论文,大家放松放松。我在想能点开这篇文章,坚持看到这里的朋友,应该也是思想深刻且愿意思考的人吧,但是大家不要太严肃了,我在写虚拟化技术绪论的时候就写过,搞理工科更需要人文的精神在里面调剂一下,有时候能够帮助大家熬过苦恼的阶段获得灵感,不扯了,哈哈,还是回到我们的主线。
1-2

图1-2 早期ARM体系存储子系统框图

通过图1-2,我们可以看到早期的ARM处理器也需要借助外围控制器电路和相应的存储设备连接,图中的控制器叫PrimeCell MPMC(PL176),我们来看看这个MPMC(MultiPort Memory Controller)内部结构是个什么样子,如图1-3所示。
1-3

图1-3 MPMC框图

通过上图,我们找到线索了,MPMC内部有一个Dynamic memory controller,通过这个控制器的管控,实现Soc内部总线上的各个Master和外部动态内存设备的联通进而构成一个完整的Soc系统。我们来看一下手册中对MPMC能力的描述:

Features of the PrimeCell MPMC
• Four chip selects for dynamic memory and four chip selects for static memory devices.
• Dynamic memory interface supports DDR-SDRAM, SDRAM, and low-power variants. It also supports Micron SyncFlash types of memory.
• Asynchronous static memory device support including RAM, ROM, Flash, and NAND Flash, with or without asynchronous page mode.
• 16-bit, 32-bit, and 64-bit wide data bus SDRAM and SyncFlash memory support. 16-bit and 32-bit wide data bus DDR-SDRAM support.
• 8-bit, 16-bit, and 32-bit wide static memory support.
• Static memory features include:
— asynchronous page mode read
— programmable wait states
— bus turnaround cycles
— output enable, and write enable delays
— extended wait.
• Read and write buffers to reduce latency and to improve performance.
• Controller supports 2K, 4K, and 8K row address synchronous memory parts. That is, typical 512Mb, 256Mb, 128Mb, and 16Mb parts, with 8, 16, 32, or 64 DQ (data) bits per device.
• Dynamic memory self-refresh mode supported by a Power Management Unit (PMU) interface or by software.
• Power-saving modes dynamically control MPMCCKEOUT and MPMCCLKOUT.
• Two reset domains enable dynamic memory contents to be preserved over a soft reset.
• Little, big, and mixed-endian support.

这里我们只摘录了和存储相关的Feature,可以看出,DDR/LPDDR设备都要靠MPMC的物理接口才能和SOC接合。当然,MPMC除了对外部需要提供标准化的接口适配不同的厂商的内存设备之后,对内部也要兼容内部总线架构的接口规范,这个点我们马上会讲到。

DMC
通过前面章节明白了ARM的祖辈通过一个外部内存控制器连接和管理外部物理内存,那么我们得把视野从2003年拉回来,回到当下看看ARMv8和ARMv9是如何接纳外部内存的。同样我们还是要依托总线架构看一下总线视角下对内存子系统预留的接口情况,如图1-4所示。
1-4

图1-4 基于CCI结构框图

对于总线架构和缓存一致性总线不了解的同学,想深入了解的可以看前序的Cache系列的文章,在那里我们做了深入的分析,这里我们只做一个简单的回顾。现代处理器不是单独的一块CPU了,尤其是嵌入式设备领域,一块芯片上集成了众多独立功能单元的IP-Core,例如CPU、VPU、DPU、GPU等,大家分工协作,但是要处理的数据却来自一个共同的地方,那就是内存。各个xPU的内部的处理速度越来越快,尤其是CPU,而访问内存的总线频率却不能跟上,因此为了最大程度的发挥CPU的效能,在处理器内部就增加了总线频率更高Cache模块,根据局部性原理缓存一部分主存中的数据,是CPU无论是取指令和取操作数都是Cache中去获取,而不是到更慢的内存中去获取,这样大多时间内PE-Core操作的都是缓存中的数据,然后根据一定的策略回写到内存中即可。而ARM体系下的内存具有共享属性,不仅可以在CPU的PE-Core之间共享,可以设置为和其他的xPU共享,例如GPU等。既然是共享数据,就涉及到数据的同步问题,张三改完了,李四要用,就要有机制保证李四要访问和操作的共享数据是最新的,而不是过时的数据。那么一致性总线架构就登场了,首先将各个独立的功能单元抽象成Master,总线自己提供slave接口,只要其他Master实现了Slave接口相应的规范,就可以链接到总线架构内和其他Master通信和共享数据。总线架构还设计了探测功能,可以嗅探到各个Master操作Cache的动作,当发现Cache中的数据有更新的时候会通知其他Master并更新其他Master中缓存相同内存副本的Cache Line,从而保证各个Master操作的数据保持一致性,而这个过程绝大多数场景下都是硬件行为,不需要软件干预,因此受到了广大码农的热烈欢迎,但是这个世界上也没有免费的午餐,后面我们也会讨论这些午餐的代价。这里也要明确一点,一致性总线的架构也有不同类别也在不断的迭代当中,比如早一点的嵌入式设备上用的比较多的CCI架构,也有现在比较新的可以应用在服务器集群中的CMN架构,如图1-5所示。
1-5

图1-5 基于CMN-600结构框图

简单的回顾后,我们大致应该了解了一致性总线的作用,而经过观察一致性总线的框图中都有一个叫DMC(Dynamic Memory Controller)的功能单元。根据名字"动态内存控制器"以及前文2003年的故事,我们大致可以确定这个就是我们要找的那个当下ARM最新的体系下连接外部内存条的控制单元。让我们来看一下DMC内部长得什么样子,如图1-6所示。
1-6

图1-6 DMC-620结构框图

我们再来看一下手册中对DMC-620这个动态内存控制器能力的整体描述:

Overview
The DMC-620 is an Arm AMBA 5 CHI SoC peripheral, developed, tested, and licensed by Arm. It is a high-performance, area-optimized memory controller that is compatible with the AMBA 5 CHI protocol. It supports the following memory devices:
• Double Data Rate 3 (DDR3) SDRAM.
• Low-voltage DDR3 SDRAM.
• Double Data Rate 4 (DDR4) SDRAM.
The DMC-620 enables data transfer between the SoC and the SDRAM devices external to the chip. It connects to the on-chip system through a single CHI interface, and to a processor through the programmers APB3 interface to program the DMC-620. It connects to the SDRAM devices through its memory interface block and the DDR PHY Interface (DFI).
Features:
• A System Interface (SI) that provides:
— A CHI interface to connect to a CoreLink Cache Coherent Network (CCN) or a CoreLink Coherent Mesh Network (CMN).
— An AMBA5 CHI interface supporting the CHI-A, CHI-B, and CHI-C architecture.
— An APB interface for configuration and initialization.
— An external performance event interface for connecting to CoreSight ™ on-chip debug and trace technology.
— A 128-bit or 256-bit CHI interface.
• A Memory Interface (MI) that provides:
— A DFI 3.1 and 4.0 interface to a PHY that supports DDR3, DDR3L, and DDR4.
— Support for 1:2 DFI frequency ratio mode.
— Support for either a 32-bit wide data SDRAM interface or a 64-bit wide data SDRAM interface.
• Low-power operation through programmable SDRAM power modes.
System interface
The System interface provides protocol conversion between CHI and internal read/write requests.
Because CHI is packet-based, and a slave node only supports read and write semantics, this translation is straightforward at a transaction level because no transformation function is performed.
Memory Interface
Through this interface, the DMC-620 conducts data transactions with the SDRAM and regulates the power consumption of the SDRAM. The DMC-620 uses the ECC information that it receives from the SDRAM to maximize the reliability from these devices.

结合图1-6和手册的摘要,我可以重点关注以下几点:
(1) System interface可以使DMC的电路单元链接到SOC系统。
(2) Memory channel就是连接外部动态内存设备的的通道。
(3) DMC可以将DDR3/LPDDR3/DDR4类型的SDRAM设备链接到SOC系统内部,具体是哪种类型就要看工程实践中芯片厂商的如何实现和配置DFI(DDR PHY Interface)。关于DFI,也是一个完整的不断向前迭代的规范化标准化的接口,如图1-7所示,主流的IP厂商都在支持和维护这个规范,目的就是为了降低集成的成本,这里大家了解一下就行了,我们不做过多的讨论,感兴趣的同学可以自行查阅相关文献。
1-7

图1-7 DFI-5-1规范接口

到这里我们已经打通了从CPU到总线、到DMC、再到DDR SDRAM内存的全部通路,勾勒出了一副SOC内存相关的总线拓扑,我们终于有了一个内存子系统的硬件环境了,可以看到他的全貌了,下一步就可以对这个对这个硬件环境的空间进行抽象与赋能,让它们为软件服务了。(有了根据地,一切都好办了。)

1.2 DDR SDRAM

考虑到文章的完整性,这一节我们会简单的介绍一下DDR SDRAM,DDR SDRAM(Double Data Rate Synchronous Dynamic Random Access Memory,双数据率同步动态随机存储器)通常被我们称为DDR,其中的“同步”是指内存⼯作需要同步时钟,内部命令的发送与数据传输都以它为基准。DDR是⼀种掉电就丢失数据的存储器件,并且需要定时的刷新来保持数据的完整性。这一部分内容其实已经超越ARM体系的范畴了,我们不做过多的更深入的讨论,主要还是帮助大家建立起感性的认识,想深入了解的同学可以自行查阅手册或者阅读科普文章。

核心板
看一张SOC集成了外部内存之后的核心板的电路图,如图1-8所示。
1-8

图1-8 某通-81x5的核心板PCB板

DDR板
看一下DDR SDRAM的内存条长个啥样子,如图1-9所示:
1-9

图1-9 典型的DDR核心板

信道
从处理器的视角出发,PE-Cores需要和内存交互的信道,从逻辑上划分可以参考图1-10。
1-10

图1-10 CPU与DDR通信的逻辑信道

迭代
看一下不断迭代的DDR规范,这里我们只列出最近三代的主要feature:

第三代 – DDR3 SDRAM
DDR3的运⾏速度是DDR2的两倍。这是通过进⼀步改进总线信号来实现的。DDR3的预取缓冲区宽度为8位,是DDR2的两倍。DDR3内存的传输速率为800~1600MT/s。DDR3在1.5V的低电压下⼯作,⽽DDR2的1.8V,则能耗降低了40%。DDR3有两个附加功能,即ASR(⾃动⾃刷新)和SRT(⾃刷新温度)。DDR3 IC于2007年在市场上发布。
第四代 – DDR4 SDRAM
DDR4的运⾏速度是DDR3的两倍。DDR4在低⼯作电压(1.2V)和更⾼的传输速率下运⾏。DDR4的传输速率为2133~3200MT/s。DDR4增加了bank group技术。DDR4可以在时钟周期内处理4个数据,因此DDR4的效率优于DDR3。DDR4有⼀些附加功能,如DBI(数据总线反转)、数据总线上的CRC(循环冗余检查)和命令/地址奇偶校验。这些功能可以增强DDR4内存的信号完整性,并提⾼数据传输/访问的稳定性。DIMM上单个DRAM的独⽴编程可以更好地控制端接。DDR4 IC于2014年在市场上发布。
第五代-DDR5 SDRAM
DDR5的运⾏速度是DDR4的两倍。DDR5的传输速率为3200~6400 MT/s。DDR5规范于2018年11⽉发布。

寻址
这个寻址指的是,CPU发起对内存的访问的场景下,内存数据和Cache Line中的数据的映射关系。我们知道AArch64的体系下,一次内存的操作要用到地址总线,宽度也是64位的,根据规范,这一次操作无论是读还是写要用到的数据总线宽度也是64位的(或者说8个字节的宽度),这也就是说为什么在设计一些数据结构的时候要注意内存对齐这一说,一切都是为了效率的最大化。
1-11

图1-11 典型的内存操作示意图。

结语

本文的主旨就是为了介绍内存的空间,我们从总线架构开始层层递进,交代清楚了,外存是如何通过DDR-PHY、DMC接入到了我们的SOC系统。着重介绍了动态内存控制器,回忆了一下早期的型号,进而引出了现在内存管理器的架构,最后简要介绍了一下物理内存DDR。其实这一篇文章还是有姊妹篇的,是的,写完之后发现太长了,于是又拆开了。下一篇我们会从软件和管理的角度对内存的空间进一步的细分,请大家保持关注。

wx

更多精彩内容,请关注微信公众号

Reference

[00] <corelink_dmc520_technical_reference_manual_100000_0202_00_en.pdf>
[01] <corelink_dmc620_dynamic_memory_controller_technical_reference_manual_100568_0100_00_en.pdf>
[02] <IP-Controller/DDI0331G_dmc340_r4p0_trm.pdf>
[03] <80-ARM-IP-cs0001_ARMv8基础篇-400系列控制器IP.pdf>
[04] <arm_cortex_a725_core_trm_107652_0001_04_en.pdf>
[05] <DDI0487K_a_a-profile_architecture_reference_manual.pdf>
[06] <armv8_a_address_translation.pdf>
[07] <cortex_a55_trm_100442_0200_02_en.pdf>
[08] <learn_the_architecture_aarch64_memory_management_guide_101811_0103_03_en.pdf>
[09] <learn_the_architecture_armv8-a_memory_systems_100941_0101_02_en.pdf>
[10] <80-ARM-MM-cs0001_DDR内存介绍.pdf>
[11] <80-ARM-MM-HK0001_一文搞懂DDR-SDRAM工作原理.pdf>
[12] <DDI0269.pdf>
[13] <corelink_cci550_cache_coherent_interconnect_technical_reference_manual_100282_0100_01_en.pdf>
[14] <corelink_cmn600_technical_reference_manual_100180_0302_01_en.pdf>
[15] <DDR_PHY_Interface_Specification_v5_1.pdf>
[16] <80-LX-MM-bin0002_一步一图带你深入理解Linux虚拟内存管理.pdf>

Glossary

MMU - Memory Management Unit
TLB - translation lookaside buffer
VIPT - Virtual Index Physical Tag
VIVT - Virtual Index Virtual Tag
PIPT - Physical Index Physical Tag
VA - Virtual Address
PA - Physical Address
IPS - Intermediate Physical Space
IPA - Intermediate Physical Address
VMID - virtual machine identifier
TLB - translation lookaside buffer(地址变换高速缓存)
VTTBR_EL2 - Virtualization Translation Table Base Registers(ArmV8 寄存器)
ASID - Address Space Identifier (ASID)
DMC - Dynamic Memory Controller
DDR SDRAM - Double Data Rate Synchronous Dynamic Random Access Memory,双数据率同步动态随机存储器
TBI - Top Byte Ignore
VMSA - AArch64 Virtual Memory System Architecture
LPAE - Large Physical Address Extension
MPMC - MultiPort Memory Controller
DFI - DDR PHY Interface

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

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

相关文章

【不安全的集合类】同步容器(如ConcurrentHashMap)、并发集合(如CopyOnWriteArrayList)

文章目录 一、List的线程不安全二、Set的线程不安全三、Map的线程不安全 日常我们用到的集合的情况会很多&#xff0c;在单线程的情况下&#xff0c;不用考虑到线程安全的问题&#xff0c;但是如果在多线程开发的过程中&#xff0c;我们该选择哪一种类型来保证线程安全性呢 &am…

【网络安全】逻辑漏洞:绕过应用程序重要功能

未经许可,不得转载。 文章目录 正文漏洞影响正文 目标:xxx.com 一个流行的汽车平台,允许用户为经销商留下评论。该平台有一个功能,用户可以点赞评论,并且它限制每个用户对每个评论只能点赞一次。 然而,我找到了绕过的方法(并不是并发)。 在点击“点赞”按钮时拦截请…

Python从0到100(五十七):机器学习-主成分分析机

主成分分析是⼀种常⽤的降维技术&#xff0c;⽤于将⾼维数据集投影到低维空间中&#xff0c;同时保留数据集的主要特征。PCA通过寻找数据中最重要的⽅向&#xff08;主成分&#xff09;&#xff0c;并将数据投影到这些⽅向上来实现降维。 1.基本原理 1、数据中心化&#xff1…

linux-squid代理服务器

squid简介 作为应用层的代理服务软件&#xff0c;Squid 主要提供缓存加速、应用层过滤控制的功能、用来缓冲Internet数据 接受来自人们需要下载的目标&#xff08;object&#xff09;的请求并适当地处理这些请求。也就是说&#xff0c;如果想下载一web页面&#xff0c;他请求…

特殊字符合集(包括各种emoji表情、windows ASCII字符、自定义字母图案等)

██████╗███████╗ ██████╗ ██╔════╝╚══███╔╝██╔═══██╗ ███████╗ ███╔╝ ██║ ██║ ╚════██║ ███╔╝ ██║▄▄ ██║ ███████║███████╗╚██████╔╝ ╚══════╝…

【小呆的热力学笔记】典型热机-燃气轮机的理想热力循环

文章目录 6.1 燃气轮机的理想热力循环6.2 燃气轮机理想热力循环热效率分析6.3 燃气轮机的理想热力循环讨论 6.1 燃气轮机的理想热力循环 燃气轮机装置主要包含三个部件&#xff1a;压气机、燃烧室和涡轮&#xff0c;详见下图示意。其中压气机主要有离心式和轴流式两种&#xf…

视频素材网站无水印的有哪些?热门视频素材网站分享!

今天我们要讨论一个让许多人都感到困扰的问题——那些高质量、无水印的视频素材到底应该在哪里寻找&#xff1f;是不是有时候感觉&#xff0c;找到合适的视频素材比找到理想的伴侣还要困难&#xff1f;不用急&#xff0c;今天我要介绍几个隐藏的宝藏网站&#xff0c;确保你在视…

ARM 异常处理(21)

异常的流程&#xff1a; 首先&#xff1a; 在硬件上阶段&#xff1a; 这里是4大步3小步 然后是 异常处理&#xff1a; 这里主要是保存现场&#xff0c;进行异常处理 然后是 异常返回&#xff1a; 主要指 恢复现场&#xff0c; 再跳转回去。 首先硬件上&#xff…

Scalefit为外骨骼辅助设备提供直观的损伤减轻测量方案

外骨骼辅助设备是有效减轻工厂中工人遭受肌肉骨骼类疾病损伤的有效工具&#xff0c;但想要更加精确直观的看到外骨骼设备能够为工人提供多少精确到数字的帮助&#xff0c;则需要专业的测量工具来实现。 Scalefit人体工程学分析软件 scalefit人体工程学分析软件让作业环境更安全…

北斗GPS车载定位终端,物流货运数智化效率助手

物流行业&#xff0c;作为国民经济的动脉&#xff0c;其效率与成本控制是企业竞争力的关键。随着科技的不断进步&#xff0c;北斗GPS车载定位终端的出现&#xff0c;正成为物流行业数智化转型的加速器&#xff0c;极大地提升了物流货运的效率与安全性。 北斗GPS车载定位终端&a…

计算机毕业设计python停车场车位推荐管理系统y4uzk

目录 博主介绍技术栈&#x1f31f;文末获取源码数据库&#x1f31f;详细视频演示具体实现截图系统设计数据库设计解决的思路python-flask核心代码部分展示可行性论证个人心得操作可行性源码获取 博主介绍 &#x1f447;&#x1f3fb; 博主介绍&#xff1a;&#x1f447;&#…

【软件测试专栏】软件测试 — 用例篇

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;软件测试专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 软件测试 — 用例篇 关键词&#xff1a;测试用例概念、测试用例的…

【基础】Three.js加载纹理贴图、加载外部gltf格式文件

1. 模型使用纹理贴图 const geometry new THREE.BoxGeometry(10, 10, 10);const textureLoader new THREE.TextureLoader(); // 创建纹理贴图加载器const texture textureLoader.load("/crate.gif"); // 加载纹理贴图const material new THREE.MeshLambertMater…

运维问题0001:MM模块-MIGO收货报错“消息号 M7036 对于采购订单********无收货可能”

1、问题解析&#xff1a; 该报错为SAP标准报错类型,针对公司不同配置/业务设计/校验逻辑&#xff0c;导致该问题原因比较多。 常见的问题总结如下&#xff1a; 1&#xff09;输入的PO信息有问题&#xff08;例如&#xff1a;PO输入错误/PO删除状态/PO冻结状态/PO已完成收货等…

HCIE认证要学多久?3个方面决定HCIE学习时长

HCIE认证作为华为公司推出的顶级专业认证&#xff0c;已经成为网络技术领域内的一个标杆。 它不仅象征着专业技能的高峰&#xff0c;也是许多IT专业人士职业发展的重要里程碑。 HCIE作为华为高级认证虽然可以不需要满足任何条件直接报考&#xff0c;但掌握必要的知识内容必不可…

MySQL复习2

高级查询 准备 create database greatselect; use greatselect;drop table if exists class; create table class (cid int(11) not null auto_increment,caption varchar(32) not null,primary key (cid) )engine innoDB AUTO_INCREMENT5 default charset utf8;create tab…

报考条件、材料、流程?关于CISP认证,你必须要了解这些

信息安全一直是一个火热的话题&#xff0c;在近两年又被推上了高峰。对此&#xff0c;相关认证也不例外。 很多朋友都想get一本安全方向的证书&#xff0c;在广大安全方向的认证中&#xff0c;CISP可谓是发展迅猛&#xff0c;并越来越广为人知&#xff0c;也越来越受到IT从业者…

python Bokeh库学习记录

First steps 2: 添加和自定义渲染器 在之前的入门指南中&#xff0c;你使用了Bokeh的figure()函数来绘制折线图。 在本节中&#xff0c;你将使用不同的渲染函数来创建各种其他类型的图表。你还将自定义你的图像外观。 渲染不同的图形符号 Bokeh的绘图界面支持多种不同的图形…

古典显示格式解一偏微分方程并绘制结果的彩色图

解如下偏微分方程 以上公式的Latex代码 \begin{cases}\frac{\partial u}{\partial t}a\frac{\partial ^2u}{\partial x^2}\,\,,0<x<1,t>0\\u\left( x,0 \right) 4x\left( 1-x \right) \,\,,0\leqslant x\leqslant 1\\u\left( 0,t \right) u\left( 1,t \right) 0 ,t\g…

补题篇--codeforces

传送门&#xff1a;Problem - G - Codeforces 题意&#xff1a; 思路&#xff1a; 注意&#xff1a; n 的范围很小&#xff0c;大概率考察状态压缩 因此这个题可以考虑用 状压dp f[i][j] 表示状态为 i 的选法&#xff0c;以第 j 首歌为结尾的播放列表中的歌曲总数 f[ i | …