像特斯拉的 AutoPilot 这样的系统如何跟上不断变化的多进程请求?
How can a system like Tesla’s AutoPilot keep up with constant changing requests for multiple process?
作为一名软件开发人员,我试图了解一个系统如何能够足够快、足够有效地工作,并以如此精确的方式持续、完美地运行,以处理系统中需要考虑的所有正在进行的操作,例如特斯拉 AutoPilot(自动驾驶汽车系统)...
在一辆以 65 MPH 行驶的汽车中,如果一只鹿跑到汽车前面,它会立即做出调整以保护车辆免受碰撞 - 同时必须跟上所有其他传感器的请求不断发射同时在微毫秒内进行可能的操作,而不会跳过一个节拍。
所有这些是如何系统地完成的?处理报告的速度如此之快,以至于它几乎可以有意识地做出响应(无需请求支持)?
我对特斯拉代码一无所知,但我阅读了其他实时代码并分析了其中的时间差。一个基本的想法是,如果你每毫秒检查一些东西,你总是会在一毫秒内响应变化。最简单的实时系统有一个 "cyclic executive" 围绕一个重复的时间表构建,该时间表告诉它什么时候做什么,经过计算,以便在所有可能的情况下,所有必须处理的事情都在其截止日期内处理。传统上你在这里担心 cpu 时间,但不一定。我查看的系统受称为 1553 的串行总线时间表的影响最大(https://en.wikipedia.org/wiki/MIL-STD-1553)- 几乎没有足够的时间按时发送和接收所有内容。
这有点太简单了,因为它无法处理必须非常快速处理的罕见事件,例如对中断的响应。聪明的中断处理方案并没有你想象的那么多优势,因为通常有一种罕见的最坏情况使得聪明的方案表现不及循环执行,实时代码必须在最坏的情况下工作,但在练习你确实需要一些中断处理程序和高优先级进程,它们必须按需 运行 和低优先级进程,当其他东西需要截止日期时可以忽略,否则将是 运行。有多种方案和方法论证这些更复杂的系统总是会在截止日期前完成。其中最著名的之一是 https://en.wikipedia.org/wiki/Rate-monotonic_scheduling. See also https://en.wikipedia.org/wiki/Earliest_deadline_first_scheduling.
一个已经在现实生活中使用过的开源实时操作系统是 https://en.wikipedia.org/wiki/RTEMS。
作为一名软件开发人员,我试图了解一个系统如何能够足够快、足够有效地工作,并以如此精确的方式持续、完美地运行,以处理系统中需要考虑的所有正在进行的操作,例如特斯拉 AutoPilot(自动驾驶汽车系统)...
在一辆以 65 MPH 行驶的汽车中,如果一只鹿跑到汽车前面,它会立即做出调整以保护车辆免受碰撞 - 同时必须跟上所有其他传感器的请求不断发射同时在微毫秒内进行可能的操作,而不会跳过一个节拍。
所有这些是如何系统地完成的?处理报告的速度如此之快,以至于它几乎可以有意识地做出响应(无需请求支持)?
我对特斯拉代码一无所知,但我阅读了其他实时代码并分析了其中的时间差。一个基本的想法是,如果你每毫秒检查一些东西,你总是会在一毫秒内响应变化。最简单的实时系统有一个 "cyclic executive" 围绕一个重复的时间表构建,该时间表告诉它什么时候做什么,经过计算,以便在所有可能的情况下,所有必须处理的事情都在其截止日期内处理。传统上你在这里担心 cpu 时间,但不一定。我查看的系统受称为 1553 的串行总线时间表的影响最大(https://en.wikipedia.org/wiki/MIL-STD-1553)- 几乎没有足够的时间按时发送和接收所有内容。
这有点太简单了,因为它无法处理必须非常快速处理的罕见事件,例如对中断的响应。聪明的中断处理方案并没有你想象的那么多优势,因为通常有一种罕见的最坏情况使得聪明的方案表现不及循环执行,实时代码必须在最坏的情况下工作,但在练习你确实需要一些中断处理程序和高优先级进程,它们必须按需 运行 和低优先级进程,当其他东西需要截止日期时可以忽略,否则将是 运行。有多种方案和方法论证这些更复杂的系统总是会在截止日期前完成。其中最著名的之一是 https://en.wikipedia.org/wiki/Rate-monotonic_scheduling. See also https://en.wikipedia.org/wiki/Earliest_deadline_first_scheduling.
一个已经在现实生活中使用过的开源实时操作系统是 https://en.wikipedia.org/wiki/RTEMS。