解释一下用户态和核心态,什么场景下会发生核心态和用户态的切换?

用户态是用于执行应用程序的环境,通常用于普通应用进程,比如浏览器,文字编辑器等等。用户态只能访问自己的内存空间,没有权限直接访问硬件设备和涉及到系统资源的指令。用户态如果想要访问系统资源或执行敏感操作,必须通过系统调用的方式切换的核心态才能够操作。
核心态是操作系统内核程序运行的环境,拥有最高的特权级别,能够执行所有的指令,访问所有的硬件设备和系统资源。核心态用于执行与系统管理有关的代码,比如内存管理,进程调度等。
比如当用户态一个程序需要读取系统资源时,不能够直接从硬盘上访问,需要先进行系统调用,请求操作系统内核的服务。系统接收到系统调用会将CPU从用户态切换到核心态然后执行相应的文件读取操作,然后将数据返回给用户态,再将CPU切换到用户态。当应用程序发生异常也会从用户态自动转成核心态。