-
Notifications
You must be signed in to change notification settings - Fork 68
67_指令集篇
kuangyufei edited this page Sep 5, 2022
·
1 revision
本篇关键词:、、、
下载 >> 离线文档.鸿蒙内核源码分析(百篇博客分析.挖透鸿蒙内核).pdf
硬件架构相关篇为:
- v65.01 鸿蒙内核源码分析(芯片模式) | 回顾芯片行业各位大佬
- v66.03 鸿蒙内核源码分析(ARM架构) | ARMv7 & Cortex(A|R|M)
- v67.01 鸿蒙内核源码分析(指令集) | CICS PK RICS
- v68.01 鸿蒙内核源码分析(协处理器) | CPU的好帮手
- v69.05 鸿蒙内核源码分析(工作模式) | 角色不同 责任不同
- v70.06 鸿蒙内核源码分析(寄存器) | 世界被它们玩出了花
- v71.03 鸿蒙内核源码分析(多核管理) | 并发真正的基础
- v72.05 鸿蒙内核源码分析(中断概念) | 海公公的日常工作
- v73.04 鸿蒙内核源码分析(中断管理) | 没中断太可怕
- 在计算机中,指示计算机硬件执行某种运算、处理功能的命令称为指令,它是计算机运行的最小的功能单位,而硬件的作用是完成每条指令规定的功能。
- 每一种处理器都有自己可以识别的一整套指令,称为指令集,它是硬件和软件之间沟通的桥梁。是处理器提供给软件控制它的语言,处理器执行指令时,根据不同的指令采取不同的动作,完成不同的功能,既可以改变自己内部的工作状态,也能控制其它外围电路的工作状态。按
CPU
的设计理念,将软硬件沟通方式分成复杂指令集(CISC
)和精简指令集(RISC
) ,不同的时期流行不同的方式,取决于当时的沟通成本/性价比。 - 早期的
CPU
全部是CISC
架构,受限于软件和编译器技术不发达,设计方向是要用最少的机器语言指令来完成所需的计算任务,需更多的从硬件角度去考虑CPU
的设计,能用硬件完成的就尽量不用软件去做。其结果导致硬件较复杂,功耗大,成本高。 - 后期因软件和编译器技术快速崛起,相比于硬件呈指数级的增长,原来的指令集架构就不再适用新时代,
RISC
的优势就凸显出来,设计方向是降低硬件的大小,减少处理器的功耗,从而硬件成本低廉,省电价格又便宜自然就占据了市场的主导权,尤其在嵌入式领域这种优势就更加的明显。
对比项 | CISC(复杂指令集) Complex Instruction Set Computer |
RISC(精简指令集) reduced instruction set computer |
---|---|---|
目的 | 增强原有指令的功能,设置更为复杂的新指令实现软件功能的硬化 | 减少指令种类和简化指令功能,提高指令的执行速度 |
指令系统 | 复杂、庞大 | 简单、精简 |
指令数目 | 一般大于200条 | 一般小于100条 |
指令字长 | 不固定 | 固定 |
可访存指令 | 不加限制 | 只有 LOAD/STORE指令 |
各指令的执行时长 | 指令间执行时长差距很大 | 绝大多数在1个周期内完成 |
各种指令的使用频度 | 指令间频度差距很大(二八原则) | 指令都比较常用 |
通用寄存器数量 | 较少 | 多 |
中断 | 机器是在一条指令执行结束后响应中断 | 机器在一条指令执行的适当地方可响应中断 |
单元电路(功耗) | 包含有丰富的电路单元,因而功能强、面积大、功耗大 | 包含有较少的单元电路,因而面积小、功耗低 |
目标代码的执行效率 | 难以用优化编译生成高效的目标代码程序 | 采用优化的编译程序,生成代码相对较为高效 |
控制方式 | 绝大多数为微程序控制 | 绝大多数为组合逻辑控制 |
指令流水线 | 可以通过一定方式实现 | 必须实现 |
微处理器的设计周期 | 微处理器结构复杂,设计周期长 | 微处理器结构简单,布局紧凑,设计周期短,且易于采用最新技术 |
适用场景 | 适用于【通用型机器】;功能强大,易于/利于实现、处理特殊功能,因有专用指令来完成特定功能 | 适用于【专用型机器】,因RISC指令系统的确定与特定的应用领域有关;指令规整,性能容易把握,易学易用 |
被应用的指令集(架构) | X86指令集(架构) | MIPS、ARM、RISC-V、Power-PC[IBM]、SPARC、AArch64(基于ARMv8架构的、分离出来的64位的执行状态) 指令集(架构) |
-
x86
泛指一系列基于Intel 8086
且向后兼容的中央处理器指令集架构。最早的8086
处理器于1978
年由Intel
推出,为16位
微处理器。 由于以86
作为结尾(但不知为何以86
数字结尾),因此其架构被称为x86
。 -
1985
年,英特尔发布第三代32
位CPU
架构,但由于数字并不能作为注册商标,英特尔将其称为IA-32
,全名为“Intel Architecture, 32-bit”。同时CPU
型号到了intel 80386
,所以也称为i386
,叫法一直延续至今,现在说的x86
=i386
=IA-32
指代32
位的架构。 -
2001
年,英特尔原本已经决定在64
位时代推出新的架构IA-64
技术的Itanium
处理器产品线来接替取代x86
,但它与x86
的软件天生不兼容,因此想了各种办法来运行x86
的软件,但结果效率十分低下,加之处理器本身和软件移植的成本难以控制,因此这个项目最终告吹。 -
2003
年,英特尔的竞争对手AMD
公司自行把32
位x86
(或称为IA-32
)拓展为64
位,并命名为x86-64
或Hammer
架构,而后更名为AMD64
架构,将架构打上了自己的Flag
,由于AMD64
处理器产品线首先进入市场,微软先推出了基于AMD64
的操作系统版本。就不愿意为英特尔IA-64
再开发另一个64
位版本,英代尔被迫采纳AMD64
架构且增加某些新的扩展到他们自己的产品,显然他们不想承认这些指令集是来自它的主要对手,便命名为EM64T
架构,后正式更名为Intel 64
也叫x64
。 - 所以在
PC
机时代,你会很容易看到x86
,x86_64
,x64
,i386
,IA32
,IA64
,amd64
这些玩意,大概知道表示什么,但很烦就不能简单点吗 ? 其背后是硬件公司竞争对手之间,软硬件公司之间激烈的PK
,这样的案例比比皆是,屡见不鲜。
- MIPS(Microprocessor without Interlocked Pipeline Stages),是一种采取精简指令集(RISC)的指令集架构(ISA),由美国MIPS计算机系统公司开发,现为美普思科技。
MIPS
广泛被使用在许多电子产品、网络设备、个人娱乐设备与商业设备上。最早的MIPS
架构是32
位,最新的版本已经变成64
位。商业市场主要竞争对手为ARM
与RISC-V
。 - 在一些大学和技术学校中计算机架构的课程上,学生们通常会学习
MIPS
架构。这个架构极大地影响了后来的精简指令集架构,如Alpha
。 - MIPS本来就没有一个较为统一的生态。命运多舛,被转卖多次、很多相关专利已经被卖掉了、碎片化问题非常严重。
2021
年3
月,MIPS
宣布MIPS
架构的开发已经结束,因为该公司正在向RISC-V
过渡。
- 最著名的是 armv7指令集 支持两种指令集,ARM 指令集和 Thumb 指令集,从功耗上来说,thumb 指令集的功耗要低于 arm 指令集。
- ARM公司的商业模式: IP(Intellectual Property,知识产权)授权模式(ARM架构授权、IP核授权、使用级授权);
- 主要业务范围: ARM指令集、ARM微架构、ARM芯片(不自己造)
-
RISC-V(发音为“risk-five”)号称芯片设计领域的
linux
,是一个基于精简指令集(RISC)原则的开源指令集架构(ISA),目标是成为一个通用的指令集架构(ISA),RISC-V的不同寻常不仅在于它是一个最近诞生的指令集架构(它诞生于最近十年,而大多数其他指令集都诞生于20世纪70到80年代),而且在于它是一个开源的指令集架构。与几乎所有的旧架构不同,它的未来不受任何单一公司的浮沉或一时兴起的决定的影响(这一点让许多过去的指令集架构都遭了殃)。它属于一个开放的,非营利性质的基金会。RISC-V基金会的目标是保持RISC-V的稳定性,仅仅出于技术原因缓慢而谨慎地发展它,并力图让它之于硬件如同Linux之于操作系统一样受欢迎。
- 百文相当于摸出内核的肌肉和器官系统,让人开始丰满有立体感,因是直接从注释源码起步,在加注释过程中,每每有心得处就整理,慢慢形成了以下文章。内容立足源码,常以生活场景打比方尽可能多的将内核知识点置入某种场景,具有画面感,容易理解记忆。说别人能听得懂的话很重要! 百篇博客绝不是百度教条式的在说一堆诘屈聱牙的概念,那没什么意思。更希望让内核变得栩栩如生,倍感亲切。
- 与代码需不断
debug
一样,文章内容会存在不少错漏之处,请多包涵,但会反复修正,持续更新,v**.xx
代表文章序号和修改的次数,精雕细琢,言简意赅,力求打造精品内容。 - 百文在 < 鸿蒙研究站 | 开源中国 | 博客园 | 51cto | csdn | 知乎 | 掘金 > 站点发布,百篇博客系列目录如下。
按功能模块:
基础知识 | 进程管理 | 任务管理 | 内存管理 |
---|---|---|---|
双向链表 内核概念 源码结构 地址空间 计时单位 优雅的宏 钩子框架 位图管理 POSIX main函数 | 调度故事 进程控制块 进程空间 线性区 红黑树 进程管理 Fork进程 进程回收 Shell编辑 Shell解析 | 任务控制块 并发并行 就绪队列 调度机制 任务管理 用栈方式 软件定时器 控制台 远程登录 协议栈 | 内存规则 物理内存 内存概念 虚实映射 页表管理 静态分配 TLFS算法 内存池管理 原子操作 圆整对齐 |
通讯机制 | 文件系统 | 硬件架构 | 内核汇编 |
通讯总览 自旋锁 互斥锁 快锁使用 快锁实现 读写锁 信号量 事件机制 信号生产 信号消费 消息队列 消息封装 消息映射 共享内存 | 文件概念 文件故事 索引节点 VFS 文件句柄 根文件系统 挂载机制 管道文件 文件映射 写时拷贝 | 芯片模式 ARM架构 指令集 协处理器 工作模式 寄存器 多核管理 中断概念 中断管理 | 编码方式 汇编基础 汇编传参 链接脚本 内核启动 进程切换 任务切换 中断切换 异常接管 缺页中断 |
编译运行 | 调测工具 | ||
编译过程 编译构建 GN语法 忍者无敌 ELF格式 ELF解析 静态链接 重定位 动态链接 进程映像 应用启动 系统调用 VDSO | 模块监控 日志跟踪 系统安全 测试用例 |
-
百万汉字注解内核目的是要看清楚其毛细血管,细胞结构,等于在拿放大镜看内核。内核并不神秘,带着问题去源码中找答案是很容易上瘾的,你会发现很多文章对一些问题的解读是错误的,或者说不深刻难以自圆其说,你会慢慢形成自己新的解读,而新的解读又会碰到新的问题,如此层层递进,滚滚向前,拿着放大镜根本不愿意放手。
期间不断得到小伙伴的支持,有学生,有职场新人,也有老江湖,在此一并感谢,大家的支持是前进的动力。尤其每次收到学生的赞助很感慨,后生可敬。 >> 查看捐助名单
据说喜欢 点赞 + 分享 的,后来都成了大神。:)