在MIPS内存模型中,KSEG0和KSEG1都映射到相同的物理地址,但KSEG1未缓存,而KSEG0被缓存。对此的论点是您可以动态决定运行Cached或Uncached代码。
我的问题是:你如何实际编译在虚拟地址空间中运行的代码以及如何在它们之间切换?例如,跳转地址仍然是硬编码的。
我唯一能想到的是使用与位置无关的代码,但如果跳转到KSEG0或KSEG1,似乎不能使用硬件开关进行更改。我想您可以编写软件以在KSEG0或KSEG1中运行,然后将条件跳转添加到将代码推入KSEG0或KSEG1区域所需的标签+偏移量。
有什么想法吗?