Chinaunix首页 | 论坛 | 博客
  • 博客访问: 693329
  • 博文数量: 192
  • 博客积分: 1875
  • 博客等级: 上尉
  • 技术积分: 2177
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-23 23:21
个人简介

有时候,就是想窥视一下不知道的东东,因为好奇!

文章分类

全部博文(192)

文章存档

2024年(8)

2023年(3)

2020年(1)

2019年(1)

2018年(1)

2017年(2)

2016年(69)

2015年(53)

2014年(14)

2013年(1)

2012年(5)

2011年(25)

2010年(9)

分类: LINUX

2016-07-12 22:28:49

linux内核知识收集

  1. 概述
    使用Linux时, 随着时间的推移,内存的free越来越小,而cached越来越大, 原因是内核的文件Cache机制.
    
    文件Cache的实现, 是页面Cache.
    应用程序读取文件的数据时,操作系统先分配一些内存,将数据从存储设备读入到这些内存中, 然后再将数据分发给应用程序;
    往文件中写数据时,操作系统先分配内存接收用户数据,然后再将数据从内存写到磁盘上。
    文件Cache管理,就是对这些由操作系统分配,并用来存储文件数据的内存的管理。
    
    读文件:
    多数情况下,内核在读磁盘时都先通过页面Cache。
    若页面不在Cache中,新页加入到页面Cache中,并用从磁盘上读来的数据来填充页面。
    如果有足够的内存空间,该页可以在页面Cache长时间驻留,其他进程再访问该部分数据时,不需要访问磁盘。
    这就是free命令显示内核free值越来越小,cached值越来越大的原因。

    写文件:
    把一页数据写到块设备之前,内核首先检查对应的页是否已经在页面Cache中; 
    如果不在,就在页面Cache增加一个新页面,并用要写到磁盘的数据来填充。
    数据的I/O传输并不会立即开始执行,而是会延迟几秒左右;这样进程就有机会进一步修改写到磁盘的数据。

    页面Cache可能是下面的类型:
    a. 含有普通文件数据的页;
    b. 含有目录的页;
    c. 含有直接从块设备文件(跳过文件系统层)读出的数据页;
    d. 含有用户态进程数据的页,但页中的数据已被交换到磁盘;
    e. 属于特殊文件系统的页,如进程间通信中的特殊文件系统shm。
    
    下图是块设备的操作流程图
    
    内核页面Cache的实现主要为了满足下面两种需要:
    a. 快速定位含有给定所有者相关数据的特定页。
            为了尽可能发挥页面Cache的优势,查找过程必须快。
    b. 记录在读或写页中的数据时,应该如何处理页面Cache中的每个页。
            例如,从普通文件、块设备文件或交换区读一个数据页, 必须用不同的方式; 这样内核必须根据页面拥有者来选择正确的操作。
    页面Cache中的数据单位是整页数据。
    一个页面中的数据在磁盘上不必是相邻的
    页面不能用设备号和块号来识别
    Cache中的页面识别是通过拥有者和拥有者数据中的索引,通常是inode和相应文件内的偏移量。

    文件Cache是文件数据在内存中的副本,因此文件Cache管理与内存管理系统和文件系统都相关:
    一方面文件 Cache 作为物理内存的一部分,需要参与物理内存的分配回收过程,
    另一方面文件Cache中的数据来源于存储设备上的文件,需要通过文件系统与存储设备进行读写交互。
    从操作系统的角度考虑, 文件Cache可以看做是内存管理系统与文件系统之间的联系纽带。
    因此,文件Cache管理是操作系统的一个重要组成部分,它的性能直接影响着文件系统和内存管理系统的性能

2. 重要数据结构和函数
    a. address_space
       数据结构address_space是页面Cache的核心
       address_space结构体嵌入在拥有该页面的inode对象中。
       在Cache中,可能有多个页面同属于一个inode, 这样他们就可能指向同一个address_space对象。
       同时,通过该对象将拥有者的页面和在这些页面上的操作方法联系起来

    b. address_space_operations

    c. find_get_page

    d. add_to_page_cache

    e. remove_from_page_cache

3. 文件读写流程
    a. 读文件过程
        1>.数据不在页cache中
        2>.数据在页cache中
    b. 写文件过程


阅读(748) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~