当前位置:网站首页>[MIT 6.S081] Lec 6: Isolation & system call entry/exit 笔记
[MIT 6.S081] Lec 6: Isolation & system call entry/exit 笔记
2022-07-27 16:09:00 【PeakCrosser】
Lec 6: Isolation & system call entry/exit
- Ref: https://github.com/huihongxiao/MIT6.S081/tree/master/lec06-isolation-and-system-call-entry-exit-robert
- Preparation: xv6 book Chapter 4 except 4.6
Trap
- trap: 用户空间和内核空间的切换
- 切换时机:
- 系统调用
- 异常 Exception, 如缺页错误(page fault), 除零错误
- 设备触发的中断
- 重要的寄存器:
- STVEC(Supervisor Trap Vector Base Address Register): 指向内核中处理 trap 的指令首地址(根据来自用户或内核, 代码会有不同)
- SEPC(Supervisor Exception Program Counter): trap 过程中保存程序计数器的值
- SSRATCH(Supervisor Scratch Register): 用于存放 trapframe 页面虚拟地址
- 切换时需要完成的操作:
- 保存 32 个用户寄存器
- 保存程序计数器 PC
- 将模式 MODE 由用户态切换为内核态
- 将 SATP 寄存器由用户页表指向内核页表
- 需要一个栈来调用内核的 C 函数, 并使 SP 指向
- 跳入内核 C 代码
- 内核模式(supervisor mode)的特权:
- 读写 SATP 寄存器, 对 STVEC, SEPC, SSCRATCH 等寄存器进行操作
- 可以使用 PTE_U 标志位为 0 的 PTE
Trap 代码执行流程
- 系统调用通过 ECALL 指令切换到内核中(该指令不会切换页表, 此时仍未用户页表)
- 内核执行汇编函数
uservec, 是trampoline.S中trampoline的一部分. 该函数会切换 SSCRATCH 和 a0 寄存器的值, 之后 a0 的值即为 trapframe 的地址, 然后将 32 个用户寄存器等寄存器的值存于p->trapframe中; 然后会加载内核栈帧指针(kernel_sp), 并加载内核页表地址到 SATP 寄存器完成内核页表的切换. 最后跳转至 C 代码trap.c的usertrap() usertrap()首先将 STVEC 寄存器由usertrap更改为kerneltrap(因为此时再发送中断就属于在有来自内核的 trap). 然后若为系统调用则调用syscall()函数从系统调用表中查找相应系统功能的函数sys_xxx()进行执行, 执行后返回syscall(); 若为来自设备的中断则执行devintr. 最后会调用usertrapret().- 执行
trap.c中的usertrapret(). 首先会将p->trapframe中和内核相关的字段的值设置好, 用于下次 trap. 设置 SSTATUS 的用户模式标志位. 最后调用汇编函数userret. - 执行
trampoline.S中的userret函数. 首先切换回用户页表, 然后从 trapframe 中加载值到寄存器, 最后将 trapframe 地址存于寄存器 SSCRATCH 中. - 返回用户空间.

- ECALL 作用:
- 将代码从用户模式转为内核模式
- 将 PC 保存与 SEPC
- 跳转到 STVEC 寄存器指向的(处理 trap的)指令
- 如何保存用户寄存器:
- 内核将 trapframe 映射到了每个用户页表
- 在进入到用户空间前(操作系统启动时是在内核模式), 内核会将 trapframe 地址保存在 SSCRATCH 寄存器, 配合
csrrw指令进行寄存器a0和sscratch内容的互换.
边栏推荐
- Hackers use lasers to attack, and voice assistants can be activated from a distance of 100 meters
- Deep learning: Gan case exercise -minst handwritten digits
- 美团二面:为什么Redis会有哨兵?
- The end of another era!
- VSS tip: search all checked out files (search checked out files according to users)
- After being "expelled" from bitland, the Jank group said for the first time: it will return as soon as possible through legal channels!
- 2. 改变颜色空间及颜色检测
- Backup table recovery table
- Together with Samsung, vivo will promote exynos980 dual-mode 5g mobile phone!
- js工具-cookie简单封装
猜你喜欢

发布自己的npm组件库

The latest advanced interview questions for big factories are necessary

2. 改变颜色空间及颜色检测

【学习笔记】Redis中有序集合zset的实现原理——跳表

同心向前,Google Play 十周年啦!

Dbeaver connection MySQL error: the server time zone value 'Ö Ð¹ ú±ê ×¼ ʱ ¼ ä‘ is unrecognized or represents more than

Super practical! After reading the kubernetes study notes hidden by Alibaba P9, call NB directly

GIS数据漫谈(五)— 地理坐标系统

XStream reports an error abstractreflectionconverter$unknownfield exception when parsing XML

Resolve merge fields in salesforce
随机推荐
WPF makes login interface
Deep learning: Gan case exercise -minst handwritten digits
Salesforce dynamic dashboard dynamic reports, limitations and Solutions
类的六大关系——依赖和关联的区别
Buffer的只读模式
注释中的{@code}、{@Link} 与<p>等标签
动态链表3队列的链式存储结构(LinkedQueue实现)
What's the use of games| Game application value research case collection
Prevent SQL injection
[learning notes] solutions to hot account problems
同心向前,Google Play 十周年啦!
《华为是谁》纪录短片集登陆BBC:曝光大量任正非不为人知经历
3. Opencv geometric transformation
【学习笔记】Redis中有序集合zset的实现原理——跳表
Salesforce File Share and Security
NowCoder(5选)
MySQL solves the problem of insert failure caused by duplicate unique indexes
ts学习笔记-interface
You can't specify target table 'table name' for update in from clause error resolution in MySQL
使用分布式框架WCF出现的BUG记录