硬件中断
所谓硬件中断,其实也是一个执行信号的过程,具体流程如下。
具体要执行什么方法,只需要拿着对应的信号访问中断向量表就就行比如
N就是像cpu发的中断信号。
时钟中断
但是这里面有一个叫做时钟源的东西,其实也是一个外设,简单来说他是向cpu定时通过高电压发送信号的一个外设,但是在现在,为了提高效率,这玩意都是嵌入在cpu上的。
通过这个时钟源发送信号,就可以让操作系统定时去完成一些任务,比如我们最熟悉的进程切换,就是通过这个时钟源来进行定时执行的。
他是怎么调度的呢?
首先我们要知道由于时钟源嵌入在了cpu上,所以我们的cpu上就有一个主频了。
我们打开也能看到,这就是说明我们cpu一秒钟能执行多少次这个时钟源的信号,CPU的频率为2.2GHz意味着每秒钟可以执行约2.2亿次操作。
而这是时钟源信号的主要逻辑代码是这样的
而这个counter就是系统自己设计的,如果counter减完就会执行schedule(),下面是schedule的主要逻辑,就是执行进程切换的逻辑。
这也说明我们的cpu为什么说主频越快越好!主频越快,进程轮转得就越快,运行效率就越高了!
所以我们操作系统到底做了些什么?
其实他啥也没做,他就像你的老板,你的工作必须要向他汇报而已,他只是一个方法最终的执行人而已,逻辑啥的都不用管,逻辑是员工自己负责的!所以操作系统的主逻辑就是个死循环。
软件中断
多以系统也有软件中断,系统调用就是软件中断。在x86叫intx80,在x64下叫syscall。
所以问题又回到了,程序是如何是执行软件中断的呢?
在最终我们的系统调用其实就会变成这个逻辑
而你所要出传入的参数,都是C语言给你封装好了的。
而给你返回的值其实也是通过寄存器给你返回回来的。
vfork的源码,C语言所要封装的就是这个。
那些异常也是软中断,他们也是执行到了特定的代码,会触发软中断而已啦,只需要执行他们在中断向量表里注册的函数就行了。
比如你遇到了你程序申请了一段空间,物理内存上没有,这就导致一个缺页异常,就会触发缺页中断,操作系统就会在物理内存上给你申请一段空间的逻辑。
以上的软件中断他们最先都会陷入内核
陷入内核:通常是指在操作系统中,用户态的程序通过特定的方式(如系统调用、异常等)将执行权转移到内核态,从而让操作系统内核为其执行特定的任务。
所以操作系统究竟是个啥?
我们狭隘的将操作系统视为中断其实也可以!