系统调用:程序的执行一般是在用户态下执行的,但当程序需要使用操作系统提供的服务时, 比如说打开某一设备、创建文件、读写文件(这些均属于系统调用)等,就需要向操作系统发 出调用服务的请求,这就是系统调用。

异常:当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由 当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常。

外围设备的中断:当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时 CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前执 行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换。 比如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作等。