重庆涪陵网站建设公司,祥云平台英文网站,做标签网站邀请码,wordpress可以做商城吗目录
一、缓存手段
二、Linux 页高速缓存
三、flusher 线程 Linux 内核实现了一个被叫做页高速缓存#xff08;page cache#xff09;的磁盘缓存#xff0c;它主要用来减少对磁盘的 I/O 操作。它是通过把磁盘中的数据缓存到内存中#xff0c;把对磁盘的访问变为对物理内…目录
一、缓存手段
二、Linux 页高速缓存
三、flusher 线程 Linux 内核实现了一个被叫做页高速缓存page cache的磁盘缓存它主要用来减少对磁盘的 I/O 操作。它是通过把磁盘中的数据缓存到内存中把对磁盘的访问变为对物理内存的访问。
临时局部原理temporal locality如果在第一次访问数据时缓存它那么就极有可能在短时间内再次访问到因为程序内存在着循环并且其相邻的数据也可能在短时间内被访问到因为程序内存放的数据有很多是连续的如数组。
一、缓存手段
页高速缓存是由内存中的物理页组成的其内容对应磁盘上的物理块。页高速缓存可以动态调整它可以通过占用空闲内存以扩张大小也可以自我收缩以缓解内存使用压力。
当进程发起一个 read() 系统调用它会首先检查需要的数据是否在页高速缓存中如果在则直接从内存中读取而无需访问磁盘此时缓存命中如果没在缓存中则内核必须调度块 I/O 操作从磁盘读取数据。
当进程发起一个 write() 系统调用时缓存一般有三种策略
不缓存no-write这种策略不缓存任何写操作写的时候直接写入磁盘然后使缓存中对应数据失效。一般不使用这种策略。写透缓存write-through cache写操作会同时更新缓存和磁盘上的数据。这种策略对保持缓存一致性很有好处。回写write-back写操作会直接更新缓存中的数据但不会立即更新磁盘上的数据而是将页高速缓存中被写入的页面标记成 “脏页”并且被加入到脏页链表中然后由一个回写进程周期性将脏页链表中的页写回到磁盘。当脏页被换出缓存时则需要立即回写该页。Linux 所采用的就是这种策略。
当缓存满后如何选择合适的页面换出是一种重要的工作有如下两种策略
最近最少使用策略LRU LRU 回收策略需要跟踪每个页面的访问时间以便能回收最老时间戳的页面最少被使用的页面。LRU 是通过维护一个按照时间为序的页链表来实现的。双链策略Linux 采用的是一个修改过的 LRU也叫双链策略。这种策略要维护两个链表活跃链表和非活跃链表。处于活跃链表上的页面被认为是访问较多的且不会被换出而在非活跃链表上的页面则是可以被换出的。这种双链方式也被称为 LRU/2。
二、Linux 页高速缓存
在页高速缓存中的页可能包含了多个不连续的物理磁盘块。Linux 页高速缓存使用了一个新对象管理缓存项和页 I/O 操作这个对象是 address_space 结构体。文件可以有多个虚拟地址可以被多个 vm_area_struct 结构体标识但在物理内存只能有一份只能有一个 address_space 结构体。 三、flusher 线程
由于页高速缓存的缓存作用写操作实际上会被延迟。当页高速缓存中的数据比后台存储的数据更新的时候该数据就被称作脏数据。在以下三种情况发生时脏页被写回磁盘
当空闲内存低于一个特定的阈值时内核必须将脏页写回磁盘以释放内存。当脏页在内存中驻留时间超过一个特定的阈值时内核必须将超时的脏页写回磁盘以确保脏页不会无限期地驻留在内存中。当用户进程调用 sync() 和 fsync() 系统调用时内核会按照要求执行回写操作。
在 2.6 内核中由一群内核线程flusher 线程执行这三种操作。flusher 线程基于页面它将整个脏页写回磁盘。