csapp个人理解

csapp个人理解(更新中)

一、第三章 程序的机器级表示

call指令:

%rsp - 8;

将call指令的下一条指令压入栈中,

ret指令:

从栈中取出(call指令的下一条指令),存储到PC(%rip)中;

rsp+8;

push指令:

pushq %rbp 将%rbp中存放的值压入栈中(%rsp-8);

pop指令:

popq %rbp 将当前%rsp指向的位置的值压入%rbp中(%rsp+8);

return-oriented programming (attack lab)

要查找的指令要以ret结尾 或以 nop(no operation)+ ret结尾

ex. c3 or 90 c3 etc 执行原理与ret指令原理一致

二、cache + virtual memory

csapp个人理解_第1张图片

csapp个人理解_第2张图片

TLB是一种cache,TLBT(tag)和TLBI(index)为VA的VPN部分

1.cpu产生一个虚拟地址,mmu从TLB中取出相应的PTE, TLB hit;

A.如果PTE有效位是1,hit,mmu构造一个物理地址,根据系统的高速缓存的实现,物理地址被分成CT(标识位 tag)CI(index ,索引位)和CO(offset, 偏移位);

如果cache hit,直接从cache返回数据给cpu;

如果cache miss, 从内存中读取数据并缓存到cache中(详见第六章)。

B.如果PTE有效位是0,触发page fault 异常, exception handler 把此虚拟地址映射到物理内存中,并更新PTE和TLB,返回到cpu,重新执行这条指令。此时,mmu再次从TLB中取出PTE,有效位是1,mmu构造pa,重复A过程。

2.1.cpu产生一个虚拟地址,TLB miss

mmu直接访问物理内存中的PTE,VPN作为PTE索引,

A.如果PTE中对应项有效位是1,将此PTE cache到TLB中,mmu构造PA,访问高速缓存;

如果cache hit,直接从cache返回数据给cpu;

如果cache miss, 从内存中读取数据并缓存到cache中

B.如果PTE中对应项有效位是0,触发page fault 异常,接下来与上述B过程一致。

你可能感兴趣的:(经验分享)