2) 如果1)解决了,第二个问题是虽然kernel写此page的操作已经完成,但是是写到了cache中,如何使user space的程序能看到cache里的最新内容。
a) PIPT及non-alias VIPT,不需任何操作
b) alias VIPT,在执行mmap时,已经使虚拟地址前20bit相对于最大alias数的模,等于page->index相对于最大alias数的模。这样此page在user space的所有映射,都使用同一个alias,另一个alias是kernel态的映射。这时需要clean & invalidate本page在kernel态的alias
c) VIVT,通过objrmap,将page对应的所有在user态的映射都设置为non-cacheable。