分水岭是抢占点。
总有那么些事情是更着急的,所以它们必须抢占那些不那么着急的事情,抢占--因为CPU有限,如果每个任务都拥有一个CPU,那么只要设计通讯通路就可以了,如果每个单位的CPU足够小,那就到了硬逻辑--FPGA,但大多数时候你只有一个CPU。
中断--使用一个抢占点的系统,应该就算是裸奔吧。在中断代码中,可以用来完成很多任务,如果CPU支持更复杂的中断优先级算法,那就可以用来做更复杂的事情。但是,如果把太多的任务放到中断代码中,过于拥挤就会出现问题--本质上还是时间的矛盾。
把矛盾向上推,构造另一条抢占线--任务,应该就是算是OS吧。在这个缓冲的空间中,为解决时间的矛盾提供了充裕得多的回旋余地,但系统复杂性也随之提高。OS还不只这些--CPU都瓜分了,顺便把系统资源也都瓜分了吧--这是一个任务的世界。
裸奔的系统很真实,很纯粹,OS的系统很温暖,很缥缈。基于一个中断抢占点,徒手构造状态机和任务调度,和 把OS完全安家到一片全新的CPU,自己读着芯片手册写完BSP和驱动,哪一个更容易,哪一个更难?
需求驱动,催生出体系的任务。把这些任务一字排开,有的是从管和门穿过你的系统,把它们分配给硬件,要求太高的逻辑,分配给数字电路,其它的交给软件。
把剩下的任务再次排开,这里有三个筐,中断级,任务调度级,用户级,把剩下的任务用这三个筐盛住,就可以收钱走人了。先把任务全部倒到用户级,如果有的很着急,就把他挪到中断级,如果还有很急的,就继续挪。挪动一个任务,在用户级就要产生相应的调度来配合,因为这是一次割裂,而割裂是在一条直线(CPU)上进行,多个割裂相互交叠,必须用状态来区分和配合。
如果装下了,收工。如果中断级用完了,而着急的还存在,而且还夹缠不清,那就把一些装到任务调度级,这也是一种割裂--三断的割裂--原来那么些苛刻的任务,为了抢夺CPU来兑现自身,不惜把自己一折而三,这样做可以把这些任务用三个篮子盛住,代价是你必须用配合的代码来弥补因折断而产生的割裂,以维系来自于需求的任务的完整性,搞来搞去,OS产生了。
天暖就裸奔,天冷就加衣,没人会说什么。天冷裸奔,那是身体好,天暖披棉裘,那是有钱,也不应该说什么。
|