XV6总结3

本文详细介绍了RISC-V架构下的陷阱处理流程,包括用户态陷阱(系统调用)和内核态陷阱。重点讨论了stvec、sepc、sstatus等关键寄存器的作用,以及中断处理机制,如claim/complete、软中断和定时器中断。此外,还阐述了从用户态到内核态的切换,如ecall指令、uservec和usertrap函数的工作原理。
摘要由CSDN通过智能技术生成

lab4 trap

1.

        陷阱(trap)表示的则是,由异常或者中断引起的控制权转移到陷阱处理程序的过程

2.

        陷阱的触发有三种情况:系统调用,严重错误(比如除0错误),设备中断。陷阱可以分为从用户态陷阱和从内核态陷阱。用户态陷阱包含上面的三种触发情况,而内核态陷阱只包含后两种情况。系统调用作为用户态陷阱中最具有代表性的类型。系统调用中的ecall指令和程序执行中的异常都属于RISC-V标准中定义的异常情况。

3.

        中断分为本地中断,全局中断。本地中断包括软件中断和定时器中断,本地中断由CLINT(Core-Local Interruptor, 核心本地中断器)来控制。全局中断是外部设备引起的中断,由PLIC(Platform-Level Interrupt Controller,平台级中断控制器)来控制。

4.   

         stvec:内核在这里写入其陷阱处理程序的地址;RISC-V跳转到这里处理陷阱。
        sepc:当发生陷阱时,RISC-V会在这里保存程序计数器pc(因为pc会被stvec覆盖)。
        sret(从陷阱返回)指令会将sepc复制到pc。内核可以写入sepc来控制sret的去向。
        scause: RISC-V在这里放置一个描述陷阱原因的数字。scause中的异常码: scause的值为8时,表示陷阱原因是系统调用, 它会表明当前状态的原因是中断
        sscratch:内核在这里放置了一个值,这个值在陷阱处理程序一开始就会派上用场。在进入到用户空间之前,内核会将trapframe page(trapframe是一个专门用来存放上下文状态的专用物理内存区域)的地址保存在这个寄存器。sscratch寄存器的作用就是保存另一个寄存器的值,并将自己的值加载给另一个寄存器
        sstatus:其中的SIE位控制设备中断是否启用。如果内核清空SIE,RISC-V将推迟设备中断,直到内核重新设置SIE。SPP位提示了CPU在进入supervisor模式之前的运行模式, 指示陷阱是来自用户模式还是管理模式,并控制sret返回的模式。SPP为0表示陷阱源于用户模式,1表示其他模式
        satp:保存了内核页表的地址。

        SIP(Supervisor Interrupt Pending)寄存器。当发生中断时,处理器可以通过查看这个寄存器知道当前是什么类型的中断
        IR(Instruction Register,指令寄存器)
        SP(Stack Pointer,堆栈指针寄存器)用户态和内核态各自拥有独立的堆栈
        PC(Program Counter,程序计数器): 程序计数器某一时刻只能存储一个地址,该地址指向下一条将要执行的指令。是控制指令执行流程的关键,确保指令按照正确的顺序执行。
        PSW(Program Status Word, 程序状态字 ): PSW 通常包含更广泛的状态信息,包括程序执行状态、特权级别、中断使能状态、程序计数器(PC)的值、堆栈指针(SP)的值等。它涵盖了与程序执行和控制相关的多个方面。
        SR(Status Register,状态寄存器)SR 通常包含与运算状态相关的标志位,如零标志、溢出标志、进位标志等。它主要用于存储最近一次运算结果的状态信息,以便在条件分支和逻辑判断中使用。

5.

无论是异常还是中断,它们所导致的硬件陷阱流程都是一样的。

        1.改变控制流。将PC的值保存在sepc寄存器中,而将stvec寄存器中保存的陷阱处理函数地址放入PC。

        2.更新相关CSR的值。sstatus,stval,scause。

6.陷阱的委派

        在机器模式M-Mode下可以配置寄存器,从而使得监管者模式S-Mode下的所有陷阱都被S-Mode下的陷阱处理函数自动接管。

        medeleg和mideleg两个寄存器,分别用来管理异常和中断的委派。

        陷阱从不会从高优先级移交到低优先级:M-Mode下发生异常,即使它被托管到S-Mode,这个异常也不会被移交给S-Mode去处理,而是在M-Mode完成处理。

        如果一个属于S-Mode的中断从M-Mode委托给S-Mode(比方我们后面要看到的外部中断),这个中断在M-Mode下就会被屏蔽掉,一定要等到进入S-Mode时才会被处理。

        负责管理中断委派的是mideleg寄存器。

1.sstatus寄存器

        supervisor status register,反映S-Mode下处理器的工作状

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值