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

【操作系统xv6】学习记录2 -RISC-V Architecture

说明:看完这节,不会让你称为汇编程序员,知识操作系统的前置。
ref:https://binhack.readthedocs.io/zh/latest/assembly/mips.html
https://www.bilibili.com/video/BV1w94y1a7i8/?p=7

MIPS

MIPS的意思是 “无内部互锁流水级的微处理器” (Microprocessor without interlocked piped stages)

RISC-Ⅴ:Instruction Set Architecure(ISA)

指令特点:

  • 所有指令都是32位长
  • 指令操作必须符合流水线,MIPS指令一次只能修改一个寄存器的值
  • 3操作数指令
  • 32个寄存器
  • 没有条件标志位

寄存器

  • MIPS下一共有32个通用寄存器
  • 在汇编中,寄存器标志由 $ 符开头
  • 寄存器表示可以有两种方式
    • 直接使用该寄存器对应的编号,例如:从 $0 到 $31
  • 使用对应的寄存器名称
    • 例如: $t1 , $sp
  • 栈的走向是从高地址到低地址

寄存器的编号以及其用途

name寄存器名称寄存器用途
zero
rareturn AddressReturn back into pc, addr isnot normally pushed onto the stack
spstack pointerstack grows downward
tpThread pointerContains Core Number(i.e,“HartID”)
gpGlobal pointerused by compliler
a0~a7Function Args/Working Regs寄存器是用来作为函数的参数
t0~t7Temp/Working Regs
s0~s11Callee-Savedif used,a function must:-save before use(on stack)-Restore before returning

  • Caller Saved 寄存器的值由调用者负责保存和恢复。保存方法通常是把寄存器的值压入堆栈中,调用者保存完成后,在被调用者(子函数)中就可以随意覆盖这些寄存器的值了。最典型的就是 ra (Return address)寄存器,用来保存返回地址(a 调用 b,b 的下一行就是返回地址,这个地址由 a 复制保存和恢复)。
  • Callee Saved 寄存器的值由被调用函数负责保存和恢复。调用者就不必保存这些寄存器的值,直接进行子函数调用,子函数在覆盖这些寄存器之前,需要先保存这些寄存器的值,并在返回前恢复他们。
    ref:https://pdos.csail.mit.edu/6.828/2020/readings/riscv-calling.pdf

因为寄存器没有状态位所以需要:
在这里插入图片描述

  • 什么是用户态和内核态?两者有何区别?什么是中断和系统调用?两者有何区别?计算机在运行时,是如何确定当前处于用户态还是内核态的?
    回答
    在 RISC-V 中,有 3 种权限不同的模式(Machine mode、Supervisor mode、User mode)
    machine mode 拥有所有的特权,一般在启动时候用于配置电脑的环境
    supervisor mode 的权限相对低些,可以执行特权指令,例如是否使能中断等
    user mode 的权限级别最低,完成一些特殊功能的时候需要通过系统调用进入 supervisor mode
    内核态可以运行在 machine mode 和 supervisor mode 下,用户态只能运行在 user mode
  • 中断与系统调用
    中断分为外中断和内中断,外中断包括 I/O 中断、时钟中断等,内中断包括异常、系统调用和中止
    系统调用指的是处于用户态下的程序需要完成一些只有内核态才能完成的功能时,通过系统调用的方式进入内核态,从而实现功能的行为
    主动调用,返回到下一条指令
    一种中断,需要利用中断的机制来实现
    在 RISC-V 中,通过寄存器 sstatus 中保存的 SPP 位来判断是处于内核态 (1) 还是用户态 (0)

timer interrupt

在计算机系统中,定时器中断(Timer Interrupt)是一种重要的机制,它允许计算机按照一定的时间间隔执行特定的任务。
基于硬件的Timer Interrupt是通过计算机系统中的定时器芯片来实现的。定时器芯片由硬件设计师将其集成在计算机主板上,通过预设定时器的数值和中断控制寄存器的设置,实现定时器中断的功能。
在xv6中 timer interrupt 时机器处于 machine mode!
马上,它会触发一个“software interrupt” 转到kernel model!

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

相关文章:

  • C++力扣题目111--二叉树的最小深度
  • 【图像拼接】源码精读:Adaptive As-Natural-As-Possible Image Stitching(AANAP/ANAP)
  • 解决docker run报错:Error response from daemon: No command specified.
  • 算法第十二天-最大整除子集
  • 简单易懂的PyTorch 损失函数:优化机器学习模型的关键
  • Kubernetes/k8s的存储卷/数据卷
  • 【漏洞复现】锐捷RG-UAC统一上网行为管理系统信息泄露漏洞
  • Android - 串口通讯(SerialPort)
  • 如何使用設置靜態住宅IP
  • 在学习爬虫前的准备
  • windows下安装oracle-win-64-11g超详细图文步骤
  • Go模板后端渲染时vue单页面冲突处理
  • 笔记本摄像头模拟监控推送RTSP流
  • 鸿蒙开发已解决-ArkTS编译时遇到arkts-no-obj-literals-as-types错误
  • 实现目标检测中的数据格式自由(labelme json、voc、coco、yolo格式的相互转换)
  • 一文读懂JVS逻辑引擎如何调用规则引擎:含详细步骤与场景示例
  • 苹果应用上架是否需要软件著作权?
  • LDD学习笔记 -- Linux字符设备驱动
  • 杰理AC63串口收发实例
  • 麦芯(MachCore)开发教程1 --- 设备软件中间件
  • reset命令
  • Linux内核--进程管理(十二)LinuxIO基础知识与概念
  • gem5学习(11):将缓存添加到配置脚本中——Adding cache to the configuration script
  • 上海雏鸟科技无人机灯光秀跨年表演点亮三国五地夜空
  • 学生备考护眼台灯怎么样选择?2024五款好用台灯安利
  • Java学习,一文掌握Java之SpringBoot框架学习文集(6)
  • 美团点评秋招前端测评分享
  • docker安装nodejs,并更改为淘宝源
  • Vue中的class和style绑定
  • 出版实务 | 出版物的成本及其构成