热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

Linux嵌入应用:ARM体系结构的技术特征

文章标题:Linux嵌入应用:ARM体系结构的技术特征。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

  在开发设计第一个ARM芯片时,当时的一些机器如Digital PDP-8、Cray-1和IBM 801在设计时早就提出了RISC的概念,并且在其后发展中有了许多RISC的特征,但RISC惟一的例子仍只有Berkeley的RISC I和II及Stanford的MIPS(Microprocessor without Interlocking Pipeline Stages, 无互锁流水线处理器),而它们当时仅仅用于教学和研究。ARM处理器是第一个为商业用途而开发的RISC微处理器。ARM所采用的体系结构,对于当时的RISC体系结构既有继承,又有抛弃,即完全根据实际设计的需要仔细研究,没有机械照搬。arm的体系结构中采用了若干Berkeley RISC处理器设计的特征,但也放弃了其他若干特征。这些采用的特征有:

  ·Load/Store体系结构

  ·固定的32位指令

  ·3地址指令格式

  在Berkeley RISC设计采用的特征中被arm设计者放弃的RISC的技术特征有:

  ·寄存器窗口

  在早期的RISC中,由于Berkeley原型机中包含了寄存器窗口,使得寄存器窗口的机制密切地伴随着RISC的概念,成为一般RISC的一大特征。Berkeley RISC处理器的寄存器堆中使用寄存器窗口,使得任何时候总有32个寄存器是可见的。进程进入和退出都访问新的一组寄存器,因此减少了因寄存器保存和恢复导致的处理器和存储器之间的数据拥塞和时间开销。这是拥有寄存器窗口的优点。但是寄存器窗口的存在以大量寄存器占用较多的芯片资源为代价,使得芯片成本增加,因此在ARM处理器设计时未采用寄存器窗口。尽管在arm中用来处理异常的影子(shadow)寄存器和窗口寄存器在概念上基本相同,但是在异常模式下对进程进行处理时,影子寄存器的数量是很少的。

  ·延迟转移

  由于转移中断了指令流水线的平滑流动而造成了流水线的“断流”问题,多数RISC处理器采用延迟转移来改善这一问题,即在后续指令执行后才进行转移。在原来的arm中延迟转移并没有采用,因为它使异常处理过程更加复杂。

  ·所有指令单周期执行

  arm被设计为使用最少的时钟周期来访问存储器,但并不是所有指令都单周期执行。如在低成本的ARM应用领域中普遍使用的ARM7TDMI,数据和指令占有同一总线,使用同一存储器时,即使最简单的Load和Store指令也最少需要访问2次存储器(1次取指令,1次数据读/写)。当访问存储器需要超过一个周期时,就多用一个周期。因此,并不是所有ARM指令都在单一时钟周期内执行的,少数指令需要多个时钟周期。高性能的arm9TDMI使用分开的数据和指令寄存器,才有可能把Load和Store指令的指令存储器和数据访问存储器操作单周期执行。

  最初的ARM设计最关心的是必须保持设计的简单性。ARM的简单性在ARM的硬件组织和实现上比指令集的结构上体现得更明显。把简单的硬件和指令集结合起来,这是RISC体系的思想基础;但是ARM仍然保留一些CISC的特征,并且因此达到了比纯粹的RISC更高的代码密度,使得arm在开始时就获得其功率效率和较小的核面积的优势。


推荐阅读
  • 本文介绍了如何在Java中使用`JCheckBoxMenuItem.setMnemonic()`方法,并提供了多个实际应用的代码示例。 ... [详细]
  • 开发日志:Git连接异常处理
    记录了一次多台开发机(Windows与MacOS)同时出现GitHub SSH连接超时及权限拒绝的问题,并详细描述了解决过程及最终解决方案。 ... [详细]
  • 深入解析 Git 代码提交流程及常见问题处理
    本文详细阐述了使用 Git 进行代码提交的具体步骤,并提供了遇到常见问题时的解决方案,旨在帮助开发者更加高效地管理代码。 ... [详细]
  • 本文介绍了如何使用 Git 命令来忽略那些已经提交或者从远程仓库拉取但在本地进行了修改的文件,避免这些文件在不必要的时候被再次提交。 ... [详细]
  • 本文详细介绍了`org.kie.workbench.common.stunner.bpmn.definition.UserTask.getGeneral()`方法的使用场景和具体实现,并提供了多个实际代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文介绍了如何通过源码编译和PECL命令来升级Swoole扩展,详细记录了可能遇到的问题及解决方案。 ... [详细]
  • 本文介绍如何使用Java实现AC自动机(Aho-Corasick算法),以实现高效的多模式字符串匹配。文章涵盖了Trie树和KMP算法的基础知识,并提供了一个详细的代码示例,包括构建Trie树、设置失败指针以及执行搜索的过程。 ... [详细]
  • 本文详细解析了在使用Git进行代码推送时常见的两个错误——'fetch first'和'non-fast-forward',并提供了有效的解决方案。通过理解这些错误背后的原因,开发者可以更加高效地管理代码版本。 ... [详细]
  • 本文详细介绍了Java库中com.badlogic.gdx.scenes.scene2d.Stage类下的mouseMoved()方法,并提供了多个实际应用场景的代码示例,帮助开发者更好地理解和使用这一方法。 ... [详细]
  • 本文探讨了Git与SVN在版本控制上的区别,重点介绍了Git中特有的工作流和文件状态管理机制。 ... [详细]
  • 图神经网络模型综述
    本文综述了图神经网络(Graph Neural Networks, GNN)的发展,从传统的数据存储模型转向图和动态模型,探讨了模型中的显性和隐性结构,并详细介绍了GNN的关键组件及其应用。 ... [详细]
  • 在现代移动应用开发中,尤其是iOS应用,处理来自服务器的JSON数据是一项基本技能。无论是使用Swift还是PHP,有效地解析和利用JSON数据对于提升用户体验至关重要。本文将探讨如何在Swift中优雅地处理JSON,以及PHP中处理JSON的一些技巧。 ... [详细]
  • 多项目环境下的代码复用策略
    在前端开发中,面对多个并行项目的场景,如何有效地实现代码复用成为了一个重要的议题。本文将探讨一种利用npm包管理来实现跨项目组件共享的方法。 ... [详细]
  • 本文详细介绍了Java中com.sun.xml.bind.v2.runtime.XMLSerializer类下的childAsRoot()方法,并提供了多个实际应用的代码示例,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 本文将指导你如何通过自定义配置,使 Windows Terminal 中的 PowerShell 7 更加高效且美观。我们将移除默认的广告和提示符,设置快捷键,并添加实用的别名和功能。 ... [详细]
author-avatar
肥姐PK老赖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有