当我到处都阅读基于操作系统的书籍时,它写到从内存和I \ O(子系统)中获取数据非常昂贵,考虑到时间限制并且开销很高,这就是为什么某些硬件制造商提供了一些其他方式来访问它们,例如考虑到这个事实(使用RTDM)进行比较,ARM7 some ISAs例如(加载和存储)和为其制作的设备驱动程序RTOS也属于不同的类型GPOS,因此,如果这一切都是正确的,那么我想知道关于该事实的下层细节,为什么该内存和i \ o交易很昂贵。
由于涉及多个步骤,因此从内存和I / O设备中检索数据是“昂贵的”,并且每个步骤都会增加少量延迟。这是从内存中检索值所需步骤的通用示例:
1)从程序的存储空间中的数据虚拟地址开始
2)将虚拟地址转换为内存物理地址
3)检查缓存中的值
4)如果数据不在高速缓存中,请从内存控制器发出请求
5)内存控制器将物理地址分为行,列,存储区和位地址
6)内存控制器从DRAM读取数据-从DRAM实际获取数据的动作非常复杂,并且有自己的一系列步骤,这些步骤可能会花费一些时间。有关DRAM的信息,请参见Wikipedia条目。
7)将数据返回到CPU
请记住,不同硬件单元之间进行的每一个通信都是通过总线完成的,总线的时钟速度始终低于CPU的额定频率。
甚至这一系列步骤也极大地简化了事情。例如,第2步从查找translation-aside-buffer (TLB Wikipedia条目)开始,但是如果所需的翻译不再位于缓冲区中,则必须执行第二次内存获取只是为了获得物理内存。所请求数据的地址。
另外,您的系统中只有太多的可用RAM,因此如果您有一段时间没有使用过的数据,则可能已将所需的数据从RAM中删除并临时存储在硬盘上(称为“交换”)。现在,您认为简单的RAM访问实际上是首先进入硬盘。顺便说一句,这种交换也可能发生在将虚拟地址转换为物理地址的表上,因此在最坏的情况下,检索一段时间未使用的单个字节实际上可能会变成两次磁盘访问。
说到硬盘,I / O设备是一个完全不同的故事。该术语本身涵盖了各种各样的设备:RS232串行端口,USB,网络,外部CD / DVD读取器,外部硬盘和固态驱动器,列表不胜枚举。它们各自具有不同的属性和功能,从而使其比其他速度更快或更慢,但是关键是由于它们自己的属性(例如,等待硬盘拼盘旋转),它们都不提供CPU可以消耗数据的最快速度。 ),总线速度和数据通过的转换层数的物理限制。因此,每次您的CPU从I / O设备发出请求时,接收答复之前可能要经过数十,数百甚至数千个时钟周期。
您的程序可能不得不等待来自这些来源的答复的时间,这就是为什么它们被认为“昂贵”的原因。