对很多人来说,多任务并行的机制是神秘的,包括很多长期在操作系统下开发应用程序的人来说也是如此。
回顾一下从普通的单任务顺序执行到多任务并行执行的演变过程,有利于打破“多任务并行”的神秘感。
其实多任务并行机制一点也不复杂,从技术上说,它就是程序流折断加现场(在操作系统里叫上下文)保护。这两部分技术不仅谈不上高深,甚至无法称其为“技术”,因为几乎每个开发者每天都在跟它们打交道:比较中断响应、调子程序。
那么它到底神秘在哪里呢?在于程序流反向控制机制,所谓程序流反向控制指的是,由子函数决定父函数的执行流程。对于通常的程序来说,总是由父函数决定何时调用哪一个子函数的;而在并行多任务系统里,是由一个被称为任务调度器的子函数决定着何时调用哪一个父函数!
需要澄清一点是,这种子函数对父函数的调用并不是任意的,它只能将流程指向父函数的折断点,也就是最近一次调用任务调度器时的位置。原因很简单,因为子函数根本不知道应该从父函数的哪个地方开始执行,除非它保存了父函数在折断时的上下文。
1