【杂谈】操作系统如何有效地掌控CPU

操作系统的本质

操作系统本质上也是一个进程,它与其他用户进程共享CPU。与普通进程不同的是,它具有硬件的所有访问权限。而用户进程默认对硬件是没有任何访问权限的,它只能通过系统调用,委托操作系统来完成这些操作。

问题

当操作系统在创建完一个进程后,会将CPU的控制权交给这个新创建的进程。上下文切换,大家应该都知道。操作系统要做的就是停止一个进程,然后再启动另一个进程。很简单是吧,那么问题来了,操作系统的程序都不在运行了,它已经把CPU的使用权给其他进程了,怎么对这个进程进行控制呢?

协作方式:等待系统调用

在过去的某些系统中曾经就使用过这种方式,在这种情况下,操作系统信任用户进程可以正确地执行,不会出幺蛾子。

以下两种情况出现时,CPU会恢复操作系统进程:

注:trap handler和exception handler是在电脑开机的时候告知CPU的

操作系统就恢复了对CPU的控制,在这个时候它就可以决定要不要进行上下文切换。

缺点:

1.只能被动地等待用户进程进行System Call或者出错,操作系统才能恢复对CPU的控制

2.如果用户进程没有进行I/O操作,进入死循环,则操作系统永远无法恢复控制,唯一的解决方法就是重启

非协作方式:定时器中断

以上方式有明显的缺点,为了让计算机提供稳定的服务,操作系统必须把对用户进程进行把控。而要想把控进程则必须保持对CPU的控制权。

如果不能让在CPU内部执行的程序让出CPU,那能不能从外部侵入,打断CPU的执行呢?

可以,早期的操作系统开发人员就想到用定时器中断的方式来处理,定时器是单独的一个硬件设备,它可以独立运行。每隔一段时间就给CPU一个中断信号,打断它的执行。

但是打断归打断,怎么恢复操作系统呢?

和上面一样,CPU在开机的时候会被告知一个interrup handler,当中断出现的时候,它的处理方式就是恢复操作系统进程。那这个时候OS的程序就又可以继续运行了。

准备工作

综上,针对这个定时器中断的方案,操作系统在电脑开机的时候,要做这几件事,一个是开启定时器,设定间隔时间。另一个是告知CPU,让它知道当定时器中断产生的时候该执行什么代码。

注:时间片的大小一般是定时器中断时间的倍数。所以当某次因中断恢复OS的时候,刚好可以执行上下文切换。

posted @ 2019-05-01 12:02  猫毛·波拿巴  阅读(1150)  评论(0编辑  收藏  举报