常考:
memory hierarchy:通过多种存储技术使得系统的存储访问能够同时保持速度和容量的保证
Hot spot:热点,程序代码中,对计算机cpu执行占据时间比例最大的部分(通常以函数为单位),通过寻找hotspot能够改善程序性能
局部性原理:程序倾向于引用临近于其他最近引用过的数据项的数据项,或者最近用过的数据项本身,这种倾向性
按照数据对象存储在存储器中的顺序,以步长为1的引用模式来读取数据可使得程序的空间局部性最大。
Hit ratio 程序运行中,cpu可以从缓存中取到数据或指令大小与程序所需数据指令大小之比
Trashing:抖动,高速缓存反复的加载和驱逐同一缓存块的组
Read throughput(bandwidth):读吞吐量,一个程序从存储系统中读取数据的速率
Memory mountain:读吞吐量的时间空间局部性的二维函数,用来描述存储系统的性能
80/20rules:通常百分之八十的cpu执行时间消耗在百分之二十的代码上
Amdahl law:
显式分配器:要求应用显式的释放任何内存块
隐式分配器:要求分配器检测一个已分配的块何时不再被程序使用,那么就释放这个块,又叫垃圾收集器
堆:动态存储器分配器,维护着一个进程的虚拟存储器区域,称为堆,向上生长。对于每个进程,内核维护着一个brk指针,它指向堆的顶部,可通过系统函数sbrk来扩展和收缩堆的大小
栈:机器用栈来传递过程参数,存储返回信息,保存寄存器用于以后恢复,以及局部变量。为单个过程分配的那部分栈称为栈帧
malloc:只申请内存中的空间,未初始化
calloc:将分配的存储器初始化为0
realloc:改变一个以前已分配块的大小
分配器的要求:
1. 处理任意请求序列
2. 立即响应请求
3. 只使用堆
4. 对齐块
5. 不修改已分配的块
目标:
1. 最大化吞吐率:每个单位时间内完成的请求数
2. 最大化存储器利用率
internal fragment:内碎片,已经被分配出去但不能被利用的内存空间,已分配块比有效载荷大的时候发生
external fragment:外碎片,还未被分配出去,但由于过小,无法分配给申请内存空间的新进程的内存空闲区域
空闲块组织:
放置
分割
合并
(每一种方式解释)
boundary tag:在每个块的结尾处添加一个脚部,作为头部的一个副本,从而达到在常数时间内进行对前面块的合并
并发性编程:程序指令在执行的时间轴上存在一定的重叠,这种现象称为并发编程,作用是可以提高指令的运行效率
trade-off:存储设备访问速度越快,容量越小
sram:静态随机访问存储器,只要供电就能很好的保持数据
dram:动态随机访问存储器,需不断刷新
工作集(set):程序通常是按照一系列阶段来运行的,每个阶段访问缓存块的某个相对稳定不变的集合,这个块的集合称为这个阶段的工作集。
Cache:高速缓存,一个小而快速的存储设备,能够从更慢更大的设备中读取
Cache lines:传入传出cache的块
Miss: cpu所需要的数据并未放置在缓存中,必须立刻从内存中调取
Cold miss(compulsory):如果cache为空,那么对于任何数据的访问,都会不命中
Conflict miss:缓存足够大,可以保存被引用的数据对象,但是这些对象会映射到同一个cache块。所以不命中
Capacity miss:工作级的大小超过缓存大小的不命中
Wall time(elapsed):是指一段程序从运行到终止,系统时钟走过的时间
User time:用户进程消耗的时间
System time:系统进程消耗的时间
Cpu time:user time+system time,CPU时间是指一段程序在CPU上面运行消耗的时间,也是内核时间(kernel time)
Time segment:只有一个进程在执行的那一段时间
Static allocation:静态内存分配,在程序的编译链接阶段,为静态变量,全局变量常量在静态存储区分配固定的大小区域
Dynamic allocation:动态内存分配,与静态内存分配相对,程序运行后系统以栈式或者堆式动态分配给程序
Activation record:活动过程纪录
Program count:
Tos 栈指针
帧指针