linux kernel物理内存概述(一)

目录

一、处理器架构

二、内存屏障产生的原因

三、物理内存概述

四、处理器访问内存时间 

五、用户态常用的内存申请API


一、处理器架构

ARMV8 虚拟化和安全特性在ARMV7架构中已经实现,但对大内存的支持不够,虽然可以通过大物理内存地址扩展支持40位的物理地址空间,但由于32位的处理器最多支持4GB的虚拟地址空间,不合适虚拟内存需求巨大的应用。ARMV8-A支持64位指令集,并且向前兼容ARMv7-A .

二、内存屏障产生的原因

  1. 编译时,编译器优化导致内存乱序访问;

规避方法

#define barrier() __asm__ __volatile__("" ::: "memory")

告诉编译器,不要为了性能优化代码重排

  1. 执行时,多个CPU间交互引起的内存乱序访问;

三、物理内存概述

  • 编程接触内存使用malloc C函数库申请,此函数申请的是虚拟内存,要了解虚拟内存,需要了解MMU,页表、物理内存、物理页面、映射关系、按需分配、缺页中断、写时复制等;
  • 当了解MMU时,除了要了解MMU工作原理外,还需要了解Linux内核如何建立页表映射,用户空间页表的建立和内核空间页表的建立,以及内核是如何查询页表和修改页表
  • 当了解物理内存和物理页面时,接触数据结构pglist_data,zone,page,这三个数据结构描述了系统中物理内存的组织架构。page数据结构除了描述一个4KB大小的物理页面外,还包括很多复杂的成员;
  • 当了解分配物理页面时,出现伙伴系统机制和页面分配器
  • 有了物理内存,虚拟内存和物理内存如何映射?在linux内核中,用vm_area_struct数据结构描述进程的虚拟内存。对于虚拟内存和物理内存,采用 建立页表 的方法来建立映射关系;还出现匿名页;
  • malloc分配内存,出现缺页中断;
  • 虚拟内存和物理内存已经建立了映射关系,这是以页面为基础,如果内核有时需要小于一个页面大小的内存,slab分配机制出现;
  • 如果用户持续分配内存,物理内存不够时,出现页面回收机制和反向映射机制;
  • 虚拟内存和物理内存的映射关系经常在建立后又解除了,系统物理内存页面布局出现碎片化,出现内存规整机制;

四、处理器访问内存时间 

访问类型延迟(大约)
L1高速缓存命中4个时钟周期
L2高速缓存命中10个时钟周期
L3高速缓存命中(高速缓存行没有共享)40个时钟周期
L3高速缓存命中(和其他CPU共享高速缓存)65个时钟周期
L3高速缓存命中(高速缓存行被其他CPU修改过)75个时钟周期
访问远端的L3高速缓存100~300个时钟周期
访问本地DDR物理内存60ns
访问远端内存节点的DDR物理内存100ns

五、用户态常用的内存申请API

void *malloc(size_t size);
void free(void *ptr);

void *mmap(void *addr,size_t length,int prot,int flags,int fd,off_t offset);

int getpagesize(void);
int mprotect(const void *addr,size_t len,int port);

int mlock(const void *addr,size_t len);
int munlock(const void *addr,size_t len);

int madvise(void *addr,size_t length,int advise);
void *mremap(void *old_address,size_t old_size,size_t new_size,int flags);
int remap_file_pages(void *addr,size_t size,int port,ssize_t pgoff,int flags);
 
  • 19
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

为了维护世界和平_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值