首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我们需要在x86上使用zone_highmem?

在x86架构上使用zone_highmem的原因是为了提高内存的利用率和性能。zone_highmem是一个内存分配区域,它允许在32位系统上使用高于1GB RAM的地址空间。在x86架构上,32位操作系统可以寻址4GB的内存空间,但是由于历史原因,早期的操作系统和硬件限制,只有1GB的内存空间可用于系统使用。zone_highmem的引入使得操作系统能够在32位系统上有效利用高地址内存,从而提高了内存的利用率和性能。

zone_highmem的优势包括:

  1. 提高内存利用率:zone_highmem允许在32位系统上使用高地址内存,从而提高了内存的利用率。
  2. 提高性能:zone_highmem的引入使得操作系统可以更好地管理内存,从而提高了系统性能。

zone_highmem的应用场景包括:

  1. 高性能计算:zone_highmem可以提高内存带宽和性能,使得高性能计算更加高效。
  2. 大规模数据处理:zone_highmem可以提高内存利用率,使得大规模数据处理更加高效。

推荐的腾讯云相关产品:

  1. 云服务器:腾讯云云服务器提供高性能、高可靠的计算服务,可以满足各种应用场景的需求。
  2. 内存:腾讯云提供高性能、高可靠的内存服务,可以满足各种应用场景的需求。

云服务器产品介绍链接地址:https://cloud.tencent.com/product/cvm

内存产品介绍链接地址:https://cloud.tencent.com/product/memory

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Linux内存描述之概述--Linux内存管理(一)

所有处理机对所有存储字具有相同的存取时间,这就是为什么称它为均匀存储器存取的原因。每台处理机可以有私用高速缓存,外围设备也以一定形式共享。...(x86)内存区域划分详细讲解x86_32的内存区域划分 因此Linux内核对不同区域的内存需要采用不同的管理方式和映射方式, 为了解决这些制约条件,Linux使用了三种区: ZONE_DMA :...当然这时候我们这些标识都是通过宏的方式来实现的, 而不是如今的枚举类型 MAX_NR_NODES是可以存在的节点的最大数....函数EXPORT_SYMBOL使得内核的变量或者函数可以被载入的模块(比如我们的驱动模块)所访问. 2.5 内存页page 大多数内核(kernel)的操作只使用ZONE_NORMAL区域,系统内存由很多固定大小的内存块组成的...,这样的内存块称作为“页”(PAGE), x86体系结构中,page的大小为4096个字节。

6.9K30

Linux内核设备驱动之内存管理笔记整理

我们简单介绍一下内存管理,并通过实例说明如何在内核态获得内存。 (1)各种地址 对于x86处理器,需要区分以下三种地址: *逻辑地址(logical address) 只有x86支持。...无论是应用程序还是驱动程序,我们在程序中使用的地址都是虚拟地址。 *物理地址(physical address) 32位无符号整数,与从CPU的地址引脚发送到存储器总线上的电信号相对应。...:这个区包含高端内存(大于896M),其中的页不能永久地映射到内核的地址空间 对于x86,这3个区对于的物理内存分别是: ZONE_DMA: <16MB ZONE_NORMAL: 16~896MB ZONE_HIGHMEM...(2)页分配 内核是使用页进行内存管理的,因此,我们在内核中也可以要求系统以页为单位给我们分配内存。当然,以页为单位分配可能造成内存浪费,因此,只有在我们确定需要整页内存时才调用他们。...slab分配器要在几个基本原则之间寻求平衡: *频繁使用的数据结构会频繁分配和释放,需要缓存 *频繁分配和回收必然导致内存碎片,为避免这一现象,空闲链表中的缓存会连续存放,从而避免碎片 *分配器可以根据对象大小

1.7K20

Linux内存描述之内存区域zone--Linux内存管理(三)

下面我们就来详解讲讲内存管理域的内容zone 2 为什么要将内存node分成不同的区域zone NUMA结构下, 每个处理器CPU与一个本地内存直接相连, 而不同处理器之前则通过总线进行进一步的连接,...但是Linux内核又把各个物理内存节点分成个不同的管理区域zone, 这是为什么呢? 因为实际的计算机体系结构有硬件的诸多限制, 这限制了页框可以使用的方式....(x86)内存区域划分详细讲解x86_32的内存区域划分 因此Linux内核对不同区域的内存需要采用不同的管理方式和映射方式, 因此内核将物理地址或者成用zone_t表示的不同地址区域 3 内存管理区类型...)内存区域划分 对于x86机器,管理区(内存区域)类型如下分布 类型 区域 ZONE_DMA 0~15MB ZONE_NORMAL 16MB~895MB ZONE_HIGHMEM 896MB~物理内存结束...下表给出每个区及其在X86所占的列表 ?

9.1K31

Linux内存描述之高端内存--Linux内存管理(五)

这个技术也是可以的,而且不难实现。为什么不采用估计有历史原因吧 毕竟cpu和程序出来的年代比MMU早多了 没有MMU的年代里,对于x86,逻辑地址就是物理地址。...因此x86架构中将内核地址空间划分三部分:ZONE_DMA、ZONE_NORMAL和 ZONE_HIGHMEMZONE_HIGHMEM即为高端内存,这就是内存高端内存概念的由来。...在x86结构中,三种类型的区域(从3G开始计算)如下: 区域 位置 ZONE_DMA 内存开始的16MB ZONE_NORMAL 16MB~896MB ZONE_HIGHMEM 896MB ~ 结束(...5.5 为什么不把所有的地址空间都分配给内核? 若把所有地址空间都给内存,那么用户进程怎么使用内存?怎么保证内核使用内存和用户进程不起冲突? 让我们忽略Linux对段式内存映射的支持。...VMALLOC_RESERVE的大小与体系结构相关,在X86,VMALLOC_RESERVE定义为128M,这就是为什么ZONE_NORMAL大小通常是16M到896M的原因。

12.3K23

Linux-3.14.12内存管理笔记【构建内存管理框架(1)】

事实也没有完全的UMA,比如常见的单CPU电脑,RAM、ROM等物理存储空间的访问时间并非一致的,只是纯粹对RAM而言,是UMA的。...ZONE_DMA区通常是由于计算机中部分设备无法直接访问全部内存空间而特地划分出来给该部分设备使用的区,x86环境中,该区通常小于16M。...ZONE_HIGHMEM区则是系统除了ZONE_DMA和ZONE_NORMAL区后剩下的物理内存,这个区不能直接被内核映射,x86环境中,该区通常为896M以后的内存。 为什么要有高端内存的存在?...使用超过896M的内存空间视为高端内存,一旦使用的时候,就需要做映射转换,这是一件很耗资源的事情。所以不要常使用高端内存,就是这么一个由来。...值得注意的是,该模型不仅是对于NUMA环境而言,UMA环境同样可能存在多个节点的情况。

84720

物理地址和虚拟地址的分布

一节内容的学习我们知道了CPU是如何访问内存的,CPU拿到内存后就可以向其它人(kernel的其它模块、内核线程、用户空间进程、等等)提供服务,主要包括: 以虚拟地址(VA)的形式,为应用程序提供远大于物理内存的虚拟地址空间...ZONE_NORMAL 的范围是 16M~896M,该区域的物理页面是内核能够直接使用的。 ZONE_HIGHMEM 的范围是 896M~结束,该区域即为高端内存,内核不能直接使用。...而将用户数据、页表(PT)等不常用数据放在 ZONE_HIGHMEM 里,只在要访问这些数据时才建立映射关系(kmap())。...,Linux 采取了动态映射的方法,即按需的将 ZONE_HIGHMEM 里的物理页面映射到 kernel space 的最后 128M 线性地址空间里,使用完之后释放映射关系,以供其它物理页面映射。...到这里我们应该知道了 Linux 是如何用虚拟地址来映射物理地址的,最后我们用一张图来总结一下: ?

2.1K31

物理地址和虚拟地址的分布

一节内容的学习我们知道了CPU是如何访问内存的,CPU拿到内存后就可以向其它人(kernel的其它模块、内核线程、用户空间进程、等等)提供服务,主要包括: 以虚拟地址(VA)的形式,为应用程序提供远大于物理内存的虚拟地址空间...ZONE_NORMAL 的范围是 16M~896M,该区域的物理页面是内核能够直接使用的。 ZONE_HIGHMEM 的范围是 896M~结束,该区域即为高端内存,内核不能直接使用。...而将用户数据、页表(PT)等不常用数据放在 ZONE_HIGHMEM 里,只在要访问这些数据时才建立映射关系(kmap())。...,Linux 采取了动态映射的方法,即按需的将 ZONE_HIGHMEM 里的物理页面映射到 kernel space 的最后 128M 线性地址空间里,使用完之后释放映射关系,以供其它物理页面映射。...到这里我们应该知道了 Linux 是如何用虚拟地址来映射物理地址的,最后我们用一张图来总结一下: ?

2K111

Linux系统面试题

读写锁:读写锁也叫共享互斥锁:读模式共享和写模式互斥,本质这种非常合理,因为在数据没有被写的前提下,多个使用者读取时完全不需要加锁的。...malloc 用户空间下的内存管理接口,保证的是在虚拟地址空间的连续。stack 和 heap 中间。小于128M的通过brk申请,大于的通过 mmap 申请。...Linux 内核空间布局x86架构中将内核地址空间划分三部分:ZONE_DMA、ZONE_NORMAL和 ZONE_HIGHMEMZONE_HIGHMEM即为高端内存,这就是内存高端内存概念的由来。...rdata段:rdata是用来存放只读初始化变量的,当我们在源程序中的变量前面加了const后,编译器知道个字符串是永远不会改变的,或说是只读的,所以将其分配到.rdata段中。...同样,释放一个内存区域应使用函数do_ummap(),它会销毁对应的内存区域。10. 进程间通信主要有哪几种方式?

1.7K44

别再说你不懂Linux内存管理了,10张图给你安排的明明白白!

前提约定:本文讨论技术内容前提,操作系统环境都是 x86架构的 32 位 Linux系统。...用户空间内核空间 物理地址 上面章节我们已经知道不管是用户空间还是内核空间,使用的地址都是虚拟地址,当进程要实际访问内存的时候,会由内核的「请求分页机制」产生「缺页异常」调入物理内存页。...ZONE_HIGHMEM 高端内存区域。包含896MB以上的内存页框,不进行直接映射,可以通过永久映射和临时映射进行这部分内存页框的访问。 ?...从这个意义讲,我们可以把堆栈看成一个寄存、交换临时数据的内存区。 上述几种内存区域中数据段、BSS 段、堆通常是被连续存储在内存中,在位置是连续的,而代码段和栈往往会被独立存放。...内核为了内存区域的各种不同操作都能获得高性能,所以同时使用了这两种数据结构。 用户空间进程的地址管理模型: ?

1.7K20

伙伴系统分配内存

[分配物理内存的例子] page = alloc_pages(GFP_KERNEL, order); GFP_KERNEL分配掩码定义在gfp.h头文件,是一个分配掩码的组合。...也就是说,基于zone的设计思想是:分配物理页面时会优先考虑ZONE_HIGHMEM,因为ZONE_HIGHMEM在zonelist中排在ZONE_NORMAL前面; 回到我们之前的例子,gfp_zone...我们只关注order大于0 的情况,它最终会调用到__rmqueue_smallest()函数。...为什么会这样?因为在系统启动时,空闲页面会尽可能分配到MAX_ORDER-1的链表中,这个可以在系统刚起来之后,通过'cat /proc/pagetypeinfo'命令可以看出端倪。...上述检查都通过后,我们分配的页面就合格了,可以出厂了,页面page便开启了属于它的精彩生命周期。

1.6K10

TKEStack适配ARM架构之路

;再比如随着IoT物联网的来临,以树莓派为代表的智能硬件使用容器服务也会成为一种趋势。...这意味着TKEStack单纯在x86服务器运行是远远不够的,对于arm架构的支持,势在必行。...另外x86组件跟arm组件分别命名,这导致使用到这些组件的代码都要仔细重构或校验,以确保代码里使用了正确的版本,这也给代码维护人员带来了负担。...容器技术:docker manifest list 在多个架构(x86 / arm)或者多个平台上(linux_amd64 / windows_amd64)使用容器镜像时,就不得不提Docker公司在...所以只要在x86平台安装QEMU模拟器,并在binfmt_misc中注册QEMU,让Linux遇到其他平台的执行文件时就传递给QEMU,这样就可以实现跨平台执行arm指令了。 5.

1.9K21

win2008 r2 安装sqlserver 2000问题的解决方法

最近服务器升级了win2008 r2系统,考虑到用户额需要,sqlserver使用了2000,其实个人建议安装sql2005或sql2008,但也不能考虑一些朋友额需求 windows 2008 R2...\SETUP\SETUPSQL.EXE 选择\ENTERPRISE\X86\SETUP\setupsql.exe 属于-兼容模式(勾选兼容性windows 2003 SP1,管理员),4合1的版本,找到安装版本下...(重启后基本应该安装成功。)...通过检查该文件,可以详细了解安装在什么地方失败、为什么失败。...4:安装完了之后,又提示 没有启动服务器服务 而且sqlserver2000 里面  就只有一个  启动器,就是我们平时见到的那个  开始,停止的玩意,其他的都没有 5:于是只要再次卸载,这次卸载还是很快的

4.2K00

一步一图带你深入理解 Linux 物理内存管理

image.png 在我们清楚了虚拟内存地址这个基本概念之后,随后笔者又抛出了一个问题:为什么我们要通过虚拟内存地址访问内存而不是直接通过物理地址访问?...image.png 以上内容是笔者从整体为大家介绍的 NUMA 节点如何管理节点内部的本地内存。事实内核还会将 NUMA 节点中的本地内存做近一步的划分。那么为什么要近一步划分呢?...比如在 X86 体系结构下,ISA 总线的 DMA (直接内存存取)控制器,只能对内存的前16M 进行寻址,这就导致了 ISA 设备不能在整个 32 位地址空间中执行 DMA,只能使用物理内存的前 16M...从字面意义我们可以了解到,这块区域包含的就是正常的页框(没有任何使用限制)。...我们可以通过 cat /proc/zoneinfo | grep Node 命令来查看 NUMA 节点中内存区域的分布情况: image.png 笔者使用的服务器是 64 位,所以不包含 ZONE_HIGHMEM

91531

ASLR在Windows与Linux系统之间的差别

根据文档《Windows ISVSoftware Security Defenses》的描述,要使Windows的程序或库兼容ASLR特性,只需要在链接时添加了/DYNAMICBASE选项。...因此,我们当然没有理由在链接时不使用/DYNAMICBASE选项来启用ASLR了。...既然ASLR的目标是使可执行程序在执行时位于一个不可预知的地址,为什么Windows与Linux的实现会有这么大的差别呢?...为什么Linux开发者选择使用这种技术实现ASLR?在大多数情况下,安全其实就是一种权衡。...因为地址无关代码不会使x86_64架构产生明显性能损耗,因为x86_64几乎有两倍于x86架构的寄存器,而且与x86架构不同,x86_64架构支持PC相关的地址策略,可以使系统对ASLR的使用几乎变得无处不在

1.7K80

tf版安装_国际贸易术语2010图解

TFS2010安装环境是操作系统为Windows Server 2003 SP2(X86),Windows Server 2003 R2(X86),Windows Server 2003 R2 SP2(...只要安装完系统和SQL Server后,基本在安装TFS2010不会有什么问题。...(一) TFS2010分为三种版本,上图为基础配置,针对小型团队安装,SQL Server2008只安装Express版即可。基础版配置后,只有Bug管理,工作项管理,版本控制,集成管理。...我们选取高级配置向导来看一下。必需设置数据库,登录帐户,门户配置,报表配置,然后设置SharePoint,最后生成项目集合,最后进行验证,查看各个环节是否设置有问题。...一班情况下,出错多的是报表这块,需要在SQL Server中设置一下报表向导,查看报表是否正常,还有SQL Server 2008配置管理器中间,协议和服务是否设置正常。

96440

驱动开发:配置Visual Studio驱动开发环境

图片 为了能测试驱动程序运行状态,读者安装VMWare虚拟机,双击附件中的VMware-workstation-full-16.2.4-20089737.exe安装程序一直点击下一步即可,需要注意的是在如下选项中请在增强型键盘驱动程序打对勾...,至此只需等待系统安装完毕,根据系统差异安装时间可能有所差别,耐性等待即可; 当一切安装就绪后我们要在系统中安装VMware Tools工具,该组件在安装后可让虚拟机具备有拖拽上传文件的功能,且鼠标键盘将可以自由切换...UnDriver; return STATUS_SUCCESS; } 9.最后生成一个驱动开发模板,依次选择【文件-导出模板-项目模板-下一步-完成】即可完成模板的导出,此时关闭VS工具并再次打开,就能直接使用我们的模板来开发驱动了...图片 配置驱动双机调试 1.首先需要在VMware虚拟机关闭状态下添加一个管道虚拟串口,此处需要删除打印机,否则串口之间冲突。...图片 7.最后我们配置测试一下调试功能,首先编写以下代码,代码中使用DbgBreakPoint()设置断点,将会在入口处中断。

1.5K50

驱动开发:配置Visual Studio驱动开发环境

为了能测试驱动程序运行状态,读者安装VMWare虚拟机,双击附件中的VMware-workstation-full-16.2.4-20089737.exe安装程序一直点击下一步即可,需要注意的是在如下选项中请在增强型键盘驱动程序打对勾...,至此只需等待系统安装完毕,根据系统差异安装时间可能有所差别,耐性等待即可; 当一切安装就绪后我们要在系统中安装VMware Tools工具,该组件在安装后可让虚拟机具备有拖拽上传文件的功能,且鼠标键盘将可以自由切换...UnDriver; return STATUS_SUCCESS; } 9.最后生成一个驱动开发模板,依次选择【文件-导出模板-项目模板-下一步-完成】即可完成模板的导出,此时关闭VS工具并再次打开,就能直接使用我们的模板来开发驱动了...配置驱动双机调试 1.首先需要在VMware虚拟机关闭状态下添加一个管道虚拟串口,此处需要删除打印机,否则串口之间冲突。...7.最后我们配置测试一下调试功能,首先编写以下代码,代码中使用DbgBreakPoint()设置断点,将会在入口处中断。

98120
领券