book · csapp · 2016-08-27 · yuex

Cache

cache 结构中有 set/line/block 的概念。一般是一个 cache 中有多个 set,每个 set 中有多条 line,每条 line 由多个字节 block 组成。而地址会被切分成三个部分来在这个三层结构中进 行缓存访问定位

+---------------+------------+--------------+
|      Tag      |  Set Index | Block Offset |
+---------------+------------+--------------+

其中有几条 line 就叫几路关联(n-way associative),因为 line 的访问是顺序查找的,相 同 set 内的缓存块可以缓存在任何一条 line 中。特别地,如果只有一个 set,叫全关联缓存 (full-associative)。如果每个 set 只有一条 line,叫直接映射缓存(direct-mapped)。 tag 用于在同一个 set 中定位访问的 line。

Virtual Memory

在虚拟地址中,一般是先进行地址翻译,再进行缓存查找。因为这样缓存的都是物理地址 ,可以缓存不同虚拟地址所映射到的相同物理地址,提高缓存性能。而地址翻译所用到的 缓存叫 TLB(Translation Lookaside Buffer)。虚拟地址的切分如下

|<-   Virtual Page Number  ->|
+---------------+------------+--------------+
|    TLB Tag    |  TLB Index | Page Offset  |
+---------------+------------+--------------+

对于多级地址翻译的,一般会将相关的状态 bit 存储在 page table entry 中的最后几个用于 存 Page Offset 的比特位上。最后一位通常是用于标识所标 page 是否有效。当然这只是 Intel 架构的通常做法,其它架构还是要参考其用户手册。

Garbage Collecton

Mark&Sweep
1. depth-first or breadth-first mark starts from root
2. all heap scan sweep unmark marked block and free unmarked block

-EOF-