当前位置:首页 > Java程序 > 正文内容

鸿蒙系统开源码(鸿蒙源码 安卓内核)

abcsky887个月前 (10-30)Java程序96

本篇文章给大家谈谈

百万汉字注解 >> 精读内核源码,中文注解分析, 深挖地基工程,大脑永久记忆,四大码仓每日同步更新百篇博客分析 >> 故事说内核,问答式导读,生活式比喻,表格化说明,图形化展示,多站点每日同步更新

鸿蒙系统开源码(鸿蒙源码 安卓内核)

系列篇硬件部分说明基于ARM720T.pdf(https://gitee.com/weharmony/docs/raw/master/pic/other/cpu.pdf)文档.本篇说清楚CPU的工作模式

读本篇之前建议先读鸿蒙内核源码分析(总目录)其他篇.正如一个互联网项目的后台管理系统有权限管理一样,CPU工作是否也有权限(模式)? 一个成熟的软硬件架构,肯定会有这些设计,只是大部分淘宝免费流量推广人不知道,也不需要知道,老百姓就干好老百姓的活就行了,有工作能吃饱饭就知足了,宫的事你管那么多干嘛,你也管不了.

应用程序就只关注应用功能,业务逻辑相关的部分就行了,底层实现对应用层屏蔽的越干净系统设计的就越优良.但鸿蒙内核源码分析系列篇的定位就是要把整个底层解剖,全部掰开,看看宫里究竟发生了么事.从本篇开始要接触大量的汇编的代码,将鸿蒙内核的每段汇编代码一一说明白.如此才能知道最开始的开始发生了什么,最后的最后又发生了什么.

七种模式先看一张图,图来源于ARM720T.pdf第43页,在ARM体系中,CPU工作在以下七种模式中:

用户模式(usr):属于正常的用户模式,ARM处理器正常的程序执行状淘宝免费流量推广态快速中断模式(fiq):用于处理快速中断,对高速数据传输或通道处理外部中断模式(irq):对一般情况下的中断进行处理管理模式(svc):属于操作系统使用的保护模式,处理软件中断swi reset。

数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于处理存储器故障、实现虚拟存储器和存储器保护系统模式(sys):运行具有特权的操作系统任务未定义指令中止模式(und):处理未定义的指令陷阱,当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。

除了用户模式外,其它六种均为特权模式或者叫异常模式每种模式都有自己独立的入口和独立的运行栈空间.系列篇之CPU篇已介绍过只要提供淘宝免费流量推广了入口函数和运行空间,CPU就可以干活了.入口函数解决了指令来源问题,运行空间解决了指令的运行问题. 而且在多核情况下,每个CPU核的每种异常模式都有自己独立的栈空间.注意是异常模式下的栈空间,用户模式的栈空间是由用户(应用)程序提供的.。

如何让这七种模式能流畅的跑起来呢? 至少需要以下解决三个基本问题.栈空间是怎么申请的?申请了多大?被切换中的模式代码放在哪里?谁来安排它们放在哪里?模式之间是怎么切换的?状态怎么保存?本篇代码来源于鸿蒙内核源码之reset_vector_mp.S,点击查看 这个汇编文件大概 500多行,非常重要,本篇受限于篇幅只列出一小部分,说清楚以上三个问题.系列其余篇中淘宝免费流量推广将详细说明每段汇编代码的作用和实现,可前往查阅.

1.异常模式栈空间怎么申请?鸿蒙是如何给异常模式申请栈空间的

代码解读六种异常模式都有自己独立的栈空间每种模式的OS_EXC_***_STACK_SIZE栈大小都不一样,最大是管理模式(svc)8K,最小的只有40个字节. svc模式为什么要这么大呢? 因为开机代码和系统调用代码的运行都在管理模式,系统调用的函数实现往往较复杂,最大不能超过8K. 例如:某个系统调用中定义一个8K的局部变量,内核肯定立马闪蹦.因为栈将溢出,处理异常的程序出现了异常,后面就再也没人兜底了,只能是死局.

鸿蒙是支持多核处理的,CORE_NUM表明,每个CPU核的每种异常模淘宝免费流量推广式都有自己的独立栈空间.注意理解这个是理解内核代码的基础.否则会一头雾水.2.异常模式入口地址在哪?再看一张图,图来源于ARM720T.pdf第56页

这就是一切一切的开始,指定所有异常模式的入口地址表,这就是规定,没得商量的.在低地址情况下.开机代码就是放在0x00000000的位置,触发开机键后,硬件将PC寄存器置为0x00000000,开始了万里长征的第一步.在系统运行过程中就这么来回跳.

以上是各个异常情况下的入口地址,在reset_vector_mp.S中都能找到,经过编译链接后就会变成

不管是主动切换的异常,还是被动切换的异常,都会先跳到对应的入口去处理.每个异常的代码都起始于汇编,处理淘宝免费流量推广完了再切回去.举个例子: 某个应用程序调用了系统调用(比如创建定时器),会经过以下大致过程:swi指令将用户模式切换到管理模式(svc)

在管理模式中先保存用户模式的现场信息(R0-R15寄存器值入栈)获取系统调用号,知道是调用了哪个系统调用查询系统调用对应的注册函数执行真正的创建定时器函数执行完成后,恢复用户模式的现场信息(R0-R15寄存器值出栈)

跳回用户模式继续执行各异常处理代码很多,不一一列出,本篇只列出开机代码,请尝试读懂鸿蒙内核开机代码,后续讲详细说明每行代码的用处.开机代码

异常的权限当同时出现多个异常时,该响应哪一个呢?就涉及到了异常的权限,如下Reset (highest pri淘宝免费流量推广ority).Data Abort.FIQ.IRQ.Prefetch Abort.Undefined Instruction, SWI (lowest priority).

可以看出swi的权限最低,swi就是软件中断,系统调用就是通过它来实现的.3.异常模式怎么切换?写应用程序经常会用到状态,来记录各种分支逻辑,传递参数.这么多异常模式,相互切换,中间肯定会有很多的状态需要保存.比如:如何能知道当前运行在哪种模式下?怎么查?去哪里查呢? 答案是: CPSR 和 SPSR CPSR:程序状态寄存器(current program status register) (当前程序状态寄存器),在任何处淘宝免费流量推广理器模式下被访问。

SPSR:程序状态保存寄存器(saved program status register),每一种处理器模式下都有一个状态寄存器SPSR,SPSR用于保存CPSR的状态,以便异常返回后恢复异常发生时的工作状态。

当特定 的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容在异常中断退出时,可以用SPSR来恢复CPSR这些寄存器:保存有关最近执行的ALU操作的信息控制中断的启用和禁用设置处理器操作模式

举报/反馈

扫描二维码推送至手机访问。

版权声明:本文由海南拓宏网络科技工作室发布,如需转载请注明出处。

本文链接:http://4blc.com/post/809.html

分享给朋友:

“鸿蒙系统开源码(鸿蒙源码 安卓内核)” 的相关文章

idea2019.2汉化包(idea2019汉化包下载)

今天给各位分享 原标题:IntelliJ IDEA 2022.3.3汉化版,Java开发工具IntelliJ IDEA 2022 汉化版是一款强大的Java开发工具,为最大限度地提高开发人员的工作效率而设计,即时和巧妙的代码完成,动态代码分析,为各种其他语言(如SQL,JPQL,H...

string、stringbuffer和stringbuilder(string,stringbuffer以及stringbuilde三者之间的区别?)

今天给各位分享 △Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 224 篇原创分享作者 l Hollis来源 l Hollis(ID:hollischuang)这是一个知乎上面很火的问题(https://www.zhihu....

武汉it编程 java python 前端开发培训(武汉java培训班)

本文分享给大家的是: 原标题:武汉java培训技术学习对学历有什么要求在武汉有很多的java培训机构对想要通过java培训的方式来学习开发技术的小伙伴的要求还是有一定要求的,随着java开发技术不断迭代更新,企业对java开发技术的要求不断的提高,同时,对开发技术人员的学历也有一定...

java校招八股文(程序员面试八股文是什么)

本文分享给大家的是: 前言现如今,Java 面试的本质就是八股文,把八股文面试题背好,面试才有可能表现好金九银十招聘黄金季已经来临!大家在考研和找工作中纠结的时候,不妨先看一下面试题,毕竟我们的最终目标就是为了找一份心仪的工作!好工作都是早下手为强的,所以同学们要早做准备!。...

大数据和java开发哪个工资高(大数据跟java)

本文分享给大家的是: 很多小伙伴还在纠结Java开发和Java大数据2个方向,今天达妹就帮你分析一下,Java和Java大数据到底选哪个,做哪个方向薪资更高01Java与大数据的关系Java是一种语言,而大数据更像是一个方法论或者是集合。 从事大数据行业,需要掌握的技能比较...

java课程培训怎么样(java高端培训机构)

本篇文章给大家谈谈 Java软件开发想必大家都是了解的,作为互联网炙手可热的行业,这类的相关人才各方面都得到了不少的优待,所以,想要进入这个行业发展的年轻人非常多,相对的大家都更喜欢报名Java培训课程来掌握这项技能,毕竟是最快捷的途径。 那么对于培训课程的学习,是不是都一...