嵌入式养成计划-49----ARM--计算机相关理论--ARM相关内容

一百二十三、计算机相关理论

123.1 计算机的组成

  • 目前的计算机都还是 冯·诺依曼体系 ,也就是由:输入、输出、运算器、存储器、控制器,这个五个部分构成。
  • 输入:Input,常见的输入设备,比如鼠标,键盘啥的
  • 输出:Output,常见的输出设备,比如音响(喇叭),显示器啥的
  • 运算器:ALU(Arithmetic Logical Unit),可以进行算术运算和逻辑运算,就是用来计算的
  • 存储器:用来存放数据的东西,存储器的体系为金字塔型,越往下读写速率越慢,存储空间越大,每 bit 价格越便宜,从上往下依次是
    • 最上面是 register(寄存器),
    • 然后是 L1cache、L2cache、L3cache(一般是三级cache,有些体系的计算机可能会用两级cache,早期的计算机有些是没有cache,有些是一级cache)、
    • main memory(主存,也被称为内存,就是内存条的那个内存)、
    • Auxiliary storage(辅存,一般是外接的存储器,比如硬盘,之前还有磁盘、磁带、光盘啥的)
  • 控制器:CU(Control Unit),其实就是个有限状态机,会根据每条指令的二进制代码,以及里面的状态码去分支执行不同的操作,这些都是逻辑门进行控制的。所以并没有啥译码功能,也就是根据传过来的不同指令去开不同的通道执行不同的功能罢了

在这里插入图片描述

123.2 程序编译的过程

  • 预处理,编译,汇编,链接
    预处理:将程序中所有以#开头的内容展开到当前文件中 gcc -E 1.c -o 1.i
    编译:检查语法错误,生成汇编程序 gcc -S 1.i -o 1.s
    汇编:将汇编程序编译为二进制程序 gcc -c 1.s -o 1.o
    链接:将程序中用到的一些库链接到程序中,生成二进制可执行文件 gcc 1.o -o a.out
    
  • 为啥需要编译:
    • CPU只能识别二级制的0和1,但其实它0和1都不识别,只能识别高电位和低电位,因此具象为0和1。
    • 想让CPU按照我们写的高级语言代码执行,那就需要将高级语言逐步转化为机器码,因此需要先生成汇编文件,然后根据汇编文件生成对应的二进制文件。
    • 而不同体系的CPU的汇编代码也怎么一致,因为里面CPU的架构不一样。
      在这里插入图片描述

123.3 指令与指令集

  • 指令有机器指令和汇编指令之分,不同体系的CPU之间它们的风格和内容也不一样。
    • 机器指令:由二进制0和1组成的代码,计算机可以通过0/1转换为的高电位低电位进行识别执行;RISC风格指令为定长的,CISC风格指令是变长的。
    • 汇编指令:由机器指令进行符号化抽象的结果。机器码的0和1不方便人的记忆与操作,故符号化一下方便人的使用。
  • 指令集:指令的集合,指令集中一般需要包含 运算类指令、程序流控制类指令、存储器访问类指令 这三种。

123.4 RISC(Reduced Instruction-Set Computer 精简指令集)和CISC(Complex Instruction Set Computer 复杂指令集)

123.4.1 RISC

  • 简介:RISC的指令系统相对简单,它只要求硬件执行很有限且最常用的那部分指令,大部分复杂的操作则使用成熟的编译技术,由简单指令合成。目前在中高档服务器中普遍采用这一指令系统的CPU,特别是高档服务器全都采用RISC指令系统的CPU。
    精简指令集是选取了一些比较简单、使用频率比较高的指令组成的指令集。
  • 特点:
    1. 指令定长:即每条机器指令所占的 bit 长度固定。
    2. 执行周期固定:一般是按照流水线的模式执行指令。比如 MIPS 的 五级流水线模型 为IF、ID、EX、MEM、WB,分别是 取指令、译码、执行、访问存储器、写回。有些指令可能不会执行某些周期,但是也要经过这一周期,就跟小学生排队打菜一样,一荤 一素 一米 一汤 一水果,这五个中某些可以不要,但是都要从前往后经过这些窗口。
    3. 基于精简指令集设计的CPU核心成本、功耗、体积更低,但是实现的功能也相对简单。

123.4.2 CISC

  • 简介:在CISC微处理器中,程序的各条指令是按顺序串行执行的,每条指令中的各个操作也是按顺序串行执行的。顺序执行的优点是控制简单,但计算机各部分的利用率不高,执行速度慢。其实它是英特尔生产的x86系列(也就是IA-32架构)CPU及其兼容CPU,如AMD、VIA的。即使是现在新起的X86-64(也被称为AMD64)都是属于CISC的范畴。
    CISC早期的计算机部件比较昂贵,主频低,运算速度慢。为了提高运算速度,人们不得不将越来越多的复杂指令加入到指令系统中,以提高计算机的处理效率,这就逐步形成复杂指令集计算机体系。
  • 特点:
    • 指令长度不固定:比如说 x86 架构,最短的指令NOP,只有一个 byte,而最长的指令却足有 15byte。
    • 执行周期不固定:每条指令中的各个操作也是按顺序串行执行的,因为最长的指令所需要的周期比较长,最短的比较短,所以就没有让二者看齐,不然会造成最长的指令没有执行完足够的功能,或者最短的指令浪费太久的时间。
    • 复杂指令集设计的CPU核心实现的功能更为复杂,但是功耗、成本都会更高。

123.5 流水线模型

  • 此处以MIPS的五级流水线为例
    在这里插入图片描述 在这里插入图片描述
    在这里插入图片描述
  • 忽略第一个图里面说的单周期数据通路,多周期数据通路是在上面再接几根线,保证数据的读写不会错乱,就先不上图了

一百二十四、ARM相关内容

  • ARM的流水线更抽象,直接整合为三个阶段:取指令,译码,执行。执行里面包括了访问存储器和写回。。。只能说,挺无奈

124.1 ARM 发展史

直接上链接:ARM发展史

124.2 ARM架构

  • 不同版本的指令集就是不同的架构
ARMV1-ARMV6:已经被淘汰
ARMV7架构:32位架构,支持32位指令集
ARMV8架构:64位架构,支持64位指令集,并且向下兼容32位指令
ARMV9架构:64位架构,支持64位指令集

124.3 ARM内核

  • 基于不同的ARM架构设计出来的不同的处理器核心叫做不同的ARM内核
arm7/arm9/arm11
cortex-A7			ARMV7
cortex-A53			ARMV8
cortex-A55			ARMV8
cortex-A77			ARMV8
cortex-A78			ARMV8
cortex-x1			ARMV8
cortex-A710			ARMV9
cortex-A510			ARMV9

124.4 SOC(system on chip 片上系统)

  • ARM公司只进行技术授权。将自己的IP授权给各个半导体公司。半导体公司根据ARM的授权,在CPU核心外围设计了一些外围电路和设备,集成在一个芯片上,这个芯片就被成为SOC。
  • SOC = CPU + 外设 + 总线
公司			SOC名称				内核			架构
ST				STM32MP157A			cortex-A7		ARMV7
三星			S5P6818				cortex-A53		ARMV8
海思			麒麟9000			cortex-A77		ARMV8
高通			骁龙888				cortex-x1		ARMV8

124.5 ARM的产品分步

124.5.1 Cortex-A系列

  • Cortex-A 系列的核心是 ARM 处理器中性能最强的、最完善的处理器。属于高端处理器
  • 在基于 Cortex-A 处理器为核心的开发板上可以搭载 linux / 鸿蒙 等标准化操作系统
    在这里插入图片描述

124.5.2 Cortex-R系列

  • Cortex-R 系列处理器追求系统的实时性能。对数阶的实时性要求高的场景下使用 Cortex-R 系列处理器汽车、军工
    在这里插入图片描述

124.5.3 Cortex-M系列

  • 属于 ARM 处理器中比较低端的芯片处理器,工作主频一般在 24M-256MHz 之间
  • Cortex-M 系列处理器一般不跑操作系统,主要执行一些裸机程序
  • Cortex-M 系列处理器可以搭载一些轻量级的实时系统 FreeRtos
    在这里插入图片描述

124.5.4 SecurCore系列

  • 用于对安全性能要求比较高的场景
    在这里插入图片描述

124.6 ARM数据约定

  • 一些数据大小的表述
ARM 约定:
Byte			8 bits.
Halfword		16 bits.
Word			32 bits.
Doubleword		64 bits.
  • 大部分ARM core 提供:
    ARM 指令集(32-bit)
    Thumb 指令集(16-bit )
  • Cortex-A处理器
    16位和32位Thumb-2指令集
    16位和32位ThumbEE指令集

124.7 ARM的工作模式

  • ARM 有7种基本工作模式:
User	:	非特权模式,大部分任务执行在这种模式FIQ		:	当一个高优先级(fast) 中断产生时将会进入这种模式
IRQ		:	当一个低优先级(normal) 中断产生时将会进入这种模式
Supervisor	:	当复位或软中断指令执行时将会进入这种模式
Abort	:	当存取异常时将会进入这种模式
Undef	:	当执行未定义指令时会进入这种模式System	:	使用和User模式相同寄存器集的特权模式

在这里插入图片描述

  • Cortex-A特有模式:
    Monitor : 是为了安全而扩展出的用于执行安全监控代码的模式;也是一种特权模式。

HYP:虚拟化模式,当一个硬件上运行两种OS内核时进入这种模式。

124.8 存储器

124.8.1 存储器的金字塔模型

越往下读写速率越慢,存储空间越大,每 bit 价格越便宜,从上往下依次是,

  • 最上面是 register(寄存器),
  • 然后是 L1cache、L2cache、L3cache(一般是三级cache,有些体系的计算机可能会用两级cache,早期的计算机有些是没有cache,有些是一级cache)、
  • main memory(主存,也被称为内存,就是内存条的那个内存)、
  • Auxiliary storage(辅存,一般是外接的存储器,比如硬盘,之前还有磁盘、磁带、光盘啥的)

124.8.2 ARM v7架构下的寄存器组织

在这里插入图片描述

  • ARM 有37个32-Bits长的寄存器:
    1 个用作PC( program counter)
    1个用作CPSR(current program status register)
    5个用作SPSR(saved program status registers)
    30 个通用寄存器
    
  • Cortex体系结构下有40个32-Bits长的寄存器:
  • Cortex-A多出3个寄存器
    Monitor 模式  r13_mon ,  r14_mon,  spsr_mon
    
  • 当前处理器的模式决定着哪组寄存器可操作.
    • 任何模式都可以存取:
      对应的R0-R12子集
      对应的 R13 (the stack pointer, SP)、r14 (the link register, LR)、 R15 ( the program counter, PC)
      对应的CPSR(current program status register, CPSR)
      
    • 特权模式 (除system模式) 还可以存取:
      对应的 SPSR (saved program status register)
      

124.8.3 ARMV8架构寄存器组织

在这里插入图片描述

124.8.4 ARMV7架构下一些具有特定功能的寄存器

  • R13寄存器(the stack pointer, SP)

    R13 寄存器又叫 SP(栈指针寄存器),这个寄存器内部保存栈顶的地址
    一般在内存中分出一部分内存当作栈来使用,SP寄存器时钟保存栈顶空间的地址
    栈一般存放一些临时数据,也可以用于保护现场
    
  • R14寄存器(the link register, LR)

    R14寄存器又被称为链接寄存器,当程序在实现跳转的时候,LR寄存器中保存当前跳转指令下一条指令的地址。
    方便实现程序的返回程序的跳转实现:PC->跳转之后指令的地址
    程序的返回:PC=LR
    
  • r15寄存器(the program counter, PC)

    R15 寄存器又被称为 PC 寄存器(程序计数器,或者指令指针)
    这个寄存器始终保存马上要进行取址的指令的地址,当一条指令执行快结束之后PC寄存器的数值会自动向下+4
    另外,在特定情况下可以手动修改PC的值进行程序的跳转
    
  • CPSR寄存器(current program status register, CPSR)

    CPSR:程序状态寄存器
    这个寄存器中保存当前程序的运行状态,比如工作模式等信息
    

    在这里插入图片描述

  • SPSR寄存器(saved program status register)

    SPSR寄存器可以用于保存程序某一时刻的状态
    比如当发生异常之后,处理器的工作模式要切换到对应的异常模式去处理异常,
    这样CPSR的数值会发生对应的改变
    在处理完异常结束后,我们需要将CPSR的值修改为没有发送异常之前的状态,
    这个时候就可以将SPSR保存的异常发送之前的状态赋值给CPSR
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/138360.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode | 234. 回文链表

LeetCode | 234. 回文链表 O链接 这里的解法是先找到中间结点然后再将中间节点后面的节点逆序一下然后再从头开始和从中间开始挨个比较如果中间开始的指针到走最后都相等,就返回true,否则返回false 代码如下: struct ListNode* reverseLis…

18. 深度学习 - 从零理解神经网络

文章目录 本文目标预测趋势与关系波士顿房价预测 Hi, 你好。我是茶桁。 我们终于又开启新的篇章了,从今天这节课开始,我们会花几节课来理解一下深度学习的相关知识,了解神经网络,多层神经网络相关知识。并且,我们会尝…

ModStartBlog v8.5.0 评论开关布局调整,系统后台全面优化

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用,支持后台一键快速安装,让开发者能快的实现业务功能开发。 系统完全开源,基于 Apache 2.0 开源协议。 功能特性 丰富的模块市场,后台一键快速安装 …

吴恩达《机器学习》7-1->7-4:过拟合问题、代价函数、线性回归的正则化、正则化的逻辑回归模型

一、过拟合的本质 过拟合是指模型在训练集上表现良好,但在新数据上的泛化能力较差。考虑到多项式回归的例子,我们可以通过几个模型的比较来理解过拟合的本质。 线性模型(欠拟合): 第一个模型是一个线性模型&#xff0…

安全框架SpringSecurity-1(认证入门数据库授权)

一、Spring Security ①:什么是Spring Security Spring Security是一个能够为基于Spring的企业应用系统提供声明式(注解)的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring …

微服务-开篇-个人对微服务的理解

从吃饭说起 个人理解新事物的时候喜欢将天上飞的理念转换成平常生活中的实践,对比理解这些高大上的名词,才能让我们减少恐慌的同时加深理解。废话不多说,我们从吃饭开始说起,逐渐类比出微服务的思想。 (个人见解&…

【基础算法模板梳理】再也不想学算法了!(待更新)

目录 1、【二分】 (1)rmid —— 大于等于某数的最小值 (2)lmid —— 小于等于某数的最大值 2、【前缀和】 (1)一维前缀和 (2)二维前缀和 3、【差分】 (1&#x…

LCD1602设计(1)

本文为博主 日月同辉,与我共生,csdn原创首发。希望看完后能对你有所帮助,不足之处请指正!一起交流学习,共同进步! > 发布人:日月同辉,与我共生_单片机-CSDN博客 > 欢迎你为独创博主日月同…

SQL必知会(二)-SQL查询篇(5)-用通配符进行过滤

第6课、用通配符进行过滤 LIKE:匹配文本 LIKE:针对未知值进行过滤。通配符搜索只能用于文本字段。 1)百分号%通配符 %表示任何字符出现任意次数。 需求:找出所有以词 Fish 起头的产品 SELECT prod_id, prod_name FROM Product…

34 mysql limit 的实现

前言 这里来看一下 我们常见的 mysql 分页的 limit 的相的处理 这个问题的主要是来自于 之前有一个需要处理 大数据量的数据表的信息, 将数据转移到 es 中 然后就是用了最简单的 “select * from tz_test limit $pageOffset, $pageSize ” 来分页处理 但是由于 数据表的数…

1-前端基本知识-HTML

1-前端基本知识-HTML 文章目录 1-前端基本知识-HTML总体概述什么是HTML?超文本标记语言 HTML基础结构文档声明根标签头部元素主体元素注释 HTML概念词汇:标签、属性、文本、元素HTML基本语法规则HTML常见标签标题标签段落标签换行标签列表标签超链接标签…

【Windows Docker:安装nginx】

拉镜像 docker pull nginx运行初始镜像 docker run -d -p 80:80 --name nginx nginx拷贝文件 docker cp nginx:/etc/nginx/nginx.conf D:/dockerFile/nginx/nginx.conf docker cp nginx:/etc/nginx/conf.d D:/dockerFile/nginx/conf.d docker cp nginx:/usr/share/nginx/htm…

华为李鹏:到 2025 年智能算力需求将达到目前水平的 100 倍

在第十四届全球移动宽带论坛上,华为高级副总裁、运营商 BG 总裁李鹏表示,大模型为代表的 AI 应用发展带来对智能算力的爆发式需求。 李鹏在题为《加速 5G 商业正循环,拥抱更繁荣的 5.5G》的讲话中表示,「5G 已经走在商业成功的正确…

学之思开源考试系统部署至Centos7

学之思开源考试系统部署至Centos7 1、下载源码 源码下载: https://gitee.com/mindskip/xzs-mysql 数据库脚本下载: https://www.mindskip.net:999/ 2、项目打包 分别在\source\vue\xzs-student目录和source\vue\xzs-admin目录,执行前端打…

人工智能基础_机器学习023_理解套索回归_认识L1正则---人工智能工作笔记0063

然后上一节我们说了L1,L2正则是为了提高,模型的泛化能力, 提高泛化能力,实际上就是把模型的公式的w,权重值,变小对吧. 然后我们这里首先看第一个L1正则,是怎么做到把w权重变小的 可以看到最上面是线性回归的损失函数,然后 L1可以看到,这个正则,就是在损失函数的基础上给损失…

uniapp+vue3+ts+vite+echarts开发图表类小程序,将echarts导入项目使用的详细步骤,耗时一天终于弄好了

想在uniapp和vue3环境中使用echarts是一件相当前卫的事情,官方适配的还不是很好,echarts的使用插件写的是有些不太清晰的,这里我花费了一天的时间,终于将这个使用步骤搞清楚了,并且建了一个仓库,大家可以直…

C#动态拦截并覆盖第三方进程的函数,实现函数篡改(外挂)

今天在看之前收藏的一个pdf文档(介绍C#外挂的相关知识的),结合网上的东西及个人的理解才有了这篇文章。 参考文章: 【精选】一文带解读C# 动态拦截覆盖第三方进程中的函数(外挂必备)_zls365365的博客-CSDN博客 DotNetDetour - …

解决内存泄漏问题,Profiler工具的使用介绍

什么是内存泄漏 内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。 以上是官方针对内存泄漏的说法。说的通俗一点&#x…

在IDEA中使用maven项目总结

一 什么是maven Maven本身也是Java写的,他是一款服务于Java平台的自动化构建工具 Maven是一个项目管理工具,旨在简化软件项目的构建、依赖管理和项目信息管理。它使用基于项目对象模型(Project Object Model,POM)的…

「我在淘天做技术」音视频技术及其在淘宝内容业务中的应用

作者:李凯 一、前言 近年来,内容电商似乎已经充分融入到人们的生活中:在闲暇时间,我们已经习惯于拿出手机,从电商平台的直播间、或者短视频链接下单自己心仪的商品。 尽管优质的货品、实惠的价格、精致的布景、有趣的…