ARM处理器工作模式学习

ARM处理共有七种工作模式:
1. 用户模式(usr,User Mode),这是ARM正常的程序执行状态;
2. 快速中断模式(fiq,Fast IRQ),当触发快速中断时进入该模式;
3. 中断模式(irq),当产生外部中断时进入该模式;
4. 管理模式(svc),这是操作系统使用的保护模式;
5. 数据访问终止模式(abt, Abort Mode),当数据或指令预取终止时进入该模式;
6. 系统模式(sys, System Mode),运行具有特权的操作系统任务;
7. 未定义指令终止模式(und, Undefined Mode),当未定义指令执行时进入该模式;

本文主要学习data abort这一种,这是因为应用程序造成的程序崩溃很多都是这一种状况。
比如空指针访问、对ro data的访问、访问无效的函数指针等状况都会进入这一种状况。

所以遇到data abort这一种状况要如何debug呢?
这就需要用到从内核态恢复用户态callstack的方法了。

Linux系统从用户态切入内核态主要有以下几种情况:
1. 由硬件中断和程序异常引起的被动的从用户态切入内核态;
2. 用户态程序主动发出系统调用切入内核态.

每一个进程都有一个进程控制块PCB,具体就是通过task_struct结构体来描述的;
Linux系统对进程进行管理实际上就是对task_struct结构类型变量的管理。

进程从用户态切换内核态,需要将一些必要的信息比如PC/LR等保存到内核栈中;
这样当从内核态返回到用户态时就能够根据内核栈中保存的信息恢复到用户态。

Linux进程分为用户态和内核态,并且对于32bit系统而言每个进程都拥有4GB的虚拟地址空间,
其中较低的3GB供各个进程使用,称为用户空间;高1GB字节供内核使用,称之为内核空间。
内核空间是供所有进程共享使用的;
各进程用户态虚拟地址空间相互独立,对于用户进程而言它们都以为自己是系统中唯一的进程;
所以不同进程无法访问到其它进程的用户态虚拟地址空间。
不同进程的相同的虚拟地址并不会相互影响,因为它们实际关联的物理地址不同。
虚拟地址和物理地址的转换通过MMU进行。

本篇作为入门学习,后面会学习更多调试相关的方法特别是跟体系结构相关的知识。
敬请期待!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值