当前位置: 首页 > news >正文

建设银行四川分行 招聘网站鞍山网站制作推广

建设银行四川分行 招聘网站,鞍山网站制作推广,网站访问统计js代码,保险公司十大排名本篇说清楚CPU的工作模式 工作模式(Working mode) 也叫操作模式#xff08;Operating mode#xff09;又叫处理器模式#xff08;Processor mode#xff09;#xff0c;是 CPU 运行的重要参数#xff0c;决定着处理器的工作方式#xff0c;比如如何裁决特权级别和报告异…本篇说清楚CPU的工作模式 工作模式(Working mode) 也叫操作模式Operating mode又叫处理器模式Processor mode是 CPU 运行的重要参数决定着处理器的工作方式比如如何裁决特权级别和报告异常等。 系列篇为方便理解统一叫工作模式CPU的工作模式. 正如一个互联网项目的后台管理系统有权限管理一样CPU工作是否也有权限(模式)? 一个成熟的软硬件架构肯定会有这些设计只是大部分人不知道也不需要知道老百姓就干好老百姓的活就行了有工作能吃饱饭就知足了宫的事你管那么多干嘛你也管不了. 应用程序就只关注应用功能业务逻辑相关的部分就行了底层实现对应用层屏蔽的越干净系统设计的就越优良. 但鸿蒙内核源码分析系列篇的定位就是要把整个底层解剖全部掰开看看宫里究竟发生了么事.从本篇开始要接触大量的汇编的代码将鸿蒙内核的每段汇编代码一一说明白.如此才能知道最开始的开始发生了什么最后的最后又发生了什么. 七种模式 先看一张图图来源于 ARM720T.pdf第43页在ARM体系中CPU很像有七个老婆的韦小宝工作在以下七种模式中: 用户模式usr该模式是用户程序的工作模式它运行在操作系统的用户态它没有权限去操作其它硬件资源只能执行处理自己的数据也不能切换到其它模式下要想访问硬件资源或切换到其它模式只能通过软中断或产生异常。 快速中断模式fiq快速中断模式是相对一般中断模式而言的用来处理高优先级中断的模式处理对时间要求比较紧急的中断请求主要用于高速数据传输及通道处理中。 普通中断模式irq一般中断模式也叫普通中断模式用于处理一般的中断请求通常在硬件产生中断信号之后自动进入该模式该模式可以自由访问系统硬件资源。 管理模式svc操作系统保护模式CPU上电复位和当应用程序执行 SVC 指令调用系统服务时也会进入此模式操作系统内核的普通代码通常工作在这个模式下。 终止模式abt当数据或指令预取终止时进入该模式中止模式用于支持虚拟内存或存储器保护当用户程序访问非法地址没有权限读取的内存地址时会进入该模式 系统模式sys供操作系统使用的高特权用户模式与用户模式类似但具有可以直接切换到其他模式等特权用户模式与系统模式两者使用相同的寄存器都没有SPSRSaved Program Statement Register已保存程序状态寄存器但系统模式比用户模式有更高的权限可以访问所有系统资源。 未定义模式und未定义模式用于支持硬件协处理器的软件仿真CPU在指令的译码阶段不能识别该指令操作时会进入未定义模式。 除用户模式外其余6种工作模式都属于特权模式 特权模式中除了系统模式以外的其余5种模式称为异常模式大多数程序运行于用户模式进入特权模式是为了处理中断、异常、或者访问被保护的系统资源硬件权限级别系统模式 异常模式 用户模式快中断(fiq)与慢中断(irq)区别快中断处理时禁止中断 每种模式都有自己独立的入口和独立的运行栈空间. 系列篇之CPU篇 已介绍过只要提供了入口函数和运行空间CPU就可以干活了.入口函数解决了指令来源问题运行空间解决了指令的运行场地问题. 而且在多核情况下每个CPU核的每种特权模式都有自己独立的栈空间.注意是特权模式下的栈空间用户模式的栈空间是由用户(应用)程序提供的. 如何让这七种模式能流畅的跑起来呢? 至少需要以下解决三个基本问题. 栈空间是怎么申请的?申请了多大?被切换中的模式代码放在哪里?谁来安排它们放在哪里?模式之间是怎么切换的?状态怎么保存? 这个汇编文件大概 500多行非常重要本篇受限于篇幅只列出一小部分说清楚以上三个问题.系列其余篇中将详细说明每段汇编代码的作用和实现可前往查阅. 1.异常模式栈空间怎么申请? 鸿蒙是如何给异常模式申请栈空间的 #define CORE_NUM LOSCFG_KERNEL_SMP_CORE_NUM //CPU 核数 #ifdef LOSCFG_GDB #define OS_EXC_UNDEF_STACK_SIZE 512 #define OS_EXC_ABT_STACK_SIZE 512 #else #define OS_EXC_UNDEF_STACK_SIZE 40 #define OS_EXC_ABT_STACK_SIZE 40 #endif #define OS_EXC_FIQ_STACK_SIZE 64 #define OS_EXC_IRQ_STACK_SIZE 64 #define OS_EXC_SVC_STACK_SIZE 0x2000 //8K #define OS_EXC_STACK_SIZE 0x1000 //4K六种特权模式申请对应的栈运行空间 __undef_stack:.space OS_EXC_UNDEF_STACK_SIZE * CORE_NUM __undef_stack_top:__abt_stack:.space OS_EXC_ABT_STACK_SIZE * CORE_NUM __abt_stack_top:__irq_stack:.space OS_EXC_IRQ_STACK_SIZE * CORE_NUM __irq_stack_top:__fiq_stack:.space OS_EXC_FIQ_STACK_SIZE * CORE_NUM __fiq_stack_top:__svc_stack:.space OS_EXC_SVC_STACK_SIZE * CORE_NUM __svc_stack_top:__exc_stack:.space OS_EXC_STACK_SIZE * CORE_NUM __exc_stack_top:代码解读 六种异常模式都有自己独立的栈空间每种模式的OS_EXC_***_STACK_SIZE栈大小都不一样最大是管理模式svc8K最小的只有40个字节. svc模式为什么要这么大呢? 因为开机代码和系统调用代码的运行都在管理模式系统调用的函数实现往往较复杂最大不能超过8K. 例如:某个系统调用中定义一个8K的局部变量内核肯定立马闪蹦.因为栈将溢出处理异常的程序出现了异常后面就再也没人兜底了只能是死局.鸿蒙是支持多核处理的CORE_NUM表明每个CPU核的每种异常模式都有自己的独立栈空间.注意理解这个是理解内核代码的基础.否则会一头雾水. 2.异常模式入口地址在哪? 再看一张图图来源于 ARM720T.pdf 第56页 这就是一切一切的开始指定所有异常模式的入口地址表这就是规定没得商量的.在低地址情况下.开机代码就是放在 0x00000000的位置 触发开机键后硬件将PC寄存器置为0x00000000开始了万里长征的第一步.在系统运行过程中就这么来回跳. b reset_vector 开机代码b _osExceptUndefInstrHdl 异常处理之CPU碰到不认识的指令b _osExceptSwiHdl 异常处理之:软中断b _osExceptPrefetchAbortHdl 异常处理之:取指异常b _osExceptDataAbortHdl 异常处理之:数据异常b _osExceptAddrAbortHdl 异常处理之:地址异常b OsIrqHandler 异常处理之:硬中断b _osExceptFiqHdl 异常处理之:快中断 以上是各个异常情况下的入口地址在reset_vector_mp.S中都能找到经过编译链接后就会变成 b 0x00000000 开机代码b 0x00000004 异常处理之CPU碰到不认识的指令b 0x00000008 异常处理之:软中断b 0x0000000C 异常处理之:取指异常b 0x00000010 异常处理之:数据异常b 0x00000014 异常处理之:地址异常b 0x00000018 异常处理之:硬中断b 0x0000001C 异常处理之:快中断 不管是主动切换的异常还是被动切换的异常都会先跳到对应的入口去处理.每个异常的代码都起始于汇编处理完了再切回去.举个例子: 某个应用程序调用了系统调用(比如创建定时器)会经过以下大致过程: swi指令将用户模式切换到管理模式svc在管理模式中先保存用户模式的现场信息(R0-R15寄存器值入栈)获取系统调用号知道是调用了哪个系统调用查询系统调用对应的注册函数执行真正的创建定时器函数执行完成后恢复用户模式的现场信息(R0-R15寄存器值出栈)跳回用户模式继续执行 各异常处理代码很多不一一列出本篇只列出开机代码请尝试读懂鸿蒙内核开机代码后续讲详细说明每行代码的用处. 开机代码 reset_vector: //开机代码/* clear register TPIDRPRW */mov r0 #0 r0 0mcr p15 0 r0 c13 c0 4 c0c13 0 C13为进程标识符 含义见 ARM720T.PDF 第64页/* do some early cpu setup: i/d cache disable mmu disabled */ 禁用MMU i/d缓存mrc p15 0 r0 c1 c0 0 r0 c1 c1寄存器详细解释见第64页bic r0 #(112) 位清除指令清除r0的第11位bic r0 #(12 | 10) 清除第0和2位 禁止 MMU和缓存 0位:MMU enable/disable 2位:Cache enable/disablemcr p15 0 r0 c1 c0 0 c1r0 /* r11: delta of physical address and virtual address */物理地址和虚拟地址的增量adr r11 pa_va_offset 将基于PC相对偏移的地址pa_va_offset值读取到寄存器R11中ldr r0 [r11] 将R11的值给r0sub r11 r11 r0 r11 r11 - r0 mrc p15 0 r12 c0 c0 5 /* r12: get cpuid */ 获取CPUIDand r12 r12 #MPIDR_CPUID_MASK r12经过掩码过滤cmp r12 #0 当前是否为0号CPUbne secondary_cpu_init 不是0号主CPU则调用secondary_cpu_init/* if we need to relocate to proper location or not */adr r4 __exception_handlers /* r4: base of load address */ r4获得加载基地址ldr r5 SYS_MEM_BASE /* r5: base of physical address */r5获得物理基地址subs r12 r4 r5 /* r12: delta of load address and physical address */ r12r4-r5 加载地址和物理地址的增量beq reloc_img_to_bottom_done /* if we load image at the bottom of physical address *//* we need to relocate image at the bottom of physical address */ldr r7 __exception_handlers /* r7: base of linked address (or vm address) */ldr r6 __bss_start /* r6: end of linked address (or vm address) */sub r6 r7 /* r6: delta of linked address (or vm address) */add r6 r4 /* r6: end of load address */ 异常的优先级 当同时出现多个异常时该响应哪一个呢?这涉及到了异常的优先级顺序如下 1.Reset (highest priority).2.Data Abort.3.FIQ.4.IRQ.5.Prefetch Abort.6.Undefined Instruction SWI (lowest priority). 可以看出swi的优先级最低swi就是软中断系统调用就是通过它来实现的. 3.异常模式怎么切换? 写应用程序经常会用到状态来记录各种分支逻辑传递参数.这么多异常模式相互切换中间肯定会有很多的状态需要保存.比如:如何能知道当前运行在哪种模式下?怎么查?去哪里查呢? 答案是: CPSR(一个) 和 SPSR(5个) 这些寄存器 保存有关最近执行的ALU操作的信息控制中断的启用和禁用设置处理器操作模式 CPSR 寄存器 CPSR(current program status register)当前程序的状态寄存器 CPSR有4个8位区域标志域F、状态域S、扩展域X、控制域C 32 位的程序状态寄存器可分为4 个域 位[3124]为条件标志位域用f 表示 位[2316]为状态位域用s 表示 位[158]为扩展位域用x 表示 位[70]为控制位域用c 表示 CPSR和其他寄存器不一样其他寄存器是用来存放数据的都是整个寄存器具有一个含义. 而CPSR寄存器是按位起作用的也就是说它的每一位都有专门的含义记录特定的信息. CPSR的低8位包括I、F、T和M[40]称为控制位程序无法修改 除非CPU运行于特权模式下程序才能修改控制位 N、Z、C、V均为条件码标志位。它们的内容可被算术或逻辑运算的结果所改变 并且可以决定某条指令是否被执行!意义重大! CPSR的第31位是 N符号标志位。它记录相关指令执行后其结果是否为负. 如果为负 N 1如果是非负数 N 0.CPSR的第30位是Z0标志位。它记录相关指令执行后其结果是否为0. 如果结果为0.那么Z 1.如果结果不为0那么Z 0.CPSR的第29位是C进位标志位(Carry)。一般情况下进行无符号数的运算。 加法运算当运算结果产生了进位时无符号数溢出C1否则C0。 减法运算包括CMP当运算时产生了借位时无符号数溢出C0否则C1。CPSR的第28位是V溢出标志位(Overflow)。在进行有符号数运算的时候 如果超过了机器所能标识的范围称为溢出。 MSR{条件} 程序状态寄存器(CPSR 或SPSR)_域操作数 MSR 指令用于将操作数的内容传送到程序状态寄存器的特定域中 示例如下 MSR CPSRR0 传送R0 的内容到CPSRMSR SPSRR0 传送R0 的内容到SPSRMSR CPSR_cR0 传送R0 的内容到CPSR但仅仅修改CPSR中的控制位域 MRS{条件} 通用寄存器程序状态寄存器(CPSR 或SPSR) MRS 指令用于将程序状态寄存器的内容传送到通用寄存器中。该指令一般用在以下两种情况 当需要改变程序状态寄存器的内容时可用MRS 将程序状态寄存器的内容读入通用寄存器修改后再写回程序状态寄存器。当在异常处理或进程切换时需要保存程序状态寄存器的值可先用该指令读出程序状态寄存器的值然后保存。 示例如下 MRS R0CPSR 传送CPSR 的内容到R0 MRS R0SPSR 传送SPSR 的内容到R0MRS指令是唯一可以直接读取CPSR和SPSR寄存器的指令 SPSR 寄存器 SPSRsaved program status register程序状态保存寄存器.五种异常模式下一个状态寄存器SPSR用于保存CPSR的状态以便异常返回后恢复异常发生时的工作状态。 1、SPSR 为 CPSR 中断时刻的副本退出中断后将SPSR中数据恢复到CPSR中。2、用户模式和系统模式下SPSR不可用所以SPSR寄存器只有5个 鸿蒙全栈开发全新学习指南 也为了积极培养鸿蒙生态人才让大家都能学习到鸿蒙开发最新的技术针对一些在职人员、0基础小白、应届生/计算机专业、鸿蒙爱好者等人群整理了一套纯血版鸿蒙HarmonyOS Next全栈开发技术的学习路线【包含了大厂APP实战项目开发】。 本路线共分为四个阶段 第一阶段鸿蒙初中级开发必备技能 第二阶段鸿蒙南北双向高工技能基础gitee.com/MNxiaona/733GH 第三阶段应用开发中高级就业技术 第四阶段全网首发-工业级南向设备开发就业技术https://gitee.com/MNxiaona/733GH 《鸿蒙 (Harmony OS)开发学习手册》共计892页 如何快速入门 1.基本概念 2.构建第一个ArkTS应用 3.…… 开发基础知识:gitee.com/MNxiaona/733GH 1.应用基础知识 2.配置文件 3.应用数据管理 4.应用安全管理 5.应用隐私保护 6.三方应用调用管控机制 7.资源分类与访问 8.学习ArkTS语言 9.…… 基于ArkTS 开发 1.Ability开发 2.UI开发 3.公共事件与通知 4.窗口管理 5.媒体 6.安全 7.网络与链接 8.电话服务 9.数据管理 10.后台任务(Background Task)管理 11.设备管理 12.设备使用信息统计 13.DFX 14.国际化开发 15.折叠屏系列 16.…… 鸿蒙开发面试真题含参考答案:gitee.com/MNxiaona/733GH 鸿蒙入门教学视频 美团APP实战开发教学gitee.com/MNxiaona/733GH 写在最后 如果你觉得这篇内容对你还蛮有帮助我想邀请你帮我三个小忙点赞转发有你们的 『点赞和评论』才是我创造的动力。关注小编同时可以期待后续文章ing不定期分享原创知识。想要获取更多完整鸿蒙最新学习资源请移步前往小编gitee.com/MNxiaona/733GH
http://www.w-s-a.com/news/625463/

相关文章:

  • 企业网站的建设一般要素有网站定制公司地址
  • 婚纱摄影网站设计案例四川省城乡建设厅官方网站
  • 怎么做海淘网站wordpress首页表单
  • 大连网站优化技术长沙高端网站建设服务
  • 郎创网站建设做的网站 v2ex
  • 广东网站建设教程江西城乡住房建设网站
  • 做ppt卖给网站wordpress insert
  • 文化传媒公司网站模板wordpress转typecho
  • 网站建设设计视频郑州 服装网站建设
  • 网站建设什么公司好织梦cms默认密码
  • 大型网站 空间网上商城官网入口
  • 成都全美网站建设江苏专业网站建设
  • 足球网站模板有帮忙做阿里巴巴网站的吗
  • 建设厅报名网站京东网站的建设与发展前景
  • 金寨县住房和城乡建设部网站网页作业怎么做一个网站
  • 做ppt模板网站有哪些内容wap是什么意思卡老师
  • 网站建设一定要域名吗网站后台关键词设置
  • 标书制作公司网站坪山网站建设哪家便宜
  • 防止做网站的人修改数值门户网站架构
  • 电子项目外包网站考二建需要什么学历和专业
  • 做网站推广引流效果好吗电商推广技巧
  • 亦庄网站建设价格广州网站推广服务
  • 十大免费ppt网站下载重庆在线高校平台登录
  • 做环保网站案例百度seo教程
  • 体育用品网站模板网站建设话术
  • 潍坊网站建设服务商做网站多久能盈利
  • 嘉定区做网站房产信息查询官网
  • 网站直播间 是怎么做的唐山论坛建站模板
  • 深圳洲聚网站建设wordpress 泛解析
  • 五金东莞网站建设技术支持wordpress 添加模板