ARM处理器模式

来源:互联网 发布:python字符串截取 编辑:程序博客网 时间:2024/05/16 05:13

参考《深入浅出嵌入式底层软件开发》和《ARM嵌入式系统结构与编程》

*1. ARM处理器共分7种模式:

     处理器工作模式 

                            特权模式               

                 异常模式                      

                                说明     

用户(user)模式

 

 

用户程序运行模式

系统(system)模式

该组模式下可以任意访问系统资源

 

运行特权级的操作系统任务

一般中断(IRQ)模式

通常由系统异常中断状态切换进该组模式

普通中断模式

快速中断(FIQ)模式

快速中断模式

管理(supervisor)模式

提供操作系统使用的一种保护模式,swi命令状态

中止(abort)模式

虚拟内存管理和内存数据访问保护

未定义指令终止(undefined)模式

支持通过软件仿真硬件的协处理

 

        CPU的模式可以简单的理解为当前CPU的工作状态,比如:当前操作系统正在执行用户程序,那么当前CPU工作在用户模式,这时网卡上有数据到达,产生中断信号,CPU自动切换到一般中断模式下处理网卡数据(普通应用程序没有权限直接访问硬件),处理完网卡数据,返回到用户模式下继续执行用户程序。

 

特权模式(Privileged Modes):除去用户模式的,其他所有模式。6种。

 异常模式:特权模式中,除去系统模式的,其他所有模式。5种。

 

*2. 处理模式是如何切换的?

     可以通过软件控制进行切换,也可以通过外部中断或者异常处理过程进行切换。

 

   特权模式:   可以自由的切换处理器模式,而用户模式不能直接切换到别的模式。

                          (why? 为了保护系统资源,ARM内部寄存器和一些片内外设在硬件设计上只允许(或者可选为只允许)特权模式下访问,不允许在用户模式下访问。)

 

  异常模式:   它们 除了可以通过在特权下的程序切换进入外,也可以由特定的异常和中断进入。

                          (比如硬件产生中断信号进入中断异常模式,读取没有权限数据进入中止异常模式,执行未定义指令时进入未定义指令中止异常模式。

                           其中管理模式也称为超级用户模式,是为操作系统提供软件中断的特有模式,正是由于有了软件中断,用户程序才可以通过系统调用切换到管理模式。)

                    

  用户模式: 可以通过软件控制产生异常中断SWI,进入管理模式。

      

*3. 以上几种模式的理解。

       用户模式:大多数的用户程序,工作在用户模式下。                 

                        这时,应用程序有些操作是受限的:

                           1) 不能访问一些受操作系统保护的系统资源。(例如:可以防止用户程序破坏操作系统)

                           2) 不能自己切换处理器模式。(可以产生异常中断(by 应用程序),在异常中断的处理中,改变处理器的模式)

                                           

       系统模式:机器上有操作系统的时候,会用到。没有操作系统的时候,这个模式没用。

                           *问过老师后,自己的理解:

                            1)当没有操作系统的时候,上电后,进入管理模式,由他进行初始化,初始化后交给用户模式。

                            2)有操作系统的时候:

                                 2.1)上电后的模式切换:

                                         step1: 上电后,进入管理模式。

                                         step2:  管理模式初始化后,启动操作系统,把权限交给系统模式。

                                         step3:  系统模式初始化完后,启动第一个进程,把权限交给用户模式。

                                2.2) 系统调用后的模式切换:

                                        step1: 用户模式下调用SWI,先切换到管理模式。

                                        step2: 管理模式,再把权限交给系统模式。

 

                            *系统模式,是供操作系统使用的特权模式。与用户模式类似(和它共用一套寄存器),但不受限制。

                              1)可以方便的访问用户模式的寄存器

                              2)可以访问所有的系统资源

                              3)也可以直接进行处理器模式切换。

       

      管理模式:是CPU上电后的默认模式,因此在该模式下主要用来做系统的初始化。

                           软中断处理也在该模式下,当用户模式下的用户程序请求使用硬件资源时通过软件中断进入该模式。

                

       快速中断模式:是相对一般中断模式而言的,它是用来处理对时间要求比较紧急的中断请求,主要用于高速数据传输及通道处理中。

                                 目前的理解是,当中断处理非常简单,仅仅使用R8-R14寄存器时,FIQ处理程序可以不保存和恢复现场(因为它只用了自己FIQ的R8-R14物理寄存器,没破坏别的寄存器),所以成为快速中断处理。

 

       外部中断模式:外部设备发出中断请求后,就会进入到外部中断模式。

                                  进入外部中断模式的几个条件:

                                    1)处理器的外部中断管脚要使能

                                    2)外部设备要发中断请求

                                    3)外部中断请求后,程序状态寄存器CPSR的中断禁止位I上要清零。

                                    经过以上3步后,处理器产生外部中断,在处理过程中切换处理器模式。

        

      数据访问中止模式:   用于支持虚拟内存或存储器保护, 当用户程序访问非法地址、没有权限读取的内存地址时,会进入该模式。

                                   linux下编程时经常出现的segment fault(段错误)通常都是在该模式下抛出返回的。

 

     指令中止模式:未定义指令异常中断由当前执行的指令在ALU里执行时产生。

                            发生条件:

                           ARM 试图执行一条真正的未定义指令;
                           ARM 遇到一条协处理器指令,可是系统中的协处理器硬件并不存在;
                           ARM 遇到一条协处理器指令,系统中协处理器硬件也存在,可是ARM 不是在管理模式。
                           解决方法:
                           在处理程序中执行软协处理器仿真;
                           禁止在非管理模式下操作;
                           报告错误并退出。
                                 

      举个例子吧:

       好比一个只能串行工作的项目团队在干活。之前这个理解有误,没分清管理模式和系统模式的区别。

      这个团队有几个要素:

     1. 老板boss。理论上他监控一切,可以支配一切资源:软硬件资源,项目切换。

          但是他不必知道manager其他中断处理的栈和返回地址,因为他们自己就能处理好。

 

          所以实际情况下,boss也不用管那么多,从ARM角度看来,他负责:

          1)初始化了公司的运行平台。

                【然后交给别人去干活。】

          2)【当上层开发人员权限受阻时,调用SWI,把boss请来。】

               Boss接过来继续处理,有manager在的话,交给manager。

               没manager的话,自己处理了。

              他的信条是:不该上层人员看到的东西,是不能让上层看到滴。。

              

     2.项目管理者manager。

              他以manager的身份,可以去访问一切系统资源。

               但是MS他不能直接和worker打交道,需要boss这个中间桥梁。              

 

    3.上层开发人员worker。           

          大多数情况,是worker在工作。他只做自己的分内事(预先制定好的任务)。

          他的使用资源有限,权限受阻就找boss。boss或manager(有manager的话)帮他全全搞定。

          他不能直接让boss过来处理,只能按个异常中断的红按钮,boss再过来。

           (PS:为什么要这样呢,我还没想通~~)        

 

   4.  客户。

          有客户来拿走东西,或者送东西。

          按下异常中断按钮。团队的当前工作要先停下来,和客户交互完数据后。团队再继续工作。

 

   5.  一些错误的操作。

          worker需要访问的数据无效,或者他要执行的某一动作无效。

          按下异常中断按钮。团队的当前工作要停下来,公司预先设置了这些错误操作的处理办法,现在开始处理。处理完后团队再继续工作。

         

 

 

 

原创粉丝点击