
内存管理
文章平均质量分 79
分页管理原理,内存申请释放细节,内存消耗和泄露,内存与IO实现细节,工程优化
科学边界
这个作者很懒,什么都没留下…
展开
-
Linux内核之内存5: 其他工程问题以及调优
1.DMA和cache一致性(1)不带CACHE自己写驱动,申请DMA,可以用Coherent DMA buffersvoid * dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t*dma_handle,gfp_t flag);void dma_free_coherent (struct device *dev, size_t size,void *cpu_addr,dma_addr_t dma_handle);原创 2020-08-27 16:49:28 · 565 阅读 · 0 评论 -
Linux内核之内存2: 内存的动态申请、释放的原理和细节
1.slab、kmalloc/kfree、/proc/slabinfo和slabtopBuddy 是直面物理内存的,所有的内存分配,最终都通过Buddy的get_free_page/page_alloc分配;Buddy的粒度太大,最小分配一页(4k); 而我们常常需要分配小内存;所以Linux引入一个二级分配的概念:1.内核分配内存,调用kmalloc()/kfree()–调用slab–再调用Buddy ;2.用户空间malloc/free–调用C库–C库通过brk/mmap调用Buddy;fr原创 2020-08-27 11:35:57 · 1746 阅读 · 0 评论 -
Linux内核之内存4: 内存与I/O的交换
1. page cacheLinux读写文件过程;read:用户进程调用read命令,内核查询读取的文件内容是否在内存(内核pagecache)中,若该页内容缓存在内存中,直接读取返回给用户进程;若缓存不存在,则启动BIO,从硬盘读取该页面到内存,再送给用户进程;write过程:比如往某文件5K处写入10byte,内核先查询该页是否在内存缓存(内核pagecache),不在,同read,从硬盘读取该页4~8K到内存,再往5k处写入10byte,标明该页为脏页;写回磁盘时机,则由内存管理的BIO原创 2020-08-27 12:03:11 · 852 阅读 · 0 评论 -
Linux内核之内存3: 进程的内存消耗和内存泄漏
1.进程的VMA(1)进程地址空间在Linux系统中,每个进程都有自己的虚拟内存空间0~3G;内核空间只有一个3G~4G;进程通过系统API调用,在内核空间申请内存,不统计在任何用户进程;进程消耗内存,单指用户空间内存消耗;(2)VMA列表LINUX用task_struct来描述进程,其中的mm_struct是描述内存的结构体,mm_struct有一个vma列表,管理当前进程的所有vma段。每个进程的内存由多个vma段组成:(3)查看VMA方法:1.pmap由图知,从接近0地址开始原创 2020-08-27 11:46:50 · 1495 阅读 · 0 评论 -
Linux内核之内存1: CPU寻址原理和分页管理
1.1 CPU寻址内存,虚拟地址、物理地址(1)寻址内存:CPU访问外设,有两种类型,一个是内存空间,一个是IO空间;IO空间,X86通过in/out指令访问外设,IO空间只存在X86架构,在RISC架构不存在;内存空间,CPU通过指针访问所有内存空间,内存空间分为两类,普通内存和位于内存空间的寄存器。其他设备的寄存器,比如通过I2C总线访问触摸屏的寄存器,与CPU内存空间无关。(2) MMU原理对于一个支持MMU的CPU,只要开启MMU,CPU跟程序员视角一致,看到的永远是虚拟地址;在访问原创 2020-08-27 11:26:29 · 1056 阅读 · 3 评论