ARM基础 -- 2
文章目录
- 一、可编程器件的编程原理
- 1.1 电子器件的发展方向
- 1.2 可编程器件的特点
- 1.3 整个编程及运行过程
- 二、指令集对CPU的意义
- 2.1 汇编语言与C等高级语言的差异
- 2.2 汇编语言的本质
- 2.2.1 编程语言的发展过程
- 2.2.2 汇编语言的特点和用途
- 三、RISC和CISC的区别
- 3.1 复杂指令集CPU --- CISC
- 3.2 精简指令集CPU --- RISC
- 3.3 CPU的设计方式发展
- 3.4 RISC与CISC指令集对比
- 3.5 发展趋势
- 四、统一编址&独立编址
- 4.1 什么是IO?什么是内存?
- 4.2 内存访问方式
- 4.3 IO访问方式
- 五、程序与数据
- 六、`冯诺依曼结构和哈佛结构`
- 6.1 优劣对比
- 七、软件编程控制硬件的关键 --- 寄存器
- 7.1 寄存器的定义
- 7.2 关于寄存器
- 7.3 两类寄存器
- 八、ARM 体系结构要点总结
- 8.1 ARM 是RISC架构
- 8.2 ARM 是哈佛结构的
本文来源于朱有鹏老师的课程,有兴趣购买课程学习的小伙伴,可以私聊我,我拉你进朱老师的学习群。
一、可编程器件的编程原理
1.1 电子器件的发展方向
模拟器件 --> 数字器件
ASIC(Application Specific Integrated Circuit 专用集成电路):这个是不可以编程的 --> 可编程器件
1.2 可编程器件的特点
- CPU在固定频率的时钟控制下, 节奏运行。
- CPU可以通过总线读取外部存储设备中的二进制指令集,然后解码执行。
- 这些可以被CPU解码执行的二进制指令集是CPU设计的时候确定的,是CPU的设计者(本文中提及的是ARM公司)定义的,本质上是一串串1和0组成的数字。这就是CPU的汇编指令集。
1.3 整个编程及运行过程
从源代码到CPU执行过程:
.c等高级语言源代码 ----(编译器)----- .S汇编源代码 ----(汇编器)----- Elf格式二进制可执行程序 ----(Objcopy工具)-----Bin格式烧录文件 ----(总线)----- CPU读入后先解码 ----(CPU内部指令流水线)----- CPU执行指令。
注: 对预编译,编译,汇编,链接过程不清楚的,可以看看这位小伙伴的博文。
二、指令集对CPU的意义
2.1 汇编语言与C等高级语言的差异
- 汇编难写,C好写。
- 汇编无可移植性,C语言有一定的可移植性,Java等更高级的语言移植性更高。
- 汇编语言效率最高,C语言次之,Java等更高级语言效率更低。
- 汇编不适合完成大型复杂的项目,更高级语言更适合完成更大,更复杂的项目。
2.2 汇编语言的本质
汇编的实质
是机器指令(机器码)的助记符
,是一种低级符号语言
。- 机器指令集是一款CPU的编程特性,是这款CPU的设计者制定的。CPU的内部电路设计就是为了实现这些指令集的功能,机器指令集就好像CPU的API接口一样。
2.2.1 编程语言的发展过程
- 纯机器码编程
- 汇编语言编程
- C语言编程
- C++语言编程
- Java C#等语言编程
- 脚本语言
2.2.2 汇编语言的特点和用途
- 汇编语言就是CPU的机器指令集的助记符,是一款CPU的本质特性。
- 不同CPU的机器指令集设计不同,因此汇编程序不能在不同的CPU间互相移植。
- 使用汇编编程可以充分发挥CPU的设计特点,所以汇编编程效率最高,因此在操作系统内核中效率极其重要处都需要汇编处理。
三、RISC和CISC的区别
3.1 复杂指令集CPU — CISC
- Complex Instruction-set computer 复杂指令集CPU
- CISC体系的设计理念是用最少的指令(注意说的是指令而不是指令集)来完成任务(譬如计算乘法只需要一条MUL指令即可),因此CISC的CPU本身设计复杂、工艺复杂,但好处是编程器好设计。CISC出现较早,至今Intel还一直采用CISC设计。
3.2 精简指令集CPU — RISC
- Reduced Instruction-set Computer 精简指令集CPU
- RISC的设计理念是让软件来完成具体的任务,CPU本身只提供基本功能指令集。因为RISC CPU 的指令集只有很少的指令,这种设计相对于CISC,CPU的设计和工艺简单了,但是编译器的设计变难了。
3.3 CPU的设计方式发展
- 早期简单CPU,指令和功能都很有限。
- CISC年代-------CPU功能拓展依赖于指令集的拓展,实质是CPU内部组合逻辑电路的拓展。
- RISC年代-------CPU仅仅提供基础功能指令(譬如内存与寄存器通信指令,基本运算与判断指令符等),功能拓展由使用CPU的人利用基础架构来灵活实现。
3.4 RISC与CISC指令集对比
- 一般典型的CISC CPU指令在300左右。
- ARM CPU常用指令在30条左右。
注:ARM为什么功耗低? (乱序执行能力不如X86)
3.5 发展趋势
- 没有纯粹的RISC或CISC,发展方向是RISC与CISC结合,形成一种介于两者之间的CPU类型。
四、统一编址&独立编址
4.1 什么是IO?什么是内存?
- 内存是程序的运行场所,内存和CPU之间通过总线连接,CPU通过一定的地址来访问具体的内存单元。
- IO(input and output)是输入输出接口,是CPU和其它外部设备(如串口、LCD、触摸屏、LED等)之间通信的道路,一般的,IO就是指CPU的各种内部和外部的外设。
4.2 内存访问方式
- 内存通过CPU的数据总线来寻址定位,然后通过CPU的数据总线来读写。
- CPU的地址总线的位数是CPU设计时确定的,因此一款CPU所能寻址的范围是确定的,而内存是需要占用CPU的寻址空间的。
- 内存和CPU的这种总线连接方式属于直接连接,优点是效率高,访问快,缺点是资源有限,拓展性差。
4.3 IO访问方式
- IO是指CPU连接的各种外设。
- CPU访问各种外设有两种方式,具体如下:
(1) 类似于访问内存的形式,即把外设的寄存器当做一个内存地址来读写,从而以访问内存相同的方式来访问各种外设,叫 IO与内存统一编址方式。
(2) 使用专用的CPU指令来访问某种特定外设,叫 IO与内存独立编址。
对比
- 由于内存访问频率高,因此采用总线式连接,直接地址访问,效率最高。
IO与内存统一编址方式
,优势是IO当作内存来访问,编程简单;缺点是IO也需占用一定的CPU地址空间,而CPU的地址空间是有限资源。IO与内存独立编址方式
,优势是不占用CPU地址空间,缺点是CPU设计变复杂了。
五、程序与数据
- 程序运行时两大核心元素:
程序+数据
- 程序是我们写好的源代码经过编译,汇编之后得到的机器码,这些机器码可以拿给CPU去解码执行,CPU不会也不应该去修改程序,所以程序是只读的。
- 数据是程序运行过程中定义和产生的变量的值,是可以读写的,程序运行实际就是改变数据的值。
六、冯诺依曼结构和哈佛结构
- 程序和数据都放在内存中,且彼此不被分离的结构称为冯诺依曼结构。譬如Intel的CPU均采用冯诺依曼结构。
- 程序和数据分开独立放在不同的内存块中,彼此完全分离的结构称为哈佛结构。譬如大部分的单片机(MCS51、ARM9等)均采用哈佛结构。
6.1 优劣对比
冯诺依曼结构中程序和数据放在一起,因此安全和稳定性是个问题,好处是处理起来简单
。- 哈佛结构中程序(一般放在ROM、FLASH中)和数据(一般放在RAM中)独立分开存放。因此好处是安全和稳定性高,缺点是软件处理复杂一些(需要统一规划链接地址等)。
注:FLASH=ROM=硬盘(只读属性) DDR=内存=RAM |
七、软件编程控制硬件的关键 — 寄存器
7.1 寄存器的定义
- 寄存器属于CPU外设的硬件组成部分。
- CPU可以像访问内存一样访问寄存器。
- 寄存器是CPU的硬件设计者制定的,目的是留作外设被编程控制的“活动开关”。
- 正如汇编指令集是CPU的编程接口API一样,寄存器是外设硬件的软件编程接口API。使用软件编程控制某一硬件,其实就是编程读写硬件的寄存器。
7.2 关于寄存器
- 编程操作寄存器类似于访问内存。
- 寄存器中每个bit位都有特定的含义,因此编程操作时需要位操作。
- 单个寄存器的位宽一般和CPU的位宽(int/char)一样,以实现最佳访问效率。
注:CPU的位宽指的是数据总线的条数 |
7.3 两类寄存器
Soc中有两类寄存器:通用寄存器和SFR。
- 通用寄存器(ARM中有37个)是CPU的组成部分,CPU的很多活动都需要CPU的支持和参与。
- SFR(Special Function Register,特殊功能寄存器)不在CPU中,而存在CPU的外设中,我们通过访问外设的SFR来编程操控这个外设,这就是硬件编程控制的方法。
注: SFR:硬件外设某个寄存器的地址,对应的数据位都是设计时定义的。
八、ARM 体系结构要点总结
8.1 ARM 是RISC架构
- 常用ARM汇编指令只有二三十条
- ARM是低功耗CPU
- ARM 的架构非常适合单片机、嵌入式、尤其是物联网领域,而服务器等高性能领域, 目前主导还是IntelARM是统一编址的,
- 大部分ARM (m3 m4 m7 m0 ARM9 ARM11 A8 A9等)都是32位架构
- 32位ARM CPU 支持的内存少于4G,通过CPU 地址总线来访问
- SOC的各种内部外设通过各自的SFR 编程访问,这些SFR的访问方式类似于访问普通内存,这叫IO与内存统一编址
8.2 ARM 是哈佛结构的
- 常见ARM (除ARM7外)都是哈佛结构的
- 哈佛结构也决定了 ARM逻辑程序(使用实地址即 物理地址)的链接比较麻烦,必须使用复杂的链接脚本告知连接器如何组织程序,对于OS之上的应用(工作在虚拟地址之中)则不需要考虑这么多
相关文章:
ARM基础 -- 2
文章目录一、可编程器件的编程原理1.1 电子器件的发展方向1.2 可编程器件的特点1.3 整个编程及运行过程二、指令集对CPU的意义2.1 汇编语言与C等高级语言的差异2.2 汇编语言的本质2.2.1 编程语言的发展过程2.2.2 汇编语言的特点和用途三、RISC和CISC的区别3.1 复杂指令集CPU --…...
Java 类型转换
Java 类型转换 int转Integer int int0 1; Integer integer1 int0; // 自动装箱 Integer integer2 new Integer(int0); Integer integer3 Integer.valueOf(int0);Integer转int Integer integer0 2; int int1 integer0; // 自动拆箱 int int2 integer0.intValue(); // …...
【Java开发】JUC基础 05:线程通信/协作
1 生产者消费者问题📌 线程通信应用的场景可以简单地描述为生产者和消费者问题假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中产品取走消费;如果仓库中没有产品,则生产者将产品放入仓库&a…...
哪些工具可以实现在线ps的需求
在线Photoshop有哪些工具可以选择?在 Adobe 的官网上就能够实现,很惊讶吧,其实 Adobe 官方推出了在线版本的 Photoshop 的,尽管目前还是 Beta版本,但其实也开放了蛮久了。编辑切换为居中添加图片注释,不超过…...
如何使用C2concealer生成随机化的C2 Malleable配置文件
关于C2concealer C2concealer是一款功能强大的命令行工具,在该工具的帮助下,广大研究人员可以轻松生成随机化的C2 Malleable配置文件,以便在Cobalt Strike中使用。 工具运行机制 开发人员对Cobalt Strike文档进行了详细的研究,…...
网络基础之IP地址和子网掩码
一、IP地址IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。习惯上,我们用分成四段的十进制数表示IP地址,从0.0.0.0 一直到255.255.255.255。互联网上的…...
G1D54-CRF
一、CRF的输入X是什么?是构造的特征吗? 如此,CRF的x只用于状态函数吗? CRF的例子解释调用代码 机器之心 知乎忆榛 此处线性链条件随机场的特征函数形式被统一了? BilstmCRF,强烈推荐!&#x…...
vue3 使用defineAsyncComponent与component标签实现动态渲染组件
内容有些啰嗦,内容记载了当时遇到了bug以及解决问题的思路。 业务场景简述: 前端做配置化组件,通过url内的唯一标识,请求后端sql 哪取页面配置信息,前端通过配置信息动态渲染查询表单,导出、表格ÿ…...
Linux下 C/C++ NTP网络时间协议详解
NTP(Network Time Protocol,网络时间协议)是由RFC 1305定义的时间同步协议。它是通过网络在计算机系统之间进行时钟同步的网络协议。NTP 在公共互联网上通常能够保持时间延迟在几十毫秒以内的精度,并在理想条件下,它能…...
Pytest自动化框架-权威教程02-Pytest 使用及调用方法
Pytest 使用及调用方法使用python -m pytest调用pytest2.0版本新增你可以在命令行中通过Python编译器来调用Pytest执行测试:Copypython -m pytest [...]通过python调用会将当前目录也添加到sys.path中,除此之外,这几乎等同于命令行直接调用pytest [...]。可能出现的执行退出cod…...
大数据技术——概述
根据IBM前首席执行官郭士纳的观点,IT领域每隔十五年就会迎来一次重大变革三次信息化浪潮1.存储设备容量不断增加2.CPU处理能力大幅提升3.网络带宽不断增加运营式系统阶段数据库的出现使得数据管理的复杂度大大降低,数据往往伴随着一定的运营活动而产生并记录在数据库…...
java-代理模式
背景 代理模式指的是提供一个代理对象用于访问目标对象,可以很方便的在不修改目标对象的情况下,提供额外的功能,扩展目标对象。 case1:静态代理 约束:代理对象和目标对象要实现相同的接口 优点:不修改目标对象的情况下扩展功能 缺点:必须实现相同的接口,如果接口发生变…...
路由网络的构建与配置
Part.1 ⑴ 需求分析 在构建的局域网中,通过路由器间配置静态路由,实现PC1和PC2主机直接连通,主机网段不能与路由器直接互联网段通信。 ⑵ 环境要求 配置虚拟网卡的计算机,安装华为eNSP模拟软件。 规划拓扑 Part.2 ⑴ 拓扑描述…...
软件测试-接口测试-数据库管理
文章目录 1.数据库介绍2.数据库基本操作2.1安装2.2 操作流程2.3数据准备2.4数据的基本操作2.4.1 连接数据库并查询数据库版本2.4.2 连接数据库执行数据库查询操作2.4.3 连接数据库执行数据库插入操作2.4.4 连接数据库执行数据库更新操作3.数据库事务操作3.1 案例:数据不一致性…...
【华为OD机试 】天然蓄水库(C++ Java JavaScript Python)
文章目录 题目描述输入描述输出描述备注用例题目解析C++JavaScriptJavaPython题目描述 公元2919年,人类终于发现了一颗宜居星球——X星。 现想在X星一片连绵起伏的山脉间建一个天热蓄水库,如何选取水库边界,使蓄水量最大? 要求: 山脉用正整数数组s表示,每个元素代表山脉…...
普元EOS中导出excl页面下载
起因 需要做一个筛选功能的导出表格 解决办法 这个垃圾eos我是真受不了,sb玩意的缺点三天三夜也说不完 后边就没法整response的这些个东西,可真是够愁人的 在网上搜了搜 在普元的帮助文档里也看了看 普元提供的像是老太太的裹脚布一般又臭又长 参照这个可以看一下...
内存的管理
取指令——译码——执行——返存 计组课我们学过cpu真正读指令并非是从内存中读入,而是从cache读和存,再由cache进行取指或返存,因为cpu指令周期比内存周期速度快很多,cpu若要取指或返存都需要等待内存完成他的动作才可以进行下一…...
OpenFeign 切换HttpClient遇到的问题
背景 OpenFeign支持三种Http请求方式,默认情况下通过jdk中的HttpURLConnection向下游服务发起http请求(详见下图,源码详见feign.Client.Default), 默认的Client 采用 HttpURLConnection, 这种是无法复用的…...
流计算框架storm概览
Attention: supervison 和 nimbus的状态都实时保存在zookeeper集群中和本地. Enchance, this means you can kill -9 Nimbus or the Supervisors and theyll start back up as nothing happened. Topologies 1. storm jar all-my-code.jar org.apache.storm.MyTopology a…...
如何使用Coercer强制Windows Server认证任意主机
关于Coercer Coercer是一款功能强大的Python脚本,该工具可以通过九种不同的方法来强制让一台Windows Server认证任意主机。 功能介绍 1、自动检测远程设备的开放SMP管道; 2、一一调用存在安全漏洞的RPC功能来强制一台Windows Server认证任意主机&#…...
【小程序】已有公众号认证,一步一步申请小程序(图文)
一、登陆公众号后台,找到左侧广告与服务,小程序管理,开通 二、选择快速注册认证小程序 三、快速创建 四、选择微信认证资质(复用),这样不用再付认证费了 五、需要一个新的邮箱,这点挺让人无语&a…...
Redis学习笔记:缓存运用常见问题
这是本人学习的总结,主要学习资料如下 马士兵教育 目录1、数据一致性的问题1.1、新增数据一致性的问题1.2、修改/删除一致性问题1.2.1、操作分析1.2.1、总结和再深入2、缓存穿透,缓存击穿和缓存雪崩2.1、缓存穿透(查不到)2.1.1、…...
使用python 脚本挑出coco 数据集中的某一类数据
文章大纲 简介代码样例制作一个走路玩手机数据集简介 MS COCO的全称是Microsoft Common Objects in Context,起源于微软于2014年出资标注的Microsoft COCO数据集,与ImageNet竞赛一样,被视为是计算机视觉领域最受关注和最权威的比赛之一。 COCO数据集是一个大型的、丰富的物…...
Python虚拟环境(pipenv、venv、conda一网打尽)[通俗易懂]
一、什么是虚拟环境 1. 什么是Python环境 要搞清楚什么是虚拟环境,首先要清楚Python的环境指的是什么。当我们在执行python test.py时,思考如下问题: python哪里来?这个主要归功于配置的系统环境变量PATH,当我们在命…...
Android Kotlin实战之高阶使用泛型扩展协程懒加载详解
前言: 通过前面几篇文章,我们已基本掌握kotlin的基本写法与使用,但是在开发过程中,以及一些开源的API还是会出现大家模式的高阶玩法以及问题,如何避免,接下来讲解针对原来的文章进行一些扩展,解…...
数字映射:数字孪生技术的应用场景及作用
对于许多行业来说,数字孪生技术是未来。数字孪生定义数字孪生不仅仅是某物的副本或克隆,它是对象或系统的动态实时表示。数字孪生是一种虚拟模型,旨在准确反映物理对象。是物理对象、流程、服务或环境的数字表示,其行为和外观与现…...
配置二层远程端口镜像案例
实验拓扑: 实验需求: 如图1所示,某公司行政部通过SwitchA与外部Internet通信,监控设备Server通过SwitchB与SwitchA相连。 现在希望Server能够远程对行政部访问Internet的流量进行监控。 操作步骤: 配置观察端口 # 在…...
Linux-0.11 kernel目录fork.c详解
Linux-0.11 kernel目录fork.c详解 fork.c中主要实现内核对于创建新的进程的行为。其中copy_process是其最核心的函数。 copy_process int copy_process(int nr,long ebp,long edi,long esi,long gs,long none,long ebx,long ecx,long edx,long fs,long es,long ds,long eip,…...
如何或者无插件Web页面监控播放软件LiveNVR的固定视频流地址,实现大屏上墙、播放、视频分析等目的
1、LiveNVR介绍 LiveNVR的安防监控的视频直播,可以按标准的Onvif/RTSP协议接入监控设备,也可以通过海康、大华、天地伟业等厂家私有SDK接入监控,实现web页面的播放和录像回放。 可以分发HTTP-FLV、WS-FLV、WebRTC、RTMP、HLS(M3U8)、RTSP等多…...
postman断言脚本(2)
https://learning.postman.com/docs/writing-scripts/script-references/test-examples/#parsing-response-body-data状态码pm.test("Status code is 200",function(){pm.response.to.have.status(200);});pm.test("Status code is 200",()>{pm.expect(…...
网站建设与搜索/广告推销
为什么80%的码农都做不了架构师?>>> <?xml version"1.0" encoding"UTF-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:id"id/empty_cart_view"android:…...
网站建设怎么样让图片翻滚/怎么注册域名网址
我不明白的是bBar(a)。它是做什么的?律师怎么会拿a作为论据?这不意味着酒吧继承自a吗?Bar.Foo1Foo是什么?是否意味着Foo1是类Foo()的实例?当Foo1本身是一个对象时,我们如何访问它?b.arg.variabl…...
建设部网站官网 建造师 挂靠/seo优化好做吗
方法一:生成两个(1,5)的随机数,这样一共是25种情况,注意这两个数是有顺序的,从这25种情况中,取前21种,每三种代表(1,7)中的一个数字,如果取到的是…...
世安建设集团有限公司网站/seoul是什么意思
为什么80%的码农都做不了架构师?>>> 在 Linux 平台上运行的进程都会从系统资源申请一定数量的句柄,而且系统控制了进程能够申请的最大句柄数量。用户程序如果不及时释放无用的句柄,将会引起句柄泄露,从而可能造成申请…...
俄罗斯乌克兰克里米亚/荆州seo推广
网上找的资料,然后加以自己的实践和总结。 FCKeditor2.63下载 官方网站http://www.fckeditor.net/ dll控件:http://jaist.dl.sourceforge.net/project/fckeditor/FCKeditor.Net/2.6.3/FCKeditor.Net_2.6.3.zip 图片JS文件:http://jaist.dl.so…...
嘉善网站建设jswebs/色盲测试图片
发布一个k8s部署视频:https://edu.csdn.net/course/detail/26967 课程内容:各种k8s部署方式。包括minikube部署,kubeadm部署,kubeasz部署,rancher部署,k3s部署。包括开发测试环境部署k8s,和生产…...