操作系统中的多任务处理与POSIX标准详解
1. 协作式与抢占式多任务处理
在多任务处理中,协作式和抢占式是两种重要的方式。在某些项目里,若将栈置于相对较慢的内存中,但数据缓存处于活跃状态,与抢占式多任务处理方法相比,由于栈需求较低,会观察到显著更少的缓存未命中情况。实际上,栈在大部分时间里通常会被完全缓存,这能显著减少执行时间。
无论是哪种多任务处理类型,都必须考虑栈偏移和中断的发生。任务内函数调用的子函数也不例外。实际上,函数随时间的栈分配并非矩形,而更像是大城市的天际线,这种锯齿状曲线源于被调用的所有子函数及其子函数等。
1.1 确保数据一致性
数据一致性是指组织对不同软件部分共享资源的访问,确保资源始终处于定义明确且正确的状态。在任何时刻,当前执行的代码可能被其他也访问同一资源的代码中断,要实现数据一致性并非易事。
临时禁用中断是一种可能的解决方案,但它会阻塞代码的其他部分,包括那些根本不访问该资源且可能需要尽快执行的部分。此外,临时禁用中断的保护机制前提是开发者认识到某段代码需要保护,而这种需求并非总是显而易见的,软件开发者每年都会花费数千小时来调查和理解因缺少保护机制而导致的数据一致性问题。
在基于模型的软件开发中,资源或数据的访问在建模工具中指定,代码生成器和驱动层确保数据一致性。许多环境(如AUTOSAR RTE)在生成代码前会分析代码的依赖关系,包括分析代码的哪些部分访问哪些数据、在哪些任务中运行、任务的优先级以及是否可能发生抢占式中断。若确定会发生,会创建数据副本,并在受影响任务的开始和/或结束时进行同步。这些副本需要额外的RAM,同步也需要额外的运行时间。
如果使用协作式多任
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



