Chinaunix首页 | 论坛 | 博客
  • 博客访问: 304267
  • 博文数量: 33
  • 博客积分: 586
  • 博客等级: 中士
  • 技术积分: 494
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-27 14:05
个人简介

衡铁刚 1)2011-2013:Alibaba MySQL DBA 2)2014-至今: Alibaba 数据库PD

文章分类

全部博文(33)

文章存档

2016年(1)

2015年(10)

2013年(5)

2012年(17)

我的朋友

分类: Mysql/postgreSQL

2012-11-28 21:13:53

内存管理单元MMU)管理内存并把虚拟内存转换成物理地址的硬件,尽管处理器的最小寻址单位是字(字节),但是MMU是以为单位,因为从虚拟内存的角度来看,页就是最小单位

物理页的内核结构是struct page,其中

  • flag:页的状态,是否脏、是否被锁定在内存
  • _count:页的引用计数
  • virtual:页的虚拟地址,但有些内存(高端内存)并不永久映射到内核地址空间上,则值为null

page和物理页相关,即使页中所包含的数据继续存在,由于交换等原因,它们也不会再和同一page结构相关联,因为page是用来描述物理内存本身,而不是描述包含在其中的数据

 

(相似特性的页)

内存寻址问题(硬件缺陷引起)

一些硬件只能用某些特定的内存地址来执行DMA

一些体系结构的内存的物理寻址范围比虚拟寻址范围多

 

ZONE_DMA1)与ZONE_DMA322)区别在于后者只能被32位设备访问,两者包含的页面可用来执行DMA操作,ZONE_NORMAL3)是能正常映射的页,ZONE_HIGHEM4)包含高端内存,其中的页并不能永久地映射到内核地址空间

内核中使用zone结构来表示区,整个系统只有三个区name域分别为DMANORMALHIGHMEM,并使用lock域(自旋锁)来防止结构被并发访问(不保护驻留其中的页),watermark域记录随着空闲内存变化的区水位

 

内存分配:alloc_page(连续物理页)page_address(逻辑地址)get_zeroed_page(给用户空间每位都取消设置的页)

Kmalloc(以字节为单位分配,虚拟和物理地址都连续)vmalloc(虚拟地址连续,物理地址不连续)每种内存分配函数中都有用到了gfp_mask(分配器标志),分配器标志一共分三类:1.行为修饰符2.区修饰符3.类型标志

 

TLB:硬缓冲区,用来缓存虚拟地址到物理地址的映射关系

 

Slab:由一个或多个物理上连续的页组成,slab分配器是通用的数据结构缓存层,用来管理已经分配好的数据结构块的空闲链表,把不同的对象划分为高速缓存组,每个高速缓存(kmem_cache)由多个slab组成,根据slab三种状态(满、部分满、空)(三个链表 slabs_fullslabs_partialslabs_empty)来进行分配

 

内核栈:1~2page(8~16KB),每个进程的整个调用链必须放在自己的内核栈中,而后来变成单页内核栈和中断处理程序单页栈,

 

缓存抖动:每个CPU访问自己的数据,减少数据锁定,大大减少缓存失效,而这种失效发生在处理器试图使它们的缓存保持同步,即

一个处理器操作某个数据,该数据又存放在其他处理器缓存中,那么存放数据的处理器必须清理或刷新自己的缓存

 

 

阅读(1781) | 评论(0) | 转发(0) |
0

上一篇:Innobackupex超时退出

下一篇:VFS

给主人留下些什么吧!~~