1. 系统调用。这是用户态进程主动要求切换到内核态的一种方式,用户态进程通 过系统调用
申请使用操作系统提供的的服务程序完成 工作。系统调用机制的核心还是使用了操作系统为用
户特别开放的一个中断来实现。申请使用操作系统提供的的服务程序完成 工作。系统调用机制
的核心还是使用了操作系统为用户特别开放的一个中断来实现。
2. 异常。当CPU在执行用户态程序时,发生了某些事先不可知的异常,这时会触发由当前运行
进程切换到处理此异常的内核相关程序中,也就转到了内核态,例如缺页异常。进程切换到处
理此异常的内核相关程序中,也就转到了内核态,例如缺页异常。
3. I/O设备的中断。当I/O设备完成用户请求操作后,会向CPU发出相应的中断信号,这时CPU
会暂停执行下一条即将要执行的指令,转 而去执行与中断信号对应的的处理程序,如果先前执
行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态 的切换。
例如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续的操作。会暂停执
行下 一条即将要执行的指令,转 而去执行与中断信号对应的的处理程序,如果先前执行的指令
是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态 的切换。例如硬盘
读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续的操作。
其中系统调用可以认为是用户进程主动发起的,异常和外部设备中断则是被动的。