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

ARM64 linux系统的一般执行过程

1、正在运行的用户进程X

2、发生异常(包括系统调用等),CPU完成的工作:把当前程序指针寄存器PC放入ELR_EL1寄存器,把PSTATE放入SPSR_EL1寄存器,把异常产生的原因放在ESR_EL1寄存器,将异常向量表的起始地址VBAR_EL1寄存器的值与该异常类型在异常向量表里的偏移量,得出异常向量表空间的入口地址,然后加载该异常向量空间的入口地址到程序指针寄存器PC

ELR_EL1:Exception Link Register (EL1)

SPSR_EL1:Saved Program Status Register (EL1)

ESR_EL1:Exception Syndrome Register (EL1)

VBAR_EL1:Vector Base Address Register (EL1)

3、保存现场,每个异常向量空间仅有128字节最多可以存储32条指令(每条指令4字节),而且异常向量空间最后一条指令是b指令跳转到异常处理程序保存现场,此时完成了用户静态进程上下文切换到中断上下文,即从进程X的用户态切换到进程X的内核态。

        .align 7就是2的7次方,128个字节

        异常向量表和处理函数在arch/arm64/kernel/entry.S这个文件

        异常处理函数的头文件定义:

4. 异常处理过程中,异常返回前有机会调用schedule函数,其中switch_mm切换进程空间,switch_to切换进程cpu的上下文,将当前进程的X的内核堆栈切换到进程调度算法选出来的next进程(本例定位进程Y)的内核堆栈,并完成了进程CPU上下文寄存器的状态切换

5.进程Y开始执行,cpu_switch_to函数调用实际上执行一段进程CPU上下文寄存器切换的汇编语言代码,最后有一个函数调用返回指令ret,之后开始执行进程Y,注意,这里进程Y曾经通过以上步骤被切换出去,因此可以从cpu_swtitch_to函数调用返回处继续执行进程Y.

6.恢复现场,与3中保存现场相对应。注意,这里是在进程Y的异常过程中,而3中保存现场是在进程X的异常处理过程中,因为内核堆栈从进程X的内核堆栈切换到进程Y的内核堆栈了

7.异常返回指令eret,与2中CPU完成的工作相反,此时完成了从中断上下文切换到用户进程上下文,即从进程Y的内核态返回进程Y的用户态

8.继续执行用户态进程Y

http://www.lryc.cn/news/576153.html

相关文章:

  • C++ 函数特性详解:默认参数、重载、引用与指针区别
  • Flutter 网络请求指南, 从 iOS 到 Flutter 的 Dio + Retrofit 组合
  • 《聊一聊ZXDoc》之汽车服务导向SOME/IP
  • 【k近邻】 K-Nearest Neighbors算法原理及流程
  • 在shell中直接调用使用R
  • 远眺科技工业园区数字孪生方案,如何实现智能管理升级?
  • 告别堡垒机和VPN!Teleport:下一代基础设施统一访问入口
  • CTP IC失效现象和失效原理分析
  • 利用python实现NBA数据可视化
  • np.concatenate
  • 【C/C++】C++26新特性前瞻:全面解析未来编程
  • ​​Oracle表空间全景指南:从扩容监控到碎片回收的终极实践​
  • 车载诊断架构--- 车载诊断中的引导式诊断
  • 人工智能-基础篇-3-什么是深度学习?(DL,卷积神经网络CNN,循环神经网络RNN,Transformer等)
  • 第六章 STM32内存管理
  • 学习接口自动化框架pytest有哪些好处?
  • 小程序 API 开发手册:从入门到高级应用一网打尽
  • C++学习之STL学习:vector的模拟实现
  • Java多线程与JUC
  • window显示驱动开发—DirectX 图形内核子系统(三)
  • RocketMQ 消息长轮询
  • 集群聊天服务器----CMake的使用
  • ServletConfig ServletContext
  • git add 报错UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xaf in position 42
  • 【Elasticsearch】Linux环境下安装Elasticsearch
  • spring ai入门实例
  • LangChain4j(20)——调用百度地图MCP服务
  • Python Async 编程快速入门 | 超简明异步协程指南
  • java代码规范
  • 自动化保护 AWS ECS Fargate 服务:使用 Prisma Cloud 实现容器安全