一.linux内存体系
- 物理和虚拟内存
- Linux内核只能直接映射第一个GB的的物理内存(896M,因为还要考虑到保留的空间)。在此上的内存被称作ZONE_NORMAL,这部分空间必须映射到最下面的1GB。
- 虚拟内存寻址布局
32位和64位架构Linux系统的虚拟寻址布局:
在32位架构上,单个进程可以利用的最大地址空间是4GB,这是受到了32位虚拟内存映射的限制;64位架构,因为没有内存限制存在,每个进程能够都有可能使用巨大的地址空间。
- 虚拟内存管理器
- 页帧分配:页是物理内存或虚拟内存中一组连续的线性地址,Linux内核以页为单位处理内存,页的大小通常是4KB。
- 伙伴系统:Linux内核使用名为伙伴系统(Buddy system)的机制维护空闲页,伙伴系统维护空闲页面,并且尝试给发来页面申请的进程分配页面
- 伙伴系统分配内存页:
- 页帧回收:当进程请求指定数量的内存页没有可用的内存页时,内核会尝试释放特定的内存页给新的请求使用,这个过程叫内存回收.kswapd内核线程和try_to_free_page()内核函数负责页面回收.
kswapd通常在task interruptible状态下休眠,当一个区域中的空闲页低于阈值的时候,它就会被伙伴系统唤醒。页面主要有两种用途:页面缓存(page cahe)和进程地址空间(process address space)。 - swap:是保证操作系统可以分配超出物理内存大小的空间,但是Linux使用swap的空间的办法更加高效。
二.linux文件系统
- 虚拟文件系统
虚拟文件系统(VFS)是一个处于用户进程和各类文件系统之间的抽象接口层,VFS提供访问文件系统对象的通用对象模型(例如,i-node、文件对象、页缓存、)和方法- 日志
日志系统解决了fsck工作完才能使用文件系统的问题,他先把要修改的数据写入一个叫做日志区域(journal area)的地方。 - Ext2
Ext2是一个简单和快速的文件系统,没有日志功能。
Ext2的文件系统数据结构,文件系统由一个引导扇区(boot sector)开始,后面跟着块组(block groups)。
内核首先搜索文件的i-node,在接到进程打开/var/log/messages文件的请求时,内核分析文件路径,然后搜索/(根目录)的条目,内核会找到/var目录的i-node,然后再来看看/var目录,直到找到/var/log/messages文件的i-node。一旦内核找到了文件的i-node,然后就试着访问真正的用户数据块。
- Ext3
ext3拥有:可用性,数据完整性,速度,灵活性 - 日志模式
日志(journal) 通过记录文件数据和元数据
有序(ordered) 该模式下只记录元数据
回写(writeback) 这个日志选项提供最快的数据访问能力 - ReiserFS
ReiserFS是一个快速的日志文件系统,具备优化磁盘空间利用率和快速的崩溃恢复功能 - 日志文件系统
日志文件系统(Journal File System,JFS)是一个全64位文件系统,能支持超大文件和分区。 - XFS
支持超大文件和分区
- 日志