linux和RTOS架构区别

一、应用场景不同

现阶段单片机的内核有cortex-M3或者cortex-A7等,一般M3内核主要用来移植一些轻量级操作系统,例如FreeRTOS,rtthread等,但是A7内核一般会用来移植linux操作系统,问题来了,我该怎么知道我要用什么系统了。

linux:

  • Cortex-A7 :是为计算 而生的平台,追求吞吐量,为运行大型操作系统和复杂应用提供基础。平均速度快,但最坏情况下的延迟很高且不可预测。
  • 比喻:一个城市的管理员,它的目标是让整个城市繁荣稳定,能同时处理无数任务,保证每个任务最终都能得到处理,但不保证某个紧急任务一定能被立即处理(内核的"不可抢占性" )。

RTOS​:

  • Cortex-M3 :是为控制 而生的大脑 ,追求实时、高效、低成本地控制硬件。访问内存的速度是固定且可预测的。
  • 比喻:一个精确的自动驾驶仪 。它的目标单一而极端:保证某个特定任务必须在绝对确定的时间点内完成,毫秒不差。

二、读写指令架构不同

传统单片机(如Cortex-M系列,无DDR,只有SRAM和Flash)

  1. PC指针指向Flash中的指令i++(假设i是全局变量)。

  2. CPU从Flash中取出指令并解码,发现需要操作变量i。

  3. 访问SRAM

  • 读取阶段:CPU直接访问SRAM中i的地址,将当前值(例如5)加载到寄存器(如R0)。
  • 计算阶段:CPU在寄存器中执行R0 = R0 + 1(现在R0=6)。
  • 写入阶段:CPU将R0的值写回SRAM中i的地址。
    应用处理器(如Cortex-A7,带DDR和缓存)
  1. PC指针指向DDR中的指令i++(指令可能已被缓存到L1指令缓存)。

  2. CPU解码指令,发现需要操作变量i。

  3. 访问数据

  • 缓存查找 :CPU首先检查L1数据缓存(SRAM)中是否有i的值:
    • 缓存未命中:触发"缓存行填充",从DDR中加载i所在的内存块(如64字节)到L1缓存,再读取i的值(较慢)。

    • 缓存命中:直接从L1缓存读取i的值到寄存器(最快)。

    • 计算阶段:CPU在寄存器中完成i+1的计算。

    • 写回数据

      • 新值先写回L1缓存(SRAM),此时DDR中的i可能还未更新。

      • 根据缓存策略(写透/写回),数据可能同步或异步更新到DDR。

总结:

linux系统中平均运行指令的速度肯定比RTOS快,原因就在于从flash取指令是一个特别耗时的过程,虽然linux会将DDR的部分代码段拷贝到SRAM中耗时,但是后续直接在SRAM处理是特别快的。

RTOS中的SRAM :用于存储堆,栈,全局和静态变量区的数据。

Linux中的SRAM :作为CPU和DDR之间的高速缓冲 ,用于存储部分代码段和部分数据,目标是减少访问DDR的次数

DDR :作为主内存,存储所有数据和代码,但CPU不直接访问它,而是通过缓存间接访问。
为什么linux不采用flash作为主存,而采用DDR?

我们在低端芯片中,程序都是存放在flash中的,它的特性是掉电不丢失,但是在高端芯片里面,flash的读写速度已经无法满足现代高性能处理器(如Cortex-A7)对代码执行速度的苛刻要求,因此需要放在一个运行速度更快的存储设备DDR中,它掉电不保存,这也就意味着,我们需要先把程序存储在一个掉电保存的存储介质中,然后在将其加载到DDR中。

三、吞吐速率不同

通过网线传递大量数据,两者的处理方式完全不同

传统单片机(如Cortex-M系列)

1、物理层PHY芯片接收数据

2、MAC层处理与DMA请求,将数据直接从MAC的FIFO中写入到SRAM中

3、 当DMA完成一帧数据的传输后,或者当MAC的接收FIFO达到一定水位时,​中断控制器会产生一个中断信号,通知CPU处理数据

4、 CPU保存当前执行现场的上下文 ​,跳转到预先设置好的中断服务程序,拷贝数据,开始处理
应用处理器(如Cortex-A7)

过程其实和上述大致一样,我主要讲解一下区别

传统方式 ​:每个数据包到达都触发一个中断,CPU马上处理。Linux NAPI ​:第一个包到来触发中断。在中断处理程序上半部 中,​屏蔽进一步的中断 ,并轮询(Poll)网卡一段时间,​一次性收取多个数据包 ,然后再打开中断。它通过牺牲单次处理的实时性,换取了处理海量数据时的整体效率。

支撑linux一次性读取多个数据包的硬件条件是DDR,SRAM的容量小(几KB到几MB),当网络数据洪峰到来时,它的缓冲区一下子就被填满,但是DDR的容量大(几百MB到几GB),所以可以很轻松开辟一个大缓冲区接收数据

四、核心数量不同

Cortex-A7支持 1 到 4 个核心。它的设计初衷就是支持多核配置,以实现更强的并行处理能力。

Cortex-M3只有 1 个核心。它的设计目标是单核的实时控制和低功耗处理。

五、时钟频率不同

Cortex-M3:几十MHz ~ 几百MHz

Cortex-A7:几百MHz ~ 多核GHz

时钟频率:CPU执行操作的基本节拍

指令周期:CPU从取出一条指令到执行完这条指令 所需要的全部时间。(Cortex-M3 没有" 指令周期**"概念** ,​大多数指令执行只需 1 时钟周期 ​(如 ADD, MOV, LDR, STR))​

机器周期: CPU完成一个最基本总线操作 ​(如一次内存读)所需的时间。(Cortex-M3没有"机器周期"概念 ,现代CPU的SRAM与CPU同频工作,内存访问无需等待,因此"总线操作时间"直接等于时钟周期。所有操作直接用时钟周期计量,无需"机器周期"作为中间层)

在 Cortex-M3 中,​时钟周期 ≈ 机器周期 ≈ 指令周期 ,因为​​"机器周期和指令周期已淘汰,所有时间直接以时钟周期计算"​
例如:

i++;是一条代码,编译器会将i++编译成下述指令

LDR R0, =0x20000100 ; 将i的地址加载到R0(一个时钟周期,可能被优化掉)

LDR R1, [R0] ; 从内存加载i的值到R1(一个时钟周期)

ADDS R1, R1, #1 ; R1 = R1 + 1(一个时钟周期)

STR R1, [R0] ; 将R1的值存回内存(一个时钟周期)

六、专业名词讲解

(1)SRAM Static Random-Access Memory,中文是静态随机存取存储器。静态":指的是只要保持通电,它里面存储的数据就能一直"稳定地"保存着,"随机存取":指的是它可以随时读取或写入任何地址的数据,

(2)DRAM 的全称是 Dynamic Random-Access Memory,中文是动态随机存取存储器 ,动态"详解 数据被写入后,就像用铅笔写在文件架上的便签 ,即使不停电,字迹也会慢慢变淡直至消失(电容电荷泄漏) 。因此,必须有一位助理定期地、一遍遍地 把所有便签重新描一遍(刷新),才能保住数据。计算机的主内存(我们常说的8GB、16GB内存就是它)。

(3)DDR 的全称是 Double Data Rate Synchronous Dynamic Random-Access Memory 。 中文翻译为:双倍数据速率同步动态随机存取存储器,它指的是在每个时钟周期(Clock Cycle)的 上升沿(Rising Edge) 和 下降沿(Falling Edge) 各可以传输一次数据,本质上还是DRAM,只是速度是他的两倍。

相关推荐
情深不寿3174 小时前
序列化和反序列化
linux·网络·c++·tcp/ip
青草地溪水旁5 小时前
linux修改权限命令chmod
linux·chmod
羑悻的小杀马特6 小时前
从Cgroups精准调控到LXC容器全流程操作:用pidstat/stress测试Cgroups限流,手把手玩转Ubuntu LXC容器全流程
linux·服务器·数据库·docker·lxc·cgroups
好运连连9997 小时前
ubuntu promethus+grafana监控多台服务器
linux·ubuntu·grafana
zjj5877 小时前
服务器音频查找
服务器·windows·音视频
Mr_Xuhhh7 小时前
Qt中UDP回显服务器和客户端
服务器·qt·udp
额呃呃7 小时前
阻塞,非阻塞,同步,异步的理解
linux·服务器·网络
LLLLYYYRRRRRTT7 小时前
云计算与服务器
运维·服务器·云计算