石家庄住建局网站,美团后台管理系统登录,wordpress应,网站建设面试问题页缓存
页缓存是由内存中的物理页面组成的#xff0c;其内容对应磁盘上的物理块。 页缓存大小能动态调整#xff0c;可以占用空闲内存以扩大大小#xff0c;也可以自我收缩缓解内存使用压力。 如果读一个磁盘内容#xff0c;我们会读内存#xff0c;如果存在#xff0c;…页缓存
页缓存是由内存中的物理页面组成的其内容对应磁盘上的物理块。 页缓存大小能动态调整可以占用空闲内存以扩大大小也可以自我收缩缓解内存使用压力。 如果读一个磁盘内容我们会读内存如果存在则为缓存命中如果没有命中则会调用块io操作从磁盘读取数据然后放到内存中。 缓存可以持有文件的全部内容也可以存储文件的几页。
写缓存
进程写缓存时缓存如何使用呢 其实现一般是下面三种策略之一
不缓存nowrite 高速缓存不去缓存任何写操作当对一个缓存中的数据片写时将直接写入磁盘同时使对应缓存失效。写透缓存write-through cache) 更新缓存并且更新磁盘文件。回写 修改缓存并且标记为脏页找机会自动回写到磁盘中最后清楚脏标记。
缓存回收
缓存中的数据被清楚给其他更重要的缓存腾出位置。
LRU
双链策略修改的LRU
维护活跃链表和不活跃链表处于活跃链表被认为是热的不去换出处于不活跃链表的页则可以换出。
Linux页高速缓存
高速缓存缓存的是内存页页来自于文件块设备文件内存映射文件的读写。 同一个页可能缓存了多个不连续的物理块。 Linux页高速缓存使用使用addresss_space结构体来管理缓存项和执行页io操作。 该结构是vm_area_struct的物理地址的对等体一个文件可以被多个vm_area_struct标记但是它只能有一个address_space。
struct address_space {struct inode *host; // 指向与地址空间关联的 inode 结构的指针。struct radix_tree_root page_tree; // 用于管理与地址空间关联的页面的基数树。spinlock_t tree_lock; // 用于保护对页面树的访问的自旋锁。atomic_t i_mmap_writable; // 跟踪可写映射的计数器。unsigned long nrpages; // 地址空间中页面的总数。unsigned long nrexceptional; // 异常条目空洞的数量。pgoff_t writeback_index; // 写回操作期间使用的页面偏移。const struct address_space_operations *a_ops; // 地址空间操作的函数指针。struct backing_dev_info *backing_dev_info; // 关于后备存储设备的信息。struct wb_writeback_work wbs_task; // 用于地址空间的写回控制结构。struct list_head private_list; // 与地址空间关联的私有数据的链表头。struct address_space *assoc_mapping; // 在共享映射的情况下关联的映射。
};