3.2缓冲池的结构 1、最近最少使用(LRU)算法: ① 程序设计采用模块化和层次化结构,尽量避 免使用goto语句,程序跳转少,适应“流水线 (pipeline)”体系结构的系统; ② 特定时间段内,程序在一个相对集中空间 (代码段)内运行,涉及的数据(广义的:文 件名、变量、指针和数组等)的个数相对较少; 当前使用过的数据,马上还要使用的可能性 最大,较长时间未用过的数据,即将使用的可 能性最小。 6
3.2 缓冲池的结构 1、最近最少使用(LRU)算法: ① 程序设计采用模块化和层次化结构,尽量避 免使用goto语句,程序跳转少,适应“流水线 (pipeline)”体系结构的系统; ② 特定时间段内,程序在一个相对集中空间 (代码段)内运行,涉及的数据(广义的:文 件名、变量、指针和数组等)的个数相对较少; ③ 当前使用过的数据,马上还要使用的可能性 最大,较长时间未用过的数据,即将使用的可 能性最小。 6
2、缓冲池设计基本原则: 存放有刚使用过的数据尽量长时间地保留在内 存中,以便马上还要使用时能在内存中找到; 需要腾出内存空间时,把很久都未使用过(即 最近最少使用)的数据交换到磁盘上去。这些数 据马上还要使用的可能性最小 7
2、缓冲池设计基本原则: ① 存放有刚使用过的数据尽量长时间地保留在内 存中,以便马上还要使用时能在内存中找到; ② 需要腾出内存空间时,把很久都未使用过(即 最近最少使用)的数据交换到磁盘上去。这些数 据马上还要使用的可能性最小。 7
3、空闲缓冲区链表 核心维护了一个空闲缓冲区链表,它按照最近被使用的先 后次序排列。空闲链表是一个以空闲缓冲区链表头开始的“双 向循环链表”。链表的开始和结束都以链表头为标志。 链表头 空闲缓冲区1 空闲缓冲区2 空闲缓冲区3 空闲缓冲区n 8
3、空闲缓冲区链表 核心维护了一个空闲缓冲区链表,它按照最近被使用的先 后次序排列。空闲链表是一个以空闲缓冲区链表头开始的“双 向循环链表”。链表的开始和结束都以链表头为标志。 链 表 头 空 闲 缓 冲 区 1 空 闲 缓 冲 区 2 空 闲 缓 冲 区 3 空 闲 缓 冲 区 n 8
4、空闲缓冲区链表操作 取用任意空闲缓冲区 从空闲缓冲区链表的表头位置取下一个空闲缓冲区, 后面的空闲缓冲区依次向前移动。 释放一个空闲缓冲区 把这个装有数据的空闲缓冲区附加到空闲链表的链尾。 只有当该空闲缓冲区所装数据出错时才挂到链头。 取用装有指定内容的空闲缓冲区 从链表头开始查找,找到后取下使用,用完后放到链 尾。 当系统不断从链头取用空闲缓冲区,又把使用过的(装有 数据的)缓冲区挂到链尾,一个装有有效数据的缓冲区就会 逐渐向链表头移动。在链表头位置的就是“最近最少使用” 的空闲缓冲区。 9
4、空闲缓冲区链表操作 ① 取用任意空闲缓冲区 从空闲缓冲区链表的表头位置取下一个空闲缓冲区, 后面的空闲缓冲区依次向前移动。 ② 释放一个空闲缓冲区 把这个装有数据的空闲缓冲区附加到空闲链表的链尾。 只有当该空闲缓冲区所装数据出错时才挂到链头。 ③ 取用装有指定内容的空闲缓冲区 从链表头开始查找,找到后取下使用,用完后放到链 尾。 当系统不断从链头取用空闲缓冲区,又把使用过的(装有 数据的)缓冲区挂到链尾,一个装有有效数据的缓冲区就会 逐渐向链表头移动。在链表头位置的就是“最近最少使用” 的空闲缓冲区。 9