当前位置:首页 > 内存 > 正文

vm分配dma内存

  • 内存
  • 2024-09-04 12:06:48
  • 8065

一、linux系统为什么给内核分配1G不是500M?为什么不是2:2分配?

每个进程都必须占用一定量的内存,这些内存用于存储从磁盘加载的程序代码或用户输入的数据。内存可以预先静态分配并统一回收,也可以按需动态分配和回收。

典型进程对应的内存空间包含五个不同的数据区域:

代码段

数据段

BSS段堆栈:存放临时创建的局部变量。

Linux采用虚拟内存管理技术,每个进程都有自己独立的进程地址空间(如4G线性虚拟空间),并且不能直接访问物理内存。这可以保护操作系统并允许用户程序使用比实际物理内存更大的地址空间。

4G进程地址空间分为两部分:内核空间和用户空间。用户空间的范围是0到3G,内核空间的范围是3G到4G。

用户进程通常只能访问用户空间的虚拟地址,而不能访问内核空间的虚拟地址。只有用户进程在进行系统调用时才可以访问内核空间(代表运行在内核态的用户进程)。

用户空间对应一个进程,所以当进程切换时,用户空间也会发生变化;

内核空间由内核映射,跨进程不会改变。一个内核空间地址有一个对应的页表,每个用户进程都有不同的页表。

将虚拟内存转换为真实物理内存:

虚拟进程空间:查询进程页表,获取真实物理内存地址。

虚拟内核空间:查询

物理内存映射区域:唯一的物理内存映射区域和实际物理偏移量是PAGE_OFFSET。这是通过virt_to_phys()转换的。

虚拟内存与实际物理内存的映射关系:

物理地址空间中896M除外对于(ZONE_DMA+ZONE_NORMAL)区域来说,它是绝对物理的。虽然是连续的,但其他记忆并不是物理记忆。虚拟内核地址空间安全保护区内的任何指针都是非法的,用于确保非法越界操作。vm_struct是连续的虚拟内核空间,其物理页可以是不连续的。(3G+896M+8M)~4G;另外,虚拟用户空间中的vm_area_struct也是一个连续的虚拟进程空间,地址空间范围为0到3G。


二、内存管理:一文读懂Linux内存组织结构及页面布局

1.什么是内存?

1)内存也称为主存,是CPU可以直接寻址的存储空间,由半导体器件组成。

2)内存的特点是访问速度快。

2.内存的作用

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

3)CPU确保计算机的稳定性和高性能。

内存地址空间内存管理概述

2.内存地址-用户模式和内核模式

1)段选择器

更多Linux内核视频教程文档和资料可在后台私信【kernel】获取它是免费的。

内核学习网站:

Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈学习视频教程-腾讯课堂

2)分段实现内存地址-分页机制(32位)

6.用户模式地址空间

7.

8.进程内存空间

内存管理算法-对于那些不喜欢自己管理内存的人来说是一个福音。

1)基本原理

2)如何避免内存碎片

2.合作伙伴系统算法-组织结构

1)概念

2)外部碎片

3.合作伙伴系统算法-应用程序和回收

1)应用程序算法

2)回收算法

3)条件

4.如何分配超过4M的内存?

1)Danchun块的内存分配为什么限制?

2)如何在内核中获得超过4M的大内存

5.-抗碎片机制

1)不可移动页面

2.)可回收页面

算法-基本原理

1)基本概念

2)内部碎片

7.结构

详细参考:

经典|图解Linux内存性能优化思路

缓存

1)常规缓存

2)专用缓存

9.内核态内存池

1)基本原理

2)内核API

10.用户模式内存池

1)C++示例

内存是什么?

2)DMA信号

内存不足的时代已经结束了吗?再充裕也不能随意使用。

1.内存使用场景

2.用户模式内存分配函数

a)如果当前连续内存块足够重新分配,请指定如下:p空间被扩展,并返回对p取模的指针地址。在这种情况下,q和p指向的地址是相同的。

b)如果当前连续内存块不够长,则找到一个足够长的位置,分配新的内存q,并添加它。将p指向的内容复制到q中并返回q。然后,删除p指向的内存空间。

3.内核态内存分配函数

4.对内存应用Malloc。

5.用户进程访问内存分析

1)原理

2)shm接口

1.C内存泄漏

2.C野指针

3.C资源访问争用

迭代器错误

错误:如果删除当前迭代器,迭代器将变得无效。

正确:当一个迭代器被清除时,必须保存下一个迭代器。

5.+11个智能指针

(1)原理分析:

(2)数据结构:

(3))用法:

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

6.如何检查内存

cat/你可以用proc/slabinfo命令。

可以在/proc/sys/vm/drop_caches中检查并释放