随笔分类 -  Linux内存管理

深入理解Linux内存分配
摘要:深入理解Linux内存分配 为了写一个用户层程序,你也许会声明一个全局变量,这个全局变量可能是一个int类型也可能是一个数组,而声明之后你有可能会先初始化它,也有可能放在之后用到它的时候再初始化。除此之外,你有可能会选择在函数内部去声明局部变量,又或者为变量动态申请内存。 不管你在用户程序中采取哪种 阅读全文

posted @ 2018-06-13 13:41 AlanTu 阅读(11684) 评论(4) 推荐(0) 编辑

缓存更新的套路
摘要:看到好些人在写更新缓存数据代码时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中。然而,这个是逻辑是错误的。试想,两个并发操作,一个是更新操作,另一个是查询操作,更新操作删除缓存后,查询操作没有命中缓存,先把老数据读出来后放到缓存中,然后更新操作更新了数据库。于是,在缓存中的数据还 阅读全文

posted @ 2018-03-08 13:03 AlanTu 阅读(879) 评论(0) 推荐(0) 编辑

内存寻址:存储保护机制
摘要:cpu的保护模式由来 分段机制 8086的诞生,标志着Intel 正式进入了x86时代,这是个多么具有纪念意义的日子:1978-6-8。同时,8086的诞生也是处理器内存寻址技术的第一次飞跃。 对于一根实际的、实实在在的、物理的、可看得见、摸得着的内存条而言,处理器把它当做8位一个字节的序列来管理和 阅读全文

posted @ 2018-03-07 14:35 AlanTu 阅读(2180) 评论(0) 推荐(1) 编辑

伙伴算法的实现-分配页框
摘要:内核中alloc_pages系列页框分配函数都是基于伙伴算法实现的,这些函数最终都会调用伙伴算法的入口函数buffered_rmqueue()。 Linux内核管理物理内存有三种方式,其一就是经典的伙伴算法。但是伙伴算法分配物理内存的基本单位是页框,因此内核又引入了slab机制,基于此机制实现的物理 阅读全文

posted @ 2018-02-28 12:08 AlanTu 阅读(1563) 评论(0) 推荐(0) 编辑

Linux内存点滴 - 用户进程内存空间
摘要:经常使用top命令了解进程信息,其中包括内存方面的信息。命令top帮助文档是这么解释各个字段的。VIRT , Virtual Image (kb)RES, Resident size (kb)SHR, Shared Mem size (kb)%MEM, Memory usage(kb)SWAP, S 阅读全文

posted @ 2018-02-23 16:03 AlanTu 阅读(378) 评论(0) 推荐(0) 编辑

Linux内存使用方法详细解析
摘要:我是一名程序员,那么我在这里以一个程序员的角度来讲解Linux内存的使用。 一提到内存管理,我们头脑中闪出的两个概念,就是虚拟内存,与物理内存。这两个概念主要来自于linux内核的支持。 Linux在内存管理上份为两级,一级是线性区,类似于00c73000-00c88000,对应于虚拟内存,它实际上 阅读全文

posted @ 2018-02-23 16:02 AlanTu 阅读(1430) 评论(0) 推荐(0) 编辑

Windows内存管理和linux内存管理
摘要:windows内存管理 windows 内存管理方式主要分为:页式管理,段式管理,段页式管理。 页式管理的基本原理是将各进程的虚拟空间划分为若干个长度相等的页;页式管理把内存空间按照页的大小划分成片或者页面,然后把页式虚拟地址与内存地址建立一一对应的页表;并用相应的硬件地址变换机构来解决离散地址变换 阅读全文

posted @ 2018-02-23 09:31 AlanTu 阅读(8371) 评论(0) 推荐(0) 编辑

LRU Cache
摘要:一、什么是Cache 1 概念 Cache,即高速缓存,是介于CPU和内存之间的高速小容量存储器。在金字塔式存储体系中它位于自顶向下的第二层,仅次于CPU寄存器。其容量远小于内存,但速度却可以接近CPU的频率。 当CPU发出内存访问请求时,会先查看 Cache 内是否有请求数据。 如果存在(命中), 阅读全文

posted @ 2018-02-22 20:20 AlanTu 阅读(778) 评论(0) 推荐(0) 编辑

浅谈Linux的内存管理机制
摘要:一 物理内存和虚拟内存 我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念。物理内存就是系统硬件提供的内存大小,是真正的内存,相对于物理内存,在linux下还有一个虚拟内存的概念,虚拟内存就 阅读全文

posted @ 2018-02-22 16:40 AlanTu 阅读(12288) 评论(0) 推荐(1) 编辑

page_address()函数分析
摘要:由于X86平台上面,内存是划分为低端内存和高端内存的,所以在两个区域内的page查找对应的虚拟地址是不一样的。一. x86上关于page_address()函数的定义在include/linux/mm.h里面,有对page_address()函数的三种宏定义,主要依赖于不同的平台:首先来看看几个宏的 阅读全文

posted @ 2018-02-22 16:33 AlanTu 阅读(3396) 评论(0) 推荐(0) 编辑

KASAN实现原理
摘要:1. 前言 KASAN是一个动态检测内存错误的工具。KASAN可以检测全局变量、栈、堆分配的内存发生越界访问等问题。功能比SLUB DEBUG功能齐全并且支持实时检测。越界访问的严重性和危害性通过我之前的文章(SLUB DEBUG技术)应该有所了解。正是由于SLUB DEBUG缺陷,因此我们需要一种 阅读全文

posted @ 2018-02-21 21:09 AlanTu 阅读(8377) 评论(0) 推荐(1) 编辑

Linux内核scatterlist API介绍
摘要:1. 前言 我们在那些需要和用户空间交互大量数据的子系统(例如MMC[1]、Video、Audio等)中,经常看到scatterlist的影子。对我们这些“非英语母语”的人来说,初见这个词汇,脑袋瞬间就蒙圈了。scatter可翻译成“散开、分散”,list是“列表”的意思,因而scatterlist 阅读全文

posted @ 2018-02-21 21:08 AlanTu 阅读(11384) 评论(0) 推荐(1) 编辑

CMA概述
摘要:前言 本文是近期学习CMA模块的一个学习笔记,方便日后遗忘的时候,回来查询以便迅速恢复上下文。 学习的基本方法是这样的:一开始,我自己先提出了若干的问题,然后带着这些问题查看网上的资料,代码,最后整理形成这样以问题为导向的index,顺便也向笨叔叔致敬。笨叔叔写了一本书叫做《奔跑吧Linux内核》, 阅读全文

posted @ 2018-02-21 21:07 AlanTu 阅读(3542) 评论(0) 推荐(1) 编辑

逆向映射的演进
摘要:一、前言 数学大师陈省身有一句话是这样说的:了解历史的变化是了解这门学科的一个步骤。今天,我把这句话应用到一个具体的Linux模块:了解逆向映射的最好的方法是了解它的历史。本文介绍了Linux内核中的逆向映射机制如何从无到有,如何从笨重到轻盈的历史过程,通过这些历史的演进过程,希望能对逆向映射有更加 阅读全文

posted @ 2018-02-13 22:50 AlanTu 阅读(1054) 评论(0) 推荐(0) 编辑

Linux内存管理基本概念
摘要:1. 前言 内存(memory)在Linux系统中是一种牵涉面极广的资源,上至应用程序、下至kernel和driver,无不为之魂牵梦绕。加上它天然的稀缺性,导致内存管理(Memory Management,简称MM)是linux kernel中非常重要又非常复杂的一个子系统。 重要性就不多说了,K 阅读全文

posted @ 2018-02-13 22:49 AlanTu 阅读(1015) 评论(0) 推荐(1) 编辑

/proc/meminfo分析(一)
摘要:本文主要分析/proc/meminfo文件的各种输出信息的具体含义。 一、MemTotal MemTotal对应当前系统中可以使用的物理内存。 这个域实际是对应内核中的totalram_pages这个全局变量的,定义如下: unsigned long totalram_pages __read_mo 阅读全文

posted @ 2018-02-13 22:45 AlanTu 阅读(4769) 评论(0) 推荐(1) 编辑

Linux页面回收概述
摘要:本文主要介绍了一些page reclaim机制中的基本概念。这份文档其实也可以看成阅读ULK第17章第一小节的一个读书笔记。虽然ULK已经读了很多遍,不过每一遍还是觉得有收获。Linux内核虽然不断在演进,但是页面回收的基本概念是不变的,所以ULK仍然值得内核发烧友仔细品味。 一、什么是page f 阅读全文

posted @ 2018-02-13 22:45 AlanTu 阅读(1199) 评论(0) 推荐(0) 编辑

Dynamic DMA mapping Guide
摘要:一、前言 这是一篇指导驱动工程师如何使用DMA API的文档,为了方便理解,文档中给出了伪代码的例程。另外一篇文档dma-api.txt给出了相关API的简明描述,有兴趣也可以看看那一篇,这两份文档在DMA API的描述方面是一致的。 二、从CPU角度看到的地址和从DMA控制器看到的地址有什么不同? 阅读全文

posted @ 2018-02-13 22:44 AlanTu 阅读(4825) 评论(0) 推荐(0) 编辑

Linux内存初始化(四) 创建系统内存地址映射
摘要:一、前言 经过内存初始化代码分析(一)和内存初始化代码分析(二)的过渡,我们终于来到了内存初始化的核心部分:paging_init。当然本文不能全部解析完该函数(那需要的篇幅太长了),我们只关注创建系统内存地址映射这部分代码实现,也就是解析paging_init中的map_mem函数。 同样的,我们 阅读全文

posted @ 2018-02-13 22:34 AlanTu 阅读(1795) 评论(0) 推荐(0) 编辑

Linux内存初始化(三) 内存布局
摘要:一、前言 同样的,本文是内存初始化文章的一份补充文档,希望能够通过这样的一份文档,细致的展示在初始化阶段,Linux 4.4.6内核如何从device tree中提取信息,完成内存布局的任务。具体的cpu体系结构选择的是ARM64。 二、memory type region的构建 memory ty 阅读全文

posted @ 2018-02-13 22:31 AlanTu 阅读(3653) 评论(0) 推荐(0) 编辑

导航