中断导致操作系统改变CPU的行为,从运行当前任务改变到运行一个内核例程。这种操作在通用系统上经常发生。

当中断发生的时候,系统需要保存当前CPU上的进程的上下文(context),以便它可以在处理完成时恢复该上下文,本质上是暂停进程,然后恢复它。而这个上下文则是由进程的PCB(进程控制块)来表示的。它包含CPU寄存器的值,进程状态(new、ready、waiting等)和内存管理信息。一般来说,我们执行一个针对当前的CPU状态的状态保存(state save),无论是内核还是用户模式,然后是状态恢复(state restore),来恢复业务操作。

当CPU切换到另一个进程需要保存当前进程的状态,并恢复另外一个进程的状态。这一任务就被称为上下文切换(context switch)。当上下文切换时候,内核会保存旧进程的上下文到它的PCB中,然后加载调度执行的新进程的已保存的上下文。

上下文切换时间是纯粹的开销,因为系统切换时没有做什么有用的工作。切换速度因机器而异, 它依赖于根据内存的速度,必须被复制寄存器的数量 、以及是否有特殊指令的存在(例如加载或存储所有寄存器的单独指令)。一般速度是几毫秒。、

上下文切换时间高度依赖于硬件支持:例如,一些处理器(例如Sun Ultra SPARC)提供多个寄存器。这里的上下文切换只需要将指针更改为当前寄存器集。当然,如果活跃的进程数超过寄存器数目,系统就会像以前一样将寄存器数据复制到内存中。而且,操作系统越复杂,切换的事件需要做的工作也就越多。

移动端多任务处理

由于对移动设备的限制,早期版本的IOS操作系统没有提供用户应用程序多任务处理;只有一个应用程序在前台运行,所有其他用户应用程序都被挂起。操作系统任务是多任务的,因为它们是由苹果编写的,并且表现得很好。然而,从IOS 4开始,Apple现在为用户应用程序提供了一种有限的多任务处理形式,因此允许单个前台应用程序与多个后台应用程序同时运行。(移动设备上,前台应用程序是当前打开并显示在显示屏上的应用程序。后台应用程序保留在内存中,但不占用显示屏幕。)IOS 4编程API支持多任务处理,因此允许进程在后台运行而不被挂起。但是,它是有限的,只能用于有限数量的应用程序类型,包括的应用程序有:

  • 运行单一的、有限长度的任务(例如完成从网络下载内容);

  • 接收事件发生的通知(例如新的电子邮件消息);

  • 具有长时间运行的后台任务(例如音频播放器)。

由于电池寿命和内存使用问题,苹果可能会限制多任务处理。CPU当然有支持多任务处理的功能,但苹果选择不利用其中的一些功能,以便更好地管理资源使用。

Android不会对在后台运行的应用程序类型设置此类限制。如果应用程序需要在后台处理,那么应用程序必须使用一个service(服务),这是一个单独的应用程序组件,它代表后台进程运行。考虑一个流音频应用程序:如果应用程序移动到后台,服务将继续以后台应用程序的名义将音频文件发送到音频设备驱动程序。实际上,即使后台应用程序被挂起,服务也会继续运行。服务没有用户界面,并且内存占用很小,因此在移动环境中提供了一种高效的多任务处理技术。

results matching ""

    No results matching ""