内存管理:
分为: 逻辑地址空间:linux很少用到
物理地址空间
线性地址空间:虚拟
为了更好的分配地址空间内存将其分成页page:
页page:为了让线性地址空间映射成物理的,一页一般4K
叶框page frames:存放页的4k
页表page table:数据结构,描述每一个页所对应的叶框的位置,不至
于造成数据修改时的混乱
每个进程都有自己的页表,每一行记录为page table entry:PTE
解释:
MMU:内存管理单元:实选线性地址空间根据页表转换成物理地址空间,每一次的
转换都需要花费一定的时间,可以让TLB解决,TLB实现缓存MMU装换的结果,节省时间,提高
效率
虚拟内存管理:
buddy allocator:避免外碎片,在内存中产生
slab allocator:内碎片在内存的叶框中产生,重用解决
slabtop 查看系统的slab
kswapd将物理内存的一些数据放到交换分区中(交换分区swap)
bdflush:将内存中未同步的数据同步到磁盘中。当数据不在内存中,而
在磁盘中,修改页时会保存到内存中,
脏页dirty page:在内存中没有同步到磁盘上的页
用户访问文件--通过inode号---inode表---找到对应的磁盘位置
提高文件的响应能力: dentry cache-->缓冲池
数据分为:metadata元数据:在inode表的inode项里
data
ext2上:没有记录日志,
文件的存储:现存元数据再存文件,可能会造成数据的不完整,
元数据和数据不一致,数据的自检会花费很长时间
ext3:启用日志功能journal,数据在存到磁盘前先写到日志中,同步后
,然后会在日志中删除数据
dumpe2fs /dev/sda1 查看分区的详细信息,是否有碎片等
ext3模式:
journal数据和元数据都写进日志中,同步磁盘中再删除
ordered默认模式只写元数据,但会确保数据的同步
writeback性能最好,一致性最差元数据写到日志里就认为数据完成,不管数据是否和磁盘的同步
mount -o data={ordered|writeback|journal}
本文出自 “静穆纱的博客” 博客,请务必保留此出处http://jingmu.blog.51cto.com/1812003/525405