用户态到内核态的转化原理?
系统调⽤
这是⽤户态进程主动要求切换到内核态的⼀种⽅式,⽤户态进程通过系统调⽤申请使⽤操作系 统提供的服务程序完成⼯作,⽐如前例中fork()实际上就是执⾏了⼀个创建新进程的系统调⽤。⽽系统调⽤的机制其核⼼还是使⽤了操作系统为⽤户特别开放的⼀个中断来实现,例如 Linux 的 int 80h 中断。
异常
当 CPU 在执⾏运⾏在⽤户态下的程序时,发⽣了某些事先不可知的异常,这时会触发由当前 运⾏进程切换到处理此异常的内核相关程序中,也就转到了内核态,⽐如缺⻚异常。
外围设备的中断
当外围设备完成⽤户请求的操作后,会向 CPU 发出相应的中断信号,这时 CPU 会暂停执⾏下⼀条即将要执⾏的指令转⽽去执⾏与中断信号对应的处理程序,如果先前执⾏的指令是⽤户 态下的程序,那么这个转换的过程⾃然也就发⽣了由⽤户态到内核态的切换。⽐如硬盘读写操 作完成,系统会切换到硬盘读写的中断处理程序中执⾏后续操作等。
Last updated