欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Linux内存管理浅识

时间:2023-06-26

1.1内存组织

     从管理内存的方法区分:可以把计算机内存分为,一种UMA(一致性访问),另一种NUMA(非一致性访问)。


        对于UMA每一个CPU访问同一块内存,各CPU对内存的访问不存在性能差异;对于NUMA而言,各内存和CPU都通过总线连接在一起,每个CPU都有一个本地内存,访问速度较快,若CPU访问其他CPU的本地内存,速度很慢。

       Linux在内存组织中将最高层次定义为内存节点。UMA系统中定义一个内存节点,在NUMA系统中定义两个内存节点。Linux内存管理第二个层次定义为区,每个内存节点都划分为很多区,目前内核中定义一下几个区:
-  ZONE_DMA:适合DMA操作的内存区。
-  ZONE_DMA32:在64位系统上使用32位地址寻址的适合DMA操作的内存区。
-   ZONE_NORMAL:常规内存区域,指可以直接映射到内核空间的内存。
-   ZONE_HIGHMEM:高端内存。
-   ZONE_MOVEABLE:一个伪内存区域。
-   Linux内存管理的第三个层次为页,页的大小有CPU的内存管理单元MMU决定。
-     Linux内核是按页来管理内存的,最基本的内存分配和释放都是按页进行的。
1.2按页分配内存

    struct page *alloc_pages(gfp_t gfp_mask,unsigned int order);
    alloc_page(gfp_mask);
    void __free_pages(struct page *page,unsigned int order);

alloc_pages分配2的Oder次方连续的物理页,返回值为起始页struct page对象的地址,参数gfp_mask控制页面分配行为的一个掩码。

1.3 slab分配器

内核针对小块内存的分配器。

2、DMA工作原理

 

DMAC是DMA的控制器,若现在有大量数据需要传输,无DMA时则需要CPU处理,便会产生多次中断,数据搬移则加大CPU的负担,若有DMA的设备则会协助CPU完成数据传输,CPU只需要告诉DMA将一个内存起始地址若干个字节搬移到指定外设发送FIFO中,接受同理,DMAC就会启动存储总线数据搬移,结束后给CPU一个中断,通知CPU数据搬移完成,提高工作效率。
 

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。