OS启动流程
中断、异常、系统调用
- 中断:
由外设或硬件触发,如read系统调用后,系统发出读磁盘的操作,当磁盘数据准备好后,向OS发出一个异步通知消息,即中断。一般来说,中断是异步的方式。
- 具体某个的中断会有一个中断ID,比如1号中断,10号中断,这是OS识别具体产生了哪个中断的标识。
- 而在应用程序部分(或者说软件部分),程序会保存中断发生前一时刻的执行现场,主要是保存一些寄存器中的值,然后去转到中断的服务例程执行中断,
- 然后OS再恢复之前保存的处理状态,就好像应用程序不知道中间某处发生了中断,所以说,中断是对应用程序
透明的
。
- 异常:由应用程序触发,是一种非预期的事件,如0除事件。
异常和中断有点类似又有本质区别,本质区别就是触发的对象不同,异常是由应用程序触发的,中断是由外设触发的。一般来说,异常是同步的方式。
- 同样,某个具体的异常也有异常编号ID,异常产生的前一刻也会保存异常现场,然后转到异常处理,
- 处理的时候和中断服务例程不太一样,有可能是因为因为应用程序本身的错误(如出现了0除事件),这样一来,OS怎么也不可能解决异常,于是会将该异常的程序kill掉;还有一种情况就是由于OS本身的问题,导致某些应该正常执行的程序发生了异常,OS会尝试解决异常,并重新执行产生异常的指令(也就是我们的应用程序啦)。
- 恢复现场