5000字干货,搞懂嵌入式操作系统的内存

嵌入式电子 2023-06-19 20:41

重点内容:


☆ linux 内存组织结构和页面布局,内存碎片产生原因和优化算法。


☆linux 内核几种内存管理的方法,内存使用场景以及内存使用的那些坑。


☆从内存的原理和结构,到内存的算法优化,再到使用场景,去探寻内存管理的机制和奥秘。


走进 linux 内存


1、内存是什么?


1)内存又称主存,是 CPU 能直接寻址的存储空间,由半导体器件制成。


2)内存的特点是存取速率快。



2、内存的作用


1)暂时存放 cpu 的运算数据


2)硬盘等外部存储器交换的数据


3)保障cpu计算的稳定性和高性能



linux 内存地址空间


1、linux 内存地址空间 Linux 内存管理全貌



2、内存地址—用户态&内核态


·用户态:Ring3 运行于用户态的代码则要受到处理器的诸多。


·内核态:Ring0 在处理器的存储保护中,核心态。


·用户态切换到内核态的 3 种方式:系统调用、异常、外设中断。


·区别:每个进程都有完全属于自己的,独立的,不被干扰的内存空间;用户态的程序就不能随意操作内核地址空间,具有一定的安全保护作用;内核态线程共享内核地址空间。



3、内存地址—MMU 地址转换


·MMU 是一种硬件电路,它包含两个部件,一个是分段部件,一个是分页部件。


·分段机制把一个逻辑地址转换为线性地址


·分页机制把一个线性地址转换为物理地址



4、内存地址——分段机制


1) 段选择符


·为了方便快速检索段选择符,处理器提供了 6 个分段寄存器来缓存段选择符,它们是:cs,ss,ds,es,fs 和 gs。


·段的基地址(Base Address):在线性地址空间中段的起始地址。


·段的界限(Limit):在虚拟地址空间中,段内可以使用的最大偏移量。


2) 分段实现


·逻辑地址的段寄存器中的值提供段描述符,然后从段描述符中得到段基址和段界限,然后加上逻辑地址的偏移量,就得到了线性地址。



5、内存地址—分页机制(32 位)


·分页机制是在分段机制之后进行的,它进一步将线性地址转换为物理地址


·10 位页目录,10 位页表项, 12 位页偏移地址


·单页的大小为 4KB



6、用户态地址空间



·TEXT:代码段可执行代码、字符串字面值、只读变量


·DATA:数据段,映射程序中已经初始化的全局变量


·BSS 段:存放程序中未初始化的全局变量


·HEAP:运行时的堆,在程序运行中使用 malloc 申请的内存区域


·MMAP:共享库及匿名文件的映射区域


·STACK:用户进程栈


7、内核态地址空间



·直接映射区:线性空间中从 3G 开始最大 896M 的区间,为直接内存映射区。


·动态内存映射区:该区域由内核函数 vmalloc 来分配。


·永久内存映射区:该区域可访问高端内存。


·固定映射区:该区域和 4G 的顶端只有 4k 的隔离带,其每个地址项都服务于特定的用途,如:ACPI_BASE 等。


8、进程内存空间


·用户进程通常情况只能访问用户空间的虚拟地址,不能访问内核空间虚拟地址。


·内核空间是由内核负责映射,不会跟着进程变化;内核空间地址有自己对应的页表,用户进程各自有不同额页表。



 Linux 内存分配算法


内存管理算法—对讨厌自己管理内存的人来说是天赐的礼物。


1、内存碎片


1) 基本原理


·产生原因:内存分配较小,并且分配的这些小的内存生存周期又较长,反复申请后将产生内存碎片的出现。


·优点:提高分配速度,便于内存管理,防止内存泄露。


·缺点:大量的内存碎片会使系统缓慢,内存使用率低,浪费大。


2) 如何避免内存碎片


·少用动态内存分配的函数(尽量使用栈空间)


·分配内存和释放的内存尽量在同一个函数中


·尽量一次性申请较大的内存,而不要反复申请小内存


·尽可能申请大块的 2 的指数幂大小的内存空间


·外部碎片避免——伙伴系统算法


·内部碎片避免——slab 算法


·自己进行内存管理工作,设计内存池


2、伙伴系统算法—组织结构


1) 概念


·为内核提供了一种用于分配一组连续的页而建立的一种高效的分配策略,并有效的解决了外碎片问题。


·分配的内存区是以页框为基本单位的


2) 外部碎片


·外部碎片指的是还没有被分配出去(不属于任何进程),但由于太小了无法分配给申请内存空间的新进程的内存空闲区域3) 组织结构。


·把所有的空闲页分组为 11 个块链表,每个块链表分别包含大小为 1,2,4,8,16,32,64,128,256,512 和 1024 个连续页框的页块。最大可以申请 1024 个连续页,对应 4MB 大小的连续内存。



3、伙伴系统算法—申请和回收


1) 申请算法


·申请 2^i 个页块存储空间,如果 2^i 对应的块链表有空闲页块,则分配给应用。


·如果没有空闲页块,则查找 2^(i 1) 对应的块链表是否有空闲页块,如果有,则分配 2^i 块链表节点给应用,另外 2^i 块链表节点插入到 2^i 对应的块链表中。


·如果 2^(i 1) 块链表中没有空闲页块,则重复步骤 2,直到找到有空闲页块的块链表。


·如果仍然没有,则返回内存分配失败


2) 回收算法


·释放 2^i 个页块存储空间,查找 2^i 个页块对应的块链表,是否有与其物理地址是连续的页块,如果没有,则无需合并。



·如果有,则合并成 2^(i 1)的页块,以此类推,继续查找下一级块链接,直到不能合并为止



3) 条件


·两个块具有相同的大小


·它们的物理地址是连续的


·页块大小相同


4、如何分配 4M 以上内存?


1) 为何限制大块内存分配


·分配的内存越大, 失败的可能性越大


·大块内存使用场景少


2) 内核中获取 4M 以上大内存的方法


·修改 MAX_ORDER, 重新编译内核


·内核启动选型传递"mem="参数, 如"mem=80M,预留部分内存;然后通过


·request_mem_region 和 ioremap_nocache 将预留的内存映射到模块中。需要修改内核启动参数, 无需重新编译内核. 但这种方法不支持 x86 架构, 只支持 ARM, PowerPC 等非x86架构。


·在start_kernel中mem_init 函数之前调用 alloc_boot_mem 函数预分配大块内存, 需要重新编译内核。


·vmalloc 函数,内核代码使用它来分配在虚拟内存中连续但在物理内存中不一定连续的内存。


5、伙伴系统—反碎片机制


1) 不可移动页


·这些页在内存中有固定的位置,不能够移动,也不可回收。


·内核代码段,数据段,内核 kmalloc() 出来的内存,内核线程占用的内存等。


2) 可回收页


·这些页不能移动,但可以删除。内核在回收页占据了太多的内存时或者内存短缺时进行页面回收。


3) 可移动页


·这些页可以任意移动,用户空间应用程序使用的页都属于该类别。它们是通过页表映射的。


·当它们移动到新的位置,页表项也会相应的更新


6、slab 算法—基本原理


1) 基本概念


·Linux 所使用的slab分配器的基础是Jeff Bonwick 为 SunOS 操作系统首次引入的一种算法。


·它的基本思想是将内核中经常使用的对象放到高速缓存中,并且由系统保持为初始的可利用状态。比如进程描述符,内核中会频繁对此数据进行申请和释放。


2) 内部碎片


·已经被分配出去的的内存空间大于请求所需的内存空间。


3) 基本目标


·减少伙伴算法在分配小块连续内存时所产生的内部碎片。


·将频繁使用的对象缓存起来,减少分配、初始化和释放对象的时间开销。


·通过着色技术调整对象以更好的使用硬件高速缓存。


7、slab 分配器的结构


·由于对象是从 slab 中分配和释放的,因此单个 slab 可以在 slab 列表之间进行移动。


·slabs_empty 列表中的 slab 是进行回收(reaping)的主要备选对象。


·slab 还支持通用对象的初始化,从而避免了为同一目而对一个对象重复进行初始化。



8、slab 高速缓存


1) 普通高速缓存


·slab 分配器所提供的小块连续内存的分配是通过通用高速缓存实现的。


·通用高速缓存所提供的对象具有几何分布的大小,范围为 32 到 131072 字节。


·内核中提供了 kmalloc() 和 kfree() 两个接口分别进行内存的申请和释放。


2) 专用高速缓存


·内核为专用高速缓存的申请和释放提供了一套完整的接口,根据所传入的参数为具体的对象分配 slab 缓存。


·kmem_cache_create() 用于对一个指定的对象创建高速缓存。它从 cache_cache 普通高速缓存中为新的专有缓存分配一个高速缓存描述符,并把这个描述符插入到高速缓存描述符形成的 cache_chain 链表中。


·kmem_cache_alloc() 在其参数所指定的高速缓存中分配一个 slab。相反, kmem_cache_free() 在其参数所指定的高速缓存中释放一个 slab。


9、内核态内存池


1) 基本原理


·先申请分配一定数量的、大小相等(一般情况下) 的内存块留作备用。


·当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存。


·这样做的一个显著优点是尽量避免了内存碎片,使得内存分配效率得到提升。


2) 内核 API


·mempool_create 创建内存池对象


·mempool_alloc 分配函数获得该对象


·mempool_free 释放一个对象


·mempool_destroy 销毁内存池



10、用户态内存池


1) C++ 实例



11、DMA 内存


1) 什么是 DMA


·直接内存访问是一种硬件机制,它允许外围设备和主内存之间直接传输它们的 I/O 数据,而不需要系统处理器的参与2) DMA 控制器的功能。


·能向 CPU 发出系统保持(HOLD)信号,提出总线接管请求。


·当 CPU 发出允许接管信号后,负责对总线的控制,进入 DMA 方式。


·能对存储器寻址及能修改地址指针,实现对内存的读写操作。


·能决定本次 DMA 传送的字节数,判断 DMA 传送是否结束。


·发出 DMA 结束信号,使 CPU 恢复正常工作状态


2) DMA 信号


·DREQ:DMA 请求信号。是外设向 DMA 控制器提出要求,DMA 操作的申请信号。


·DACK:DMA 响应信号。是 DMA 控制器向提出 DMA 请求的外设表示已收到请求和正进行处理的信号。


·HRQ:DMA 控制器向 CPU 发出的信号,要求接管总线的请求信号。


·HLDA:CPU 向 DMA 控制器发出的信号,允许接管总线的应答信号。




内存使用场景


out of memory 的时代过去了吗?no,内存再充足也不可任性使用。


1、内存的使用场景


·page 管理


·slab(kmalloc、内存池)


·用户态内存使用(malloc、relloc 文件映射、共享内存)


·程序的内存 map(栈、堆、code、data)


·内核和用户态的数据传递(copy_from_user、copy_to_user)


·内存映射(硬件寄存器、保留内存)


·DMA 内存


2、用户态内存分配函数


·alloca 是向栈申请内存,因此无需释放


·malloc 所分配的内存空间未被初始化,使用 malloc() 函数的程序开始时(内存空间还没有被重新分配) 能正常运行,但经过一段时间后(内存空间已被重新分配) 可能会出现问题。


·calloc 会将所分配的内存空间中的每一位都初始化为零


·realloc 扩展现有内存空间大小


a) 如果当前连续内存块足够 realloc 的话,只是将 p 所指向的空间扩大,并返回 p 的指针地址。这个时候 q 和 p 指向的地址是一样的。


b) 如果当前连续内存块不够长度,再找一个足够长的地方,分配一块新的内存,q,并将 p 指向的内容 copy 到 q,返回 q。并将 p 所指向的内存空间删除。


3、内核态内存分配函数


函数分配原理最大内存其他_get_free_pages直接对页框进行操作4MB适用于分配较大量的连续物理内存kmem_cache_alloc基于 slab 机制实现128KB适合需要频繁申请释放相同大小内存块时使用kmalloc基于 kmem_cache_alloc 实现128KB最常见的分配方式,需要小于页框大小的内存时可以使用vmalloc建立非连续物理内存到虚拟地址的映射物理不连续,适合需要大内存,但是对地址连续性没有要求的场合dma_alloc_coherent基于_alloc_pages 实现4MB适用于 DMA 操作ioremap实现已知物理地址到虚拟地址的映射适用于物理地址已知的场合,如设备驱动alloc_bootmem在启动 kernel 时,预留一段内存,内核看不见小于物理内存大小,内存管理要求较高。


4、malloc 申请内存


·调用 malloc 函数时,它沿 free_chuck_list 连接表寻找一个大到足以满足用户请求所需要的内存块。



·free_chuck_list 连接表的主要工作是维护一个空闲的堆空间缓冲区链表。


·如果空间缓冲区链表没有找到对应的节点,需要通过系统调用 sys_brk 延伸进程的栈空间。



5、缺页异常


·通过 get_free_pages 申请一个或多个物理页面


·换算 addr 在进程 pdg 映射中所在的 pte 地址


·将 addr 对应的 pte 设置为物理页面的首地址


·系统调用:Brk—申请内存小于等于 128kb,do_map—申请内存大于 128kb。



6、用户进程访问内存分析


·用户态进程独占虚拟地址空间,两个进程的虚拟地址可相同。


·在访问用户态虚拟地址空间时,如果没有映射物理地址,通过系统调用发出缺页异常。


·缺页异常陷入内核,分配物理地址空间,与用户态虚拟地址建立映射。



7、共享内存


1) 原理


·它允许多个不相关的进程去访问同一部分逻辑内存。


·两个运行中的进程之间传输数据,共享内存将是一种效率极高的解决方案。


·两个运行中的进程共享数据,是进程间通信的高效方法,可有效减少数据拷贝的次数。



2) shm 接口


·shmget 创建共享内存


·shmat 启动对该共享内存的访问,并把共享内存连接到当前进程的地址空间。


·shmdt 将共享内存从当前进程中分离


内存使用那些坑


1、C 内存泄露


·在类的构造函数和析构函数中没有匹配地调用 new 和 delete 函数



·没有正确地清除嵌套的对象指针


·没有将基类的析构函数定义为虚函数


·当基类的指针指向子类对象时,如果基类的析构函数不是 virtual,那么子类的析构函数将不会被调用,子类的资源没有得到正确释放,因此造成内存泄露。


·缺少拷贝构造函数,按值传递会调用(拷贝)构造函数,引用传递不会调用


·指向对象的指针数组不等同于对象数组,数组中存放的是指向对象的指针,不仅要释放每个对象的空间,还要释放每个指针的空间。


·缺少重载赋值运算符,也是逐个成员拷贝的方式复制对象,如果这个类的大小是可变的,那么结果就是造成内存泄露。


2、C野指针


·指针变量没有初始化


·指针被 free 或 delete 后,没有设置为 NULL


·指针操作超越了变量的作用范围,比如返回指向栈内存的指针就是野指针。


·访问空指针(需要做空判断)


·sizeof 无法获取数组的大小


·试图修改常量,如:char p="1234";p='1';


3、C 资源访问冲突


·多线程共享变量没有用 valotile 修饰


·多线程访问全局变量未加锁


·全局变量仅对单进程有效


·多进程写共享内存数据,未做同步处理


·mmap 内存映射,多进程不安全


4、STL迭代器失效


·被删除的迭代器失效


·添加元素(insert/push_back 等)、删除元素导致顺序容器迭代器失效。


·错误示例:删除当前迭代器,迭代器会失效



正确示例:迭代器 erase 时,需保存下一个迭代器



5、C++ 11 智能指针


·auto_ptr 替换为 unique_ptr



·使用 make_shared 初始化一个 shared_ptr



·weak_ptr 智能指针助手


1)原理分析:



2)数据结构:



3)使用方法:a. lock() 获取所管理的对象的强引用指针 b. expired() 检测所管理的对象是否已经释放 c. get() 访问智能指针对象。


6、C++ 11 更小更快更安全


·std::atomic 原子数据类型多线程安全


·std::array长数组开销比 array 小和 std::vector 不同的是 array 的长度是固定的,不能动态拓展。


·std::vector vector 瘦身 shrink_to_fit():将 capacity 减少为于 size() 相同的大小。


·td::forward_list


forward_list 是单链表(std::list 是双链表),只需要顺序遍历的场合,forward_list 能更加节省内存,插入和删除的性能高于 list。


·std::unordered_map、std::unordered_set用 hash 实现的无序的容器,插入、删除和查找的时间复杂度都是 O(1),在不关注容器内元素顺序的场合,使用 unordered 的容器能获得更高的性能六、 如何查看内存:


·系统中内存使用情况:/proc/meminfo



·进程的内存使用情况:/proc/28040/status


·查询内存总使用率:free



·查询进程 cpu 和内存使用占比:top



·虚拟内存统计:vmstat



·进程消耗内存占比和排序:ps aux –sort -rss



·释放系统内存缓存:/proc/sys/vm/drop_caches


定期以通俗易懂的方式分享嵌入式知识,关注公众号,加星标,每天进步一点点。


声明:

本号原创、转载的文章、图片等版权归原作者所有,如有侵权,请联系删除。

关注、点赞、在看、转发,支持优质内容! 

评论
  •     为控制片内设备并且查询其工作状态,MCU内部总是有一组特殊功能寄存器(SFR,Special Function Register)。    使用Eclipse环境调试MCU程序时,可以利用 Peripheral Registers Viewer来查看SFR。这个小工具是怎样知道某个型号的MCU有怎样的寄存器定义呢?它使用一种描述性的文本文件——SVD文件。这个文件存储在下面红色字体的路径下。    例:南京沁恒  &n
    电子知识打边炉 2025-01-04 20:04 100浏览
  • 自动化已成为现代制造业的基石,而驱动隔离器作为关键组件,在提升效率、精度和可靠性方面起到了不可或缺的作用。随着工业技术不断革新,驱动隔离器正助力自动化生产设备适应新兴趋势,并推动行业未来的发展。本文将探讨自动化的核心趋势及驱动隔离器在其中的重要角色。自动化领域的新兴趋势智能工厂的崛起智能工厂已成为自动化生产的新标杆。通过结合物联网(IoT)、人工智能(AI)和机器学习(ML),智能工厂实现了实时监控和动态决策。驱动隔离器在其中至关重要,它确保了传感器、执行器和控制单元之间的信号完整性,同时提供高
    腾恩科技-彭工 2025-01-03 16:28 170浏览
  • 村田是目前全球量产硅电容的领先企业,其在2016年收购了法国IPDiA头部硅电容器公司,并于2023年6月宣布投资约100亿日元将硅电容产能提升两倍。以下内容主要来自村田官网信息整理,村田高密度硅电容器采用半导体MOS工艺开发,并使用3D结构来大幅增加电极表面,因此在给定的占位面积内增加了静电容量。村田的硅技术以嵌入非结晶基板的单片结构为基础(单层MIM和多层MIM—MIM是指金属 / 绝缘体/ 金属) 村田硅电容采用先进3D拓扑结构在100um内,使开发的有效静电容量面积相当于80个
    知白 2025-01-07 15:02 75浏览
  • By Toradex 秦海1). 简介嵌入式平台设备基于Yocto Linux 在开发后期量产前期,为了安全以及提高启动速度等考虑,希望将 ARM 处理器平台的 Debug Console 输出关闭,本文就基于 NXP i.MX8MP ARM 处理器平台来演示相关流程。 本文所示例的平台来自于 Toradex Verdin i.MX8MP 嵌入式平台。  2. 准备a). Verdin i.MX8MP ARM核心版配合Dahlia载板并
    hai.qin_651820742 2025-01-07 14:52 44浏览
  • 在智能家居领域中,Wi-Fi、蓝牙、Zigbee、Thread与Z-Wave等无线通信协议是构建短距物联局域网的关键手段,它们常在实际应用中交叉运用,以满足智能家居生态系统多样化的功能需求。然而,这些协议之间并未遵循统一的互通标准,缺乏直接的互操作性,在进行组网时需要引入额外的网关作为“翻译桥梁”,极大地增加了系统的复杂性。 同时,Apple HomeKit、SamSung SmartThings、Amazon Alexa、Google Home等主流智能家居平台为了提升市占率与消费者
    华普微HOPERF 2025-01-06 17:23 143浏览
  • 光耦合器,也称为光隔离器,是一种利用光在两个隔离电路之间传输电信号的组件。在医疗领域,确保患者安全和设备可靠性至关重要。在众多有助于医疗设备安全性和效率的组件中,光耦合器起着至关重要的作用。这些紧凑型设备经常被忽视,但对于隔离高压和防止敏感医疗设备中的电气危害却是必不可少的。本文深入探讨了光耦合器的功能、其在医疗应用中的重要性以及其实际使用示例。什么是光耦合器?它通常由以下部分组成:LED(发光二极管):将电信号转换为光。光电探测器(例如光电晶体管):检测光并将其转换回电信号。这种布置确保输入和
    腾恩科技-彭工 2025-01-03 16:27 180浏览
  • 每日可见的315MHz和433MHz遥控模块,你能分清楚吗?众所周知,一套遥控设备主要由发射部分和接收部分组成,发射器可以将控制者的控制按键经过编码,调制到射频信号上面,然后经天线发射出无线信号。而接收器是将天线接收到的无线信号进行解码,从而得到与控制按键相对应的信号,然后再去控制相应的设备工作。当前,常见的遥控设备主要分为红外遥控与无线电遥控两大类,其主要区别为所采用的载波频率及其应用场景不一致。红外遥控设备所采用的射频信号频率一般为38kHz,通常应用在电视、投影仪等设备中;而无线电遥控设备
    华普微HOPERF 2025-01-06 15:29 125浏览
  • PLC组态方式主要有三种,每种都有其独特的特点和适用场景。下面来简单说说: 1. 硬件组态   定义:硬件组态指的是选择适合的PLC型号、I/O模块、通信模块等硬件组件,并按照实际需求进行连接和配置。    灵活性:这种方式允许用户根据项目需求自由搭配硬件组件,具有较高的灵活性。    成本:可能需要额外的硬件购买成本,适用于对系统性能和扩展性有较高要求的场合。 2. 软件组态   定义:软件组态主要是通过PLC
    丙丁先生 2025-01-06 09:23 85浏览
  • 本文介绍Linux系统更换开机logo方法教程,通用RK3566、RK3568、RK3588、RK3576等开发板,触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。制作图片开机logo图片制作注意事项(1)图片必须为bmp格式;(2)图片大小不能大于4MB;(3)BMP位深最大是32,建议设置为8;(4)图片名称为logo.bmp和logo_kernel.bmp;开机
    Industio_触觉智能 2025-01-06 10:43 87浏览
  • 随着市场需求不断的变化,各行各业对CPU的要求越来越高,特别是近几年流行的 AIOT,为了有更好的用户体验,CPU的算力就要求更高了。今天为大家推荐由米尔基于瑞芯微RK3576处理器推出的MYC-LR3576核心板及开发板。关于RK3576处理器国产CPU,是这些年的骄傲,华为手机全国产化,国人一片呼声,再也不用卡脖子了。RK3576处理器,就是一款由国产是厂商瑞芯微,今年第二季推出的全新通用型的高性能SOC芯片,这款CPU到底有多么的高性能,下面看看它的几个特性:8核心6 TOPS超强算力双千
    米尔电子嵌入式 2025-01-03 17:04 55浏览
  • 根据Global Info Research项目团队最新调研,预计2030年全球封闭式电机产值达到1425百万美元,2024-2030年期间年复合增长率CAGR为3.4%。 封闭式电机是一种电动机,其外壳设计为密闭结构,通常用于要求较高的防护等级的应用场合。封闭式电机可以有效防止外部灰尘、水分和其他污染物进入内部,从而保护电机的内部组件,延长其使用寿命。 环洋市场咨询机构出版的调研分析报告【全球封闭式电机行业总体规模、主要厂商及IPO上市调研报告,2025-2031】研究全球封闭式电机总体规
    GIRtina 2025-01-06 11:10 104浏览
  • 大模型的赋能是指利用大型机器学习模型(如深度学习模型)来增强或改进各种应用和服务。这种技术在许多领域都显示出了巨大的潜力,包括但不限于以下几个方面: 1. 企业服务:大模型可以用于构建智能客服系统、知识库问答系统等,提升企业的服务质量和运营效率。 2. 教育服务:在教育领域,大模型被应用于个性化学习、智能辅导、作业批改等,帮助教师减轻工作负担,提高教学质量。 3. 工业智能化:大模型有助于解决工业领域的复杂性和不确定性问题,尽管在认知能力方面尚未完全具备专家级的复杂决策能力。 4. 消费
    丙丁先生 2025-01-07 09:25 80浏览
  • 这篇内容主要讨论三个基本问题,硅电容是什么,为什么要使用硅电容,如何正确使用硅电容?1.  硅电容是什么首先我们需要了解电容是什么?物理学上电容的概念指的是给定电位差下自由电荷的储藏量,记为C,单位是F,指的是容纳电荷的能力,C=εS/d=ε0εrS/4πkd(真空)=Q/U。百度百科上电容器的概念指的是两个相互靠近的导体,中间夹一层不导电的绝缘介质。通过观察电容本身的定义公式中可以看到,在各个变量中比较能够改变的就是εr,S和d,也就是介质的介电常数,金属板有效相对面积以及距离。当前
    知白 2025-01-06 12:04 170浏览
  • 彼得·德鲁克被誉为“现代管理学之父”,他的管理思想影响了无数企业和管理者。然而,关于他的书籍分类,一种流行的说法令人感到困惑:德鲁克一生写了39本书,其中15本是关于管理的,而其中“专门写工商企业或为企业管理者写的”只有两本——《为成果而管理》和《创新与企业家精神》。这样的表述广为流传,但深入探讨后却发现并不完全准确。让我们一起重新审视这一说法,解析其中的矛盾与根源,进而重新认识德鲁克的管理思想及其著作的真正价值。从《创新与企业家精神》看德鲁克的视角《创新与企业家精神》通常被认为是一本专为企业管
    优思学院 2025-01-06 12:03 116浏览
  • 根据环洋市场咨询(Global Info Research)项目团队最新调研,预计2030年全球无人机锂电池产值达到2457百万美元,2024-2030年期间年复合增长率CAGR为9.6%。 无人机锂电池是无人机动力系统中存储并释放能量的部分。无人机使用的动力电池,大多数是锂聚合物电池,相较其他电池,锂聚合物电池具有较高的能量密度,较长寿命,同时也具有良好的放电特性和安全性。 全球无人机锂电池核心厂商有宁德新能源科技、欣旺达、鹏辉能源、深圳格瑞普和EaglePicher等,前五大厂商占有全球
    GIRtina 2025-01-07 11:02 68浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦