当前位置: 首页 > news >正文 深圳龙华区住房和建设局网站盐城建设厅网站设计备案 news 2025/10/28 23:54:19 深圳龙华区住房和建设局网站,盐城建设厅网站设计备案,定制戒指,网站建设服务的风险多处理器系统两种体系结构#xff1a; 非一致内存访问#xff08;Non-Uniform Memory Access#xff0c;NUMA#xff09;#xff1a;这种体系结构下#xff0c;内存被划分成多个内存节点#xff0c;每个节点由不同的处理器访问。访问一个内存节点所需的时间取决于处理器…多处理器系统两种体系结构 非一致内存访问Non-Uniform Memory AccessNUMA这种体系结构下内存被划分成多个内存节点每个节点由不同的处理器访问。访问一个内存节点所需的时间取决于处理器和内存节点之间的距离因此处理器与内存节点之间的距离会影响内存访问速度。 对称多处理器Symmetric Multi-ProcessorSMP这种体系结构是一致内存访问Uniform Memory AccessUMA的一种形式所有处理器对内存的访问时间是相同的即无论处理器的位置如何访问内存的开销是相等的。 内存模型 Linux内核内存模型是从处理器的角度看到的物理内存分布内核管理不同内存模型的方式存在差异。内存管理子系统支持以下三种内存模型 平坦内存Flat Memory在这种模型下内存的物理地址空间是连续的且没有空洞。这是最简单的内存模型因为对于物理内存的管理而言只需按顺序分配内存即可。 不连续内存Discontiguous Memory在这种模型下内存的物理地址空间存在空洞但是这种模型可以高效地处理空洞。这是因为内存管理子系统可以跟踪哪些物理地址是已经被占用哪些是空闲的然后在空闲内存之间分配新的内存。 稀疏内存Sparse Memory在这种模型下内存的物理地址空间也存在空洞但是如果要支持内存热插拔只能选择稀疏内存模型。这是因为在内存热插拔时可能会出现大量的空洞如果采用不连续内存模型那么在进行内存分配时需要遍历整个物理地址空间这样会造成不必要的开销。而稀疏内存模型可以维护一个可扩展的物理地址空间列表只需在该列表中分配内存即可。 三级结构 内存管理子系统使用节点、区域和页三级结构来描述物理内存的管理。 节点节点是指物理内存的逻辑分组单元通常对应于具有特定特性或位置的一组物理内存。每个节点包含一个或多个区域用于管理一定范围内的物理内存。 区域区域是节点内部的一个逻辑划分用于管理一定范围内的物理内存页。不同的区域可能具有不同的特性例如可回收内存、不可回收内存等。常见的区域包括高速缓存区、低速缓存区、DMA区等。 页页是内存管理的最小单位通常是以固定大小如4KB划分的内存块。操作系统通过页表来映射虚拟内存和物理内存之间的对应关系实现内存的管理和地址转换。 内存节点pglist_data 内存节点分为两种情况 对于NUMA非一致性存储访问体系的内存节点内存节点根据处理器和内存的距离划分。在NUMA架构中不同的处理器可能与不同的内存区域相连因此系统将内存划分为不同的节点以便更有效地管理和分配内存资源。 在具有不连续内存的NUMA系统中内存节点表示比区域的级别更高的内存区域根据物理地址是否连续划分。在这种情况下每块物理地址连续的内存被视为一个内存节点。这种划分方式可以帮助内核更好地管理非连续内存的分配和使用确保系统能够有效地利用所有可用的物理内存空间。 typedef struct pglist_data {struct zone node_zones[MAX_NR_ZONES]; // 内存区域数组struct zonelist node_zonelists[MAX_ZONELISTS]; // 备用区域列表int nr_zones; // 该节点包含的内存区域数量#ifdef CONFIG_FLAT_NODE_MEM_MAP /* means !SPARSEMEM */struct page *node_mem_map; // 内存映射表存储每个物理页的信息#ifdef CONFIG_PAGE_EXTENSIONstruct page_ext *node_page_ext; // 页的扩展属性 #endif#endifunsigned long node_start_pfn; // 该节点的起始物理页号unsigned long node_present_pages; // 物理页总数即该节点上存在的物理页数量unsigned long node_spanned_pages; // 物理页范围的总长度包括空洞即该节点的物理页范围总大小int node_id; // 节点标识符... }pglist_data 结构体定义了一个内存节点的数据结构。 node_zones内存区域数组用于存储该节点内每个内存区域的信息。node_zonelists备用区域列表用于存储备用的内存区域的信息。nr_zones记录该节点包含的内存区域的数量。node_mem_map内存映射表用于存储每个物理页的信息。仅在没有使用 SPARSEMEM 的情况下有效。node_page_ext页的扩展属性用于存储与页相关的额外属性。仅在启用了 CONFIG_PAGE_EXTENSION 的情况下有效。node_start_pfn该节点的起始物理页号。node_present_pages该节点上存在的物理页数量。node_spanned_pages该节点的物理页范围总大小包括空洞。node_id节点标识符。 内存区域zone 内存区域是将物理内存按照不同属性进行划分的一种方式。每个内存区域都有一个唯一的类型标识类型包括 ZONE_DMA、ZONE_DMA32、ZONE_NORMAL、ZONE_HIGHMEM、ZONE_MOVABLE、ZONE_DEVICE 等。 enum zone_type {// DMA区域直接内存访问。如果有些设备不能直接访问所有内存需要使用DMA区域 #ifdef CONFIG_ZONE_DMAZONE_DMA, #endif// DMA32区域64位系统如果既要支持只能直接访问16MB以下的内存设备又要支持只能直接访问4GB以下内存的32设备必须使用此DMA32区域 #ifdef CONFIG_ZONE_DMA32ZONE_DMA32, #endif/** Normal addressable memory is in ZONE_NORMAL. DMA operations can be* performed on pages in ZONE_NORMAL if the DMA devices support* transfers to all addressable memory.*/// 普通区域直接映射到内核虚拟地址空间的内存区域又称为普通区域ZONE_NORMAL,#ifdef CONFIG_HIGHMEM/** A memory area that is only addressable by the kernel through* mapping portions into its own address space. This is for example* used by i386 to allow the kernel to address the memory beyond* 900MB. The kernel will set up special mappings (page* table entries on i386) for each page that the kernel needs to* access.*/// 高端内存区域内核和用户地址空间按1:3划分内核地址空间只有1GB不能把1GB以上的内存直接映射到内核地址ZONE_HIGHMEM, #endif// 可移动区域它是一个伪内存区域用来存放内存碎片ZONE_MOVABLE,#ifdef CONFIG_ZONE_DEVICE// 设备区域支持持久内存热插拔增加的内存区域每个内存区域有一个zone结构体来描述ZONE_DEVICE, #endif__MAX_NR_ZONES };这样整理后的代码更加清晰易懂注释也更容易理解各个内存区域的作用。 ZONE_DMA适用于 DMA 的内存区域长度受处理器类型的限制。在 IA-32 计算机上限制为 16 MiB。ZONE_DMA32适用于可使用 32 位地址字寻址的 DMA 的内存区域。在 64 位系统上ZONE_DMA 和 ZONE_DMA32 有所不同。在 32 位计算机上ZONE_DMA32 区域为空即长度为 0 MiB。ZONE_NORMAL直接映射区域标记了可直接映射到内核段的普通内存区域。这是在所有体系结构上保证都会存在的唯一内存区域。但是该地址范围并不一定对应实际的物理内存例如在某些系统中所有内存都属于 ZONE_DMA32 范围而 ZONE_NORMAL 区域为空。ZONE_HIGHMEM该内存区域是早期 32 位体系结构的产物因为内核和用户地址空间是 1:3 划分的所以不能将内核 1GB 以上的内存直接映射到内核地址空间。在 64 位系统上由于地址空间非常大不存在这种问题。ZONE_MOVABLE可移动区域是一个伪内存区域用于防止内存碎片。可以用于分配无法被移动的内存对象的区域将该区域中的页框移动到另一个区域并释放原始区域。ZONE_DEVICE持久内存热插拔增加的区域用于支持设备驱动程序动态分配内存。 一个内存节点可能包含多个内存区域这些区域的类型和数量可以根据系统的需求进行配置。每个内存区域都有一组特定的操作函数集合用于管理该区域中的页框。通过内存区域的划分可以更加有效地管理和利用物理内存。 冷热页 struct zone的pageset成员用于实现冷热分配器在Linux内核中为了提高内存管理的效率和性能使用了冷热页Cold and Hot Pages的概念。具体来说在每个内存区域zone中定义了一个pageset结构体用于管理该区域中的冷热页。 热页指的是已经加载到CPU的高速缓存中的页面与内存中的其他页相比其数据结构可以更快地被访问。冷页则指不在CPU高速缓存中的页面当需要访问它们时需要从内存中读取数据这会导致较高的延迟。 在多处理器系统中每个CPU都有一个或多个高速缓存。由于各个CPU具有独立的高速缓存因此对冷热页的管理必须是针对每个CPU独立进行的。每个CPU都有自己的冷热分配器pageset用于管理该CPU的热页和冷页。这样可以避免多个CPU之间相互竞争同一份冷热页管理的问题提高了系统的并发性和性能。 // 每CPU页面结构体定义 struct per_cpu_pages {int count; // 列表中页面数量int high; // 高水位标记需要清空int batch; // 伙伴系统添加/移除的块大小// 页面列表每个迁移类型在PCP列表上存储一个struct list_head lists[MIGRATE_PCPTYPES]; };count记录了与该列表相关的页面数量。它表示当前列表中的页的数量。 high是一个水印watermark。当count的值超过了high时表示列表中的页太多了需要进行一些处理。这个水印可以用来判断列表是否过载。 batch表示每次添加页的参考值。在填充CPU高速缓存时通常不是一次只填充一个页面而是以块为单位填充batch就是指定每次填充的页数。 lists是一个数组用于存储不同迁移类型的页面列表。每个迁移类型对应一个列表在PCPper-CPU Page列表上存储。 物理页(page) 页是内存管理的最小单位在内存管理中页是内存的基本单位页面中的内存物理地址是连续的。在Linux内核中物理页被视为内存管理的基本单位即内核中的内存管理单元MMU将物理页作为基本单位进行管理。 不同体系结构支持不同的页大小不同的计算机体系结构支持不同大小的页。例如32位体系结构通常支持4KB的页而64位体系结构通常支持8KB的页。另外像MIPS64架构体系可能支持更大的页比如16KB的页。 每个物理页对应一个page结构体在Linux内核中每个物理页都对应一个称为页描述符page structure的数据结构用于描述和管理该物理页的相关信息。每个内存节点的pglist_data实例中的成员node_mem_map指向该内存节点包含的所有物理页的页描述符组成的数组。 struct page {unsigned long flags; // 原子标志有些情况下会异步更新union {struct { // 页面缓存和匿名页面struct list_head lru;// 如果最低位为0则指向 inode 的 address_space 或为 NULL// 如果页映射为匿名地址最低位置位而且指针指向 anon_vma 对象struct address_space *mapping;pgoff_t index; // 映射中的偏移量// 用于映射私有、不透明数据// 如果设置了 PagePrivate则通常用于 buffer_heads// 如果设置了 PageSwapCache则用于 swp_entry_t// 如果设置了 PageBuddy则用于伙伴系统中的阶unsigned long private;};struct { // slab、slob 和 slubunion {struct list_head slab_list;struct { // 部分页面struct page *next; #ifdef CONFIG_64BITint pages; // 剩余页面数int pobjects; // 近似计数 #elseshort int pages;short int pobjects; #endif};};struct kmem_cache *slab_cache; // 非 slob 时的 kmem_cache 指针/* 双字边界 */void *freelist; // 第一个空闲对象union {void *s_mem; // slab 分配器的第一个对象unsigned long counters; // SLUB 计数器struct { // SLUBunsigned inuse:16;unsigned objects:15;unsigned frozen:1;};};};// 其他字段...}; };flags表示页的各种状态和属性的标志位。这些标志位在某些情况下会被异步更新。 union使用联合体来存储不同类型的页的信息。 对于页面缓存和匿名页面Page cache and anonymous pages lru用于将页面链接到 LRULeast Recently Used链表以进行页面置换。mapping指向 inode 的 address_space 或为 NULL。如果页面映射为匿名地址则最低位置位且指针指向 anon_vma 对象。index表示页面在映射中的偏移量。private用于映射私有、不透明数据。根据不同的标志位可以用于不同的目的如 PagePrivate 用于 buffer_headsPageSwapCache 用于 swp_entry_tPageBuddy 用于伙伴系统中的阶。 对于 slab、slob 和 slub slab_list 或 next用于管理页面的链表结构对于 slab 和 slob 分配器用于链接已分配和未分配的页面对于 slub 分配器用于链接部分页面。slab_cache对于 slab 分配器指向相关的 kmem_cache 结构体对于 slob 分配器和 slub 分配器该字段不使用。freelist 或 s_mem对于 slab 分配器指向第一个空闲对象对于 slob 分配器和 slub 分配器用于存储其他信息如计数器、使用中的对象数量等。 页表 页表是操作系统中用于实现虚拟内存到物理内存映射的重要数据结构。层次化的页表结构被设计用来支持对大地址空间的快速、高效管理。 内存地址的分解 根据四级页表结构虚拟内存地址被分解为5部分其中4个表项用于选择页1个索引表示页内位置。每个指针末端的几个比特位用于指定所选页帧内部的位置具体的比特位数由PAGE_SHIFT指定。PMD_SHIFT指定了页内偏移量和最后一级页表项所需比特位的总数。通过减去PAGE_SHIFT可以得到最后一级页表项索引所需的比特位数。类似地PUD_SHIFT由PMD_SHIFT加上中间层页表索引所需的比特位长度而PGDIR_SHIFT由PUD_SHIFT加上上层页表索引所需的比特位长度。计算全局页目录中一项所能寻址的部分地址空间长度可以通过以2为底的对数计算得到PGDIR_SHIFT。 页表的格式 内核提供了4个数据结构来表示页表项的结构 pgd_t用于全局页目录项pud_t用于上层页目录项pmd_t用于中间页目录项pte_t用于直接页表项 特定于PTE的信息 最后一级页表中的项不仅包含了指向页的内存位置的指针还包含了与页面相关的附加信息。每种体系结构都需要提供两个东西以便内存管理子系统能够修改pte_t项中额外的比特位。这两个东西分别是保存额外比特位的__pgprot数据类型以及用于修改这些比特位的pte_modify函数。 通过以上分析我们可以更好地理解页表的设计原理和结构以及各个级别的页表项在管理地址空间时的作用和关联。如果您有任何进一步的问题或需要更多解释请随时提出。 查询和设置内存页与体系结构相关状态的函数 查询函数 pte_present()检查给定页表项是否存在于内存中。pte_write()检查给定页表项是否可写。pte_user()检查给定页表项是否为用户空间可访问。pte_dirty()检查给定页表项是否被修改过。pte_young()检查给定页表项是否被访问过。 设置函数 set_pte()设置给定页表项的内容。set_pte_at()在指定地址处设置页表项的内容。pte_clear()清除给定页表项的内容。pte_mkwrite()将只读页表项转换为可写。pte_mkdirty()标记页表项已被修改。 体系结构相关函数 pgd_index()获取全局页目录项的索引。pmd_offset()获取中间页目录项的指针。pud_offset()获取上层页目录项的指针。pte_offset_kernel()获取内核页表项的指针。pfn_to_page()将物理页框号转换为对应的页结构体。 创建和操作页表项的函数 创建页表项 pte_alloc()分配一个新的页表项。pte_alloc_one()分配一个新的单个页表项。pte_alloc_kernel()分配一个新的内核页表项。 释放页表项 pte_free()释放一个页表项的内存。pte_free_kernel()释放一个内核页表项的内存。 操作页表项 pte_clear()清除给定页表项的内容。pte_val()获取页表项的原始值。set_pte()设置指定页表项的内容。pte_mkclean()将页表项标记为干净未修改。pte_mkdirty()将页表项标记为脏已修改。pte_present()检查给定页表项是否存在于内存中。pte_write()检查给定页表项是否可写。 参考Linux内核源码分析内存调优/文件系统/进程管理/设备驱动/网络协议栈教程 Linux内核源码系统性学习 文章转载自: http://www.morning.fhghy.cn.gov.cn.fhghy.cn http://www.morning.kqgsn.cn.gov.cn.kqgsn.cn http://www.morning.ftync.cn.gov.cn.ftync.cn http://www.morning.clgbb.cn.gov.cn.clgbb.cn http://www.morning.dfqmy.cn.gov.cn.dfqmy.cn http://www.morning.ggnkt.cn.gov.cn.ggnkt.cn http://www.morning.btpll.cn.gov.cn.btpll.cn http://www.morning.bswxt.cn.gov.cn.bswxt.cn http://www.morning.jqmmf.cn.gov.cn.jqmmf.cn http://www.morning.zthln.cn.gov.cn.zthln.cn http://www.morning.mtjwp.cn.gov.cn.mtjwp.cn http://www.morning.btlmb.cn.gov.cn.btlmb.cn http://www.morning.zfhzx.cn.gov.cn.zfhzx.cn http://www.morning.hcxhz.cn.gov.cn.hcxhz.cn http://www.morning.jqrhz.cn.gov.cn.jqrhz.cn http://www.morning.pfcrq.cn.gov.cn.pfcrq.cn http://www.morning.rlwcs.cn.gov.cn.rlwcs.cn http://www.morning.ryfqj.cn.gov.cn.ryfqj.cn http://www.morning.qfgwx.cn.gov.cn.qfgwx.cn http://www.morning.xnqjs.cn.gov.cn.xnqjs.cn http://www.morning.fjfjm.cn.gov.cn.fjfjm.cn http://www.morning.fmkbk.cn.gov.cn.fmkbk.cn http://www.morning.xmrmk.cn.gov.cn.xmrmk.cn http://www.morning.trnl.cn.gov.cn.trnl.cn http://www.morning.nlmm.cn.gov.cn.nlmm.cn http://www.morning.nlqgb.cn.gov.cn.nlqgb.cn http://www.morning.dyhlm.cn.gov.cn.dyhlm.cn http://www.morning.mbhdl.cn.gov.cn.mbhdl.cn http://www.morning.kaweilu.com.gov.cn.kaweilu.com http://www.morning.fsrtm.cn.gov.cn.fsrtm.cn http://www.morning.gczqt.cn.gov.cn.gczqt.cn http://www.morning.fhyhr.cn.gov.cn.fhyhr.cn http://www.morning.mghgl.cn.gov.cn.mghgl.cn http://www.morning.swkpq.cn.gov.cn.swkpq.cn http://www.morning.xmyrn.cn.gov.cn.xmyrn.cn http://www.morning.hzryl.cn.gov.cn.hzryl.cn http://www.morning.cwrpd.cn.gov.cn.cwrpd.cn http://www.morning.nwjzc.cn.gov.cn.nwjzc.cn http://www.morning.qgzmz.cn.gov.cn.qgzmz.cn http://www.morning.ryyjw.cn.gov.cn.ryyjw.cn http://www.morning.lzqtn.cn.gov.cn.lzqtn.cn http://www.morning.drkk.cn.gov.cn.drkk.cn http://www.morning.jbpodhb.cn.gov.cn.jbpodhb.cn http://www.morning.nxkyr.cn.gov.cn.nxkyr.cn http://www.morning.yhrfg.cn.gov.cn.yhrfg.cn http://www.morning.xckdn.cn.gov.cn.xckdn.cn http://www.morning.hmxrs.cn.gov.cn.hmxrs.cn http://www.morning.srltq.cn.gov.cn.srltq.cn http://www.morning.zpqk.cn.gov.cn.zpqk.cn http://www.morning.fycjx.cn.gov.cn.fycjx.cn http://www.morning.tpnx.cn.gov.cn.tpnx.cn http://www.morning.dxgt.cn.gov.cn.dxgt.cn http://www.morning.gbpanel.com.gov.cn.gbpanel.com http://www.morning.pakistantractors.com.gov.cn.pakistantractors.com http://www.morning.mcjxq.cn.gov.cn.mcjxq.cn http://www.morning.gcxfh.cn.gov.cn.gcxfh.cn http://www.morning.xgkxy.cn.gov.cn.xgkxy.cn http://www.morning.qzpqp.cn.gov.cn.qzpqp.cn http://www.morning.qmwzz.cn.gov.cn.qmwzz.cn http://www.morning.xppj.cn.gov.cn.xppj.cn http://www.morning.spwln.cn.gov.cn.spwln.cn http://www.morning.rcdmp.cn.gov.cn.rcdmp.cn http://www.morning.krrjb.cn.gov.cn.krrjb.cn http://www.morning.zhoer.com.gov.cn.zhoer.com http://www.morning.brxzt.cn.gov.cn.brxzt.cn http://www.morning.tqpr.cn.gov.cn.tqpr.cn http://www.morning.dighk.com.gov.cn.dighk.com http://www.morning.yqtry.cn.gov.cn.yqtry.cn http://www.morning.qptbn.cn.gov.cn.qptbn.cn http://www.morning.wqkfm.cn.gov.cn.wqkfm.cn http://www.morning.xgxbr.cn.gov.cn.xgxbr.cn http://www.morning.rfpb.cn.gov.cn.rfpb.cn http://www.morning.jcrfm.cn.gov.cn.jcrfm.cn http://www.morning.hrkth.cn.gov.cn.hrkth.cn http://www.morning.jsljr.cn.gov.cn.jsljr.cn http://www.morning.rtkz.cn.gov.cn.rtkz.cn http://www.morning.wpmqq.cn.gov.cn.wpmqq.cn http://www.morning.dzzjq.cn.gov.cn.dzzjq.cn http://www.morning.qcymf.cn.gov.cn.qcymf.cn http://www.morning.tfwg.cn.gov.cn.tfwg.cn 查看全文 http://www.tj-hxxt.cn/news/258003.html 相关文章: 中小企业建站服务做网站用什么后缀好 培训餐饮网站建设做好网站建设工作总结 网站后台管理系统 静态页面商标交易网 微信开放平台怎么解除广州搜索引擎优化方法 南翔企业网站开发建设wordpress同类软件 自己建网站北京网站优化效果怎样 南江县规划和建设局网站织梦门户网站模板 服装网站设计模板开一家公司最低注册资金 重庆网站搭建欧美做的爱爱网站 学习网站后台维护做汽车网站费用 奉贤专业网站建设移动4G网站建设 上海网站备案拍照地点北仑做网站 程序员自己做网站怎么赚钱深圳宝安区怎么样 海沧做网站域名历史价格查询 宁波网站推广外包服务wordpress右键菜单插件 扫黄打非网站建设黑龙江龙采做网站如何 iis6无法新建网站wordpress怎么添加icp 做免费网站教程国vs免费网站建设 godaddy 网站备案流程和规则织梦官方网站 申请做网站_论坛版主昆明装饰企业网络推广 桓台网站抖音小程序怎么开发自己的小程序 永年县网站定制的网站源码 外贸网站建设内容包括大连网站的建设 赤峰专业的网站建设王者做网站 东莞凤岗哪里有学做网站的wordpress 评论系统 山西网站开发建设四川省建设资格注册中心网站 新闻采编与制作专业简历wordpress seo收费主题 付给招聘网站的费用怎么做分录投资项目网 关于成立网站建设项目小组的通知WordPress允许修改评论内容 网站备案名字国内黑色风格的网站