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

Xv6异常处理(二):内核异常

kernelvec汇编函数

与用户异常不同,当内核发生异常(中断/异常),将首先跳转到kernelve汇编函数(用户异常是uservec)。该汇编函数执行如下操作:

  1. 保存内核context到内核栈上(用户是保存到trapframe页)
  2. 调用kerneltrap内核异常处理程序
  3. 恢复内核context,注意因为操作系统调度原因,此时内核可能运行在与发生异常前不同的CPU上,因此不用恢复tp寄存器
  4. 执行sret指令返回内核发生异常前的地方
.globl kerneltrap
.globl kernelvec
.align 4
kernelvec:# make room to save registers.addi sp, sp, -256# save caller-saved registers.sd ra, 0(sp)sd sp, 8(sp)sd gp, 16(sp)sd tp, 24(sp)sd t0, 32(sp)sd t1, 40(sp)sd t2, 48(sp)sd a0, 72(sp)sd a1, 80(sp)sd a2, 88(sp)sd a3, 96(sp)sd a4, 104(sp)sd a5, 112(sp)sd a6, 120(sp)sd a7, 128(sp)sd t3, 216(sp)sd t4, 224(sp)sd t5, 232(sp)sd t6, 240(sp)# call the C trap handler in trap.ccall kerneltrap# restore registers.ld ra, 0(sp)ld sp, 8(sp)ld gp, 16(sp)# not tp (contains hartid), in case we moved CPUsld t0, 32(sp)ld t1, 40(sp)ld t2, 48(sp)ld a0, 72(sp)ld a1, 80(sp)ld a2, 88(sp)ld a3, 96(sp)ld a4, 104(sp)ld a5, 112(sp)ld a6, 120(sp)ld a7, 128(sp)ld t3, 216(sp)ld t4, 224(sp)ld t5, 232(sp)ld t6, 240(sp)addi sp, sp, 256# return to whatever we were doing in the kernel.sret

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 练习题 - Django 4.x Models Meta 元数据选项
  • 电竞显示器哪个牌子好
  • DNS攻击频发,打造防劫持DNS需强化“数据治理”理念
  • 探索Facebook的黑暗面:数字化社交的双面剑
  • 了解Node开发基础知识
  • Python--TCP/UDP通信
  • 使用gitee如何回滚上一个版本,简单操作方式-gitee自带功能无需使用代码
  • P9235 [蓝桥杯 2023 省 A] 网络稳定性
  • 【动态规划】下降路径最小和 C++
  • 互联网全景消息(5)之RocketMq快速入门(下)
  • DHCP协议原理(网络协议)
  • Appium高级话题:混合应用与原生应用测试策略
  • js中箭头函数与普通函数的区别
  • idea 恢复 pom 文件呈现灰色并带删除线
  • 将Java程序打包成EXE程序
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • Angular 4.x 动态创建组件
  • CSS盒模型深入
  • ES6 ...操作符
  • express + mock 让前后台并行开发
  • flutter的key在widget list的作用以及必要性
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 前端面试之闭包
  • 前端学习笔记之观察者模式
  • 首页查询功能的一次实现过程
  • 网页视频流m3u8/ts视频下载
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​​​​​​​开发面试“八股文”:助力还是阻力?
  • ​Python 3 新特性:类型注解
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • #Linux(Source Insight安装及工程建立)
  • (javascript)再说document.body.scrollTop的使用问题
  • (多级缓存)多级缓存
  • (二)c52学习之旅-简单了解单片机
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (一) springboot详细介绍
  • (转)创业的注意事项
  • .apk文件,IIS不支持下载解决
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .NET 8 跨平台高性能边缘采集网关
  • .NET Core跨平台微服务学习资源
  • .net 反编译_.net反编译的相关问题
  • .net 获取url的方法
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .NET学习全景图
  • //usr/lib/libgdal.so.20:对‘sqlite3_column_table_name’未定义的引用
  • ::前边啥也没有
  • ??javascript里的变量问题
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法