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

当有虚拟内存时,为什么我们还需要页缓存

当有虚拟内存时,我们仍然需要页缓存的原因是:

  1. 提高性能:页缓存是操作系统在内存中维护的一个缓存区域,用于存储磁盘上的数据页。虚拟内存通过将部分数据页存储在磁盘上,可以释放内存空间,但是从磁盘读取数据的速度相比内存较慢。而页缓存可以将经常访问的数据页缓存在内存中,以提高读取数据的速度,从而提高系统的整体性能。
  2. 减少磁盘IO:当应用程序需要读取或写入磁盘上的数据时,如果数据已经被缓存在页缓存中,操作系统可以直接从页缓存中读取或写入数据,而不需要进行磁盘IO操作。这样可以减少磁盘IO的次数,提高系统的响应速度。
  3. 提供一致性和持久性:页缓存可以保证数据的一致性和持久性。当应用程序写入数据时,操作系统会将数据先写入页缓存,然后再异步地将数据写入磁盘。这样可以确保数据在写入磁盘之前已经被持久化,即使系统发生故障或意外断电,数据也不会丢失。
  4. 支持文件系统:页缓存是文件系统的基础,文件系统通过页缓存来管理文件的读取和写入。当应用程序需要读取文件时,文件系统会将文件的数据页缓存在页缓存中,以提高读取文件的速度。当应用程序需要写入文件时,文件系统会将数据先写入页缓存,然后再将数据写入磁盘。
  5. 提供数据共享和共享内存:页缓存可以实现数据的共享和共享内存。多个应用程序可以共享同一个数据页,从而实现数据的共享。同时,页缓存也可以用于实现共享内存,多个应用程序可以将同一个文件的数据页映射到它们的地址空间中,从而实现共享内存的效果。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(Elastic Cloud Server,ECS):https://cloud.tencent.com/product/cvm
  • 腾讯云云数据库(TencentDB):https://cloud.tencent.com/product/cdb
  • 腾讯云对象存储(Cloud Object Storage,COS):https://cloud.tencent.com/product/cos
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iot
  • 腾讯云区块链(Blockchain):https://cloud.tencent.com/product/baas
  • 腾讯云元宇宙(Metaverse):https://cloud.tencent.com/product/metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

课程论文:万字长文详解QUIC协议,为什么了TCP我们还需要QUIC?

为什么难优化?为什么优化不了?因为滑动窗口。 在讨论网络传输性能,经常会遇到关于拥塞窗口(Congestion Window, cwnd)限制的疑问。...通过这种方式,我们可以更好地理解cwnd在TCP流量控制中的作用,以及它如何影响网络传输的性能。 ● 为什么因为滑动窗口?因为滑动窗口本质上是一个“停-等”策略。 ● “停-等”怎么了?...例如它有可能在缓存式输入的交换机中出现,可能因为传输顺序错乱而出现,亦有可能在HTTP流水线中有多个请求的情况下出现。 ● 等什么?等buffer被填满。 ● 什么buffer?就是接收窗口。...NAT 网关在转换网络地址重写传输层的头部,可能导致双方无法使用新的传输格式。整流器和中间代理有时候出于安全的需要,会删除一些它们不认识的选项字段。...最重要的是,我们可以在内存不足或者上游处理性能出现问题,通过流量控制来限制传输速率,保障服务可用性。 没有队头阻塞的多路复用 QUIC 的多路复用和 HTTP2 类似。

24310

操作系统核心知识点整理--内存篇

接受到一个段内存申请请求我们可以采用: 首次适配,最佳适配,最差适配,首次循环适配等算法来进行内存的分配。...---- 段结合: 为什么需要虚拟内存?...虚拟内存的之后,用户写的程序首先在虚拟内存中划分出对应的空间来存放,但是实际程序载入内存,却会根据先前划分的虚拟地址空间,分别打散存储到对应多个物理上。...具体选择淘汰哪一个的规则叫做页面置换算法,常见的: 先进先出(FIFO) 最近最久未使用(LRU) Clock算法,LRU的近似实现 操作系统内存换出—15 包括还需要限制每个进程所能分配到的页面数...tlb作为CPU内部的相联存储寄存器,用来缓存最近访问过的虚拟页号和物理页号的映射关系,利用的是程序执行的局部性原理,可以很高的命中率。 什么是虚拟内存为什么需要虚拟内存虚拟内存有什么好处?

55330
  • CPU如何与内存交互?

    CPU; (四)最后来看看为什么需要虚拟内存?...讲完了什么是虚拟内存我们最后讲讲虚拟内存的必要性。...由于操作虚拟内存实际上就是操作表,从上面讲解我们知道,表的大小其实和物理内存没有关系,物理内存不够用时可以通过缺失来将需要的数据置换到内存中,内存中只需要存放众多程序中活跃的那部分,不需要将整个程序加载到内存里面...并且独立的虚拟内存空间也会简化内存的分配过程,当用户程序向操作系统申请堆内存,操作系统可以分配几个连续的虚拟,但是这些虚拟可以对应到物理内存中不连续的中。 再来就是提供了内存保护机制。...被查找的数据发生缺失时,需要等待数据从主存加载到缓存中,如果缓存满了,那么还需要进行淘汰。

    1.8K30

    【建议收藏】MMU是如何完成地址翻译的?

    为了讲清楚MMU是如何一步一步完成地址翻译,取出数据的,本篇文章在前4节中讲解了虚拟内存中一些重要的概念,比如,虚拟内存的作用,命中,缺页异常处理,为什么需要TLB等等。...因为虚拟页面现在缓存在物理内存中,所以就会命中,主存就会将所请求字返回给处理器。 4. 为什么了高速缓存还需要TLB呢?...TLB 假设TLB 16 个条目,并且是 4 路组相连的。TLB 缓存的是表条目,表条目是虚拟页号的唯一标识。所以,我们只需要用虚拟页号去访问 TLB。...我们只根据索引来查找组,每一个条目都有一个标记位。一个 TLB 条目如果有效,它就含有一个物理地址。 5.1.3 表 ? 表的前 16 个条目 现在,我们还需要表。...虚拟地址0x0020 和之前的例子一样,我们可以得到VPN为0x00,VPO为0x01,TLBI为0,TLBT为0x00。 ? TLB 第一步是检查 TLB 看是否表条目的缓存

    1.8K52

    mmap分析

    真正的文件读取是进程发起读或写操作。 9、进程的读或写操作访问虚拟地址空间这一段映射地址,通过查询表,发现这一段地址并不在物理页面上。...3、inode在address_space上查找要请求的文件是否已经缓存缓存中。如果存在,则直接返回这片文件的内容。...常规文件使用了缓存机制,造成读文件需要先将文件从磁盘拷贝到缓存中,由于缓存处在内核空间,不能被用户进程直接寻址,所以还需要缓存中数据再次拷贝到内存对应的用户空间中。...但是需要提的是,mmap 在内核崩溃、突然断电的情况下也一样 可能引起内容丢失,当然我们也可以使用 msync 来强制同步写。 3.提供进程间共享内存及相互通信的方式。...如果进程A和进程B都映射了区域C,A第一次读取C通过缺页从磁盘复制文件到内存中;但B再读C的相同页面,虽然也会产生缺页异常,但是不再需要从磁盘中复制文件过来,而可直接使用已经保存在内存中的文件数据

    1.4K20

    深入剖析虚拟内存工作原理

    程序引用到一段在物理内存的地址空间,由硬件立刻执行必要的映射;而程序引用到一段不在物理内存中的地址空间,由操作系统负责将缺失的部分装入物理内存并重新执行失败的指令。...这里我们基于一个例子来分析页面命中,计算机各个硬件是如何交互的: 第 1 步:处理器生成一个虚拟地址 VA,通过总线发送到 MMU; 第 2 步:MMU 通过虚拟页号得到表项的地址 PTEA,通过内存总线从...我们都清楚 MMU 的工作就是要把虚拟内存地址翻译成物理内存地址,现在索引结构变了,物理框号 PPN 作为索引,从原来的 VPN --> PPN 变成了 PPN --> VPN,那么进程尝试访问一个虚拟内存地址之时...这时候又是我们的老朋友 -- TLB 出场的时候了,我们只需要把高频使用的页面缓存在 TLB 中,借助于硬件,在 TLB 缓存命中的情况下虚拟内存地址的翻译过程就可以像普通表那样快速,然而 TLB...最后,虚拟内存技术中还需要涉及到操作系统的页面置换机制,由于页面置换机制也是一个较为庞杂和复杂的概念,本文便不再继续剖析这一部分的原理,我们在以后的文章中再单独拿来讲解。

    2.9K61

    理解mmap

    3.缺页处理 MMU在试图翻译某个虚拟地址A,触发了一个缺页。缺页异常处理程序会做如下检查: - 1)虚拟地址A是否合法?即是否在链表mm_struct所描述的区域内。...即检查指令的权限是否与vm_prot字段所描述的读写许可权限相匹配。 - 3)正常缺页。系统会负责把该虚拟内存区域对应的文件加载到内存中。...CPU真的在这个地址上发起读写执行等操作,因为文件的内容在磁盘上是不能被CPU访问的,所以OS会进入异常,系统的缺页处理程序会调用文件系统把一或者多的文件内容加载到物理内存中。...5.为什么mmap()可以节约IO读写时间 常规文件操作为了提高读写效率和保护磁盘,使用了缓存机制,这是由OS控制的。...这样造成读文件需要先将文件从磁盘拷贝到缓存中,由于缓存处在内核空间,不能被用户进程直接寻址,所以还需要缓存中数据再次拷贝到内存对应的用户空间中。

    6K61

    图解计算机的存储器金字塔

    Translation)才能映射到存放数据的物理地址; 优化 3 - 缓存: 为了提高读写效率和保护磁盘,操作系统在文件系统中使用了缓存机制。...2.3 为什么在 CPU 和内存之间增加高速缓存?...而如果 CPU 能直接从缓存中获取数据,就可以减少竞争,提高 CPU 的效率。 关于 CPU 三级高速缓存的更多内容,请关注专栏文章。 CPU 三级缓存 2.4 为什么要使用虚拟内存访问内存?...物理内存资源不足,操作系统会按照一定的算法将最近不常用的内存换出(Swap Out)到硬盘上,再把要访问数据从硬盘换入(Swap In)到物理内存上。...至于操作系统如何管理虚拟地址和内存地址之间的关系(段式、式、段式),对上层应用完全透明。 关于虚拟内存的更多内容,请关注专栏文章。 虚拟内存 ---- 3.

    70820

    Linux mmap原理

    下面我们通过一幅图来对 mmap 的原理进行阐述: 从上图可以看出,mmap 的原理就是将虚拟内存空间映射到文件的缓存我们可以知道:对文件进行读写需要经过缓存进行中转的。...由于 mmap() 系统调用并没有直接将文件的缓存映射到虚拟内存中,所以访问到没有映射的虚拟内存地址,将会触发 缺页异常。...将虚拟内存地址映射到缓存的物理内存(也就是将进程的表项设置为上面生成的表项的值)。 对于 filemap_fault() 函数是怎样读取文件缓存的,本文不作解释,兴趣的可以自行阅读源码。...对映射后的虚拟内存进行读写操作,其效果等价于直接对文件的缓存进行读写操作。对文件的缓存进行读写操作,也等价于对文件进行读写操作。...这样造成读文件需要先将文件从磁盘拷贝到缓存中,由于缓存处在内核空间,不能被用户进程直接寻址,所以还需要缓存中数据再次拷贝到内存对应的用户空间中。

    3.6K21

    《Linux是怎么样工作的》读书笔记

    这里我们再举例简述高速缓存的内部操作: 假设需要读取缓存块是10个字节,高速缓存为50个字节,R0、R1的寄存器总计为20个字节,R1需要读取某个地址的数据,在第一次读取数据的时候将10字节先加载到高速缓存...,然后再由高速缓存传输到寄存器,此时R010字节的数据,如果下次还需要读取10个字节,同样因为高速缓存发现缓存中有相同数据,则直接从高速缓存读取10个字节到R1中。...内存 内存不仅仅是我们熟知的电脑内存,从广义上来说还包括只读存储,随机存储和高速缓存存储。 这里可能会有疑问为什么内存使用的最多却不如寄存器和高速缓存呢?...因为内存不仅仅需要和CPU通信还需要和其他的控制器和硬件打交道,管的事情越多效率自然越低,同时如果内存吃紧CPU还需要等待内存传输,当然这也可以反过来解释为什么需要高速缓存和寄存器。...另外还需要强调进行fork调用的时候并不会复制表和内容,而是真正写入的时候会触发复制动作,这也是写复制名字由来。

    1.1K00

    从内核世界透视 mmap 内存映射的本质(原理篇)

    那么我们申请的这块虚拟内存到底多大呢 ?...进程开始访问这段虚拟内存区域,发现这段虚拟内存区域背后没有任何物理内存与其关联,体现在内核中就是这段虚拟内存地址在表中的 PTE 项是空的。...任意一个进程,比如上图中的进程 1 开始访问这段映射的虚拟内存,CPU 会把虚拟内存地址送到 MMU 中进行地址翻译,因为 mmap 只是为进程分配了虚拟内存,并没有分配物理内存,所以这段映射的虚拟内存表中是没有表项...进程 2 开始处理缺页逻辑的时候,进程 2 就懵了,为什么呢 ?...内存池中的大个数被耗尽,如果此时继续进程来申请大,那么内核则会从当前系统中选取多个连续的普通 4K 大小的内存,凑出若干个大来供进程使用,这些被凑出来的大叫做 surplus_hugepage

    4K67

    《Linux是怎么样工作的》读书笔记

    这里我们再举例简述高速缓存的内部操作: 假设需要读取缓存块是10个字节,高速缓存为50个字节,R0、R1的寄存器总计为20个字节,R1需要读取某个地址的数据,在第一次读取数据的时候将10字节先加载到高速缓存...,然后再由高速缓存传输到寄存器,此时R010字节的数据,如果下次还需要读取10个字节,同样因为高速缓存发现缓存中有相同数据,则直接从高速缓存读取10个字节到R1中。...内存: 内存不仅仅是我们熟知的电脑内存,从广义上来说还包括「只读存储,随机存储和高速缓存存储」。 这里可能会有疑问为什么内存使用的最多却不如寄存器和高速缓存呢?...因为内存不仅仅需要和CPU通信还需要和其他的控制器和硬件打交道,管的事情越多效率自然越低,同时如果内存吃紧CPU还需要等待内存传输,当然这也可以反过来解释为什么需要高速缓存和寄存器。...❞ 另外还需要强调进行fork调用的时候并不会复制表和内容,而是真正写入的时候会触发复制动作,这也是写复制名字由来。

    68530

    虚拟内存详解

    系统监控报警,内存空间不足,但实际可用内存还是剩很多的,这是为什么? 究其原因,监控系统计算的可用内存算法偏差,他只关注了计算机的“实际”内存,忽略了计算机的虚拟内存。...之后进行内存分配,都以为单位,那么虚拟内存对应物理内存的映射表就大大减小了,4G内存,只需要8M的映射表即可,一些进程没有使用到的虚拟内存,也并不需要保存映射关系,而且Linux还为大内存设计了多级表...我们知道通过虚拟内存机制,每个进程都以为自己占用了全部内存,进程访问内存,操作系统都会把进程提供的虚拟内存地址转换为物理地址,再去对应的物理地址上获取数据。...CPU中有一种硬件,内存管理单元MMU(Memory Management Unit)专门用来将翻译虚拟内存地址。CPU还为表寻址设置了缓存策略,由于程序的局部性,其缓存命中率能达到 98%。...JVM进程占用虚拟内存过多 使用top查看系统性能我们会发现在VIRT这一列,Java进程会占用大量的虚拟内存, ?

    3.7K10

    性能测试必备知识(10)- Linux 是怎么管理内存的?

    ,是通过内存映射来管理的 什么是内存映射 内存映射,其实就是将虚拟内存地址映射到物理内存地址 为了完成内存映射,内核为每个进程都维护了一张表,记录虚拟地址与物理地址的映射关系 ?...,所以每次 mmap 都会发生缺页异常;在内存工作繁忙,频繁的内存分配会导致大量的缺页异常,使内核的管理负担增大, 这也是 malloc 只对大块内存使用 mmap 的原因 总结 这两种调用发生后,...,以为单位来管理内存,并且会通过相邻的合并,减少内存碎片化 在用户空间,malloc 通过 分配的内存,在释放并不立即归还系统,而是缓存起来重复利用 brk() 在内核空间,Linux 则通过...,在应用程序用完内存后,还需要调用 或 unmap() ,来释放这些不用的内存 free() 回收 系统不会任由某个进程用完所有内存,在发现内存紧张,系统就会通过一系列机制来回收内存 回收缓存:比如使用...Memory),直接杀掉占用大量内存的进程 回收不常访问的内存 会用到交换分区(以下简称 Swap) Swap 其实就是把一块磁盘空间当成内存来用 它可以把进程暂时不用的数据存储到磁盘中(这个过程称为换出),进程访问这些内存

    1.9K30

    性能优化的正确方向

    性能最通俗的衡量指标就是“时间”,CPU的使用率指的是CPU用于计算的时间占比,磁盘使用率指的是磁盘操作的时间占比,CPU使用率100%,意味着部分请求来不及计算,响应时间增加或者超时;磁盘使用率...性能优化并不是一个孤立的课题,除了响应时间的考虑,我们往往还需要综合功能完整性、安全性等等方面的问题。...,缓存缓存虚拟内存的页面,包括文件系统的页面,提升了文件和目录的性能。...文件系统使用的内存脏由内核线程写回磁盘,如图中的页面扫描器kswapd为后台的页面换出进程,内存不足,超过一定时间(30s)或者有过多的脏都会触发磁盘回写。...在分析mysql在某机型上做非全cache非原地更新为什么单实例无法将机器性能压满的时候,我们在分析的过程中跟踪了块设备的内核事件。

    4.1K00

    虚拟内存 & IO & 零拷贝

    虚拟内存到物理内存转换的过程中,很重要的一步就是进行地址翻译,下面介绍。...这里我们基于一个例子来分析分析页面命中,计算机各个硬件是如何交互的: 第 1 步:处理器生成一个虚拟地址 VA,通过总线发送到 MMU; 第 2 步:MMU 通过虚拟页号得到表项的地址 PTEA...1.2.2 加速翻译&优化虚拟内存这项技术能不能真正地广泛应用到计算机中,还需要解决如下两个问题: 虚拟地址到物理地址的映射过程必须要非常快,地址翻译如何加速。...删除,若该 socket 已经存放在就绪列表中,它也应该被移除。...在这种模式下,描述符从未就绪变为就绪,内核通过 epoll 告诉你。

    1.9K20

    浅谈计算机中的存储模型(二)虚拟存储器

    如果你还是不理解为什么要抽象出地址空间,每个进程要抽象出虚拟内存,可以这样想。...但是进程需要访问自己的数据肯定要去物理内存中的物理地址找数据,那么从虚拟内存向物理内存地址转换在式管理中我们就需要通过表这个数据结构来进行转换。 ?...如果没有快表,我们需要多次访问内存才能得到我们需要的表项,前面说过二八定理,我们将经常使用的表项缓存到TLB快表中,由于快表也是硬件集成的,它是并行的来查找,所以速度非常快。...FIFO先进先出算法 思想很简单,需要置换页面,将最早到来的置换出去,因为它存在的最久,这个算法是最简单的,但是缺不高效,因为我们不能保证停留最久的页面不是最常访问的。...写复制 从fork函数创建子进程来看,其实是父子进程都通过各自的表映射到物理内存上相同的子进程修改数据表上有访问权限位,得知只读,操作系统会为它分配新的

    62500

    【愚公系列】软考中级-软件设计师 028-操作系统(存储管理-式存储)

    一个进程需要访问某个内存地址,操作系统会首先查找进程的表,确定该地址所对应的。如果该页已经在内存中,操作系统直接将该页的内存地址返回给进程,进程可以直接访问。...内存不足,操作系统需要选择一个页面将其从内存中置换出来,为新的页面腾出空间。...虚拟内存将一个程序的地址空间划分为多个(page),每个的大小通常为4KB或者8KB。程序访问某个虚拟地址,需要将该虚拟地址转换为物理地址才能进行实际的内存访问。...程序访问虚拟地址,首先检查TLB是否已经缓存了对应的映射关系,如果缓存中存在,则直接使用缓存中的物理地址,从而避免了访问表的开销。...TLB已满并且需要存储新的映射关系,需要进行替换。常用的替换算法包括最近最少使用(Least Recently Used,LRU)算法和随机替换算法。

    19121

    一文读懂零拷贝技术

    发送文件 为什么要介绍 用户空间 和 内核空间 呢? 我们先来回忆一下,服务端发送一个文件给客户端一般需要进行什么操作。...图2 就是数据的复制过程,首先会从文件中读取数据到内核的 缓存(page cache),然后再从缓存中复制到用户空间的缓冲区中。...而调用 write 系统调用把用户空间缓冲区中的数据发送到客户端 Socket ,首先会把缓冲区的数据复制到内核的 Socket 缓冲区中,网卡驱动会把 Socket 缓冲区的数据发送出去,如图 3...从上图可以看出,服务端发送文件给客户端的过程中需要进行两次数据复制,第一次是从内核空间的缓存复制到用户空间的缓冲区,第二次是从用户空间的缓冲区复制到内核空间的 Socket 缓冲区。...仔细观察我们可以发现,上图中的缓存其实可以直接复制到 Socket 缓冲区,而不需要复制到用户空间缓冲区的。如图 4 所示: ? 如上图所示,不需要用户空间作为数据中转的技术叫 零拷贝技术。

    62160

    系统内存管理:虚拟内存、内存分段与分页、缓存TLB以及Linux内存管理

    程序访问虚拟内存地址,操作系统会进行地址转换,将虚拟地址映射到物理地址上,这样不同的进程运行时,写入的是不同的物理地址,避免了互相覆盖指针的问题。...虚拟地址与物理地址之间通过表来映射,如下图:由于内存空间事先划分为固定大小的,不会像分段机制那样产生碎片。释放内存,以为单位进行释放,避免了无法利用的小内存块。...假设只有20%的一级表项被使用,那么表占用的内存空间只有0.804MB,相比于单级表的4MB,内存节约非常巨大。为什么不分级的表无法实现这样的内存节约呢?...CPU进行寻址,首先会查找TLB,如果找到了对应的表项,就可以直接进行物理地址的访问,避免了继续查找常规表的开销。由于TLB中存储的是程序最常访问的几个表项,所以TLB的命中率通常是很高的。...虚拟内存的实现方式分段和分页,其中分页机制更为常用,采用多级表的方式节约了内存空间。缓存TLB能够加快虚拟地址到物理地址的转换速度。

    68580
    领券