![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux内存管理
文章平均质量分 79
芒果520
每天进步一点点
展开
-
linux内存管理
在思考cache是什么之前我们首先先来思考第一个问题:我们的程序是如何运行起来的?我们应该知道程序是运行在 RAM之中,RAM 就是我们常说的DDR(例如 DDR3、DDR4等)。我们称之为main memory(主存)当我们需要运行一个进程的时候,首先会从Flash设备(例如,eMMC、UFS等)中将可执行程序load到main memory中,然后开始执行。在CPU内部存在一堆的通用寄存器(register)。如果CPU需要将一个变量(假设地址是A)加1,一般分为以下3个步骤:我们将这个过程可以表示如下原创 2020-02-03 18:15:55 · 286 阅读 · 1 评论 -
内存分配管理
kmalloc 和 vmalloc 区别在于:kmalloc 分配的内存物理地址是连续的, 虚拟地址也是连续的vmalloc 分配的内存物理地址是不连续的,虚拟地址是连续的因此在使用中,用的较多的还是 kmalloc,因为kmalloc 的性能较好。因为kmalloc的物理地址和虚拟地址之间的映射比较简单,只需要将物理地址的第一页和虚拟地址的第一页关联起来即可。而vmalloc由于物理地址是不连续的,所以要将物理地址的每一页都和虚拟地址关联起来才行。kmalloc和vmalloc是分配.原创 2021-01-11 16:57:20 · 272 阅读 · 0 评论 -
Linux内存初始化
有了armv8架构访问内存的理解,我们来看下linux在内存这块的初始化就更容易理解了。创建启动页表:在汇编代码阶段的head.S文件中,负责创建映射关系的函数是create_page_tables。create_page_tables函数负责identity mapping和kernel image mapping。 identity map:是指把idmap_text区域的物理地址映射到相等的虚拟地址上,这种映射完成后,其虚拟地址等于物理地址。idmap_text区域都是一些打开MMU相关原创 2021-05-26 14:18:53 · 416 阅读 · 0 评论 -
内存管理之CPU访问内存的过程
CPU访问内存的过程可以用图的方式来说明,简单直接:蓝色部分是cpu,灰色部分是内存,白色部分就是cpu访问内存的过程,也是地址转换的过程。在解释地址转换的本质前我们先理解下几个概念: TLB:MMU工作的过程就是查询页表的过程。如果把页表放在内存中查询的时候开销太大,因此为了提高查找效率,专门用一小片访问更快的区域存放地址转换条目。(当页表内容有变化的时候,需要清除TLB,以防止地址映射出错。) Caches:cpu和内存之间的缓存机制,用于提高访问速率,armv8架构的话上图的c原创 2021-05-26 14:10:43 · 3901 阅读 · 0 评论