段错误的解释:
用户访问一个虚拟内存,经过MMU<虚拟内存>检查之后发现没有权限;
MMU产生一个异常,使CPU从用户模式到特权模式,然后执行内核中相应的内核处理;
内核把这个异常解释为段错误,终止引发进程。
用户访问一个虚拟内存,经过MMU<虚拟内存>检查之后发现没有权限;
MMU产生一个异常,使CPU从用户模式到特权模式,然后执行内核中相应的内核处理;
内核把这个异常解释为段错误,终止引发进程。
操作系统配合MMU去访问内存:
虚拟内存映射到哪个物理内存其实是通过页表来描述的,而页表是存放在物理内存中的;
操作系统在初始化数据的时候,会执行一些指令在物理内存中填写页表,然后用指令设置MMU,告诉MMU页表在内存中的什么位置;
然后CPU每次去访问内存的指令都会自动引发MMU去做相应的查表和地址转换,而这些转换是由硬件自动完成。
内存保护:
CPU去访问一个VA时,MMU会检查CPU当前处于用户模式还是特权模式,如果和页面的权限相符合,则允许,否则产生异常。