一、大(巨)页

大(巨)页,很好理解,就是的大的页。说这个大页前,得先把计算机中内存的管理简单说明一下,否则可能对于一些新手或者把操作系统中内存管理的方法的开发者不太友好。最早的计算机,是没有内存管理这一说的,程序直接向内存里写,直接操作内存;而后出现了分区管理(静态的内存分配和动态的内存分配),目的只有一个能够更好的利用内存。前面这些都可以算是早期的内存管理,简单粗暴,但好用,也好出意外。随着计算机硬件技术的不断发展,可以容纳更多的程序在内存中同时运行。特别是随着操作系统的出现,多任务成为必然,那么对内存管理也就提到了一个重要的程度。这时,计算机的先行者们分别从段和页两个方面开始处理内存的管理,它们各有优缺点。分页可以更好的去除外部的内存碎片,管理简单高效并且支持虚拟内存;当然也有缺点,仍然无法解决页内的碎片问题和管理页一定会存在着开销。分段管理的优点是更符合开发者的认知,像代码段、数据段等等,耳熟能详。同时,不同的分段可以有效的保护数据和实现共享,并且可以动态对段进行扩展。当然缺点也很明显,最典型的就是产生外部的内存碎片,管理相对复杂。所以就有高手想到了把二者结合起来。在X86的32位架构操作系统中,段页式管理是标准,即使到了64位系统,为了保持向下的兼容,X86上的操作系统仍然保留着段这个概念,但几乎已经没用了实际作用。大家可以简单理解为在64位的系统中,已经使用了纯分页的管理。
好,现在就可以说什么是大页了。一般来说,在普通的系统分页机制下,一个页(Page)的大小是4K。可以这样说,这个大小是目前主流的平台的分页的大小。但随着软硬件技术的发展,它们都支持将分页的大小提高到了2M。在一些特定的场景下还支持1G大小的分页。当然,不是说必然是这种大小,不同的平台可能也会有细微的不同,但一般来说,1G大小的分页一定是大页。
是不是很简单,大的内存页,就是大页,很容易明白。
这里再简单的说明一下,主要是针对一些才刚刚学习的小白,所谓分页,大家可以理解成书籍的一页页的纸,在字体样式固定的情况下,一页的大小决定了能印刷多少字。当然,页面越大,字数也就越多;反之则越少。大页可以理解成某些书籍采用了特别大的页(比如小人书之比大学的课本)。

二、大页的作用

那么好好的分出来的页的大小,为什么要搞成那么大呢?先看一个例子,大家都知晓一些军队的编制,从班到排到连到营到团到师到军再到集团军。可以理解班就是一个基础的页,那么如果一项命令需要快速的传达到班,则需要从集团军向下一级级的传递,大家很容易想到,这效率是不是有点低?随着信息化的到来,可不可以撤掉其中的一些层级,采用较为扁平化的管理,比如把军、师和团的建制去除,设一个旅的编制,然后,集团军直接操作旅,由旅直接下放到营,而忽略班排连。大家再看看现代的大国们的军改方向,基本就是这样(当然,实际情况可能各有不同,也不可能像这里说的这么简单和理想)。此时,营就是一个大页,集团军就可以管理更多的部队人数。
内存也是如此,如果内存管理是以4K为基础的话,在早中期,计算机的物理内存和虚拟内存都不大的情况下,它是相对合理的和高效的。但当操作系统的虚拟内存增加到64位后,这种大小的页导致管理的页表开始剧烈的膨胀,不但占用浪费了更多的空间也由于使用了更多层级的页表而导致效率的低下。同时,TLB缓存的内存数量相比之下变得太少,它会导致内存命中率的严重下降从而产生缺页访问。学过操作系统的都知道,缺页会导致性能的开销巨大。所以大页就在这种情况下产生了。
其实1G可能大家现在认为是一个大页,但所谓的大小永远是相对的。假设物理内存的大小已经超过了256位,虚拟内存已经达到了1024位,那时如果还是采用页机制管理的话,一页可能标准的就是1T了。那时的大页可能会更大。当然,这种想法只是一种简单的摊大饼的想法,可能真到了那种情况会出现更优秀的管理方法了。
综合上面的分析,可以明白了,大页的优缺点,其优点主要有:

  1. 提升TLB缓存的命中率
  2. 由于降低了页表的层级从而提高了访问的效率
  3. 由于大量的连续内存的访问,提高了访问速度和效率
    缺点主要有:
  4. 不恰当的应用可能导致内存碎片的迅速增加并浪费大量的内存
  5. 大页管理相对较难,对物理内存和系统的开发都有较高的要求。由于大页一般是静态分配,所以其动态分配和和释放要复杂
  6. 大页的分配比较麻烦,毕竟寻找一个如此大的连续的页面相对要难很多

三、大页的应用

既然大页有大页的好处,标准页有标准页的优秀之处,那么到底在什么情况下使用大页呢?毕竟大家常用的电脑和服务器,一般来说都是使用的4K做为标准页。

  1. 海量存储的数据库
    非常容易想到的便是海量型的数据库,特别是基于内存的海量型数据库。
  2. 大数据的处理
    经常对大数据进行处理和转发的情况下,也需要大页内存管理,如Hadoop、Flink和Spakr等以及前面分析的DPDK。
  3. 高性能和科学计算
    大量的数据存储在内存中,尽量不要产生缺页中断。大页就可以满足这种情况从而提高计算的速度和效率。比如需要同时对大小1M的1000张图像进行分析,大页就很有优势。
  4. 虚拟化管理
    这个看上去比较难理解,其实换个角度就好理解了。虚拟化管理的单元是一个个的硬件甚至是一个虚拟的电脑,那么其分配的单元一定不会太小。现在的计算机谁还看到过内存只有4K的,一般网上的云服务器最低也得1G吧。

四、总结

正如刚刚所讲,大和小永远是相对的。技术的发展不会停滞,设计和架构的思想也在不断完善。技术的发展不是简单的一加一,在量变发展到一定程度后,就会产生质变。也就是说,可能以后就没有了所谓的段页的管理,产生更新的技术框架。所以对广大的开发者来说,永远不要停下自己追寻技术前沿的脚步,才是根本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/922111.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/922111.shtml
英文地址,请注明出处:http://en.pswp.cn/news/922111.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

langgraph astream使用详解

langgraph中graph的astream(stream)方法分别实现异步(同步)流式应答,在langgraph-api服务也是核心方法,实现与前端的对接,必须要把这个方法弄明白。该方法中最重要的参数是stream_mode&#xff…

【C++】模板进阶:非类型参数、模板特化与分离编译

目录 1. 非类型模板参数 2. 模板的特化 3. 分离编译 1. 非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。 非类型形参,就是用一个常量作为类(函数)模板…

栈-1047.删除字符串中的所有相邻重复项-力扣(LeetCode)

一、题目解析 1、反复执行重复项删除操作 2、s仅由小写英文字母组成 二、算法原理 该题并不难,难的是能不能想到用栈这个数据结构解题 解法:栈模拟 横着看起来不好理解,我们把它竖起来,是不是和消消乐很类似,两两消…

【每日算法】移除元素 LeetCode

双指针方法是解决数组或链表问题中非常高效的技巧之一,尤其适用于原地修改数组或减少时间复杂度的场景。以下是对双指针方法的详细讲解。1. 双指针方法的核心思想双指针方法通常使用两个指针(或索引)在数组或链表中协同工作,通过一…

Android 项目:画图白板APP开发(六)——分页展示

本篇将介绍如何为我们的画板应用添加分页展示功能,让用户可以创建多个画布并在它们之间轻松切换。这章没有啥知识点的讲解,主要介绍一下每页保存的数据结构是什么样的。 一、ListView 多页数据的管理我们使用ListView。之前有文章讲过ListView这里就不多…

智能眼镜产品成熟度分析框架与评估

引言 当前(2025年9月12日),智能眼镜(Smart Glasses)市场正处于快速演进阶段,从早期的新奇设备向主流消费电子转型。AI整合、AR显示和多模态交互的进步推动了这一转变。根据最新数据,2025年AI眼镜发货量预计达686万台,同比增长265%,全球市场规模从2024年的约19.3亿美元…

(网络编程)网络编程套接字 UDP的socket API 代码解析

网络编程基础 为什么需要网络编程?--丰富的网络资源 用户在浏览器中,打开在线视频网站,如优酷看视频,实质是通过网络,获取到网络上的一个视频资源。与本地打开视频文件类似,只是视频文件这个资源的来源是网络。 相比本地资源来说,网络提供了更为丰富的网络资源:所谓的网络资源…

【STM32】状态机(State Machine)

这篇博客介绍 状态机(State Machine),适合用于嵌入式开发、驱动开发、协议解析、按键识别等多种场景。 一、什么是状态机(State Machine)? 状态机(State Machine)是一种用于描述系统…

深度学习在离岗检测中的应用

离岗检测技术正逐步成为现代企业精细化管理和安全生产的重要工具。这项基于计算机视觉和人工智能的应用,通过自动化、实时化的监测方式,有效提升了工作纪律性和运营效率,为项目管理者和企业提供了创新的监管解决方案。在许多工作场景中&#…

Spring缓存(二):解决缓存雪崩、击穿、穿透问题

1. 缓存穿透问题与解决方案 1.1 什么是缓存穿透 缓存穿透是指查询一个不存在的数据,由于缓存中没有这个数据,每次请求都会直接打到数据库。 如果有恶意用户不断请求不存在的数据,就会给数据库带来巨大压力。 这种情况下,缓存失去了…

PHP 与 WebAssembly 的 “天然隔阂”

WebAssembly(简称 WASM)是一种低级二进制指令格式,旨在为高级语言提供高性能的编译目标,尤其在浏览器环境中实现接近原生的执行效率。它主要用于前端性能密集型场景(如游戏引擎、视频编解码、3D 渲染等)&am…

unity中通过拖拽,自定义scroll view中子物体顺序

1.在每个content的子物体上挂载DragHandler脚本,并且添加Canvs Group组件,设置见图2.DragHandler脚本内容:using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; using System.Collections.Generic; using System.Coll…

用 Matplotlib 绘制饼图:从基础语法到实战美化,全面掌握分类数据可视化技巧

用 Matplotlib 绘制饼图:从基础语法到实战美化,全面掌握分类数据可视化技巧 在数据分析与可视化的世界里,**“图胜千言”**早已成为共识。而在众多图表类型中,饼图(Pie Chart)以其直观的比例展示方式,成为展示分类数据分布的常见选择。无论是业务报表、用户画像,还是市…

基础算法之二分算法 --- 2

大家好,不同的时间,相同的地点,时隔多日我们又见面了。继上次的二分算法后,我们这次要来学习的是二分答案了。这个部分相较于前面的二分算法难度有相当的提升,希望大家有所准备。虽然难度增加了,但是博主还…

发挥nano banana的最大能力

1. 概述Nano Banana 简介:Nano Banana 是 Google DeepMind 开发的 AI 图像生成与编辑模型,集成在 Google Gemini 平台中(具体为 Gemini 2.5 Flash 版本)。它以高效的图像编辑能力闻名,尤其在角色一致性、光影理解和快速…

leetcode 面试题01.02判定是否互为字符重排

一、问题描述二、解题思路解法一:对s1和s2进行sort排序,返回s1是否等于s2;解法二:用哈希表分别来记录s1和s2中字符出现的次数,统计完后,判断两个哈希表是否相等;三、代码实现解法一:时间复杂度&…

Python Yolo8 物体识别

支持单张图片/图片目录批量预标注 默认使用cuda GPU .env HTTP_PROXYhttp://192.168.2.109:10808 HTTPS_PROXYhttp://192.168.2.109:10808pyproject.toml [project] name "yolo-test" version "0.1.0" description "Add your description here&quo…

LeetCode100-234回文链表

本文基于各个大佬的文章上点关注下点赞,明天一定更灿烂!前言Python基础好像会了又好像没会,所有我直接开始刷leetcode一边抄样例代码一边学习吧。本系列文章用来记录学习中的思考,写给自己看的,也欢迎大家在评论区指导…

BUG排查流程

引言简述Bug排查的重要性分享个人或团队在Bug排查中的常见挑战引出日记形式记录的价值日记格式设计时间戳:记录问题发现和解决的时间节点问题描述:清晰定义Bug的现象和影响范围环境信息:操作系统、版本号、依赖库等关键配置复现步骤&#xff…

汽车功能安全 Functional Safety ISO 26262 测试之一

汽车电子电气系统的日益复杂使得功能安全成为保障车辆可靠性和驾乘安全的关键。 本文将围绕ISO 26262标准的核心内容展开,帮助大家理解如何通过系统化的方法控制风险,进行测试,确保产品安全。 01 什么是功能安全? 首先&#xff0c…