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

操作系统 页式存储 页与块之间的关系详解

操作系统 页式存储 页与块之间的关系详解 操作系统 页式存储 页 块 逻辑地址 物理地址 块号 页号 以下这些概念在刚开始学的时候简直要逼疯我了,因为不同书籍不同作者就会有不同的叫法,比如说页内地址有叫页偏移的...,块有叫页框的。。。...因为这篇文章我说了算~~~~(有没有很霸气) 页式存储 注意页和块的对象的不同 对程序进行分页存储 对内存进行分块存储 文章最后会给出我总结的页和块的关系 逻辑地址和物理地址 a) 逻辑地址:由两部分组成...+(用户基址) 为了弄清楚上面一大堆名词之间的关系,看看下面的例题。...程序 内存 逻辑地址 物理地址 页号 块号 页内地址 块内地址 页长(页面大小) 块长(块大小) ps:页内地址又可以成为页偏移,但是页内地址不是页长!!!!

2.3K60

Linux-3.14.12内存管理笔记【建立内核页表(3)

前面已经分析了内核页表的准备工作以及内核低端内存页表的建立,接着回到init_mem_mapping()中,低端内存页表建立后紧随着还有一个函数early_ioremap_page_table_range_init...+(KM_TYPE_NR*NR_CPUS)-1, 其中KM_TYPE_NR表示“窗口”数量,在高端内存的任意一个页框都可以通过一个“窗口”映射到内核地址空间,调用kmap_atomic可以搭建起“窗口”...到高端内存的关系,即建立临时内核映射。...,是从页表缓冲空间中申请还是通过memblock算法申请页表内存。...值得注意的是,与低端内存的页表初始化不同的是,这里的页表只是被分配,相应的PTE项并未初始化,这个工作将会交由以后各个固定映射区部分的相关代码调用set_fixmap()来将相关的固定映射区页表与物理内存关联

1.6K11
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQL 内存页淘汰策略

    全表扫描对InnoDB的影响 当我们在查询数据的时候,会从磁盘上读取数据页到内存中,如果内存中的数据页是最新的,可以直接读取内存也返回,不需要从磁盘上再次读取。...内存数据页是在Buffer Pool中管理的,Buffer Pool的两个重要作用是: 加速更新 加速查询 InnoDB Buffer Pool的大小由innodb_buffer_pool_size决定...show engine innodb status\G; 从上图中可以看出,当前的命中率是97.7%,命中率越高,说明我们从内存页获取数据的次数越多。...由于现在磁盘和内存的数据量完全是一个量级,因此很容易出现页淘汰的现象。...如果按照普通的LRU算法,假设我们一个很大的查询需要淘汰掉绝大多数的内存页,这将会导致Buffer Pool的内存命中率急速下降,磁盘压力增加,SQL语句会响应变慢。

    1.5K10

    【Linux 内核 内存管理】物理内存组织结构 ⑥ ( 物理页 page 简介 | 物理页 page 与 MMU 内存管理单元 | 内存节点 pglist_data 与 物理页 page 联系 )

    文章目录 一、物理页 page 简介 1、物理页 page 引入 2、物理页 page 与 MMU 内存管理单元 3、物理页 page 结构体 4、Linux 内核源码中的 page 结构体 二、内存节点...pglist_data 与 物理页 page 联系 内存管理系统 3 级结构 : ① 内存节点 Node , ② 内存区域 Zone , ③ 物理页 Page , Linux 内核中 , 使用 上述..., 就是 " 内存区域 " zone , " 内存区域 " 再向下划分 , 就是 " 物理页 " page ; 2、物理页 page 与 MMU 内存管理单元 在 Linux 内核中 , MMU 内存管理单元...结构体 " 物理页 " page 是 Linux 内核 " 内存管理 " 中的 最小单位 , 物理页 中的 " 物理地址 " 是连续的 , 每个 " 物理页 " 使用 struct page 结构体...内核源码中的 page 结构体 " 物理页 " 使用 page 结构体 进行描述 , 该结构体又称为 " 页描述符 " ; 该 page 结构体 定义在 Linux 内核源码的 linux-4.12\

    6.9K10

    【Linux 内核 内存管理】物理页释放 ( 物理页释放 __free_pages 函数 )

    文章目录 一、物理页释放 __free_pages 函数 一、物理页释放 __free_pages 函数 ---- 页分配器 提供了 释放 物理页的 函数 __free_pages , 该函数定义在 Linux...内核源码的 linux-4.12\mm\page_alloc.c#4083 位置 ; __free_pages 函数参数分析 : struct page *page 参数 表示 要释放的 物理页 page...的 虚拟空间地址 ; unsigned int order 参数 表示 要释放的 物理页 的 " 阶数 " , 也就是 要释放的物理页大小 ; 阶 ( Order ) : 物理页 的 数量单位 ,...n 阶页块 指的是 2^n 个 连续的 " 物理页 " ; 参考 【Linux 内核 内存管理】伙伴分配器 ① ( 伙伴分配器引入 | 页块、阶 | 伙伴 ) __free_pages 函数源码...order == 0) free_hot_cold_page(page, false); else __free_pages_ok(page, order); } } 源码路径 : linux

    12.7K20

    Linux申请大页内存(mmap)

    如果进程使用的内存过大,比如1GB,这样会在页表中占用 1GB / 4KB = 262144个页表项,而系统TLB可以容纳的页表项远小于这个数量。...当多个内存密集型应用访问内存时,会造成过多的TLB未命中,因此在特定情况下会需要减少未命中次数,一个可行的办法就是增大每个页的尺寸。...---- 2.怎样使用大页内存 2.1 先预留一定量的大页内存 #先查看系统有多少已经预留的大页内存 # cat /proc/meminfo |grep -i huge #预留192个大页 # sysctl...\n"); getchar(); munmap(m, s); return 0; } ---- 3.最后的话 大页内存的好处不仅是减少TLB未命中次数,而且大页内存分配的是物理内存,不会被操作系统的内存管理换出到磁盘上...,因此不会出现缺页中断,也就不会引入访问磁盘的时延,另外,大页内存在物理上是连续的,对于大内存访问也有一定的加速效果。

    12K110

    操作系统:内存页的替换

    问题:虚拟页被分配使用之后,在页表中一定有到相应的物理页的映射吗?答案是否定的。 举个例子:电脑只有4g内存,但是要同时打开一个占用3g内存和一个2g内存的游戏,怎么办呢?...预测还有哪些页将要被访问,也将它们一并换入物理内存,减少发生缺页异常的次数。 按需页分配 当应用程序申请分配内存时,操作系统可选择将新分配的虚拟页标记为已分配但未映射至物理内存的状态。...页替换策略 当需要分配物理页时,若空闲的内存已经用完或者小于某个阈值,就需要通过页替换策略将某些物理页换出,以腾出物理内存的空间。...该策略的出发点在于:过去数条指令很可能在后续的数条指令种被频繁访问。 MRU策略 MRU(Most Recently Used)策略在替换内存页时,优先换出最近访问的内存页。...工作集模型能有效地避免颠簸现象的发生。 工作集是“一个程序在时间t的工作集W为它在时间区间[t-x,t]使用的内存页集合,也被视为它在未来(下一段x时间内)会访问的内存页集合”。

    1.3K10

    Linux|大内存页(HugePage)的三三两两

    虚拟内存和物理内存的映射机制有分页和分段两大类,我们的大页就跟内存分页机制有关系。...虚拟内存和物理内存之间通过页表来存储其映射关系,然后CPU在使用内存的时候,内存管理单元(MMU)在页表中找到虚拟内存所以映射的物理内存,然后将物理内存告诉CPU来完成内存调度。...在MMU查找虚拟和物理内存映射关系,为了减少直接访问页表,就有了TLB(Translation Lookaside Buffer)的缓存机制,TLB是一块儿高速缓存,它缓存了使用过的虚拟和物理内存映射关系...,当MMU想要查找内存映射关系的时候首先从TLB里查找,如果找不到再去访问页表。...Linux的HugePage Linux是如何查看大页的配置?

    3.7K20

    【Linux 内核 内存管理】内存管理架构 ③ ( Linux 内核中的内存管理模块 | 页分配器 | 不连续页分配器 | 内存控制组 | 硬件设备内存管理 | MMU | 页表缓存 | 高速缓存 )

    文章目录 一、Linux 内核中的内存管理模块 二、硬件设备内存管理 一、Linux 内核中的内存管理模块 ---- Linux 内核还需要处理如下内容 : ① 页错误异常处理 ② 页表管理 ③ 引导内存分配器...: 页分配器 , 块分配器 , 不连续页分配器 , 连续内存分配器 , 每处理器内存分配器 ; " 页分配器 " 负责分配 内存物理页 , 使用的是 " 伙伴分配器 " ; " 不连续页分配器 " 提供了...vmalloc 函数 用于分配内存 , vfree 函数 用于 释放内存 ; 申请的 " 不连续物理页 “ 可以 映射到 ” 连续的虚拟页 " ; ④ 内存碎片整理 ⑤ 内存耗尽处理 ⑥ 内存控制组...: 控制管理 被 进程 占用的 内存 ; 碎片整理 : 如果 " 内存碎片化 " 严重 , 没有连续物理页 , 需要通过 整理内存碎片 并迁移数据 得到 连续的 物理页 ; 内存回收 : 内存不足时 ,...回收内存 ; ⑦ 页回收处理 二、硬件设备内存管理 ---- 硬件设备内存管理 : ① CPU 处理器 中的 " 内存管理单元 " ( MMU ) 和 高速缓存 ; ② 物理内存 在 " 内存管理单元

    1.5K40

    Linux内存页分配策略

    伙伴系统分配算法 在上一节, 我们介绍了Linux内核怎么管理系统中的物理内存....但有时候内核需要分配一些物理内存地址也连续的内存页, 所以Linux使用了 伙伴系统分配算法 来管理系统中的物理内存页....在Linux内核中, 把两个物理地址相邻的内存页当作成伙伴, 因为Linux是以页面号来管理内存页的, 所以就是说两个相邻页面号的页面是伙伴关系....这是因为如果把1号页面和2号页面当成伙伴关系, 那么0号页面就没有伙伴从而变成孤岛了. 那么给定一个 i 号内存页, 怎么找到他的伙伴内存页呢?...说明一下, 这里计算位图的大小时为每个内存块申请了一个位, 但事实上每个位记录的是一对伙伴内存块的关系, 所以需要除以2, 而现在明显浪费了一半的内存. 在后面的Linux版本中改进了这个问题.

    3.3K10

    Linux 匿名页的反向映射

    我们知道LINUX的内存管理系统中有”反向映射“这一说,目的是为了快速去查找出一个特定的物理页在哪些进程中被映射到了什么地址,这样如果我们想把这一页换出(SWAP),或是迁移(Migrate)的时候,就能相应该更改所有相关进程的页表来达到这个目的...1、为什么要使用反向映射   物理内存的分页机制,一个PTE(Page Table Entry)对应一个物理页,但一个物理页可以由多个PTE与之相对应,当该页要被回收时,Linux2.4的做法是遍历每个进程的所有...每个进程都拥有一个内存描述符,其中有PGD域,指向该进程地址空间的全局页目录;mmap域指向第一个内存区域描述符vm_area_strut1。...进程通过内存区域描述符vm_area_struct管理内存区域,每个内存区域描述符都有vm_start和vm_end域指向该内存区域的在虚拟内存中的起始位置;vm_mm域指向该进程的内存描述符;每个vm_area_struct...Linux采用三级页表: PGD:顶级页表,由pgd_t项组成的数组,其中第一项指向一个二级页表。

    3.7K31

    Linux 标准大页和透明大页

    内存是以块即页的方式进行管理的,当前大部分系统默认的页大小为 4096 bytes 即 4K。1MB 内存等于 256 页;1GB 内存等于 256000 页。...CPU 拥有内置的内存管理单元,包含这些页面的列表,每个页面通过页表条目引用。当内存越来越大的时候, CPU 需要管理这些内存页的成本也就越高,这样会对操作系统的性能产生影响。...Huge Pages Huge pages 是从 Linux Kernel 2.6 后被引入的,目的是通过使用大页内存来取代传统的 4kb 内存页面, 以适应越来越大的系统内存,让操作系统可以支持现代硬件架构的大页面容量功能...Huge pages 有两种格式大小:2MB 和1GB ,2MB 页块大小适合用于 GB 大小的内存, 1GB 页块大小适合用于 TB 级别的内存;2MB 是默认的页大小。...但我遇到过不是软链接的关系情况,这样编辑/etc/sysconfig/grub是没有用户的;执行grub2-mkconfig不会把关闭THP的选项写入到gurb.cfg。

    5.8K50

    DPDK巨页地址管理Linux内核内存管理内存映射pagemaprdma内存注册

    DPDK巨页地址管理/Linux内核内存管理/内存映射/pagemap/rdma内存/注册术语PFN: 物理地址对应的页帧号:pfn = pte_pfn(*pte)INFINIBAND_USER_MEM...协议引擎资源将在 11.1 节中进一步讨论Linux内存管理数据结构的关系图关键函数rte_mem_virt2phyrte_eal_memory_initpte_to_pagemap_entrysmaps_pte_rangeshow_smappte_pfn...请阅读有关大页的 Linux 内核文档,以获取有关如何保留大页的更多信息。...通过使用Mmap,进程可以直接访问被映射对象的内容,而无需进行传统的读取和写入操作。在内存映射过程中,操作系统会将文件数据按页(通常是4KB)进行划分,并在物理内存和虚拟地址空间之间建立对应关系。...因为目前只建立了地址映射,真正的硬盘数据还没有拷贝到内存中,因此引发缺页异常。10、缺页异常进行一系列判断,确定无非法操作后,内核发起请求调页过程。

    91310

    Linux 透明大页 THP 和标准大页 HP

    内存是以块即页的方式进行管理的,当前大部分系统默认的页大小为 4096 bytes 即 4K 。 1MB 内存等于 256 页; 1GB 内存等于 256000 页。...标准大页(HugePages) 标准大页(HugePages)是从 Linux Kernel 2.6 后被引入的,Huge Pages 可以称为大内存页或者大页面,有时候也翻译成大页/标准大页/传统大页...简单地说,就是操作系统内核用于维护进程线性虚拟地址和实际物理内存地址对应关系的表格。 每个进程都会有一份 PageTables,当系统中的进程比较多,例如有几千个会话,PageTables 会很大。...透明大页存在的问题: Oracle Linux team 在测试的过程中发现,如果 linux 开启透明大页 THP,则 I/O 读写性能降低 30%;如果关闭透明大页 THP,I/O 读写性能则恢复正常...而其他操作系统,比如 AIX,对于共享内存段这样的内存,进程共享相同的页表,避免了 Linux 的这种问题。 5、提高 Oracle 性能,减少 SGA 的页交换。

    3.2K20

    Linux-3.14.12内存管理笔记【建立内核页表(1)】

    前面已经分析过了Intel的内存映射和linux的基本使用情况,已知head_32.S仅是建立临时页表,内核还是要建立内核页表,做到全面映射的。...建立内核页表前奏,了解两个很关键的变量: max_pfn:最大物理内存页面帧号; max_low_pfn:低端内存区(直接映射空间区的内存)的最大可用页帧号; max_pfn 的值来自setup_arch...Linux是一个支持多硬件平台的操作系统,各种硬件芯片的分页并非固定的2级(页全局目录和页表),仅仅Intel处理器而言,就存在3级的情况(页全局目录、页中间目录和页表),而到了64位系统的时候就成了4...所以Linux为了保持良好的兼容性和移植性,系统设计成了以下的4级分页模型,根据平台环境和配置的情况,通过将页上级目录和页中间目录的索引位设置为0,从而隐藏了页三级目录和页中间目录的存在。...由此管中窥豹,看到了Linux内存分页映射模型的存在和相关设计,暂且也就先了解这么多。 分析宏是一件很乏味的事情,不过以小见大却是一件很有意思的事情。

    1.9K41

    零拷贝内存 or 页锁定内存

    这是一个小实验,在于验证GPU上使用零拷贝内存和页锁定内存的性能差别。使用的是点积计算,数据量在100M左右。...实验步骤很简单,分别在主机上开辟普通内存,页锁定内存以及进行零拷贝内存的操作,看三者哪个完成的时间比较快,具体的代码在最后,这里是实验结果: ?...但是,页锁定内存相比于零拷贝内存到底慢在哪里呢,当然是慢在从主机内存拷贝到显存的时间了,注释掉页锁定的拷贝语句之后,可以得到以下结果: ?...ps:但是,奇怪的是,如果只将a,b内存拷贝的语句注释掉,页锁定内存仍旧可以得到正确的结果,暂时想不明白是为什么 这时就要问了,看起来零拷贝比页锁定要快啊,那还要这个页锁定干嘛呢,当然是有用的,因为...,零拷贝的内容不能缓存在显存里,如果内容要被反复使用,零拷贝就要不停地从内存里取值,增加总线压力,这样相比页锁定也就处于劣势。

    2.1K50

    性能优化:Linux环境下合理配置大内存页

    简单地说,就是操作系统内核用于维护进程线性虚拟地址和实际物理内存地址对应关系的表格。...Page Table(页表)就是用于操作系统维护进程虚拟地址和物理内存对应关系的数据结构。...因此,决定先使用大内存页来调优系统的内存使用。 大内存页是一种统称,在低版本的Linux中为Large Page,而当前主流的Linux版本中为Huge Page。...实际上这里可以反映出Linux在分页处理机制上的缺陷。而其他操作系统,比如AIX,对于共享内存段这样的内存,进程共享相同的页表,避免了Linux的这种问题。...另外值得高兴的是,新版本的Linux内核提供了Transparent Huge Pages,以便运行在Linux上的应用能更广泛更方便地使用大内存页,而不仅仅是只有共享内存这类内存才能使用大内存页。

    5.1K50

    高端内存映射之vmalloc分配内存中不连续的页--Linux内存管理(十九)

    1 内存中不连续的页的分配 根据上文的讲述, 我们知道物理上连续的映射对内核是最好的, 但并不总能成功地使用. 在分配一大块内存时, 可能竭尽全力也无法找到连续的内存块....这一段具有线性地址空间的所有性质. 分配到其中的页可能位于物理内存中的任何地方. 通过修改负责该区域的内核页表, 即可做到这一点. ? ?...因为用于vmalloc的内存页总是必须映射在内核地址空间中, 因此使用ZONE_HIGHMEM内存域的页要优于其他内存域. 这使得内核可以节省更宝贵的较低端内存域, 而又不会带来额外的坏处....其中依次映射了3个(假想的)物理内存页, 在物理内存中的位置分别是1 023、725和7 311....接下来从物理内存分配各个页 最后将这些页连续地映射到vmalloc区域中, 分配虚拟内存的工作就完成了.

    3K10

    linux中透明巨页与巨页的区别

    在Linux中,透明巨页(Transparent HugePage)和巨页(HugePage)是两种不同的内存管理技术。 透明巨页是Linux内核中的一项特性,旨在提高内存的利用率和性能。...它通过将内存分配为更大的巨页(通常为2MB或1GB),减少了对内存页表的访问次数,从而提高了内存访问的效率。透明巨页是透明的,应用程序无需进行任何修改即可受益于这种内存管理技术。...而巨页是指一种更大尺寸的内存页,在Linux中可以使用不同的页面大小,常见的巨页大小是2MB或1GB。...巨页可以提供更高的内存访问性能,因为它减少了页表的数量,降低了TLB(Translation Lookaside Buffer)缓存的压力,从而减少了内存访问的开销。...巨页需要应用程序进行适当的修改和配置才能使用。 因此,透明巨页和巨页都是通过增加内存页的尺寸来提高内存访问性能,但透明巨页不需要应用程序的修改,而巨页需要应用程序的支持和配置。

    44310
    领券