本篇关键词:、、、

下载 >> 离线文档.鸿蒙内核源码分析(百篇博客分析.挖透鸿蒙内核).pdf

硬件架构相关篇为:

ARM模式

  • ARM公司本身并不靠自有的设计来制造或出售CPU,而是将处理器架构授权给有兴趣的厂家。提供了ARM内核的集成硬件叙述,包含完整的软件开发工具(编译器、debuggerSDK),以及针对内含ARM CPU硅芯片的销售权。

  • 许多半导体公司持有ARM授权:AtmelBroadcomCirrus LogicFreescale(于2004从摩托罗拉公司独立出来)、富士通、英特尔(借由和Digital的控诉调停)、IBMNVIDIA、台湾新唐科技(Nuvoton Technology)、英飞凌、任天堂、恩智浦半导体(于2006年从飞利浦独立出来)、冲电气、三星电子、苹果、夏普、意法半导体、德州仪器和VLSI等许多这些公司均拥有各个不同形式的ARM授权。虽然ARM的授权项目由保密合约所涵盖,在知识产权工业,ARM是广为人知最昂贵的CPU内核之一。单一的客户产品包含一个基本的ARM内核可能就需索取一次高达美金20万的授权费用。而若是牵涉到大量架构上修改,则费用就可能超过千万美元。

处理器时间轴 | Cortex | 2006

从图中可以看出 ARM经典(Classic)Cortex 两个核心系列,太老的历史就不去翻了,Cortex就是ARM公司一个系列处理器的名称。比如英特尔旗下处理器有酷睿,奔腾,赛扬。ARM在最初的处理器型号都用数字命名,最后一个是ARM11系列,在ARM11以后的产品改用Cortex命名,时间分割线是 2006年前后,并分成ARM三类,有意思的是这三个系列也暗合了ARM这个名字,为各种不同的市场提供服务。

  • 应用类 (Application) : 简称 Cortex-A 系列,面向尖端的基于虚拟内存的操作系统和用户应用。
  • 嵌入式类 (Real-time) : 简称 Cortex-R 系列,针对实时系统。
  • 微处理器类 (Micro-controller) : 简称 Cortex-M 系列,对微控制器和低成本应用提供优化。
  • 鸿蒙内核分成 轻量型(基于LiteOS_M) 和 小型(基于LiteOS_A) 说的就是分别基于 Cortex-A/RCortex-M的内核实现。

指令集时间轴 | RISC | ARMv7

看完处理器时间轴,再看ARM指令集架构历史,很多人分不清指令集和处理器的区别,指令集是处理器使用的指令编码方式,指令集的命名方式为 armv+version,目前是 armv1armv8,数字越大表示指令集越先进,对于不同的处理器,arm 公司设计的处理器采用了不同的指令集。

  • 精简指令集计算机(英语:reduced instruction set computer,缩写:RISC )或简译为 精简指令集,是计算机中央处理器的一种设计模式。特点是指令数目少,每条指令都采用标准字长、执行时间短。RISC 处理器每条指令执行一个动作,只需一个周期即可完成,优化了操作执行时间。使用固定长度的指令,所以流水线更容易。并且由于它缺乏复杂的指令解码逻辑,它支持更多的寄存器并且花费更少的时间将值加载和存储到内存中。总结下来这样的好处是非常的省电,对于手持设备来说这是巨大的优势,不用抖音没滑几下就要到处找充电宝,所以这也是在移动互联网时代ARM芯片大行其道的最底层原因,通常被认为是当今可用的最高效的 CPU 架构技术。目前使用RISC的微处理器包括 DEC AlphaARCARMAVRMIPSPA-RISCPower ISA(包括PowerPC、PowerXCell)、RISC-VSPARC等。
  • 与之对应的是复杂指令集计算机(英文:Complex Instruction Set Computer;缩写:CISC)或简译为 复杂指令集,是一种微处理器指令集架构,每个指令可执行若干低端操作,诸如从存储器读取、存储、和计算操作,全部集于单一指令之中。特点是指令数目多而复杂,每条指令字长并不相等,电脑必须加以判读,并为此付出了性能的代价。
  • 指令集是标准,基于标准可以设计无数的处理器型号。这并不难理解,跟我们手机充电线一样TYPE-C是目前大部分安卓手机的标准,但设计充电线的公司可以有很多,ARM就是设计充电线的公司。 指令集:处理器 = 1:N (1对多) 关系,指令集向下兼容,指令集的设计原则是 开闭原则,对扩展是开放的,但是对于修改是封闭的。但注意 RISC 是一套标准,可不是ARM公司的私有财产。ARM公司在使用这个标准的时候为了方便和效率肯定会在内部对其命名。如下表所示:
    指令集架构 处理器家族
    ARMv1 ARM1
    ARMv2 ARM2、ARM3
    ARMv3 ARM6、ARM7
    ARMv4 StrongARM、ARM7TDMI、ARM9TDMI
    ARMv5 ARM7EJ、ARM9E、ARM10E、XScale
    ARMv6 ARM11、ARM Cortex-M
    ARMv7 ARM Cortex-A、ARM Cortex-M、ARM Cortex-R
    ARMv8 Cortex-A35、Cortex-A50系列[18]、Cortex-A70系列、Cortex-X1
    ARMv9 Cortex-A510、Cortex-A710、Cortex-X2
    表中不难发现 ARMv7 是个转折点,Cortex 三个应用场景产品正是基于它横空出世,鸿蒙内核源码分析系列篇的 ARM文档基础 《ARM体系架构参考手册》背景为 ARMv7 ,其提供了关于ARM处理器架构和指令集,区分接口,所有的ARM处理器的支持(如指令语义)的实现细节等等,可在QQ群中下载名称为:ARM体系架构参考手册(ARMv7-A/R).pdf ,关于指令集的介绍具体的翻看系列篇 (指令集篇)
  • ARM 架构详细历史

八种CPU模式

CPU ARM架构指定了以下的CPU模式。在任何时刻,CPU只可处于某一种模式,但可由于外部事件(中断)或编程方式进行模式切换。具体翻看 (工作模式篇) 结合代码详细说明。

  • 用户模式 :仅非特权模式。
  • 系统模式 :仅无需例外进入的特权模式。仅以执行明确写入CPSR的模式位的指令进入。
  • Supervisor (svc) 模式 :在CPU被重置或者SWI指令被执行时进入的特权模式。
  • Abort 模式 :预读取中断或数据中断异常发生时进入的特权模式。
  • 未定义模式 :未定义指令异常发生时进入的特权模式。
  • 中断模式 :处理器接受一条IRQ中断时进入的特权模式。
  • 快中断模式: 处理器接受一条IRQ中断时进入的特权模式。
  • Hyp 模式: armv-7a为cortex-A15处理器提供硬件虚拟化引进的管理模式。

寄存器

图表解读

  • 寄存器 R0-R7 对于所有CPU模式都是相同的,它们不会被分块。
  • R8-R12R8_fiq-R12_fiq,其实是不同的寄存器,前缀一样是为了管理和识别方便,在实际代码中当切到快中断模式后,使用 R8 其实在CPU内部用的是 R8_fiq寄存器,此处暂且记下,具体在 (中断切换篇) 中结合源码详细说明。
  • 对于所有的特权CPU模式,除了系统CPU模式(与用户模式共用)之外,R13R14都是分块的。也就是说,每个因为一个异常(exception)而进入的模式,有其自己的R13R14。这些寄存器通常分别包含堆栈指针和函数调用的返回地址。
    • R13 也被指为 SP(Stack Pointer)
    • R14 也被指为 LR(Link Register)
    • R15 也被指为 PC(Program Counter) 由此也能推出这些特权模式有自己独立的运行栈。具体在 (寄存器篇) 结合源码详细说明

百文说内核 | 抓住主脉络

  • 百文相当于摸出内核的肌肉和器官系统,让人开始丰满有立体感,因是直接从注释源码起步,在加注释过程中,每每有心得处就整理,慢慢形成了以下文章。内容立足源码,常以生活场景打比方尽可能多的将内核知识点置入某种场景,具有画面感,容易理解记忆。说别人能听得懂的话很重要! 百篇博客绝不是百度教条式的在说一堆诘屈聱牙的概念,那没什么意思。更希望让内核变得栩栩如生,倍感亲切。
  • 与代码需不断debug一样,文章内容会存在不少错漏之处,请多包涵,但会反复修正,持续更新,v**.xx 代表文章序号和修改的次数,精雕细琢,言简意赅,力求打造精品内容。
  • 百文在 < 鸿蒙研究站 | 开源中国 | 博客园 | 51cto | csdn | 知乎 | 掘金 > 站点发布,百篇博客系列目录如下。

按功能模块:

基础知识 进程管理 任务管理 内存管理
双向链表
内核概念
源码结构
地址空间
计时单位
优雅的宏
钩子框架
位图管理
POSIX
main函数
调度故事
进程控制块
进程空间
线性区
红黑树
进程管理
Fork进程
进程回收
Shell编辑
Shell解析
任务控制块
并发并行
就绪队列
调度机制
任务管理
用栈方式
软件定时器
控制台
远程登录
协议栈
内存规则
物理内存
内存概念
虚实映射
页表管理
静态分配
TLFS算法
内存池管理
原子操作
圆整对齐
通讯机制 文件系统 硬件架构 内核汇编
通讯总览
自旋锁
互斥锁
快锁使用
快锁实现
读写锁
信号量
事件机制
信号生产
信号消费
消息队列
消息封装
消息映射
共享内存
文件概念
文件故事
索引节点
VFS
文件句柄
根文件系统
挂载机制
管道文件
文件映射
写时拷贝
芯片模式
ARM架构
指令集
协处理器
工作模式
寄存器
多核管理
中断概念
中断管理
编码方式
汇编基础
汇编传参
链接脚本
内核启动
进程切换
任务切换
中断切换
异常接管
缺页中断
编译运行 调测工具
编译过程
编译构建
GN语法
忍者无敌
ELF格式
ELF解析
静态链接
重定位
动态链接
进程映像
应用启动
系统调用
VDSO
模块监控
日志跟踪
系统安全
测试用例

百万注源码 | 处处扣细节

  • 百万汉字注解内核目的是要看清楚其毛细血管,细胞结构,等于在拿放大镜看内核。内核并不神秘,带着问题去源码中找答案是很容易上瘾的,你会发现很多文章对一些问题的解读是错误的,或者说不深刻难以自圆其说,你会慢慢形成自己新的解读,而新的解读又会碰到新的问题,如此层层递进,滚滚向前,拿着放大镜根本不愿意放手。

  • < gitee | github | coding | gitcode > 四大码仓推送 | 同步官方源码。

关注不迷路 | 代码即人生

  • 互联网从业十五年,计算机硕士,技术副总裁
  • 关注我,持续更新四十年,即聊技术也聊人生
  • 交有趣靠谱的人;做难而正确的事
  • 不做作,不炒作,只唯真
  • 不唯上,不唯书,只唯实

>> 捐助名单

据说喜欢 点赞 + 分享 的,后来都成了大神。😃