lab4 是traps相关

Backtrace

添加一个backtrace函数,sys_sleep调用这个函数后可以打印出函数调用栈

实现:

kernel/riscv.h里添加函数来获取frame pointer:

在kernel/printf.c里添加backtrace函数:

sys_sleep里调用即可

Alarm

实现两个系统调用:int sigalarm(int ticks, void (*handler)())ticks时钟单位调用handlerint sigreturn(void)handler结束时调用,用来恢复调用handler之前的状态。

实现

proc.h里新增几个field

sysproc.c添加两个系统调用实现(新增系统调用过程已省略):

最后在trap.c里usertrap函数里添加时钟中断时的处理,
因为handler是用户函数,需要返回用户态才能调用,所以将epc指向handler,之后跳回用户态时会执行epc里保存的指令。
为了恢复之前的状态,需要保存一些寄存器,trapframe里有什么就保存什么,方便点,这里偷懒直接将trapframe保存在栈上面了。
如果添加87行重置的话会过不了test2,所以把重置放到了sigreturn里,大致意思是执行handler的时间不算进ticks里。

总结

总结一下系统调用过程:

  1. ecall
    ecall是RISC-V硬件指令,只做了最低限度的几件事,允许软件有最大的灵活性,可以随心所欲地设计操作系统
    ecall做了三件事:
    1.将模式从用户模式更改为管理者模式
    2.将程序计数器pc保存在sepc寄存器
    3.跳转到stvec指向的指令之后开始执行trampoline
  2. trampoline 保存trapoframe中用户寄存器,切换页表
  3. 调用usertrap,这里调用syscall
  4. syscall调用对应的系统调用函数
  5. 系统调用返回后调用usertrapret
  6. usertrapret调用trampoline执行userset,最后回到用户空间

MIT6.S081学习总结-lab4:traps相关推荐

  1. Mit6.S081学习记录

    Mit6.S081学习记录 前言 一.课程简述 二.课程资源 1,课程主页 2,参考书 3,实验环境 三.学习过程 Mit6.S081-实验环境搭建 Mit6.S081-GDB使用 Mit6.S081 ...

  2. 操作系统-MIT6.S081学习

    操作系统 Lec01 1.2 操作系统结构 以距型表示: 硬件资源包括:CPU.内存.磁盘.网卡,在底层 架构上层,需要运行各种的应用程序,例如 文本编译器(vi).c编译器(cc),cli 存在的 ...

  3. MIT6.S081学习总结-lab5:lazy page allocation

    lab5 是lazy page allocationi相关,主要解决页面错误问题.O/S可以对页表硬件使用的许多巧妙技巧之一是延迟分配用户空间堆内存.Xv6应用程序使用sbrk()系统调用向内核请求堆 ...

  4. MIT 6.S081 Lab4 traps

    #Lab4: traps #Source #My Code #Motivation #Backtrace (moderate) #Motivation #Solution #S0 - RISC-V 栈 ...

  5. MIT6.S081 2021

    MIT6.S081 2021 环境配置 Xv6 and Unix utilities vscode格式化头文件排序问题 以地址空间的视角看待变量 其他 代码参考 system calls trace ...

  6. 操作系统MIT6.S081:P7->Interrupts

    本系列文章为MIT6.S081的学习笔记,包含了参考手册.课程.实验三部分的内容,前面的系列文章链接如下 操作系统MIT6.S081:[xv6参考手册第1章]->操作系统接口 操作系统MIT6. ...

  7. 操作系统MIT6.S081:[xv6参考手册第4章]->Trap与系统调用

    本系列文章为MIT6.S081的学习笔记,包含了参考手册.课程.实验三部分的内容,前面的系列文章链接如下 操作系统MIT6.S081:[xv6参考手册第1章]->操作系统接口 操作系统MIT6. ...

  8. MIT 6.s081学习笔记

    MIT 6.s081学习笔记 introduction 计算机组织结构: 最底部是一些硬件资源,包括了CPU,内存,磁盘,网卡 最上层会运行各种应用程序,比如vim,shell等,这些就是正在运行的所 ...

  9. 操作系统MIT6.S081:Lab4->Trap

    本系列文章为MIT6.S081的学习笔记,包含了参考手册.课程.实验三部分的内容,前面的系列文章链接如下 操作系统MIT6.S081:[xv6参考手册第1章]->操作系统接口 操作系统MIT6. ...

最新文章

  1. 服务器主机装普通系统后性能下降,服务器主机性能分析
  2. 开启php的文件上传扩展,linux中如何通过php.ini添加扩展?
  3. Lecture 21 Parallel Algorithms II
  4. 2015必须推荐的Android框架,猿必读系列!
  5. 代码统计工具 cloc 和 scc
  6. Vscode Opencv4.5.2环境搭建
  7. js调起打开APP_浏览器点击打开微信
  8. 数模算法:应用Logistic规律构建种群竞争模型
  9. 数据中心100G主流应用技术分析
  10. F7弹出界面模糊查询
  11. 物流科技杂志物流科技杂志社物流科技编辑部2022年第11期目录
  12. 一篇文章搞懂【Emmet】语法规则(前端必备技能)
  13. 互联网流量,让天下充满难做的生意
  14. 搭建git私有化仓库
  15. 地图不是领地尼克·格里尔的采访
  16. 考研资料 | 西安电子科技大学考研专业课资料(绝密)
  17. 【P4149 [IOI2011]Race】点分治
  18. linux flash模块分层
  19. ModbusRTU之CRC校验
  20. Burpsuite 重要插件

热门文章

  1. 白泽四足机器人ROS+rviz仿真(二)整体行走步态
  2. java毕业设计基于的企业办公管理系统设计与实现mybatis+源码+调试部署+系统+数据库+lw
  3. 【安全资讯】公安部网安局公布十大网络黑产案例
  4. 获取小程序模板库标题列表 报错: {errcode:-1,errmsg:system error hint: [zttteq44664}
  5. [C80]橙汁同人游戏 Acceleration of SUGURI 2 汉化补丁
  6. floquet端口x极化入射波_微波仿真论坛_利用HFSS对周期性结构的建模与分析
  7. 【Python实战】爬取网易云音乐用户听歌排行,来制作一张Ta最爱歌手的词云图
  8. 可信原生负责人入选“2021年度全球青年领袖”名单
  9. java面试精选题目:简述8种基本数据类型
  10. Qt程序实现自动发送PC微信消息