如何做婚介网站,湖南3合1网站建设价格,贵州省住房和城乡建设部网站,国外做设计赚钱的网站linux内核之内存管理Linux内核之内存管理作者#xff1a;harvey wang邮箱#xff1a;harvey.perfect新浪博客地址#xff1a;/harveyperfect #xff0c;有关于减肥和学习英语相关的博文#xff0c;欢迎交流把linux内存管理分为下面四个层面(一)硬件辅助的虚实地址转换(二…linux内核之内存管理Linux内核之内存管理作者harvey wang邮箱harvey.perfect新浪博客地址/harveyperfect 有关于减肥和学习英语相关的博文欢迎交流把linux内存管理分为下面四个层面(一)硬件辅助的虚实地址转换(二)内核管理的内存相关(三)单个进程的内存管理(四)malloc软件处理器硬件辅助的虚实地址转换(以x86为例)在x86中虚实地址转换分为段式转换和页转换。段转换过程是由逻辑地址(或称为虚拟地址)转换为线性地址页转换过程则是将线性地址转换为物理地址。段转换示意图如下X86支持两种段gdt和ldt(全局描述段表和局部描述符段表)在linux中只使用了4个全局描述符表内核空间和用户空间分别两个gdt分别对应各自的代码段和数据段。也可以认为在linux中变相地disable了x86的段式转换功能。页转换示意图如下在linux中x86 的cr3寄存器(页表基地址寄存器)保存在进程的上下文中在进程切换时会保存或回复该寄存器的内容这样每个进程都有自己的转换页表从而保证了每个进程有自己的虚拟空间。内核管理的内存相关从几个概念展开内存管理node、zone、buddy、slab1、NodeSGI Altix3000系统的两个结点如上图NUMA系统的结点通常是由一组CPU(如SGI Altix 3000是2个Itanium2 CPU)和本地内存组成。由于每个结点都有自己的本地内存因此全系统的内存在物理上是分布的每个结点访问本地内存和访问其它结点的远地内存的延迟是不同的为了优化对NUMA 系统的支持引进了Node 来将NUMA 物理内存进行划分为不同的Node。而操作系统也必须能感知硬件的拓扑结构优化系统的访存。但是Intel x86 系统不是NUMA 系统。为了保持代码的一致性在x86 平台上Linux 将所有物理内存都划分到同一个Node。事实上对于非NUMA 体系结构也是如此处理的。Linux系统用定义了数组pg_data_t node_data[MAX_NUMNODES] 来管理各个node。2、ZoneLinux中Node、Zone和页的关系每个结点的内存被分为多个块称为zones它表示内存中一段区域。一个zone用struct zone结构描述zone的类型主要有ZONE_DMA、ZONE_NORMAL和ZONE_HIGHMEM。ZONE_DMA位于低端的内存空间用于某些旧的ISA设备。ZONE_NORMAL的内存直接映射到Linux内核线性地址空间的高端部分ZONE_HIGHMEM位于物理地址高于896MB的区域。例如在X86中zone的物理地址如下内核空间只有1GB线性地址如果使用大于1GB的物理内存就没法直接映射到内核线性空间了。当系统中的内存大于896MB时把内核线性空间分为两部分内核中低于896MB线性地址空间直接映射到低896MB的物理地址空间高于896MB的128MB内核线性空间用于动态映射ZONE_HIGHMEM内存区域(即物理地址高于896MB的物理空间)。3、Buddy如上图所示每个zone区域都采用伙伴系统(buddy system)来管理空闲内存页面。把所有的空闲页框分组为11个块链表每个块链表分别包含大小为1248163264128256512和1024个连续的页框。链表编号分别为0123… k… 10。从buddy system中申请页面过程根据申请存储区域大小查找对应的编号为K的块链表。如果编号K的链表为空则向编号为k1的链表申请一个存储区域。如果编号为k1链表不为空系统从编号为k1的链表上拆下一个区域并将拆下的区域分为两个2^k的区域一个返还给申请者另一个则挂到编号为k的链表。如果编号为k1的链表也为空编号为k2的链表不为空。则从k2的链表中拆下一个区域变为两个2^(k1)区域一个挂到编号为k1的链表上把另一个拆为两个2^k的区域一个返还给申请者把另一个挂到编号为k的链表上。如果k2的链表也为空则一直向上迭代直到编号为10的链表为止如果编号为10的链表还为空则申请失败。向buddy system中释放页面过程在向buddy system 释放页面时总会检测释放的页面和链表中其他页面是否可以组成一个更大一级的页面如果可以组成则把这两个区域组成一个并挂到更高一级的链表中。这个过程是迭代的释放过程会一层层向上找伙伴然后合并成更大的再向上找伙伴实在找不到了就停止了疑问按照上面的