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

news2024/9/23 23:27:36

说明:看完这节,不会让你称为汇编程序员,知识操作系统的前置。
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.coloradmin.cn/o/1353392.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手撕Vuex-vuex实现原理分析

本章节主要围绕着手撕 Vuex,那么在手撕之前,先来回顾一下 Vuex 的基本使用。 创建一个 Vuex 项目,我这里采用 vue-cli 创建一个项目,然后安装 Vuex。 vue create vuex-demo 选择 Manually select features。 这里只需要&#xff0…

莫比乌斯函数

积性函数定义 若gcd(p,q)1,有f(p*q)f(p)*f(q),则f(x)是积性函数 其中规定f(1)1,对于积性函数有:所有的积性函数都可以用筛法求出 常见的积性函数有欧拉函数和莫比乌斯函数 筛法求莫比乌斯函数 const int N 1e9 5; const int …

哪些洗地机比较好?洗地机选购指南

随着社会生活水平的提高,人们对居家环境的卫生和清洁要求不断提升。家用洗地机作为一种先进的清洁工具,带来了许多便利和优势,特别是在解决一些特殊需求的家庭环境方面。 以下是一些家用洗地机的优势和适用场景: 1.高效清洁&…

[ Tool ] celery分布式任务框架基本使用

celery官方 Celery 官网:www.celeryproject.org/ Celery 官方文档英文版:docs.celeryproject.org/en/latest/i… Celery 官方文档中文版:docs.jinkan.org/docs/celery… Celery是一个简单、灵活且可靠的,处理大量消息的分布式系…

HackTheBox - Medium - Linux - Agile

Agile Agile 是一个中等难度的 Linux 机器,在端口 80 上有一个密码管理网站。创建帐户并添加几个密码后,发现网站的导出到 CSV 功能容易受到任意文件读取的攻击。其他终结点的枚举显示“/download”在访问时引发错误,并显示“Werkzeug”调试…

贪心算法part05 435无重叠区间

435无重叠区间 763 划分字母区间 56合并区间

什么是聚合支付,又能带来哪些好处?

随着科技的飞速发展,人们的支付方式也在不断地发生变革。从最初的现金支付、银行卡支付,到现在的移动支付、扫码支付等,支付方式已经变得越来越便捷。聚合支付作为一种新型的支付方式,也在逐渐改变着人们的生活方式。那么&#xf…

CSS 中间位置翻转动画

<template><div class"container" mouseenter"startAnimation" mouseleave"stopAnimation"><!-- 旋方块 --><div class"box" :class"{ rotate-hor-center: isAnimating }"><!-- 元素内容 -->…

一篇文章带你搞定Python所有内置函数

前言 Python 内置了许多的函数和类型&#xff0c;比如print()&#xff0c;input()等&#xff0c;我们可以直接在程序中使用它们&#xff0c;非常方便&#xff0c;并且它们是Python解释器的底层实现的&#xff0c;所以效率是比一般的自定义函数更有效率。目前共有71个内置函数&…

深入解析d3dcompiler_47.dll文件及其丢失的修复方法

一、d3dcompiler_47.dll是什么文件&#xff1f; d3dcompiler_47.dll是DirectX SDK中的一个动态链接库文件&#xff0c;它是用于编译DirectX着色器的工具之一。DirectX是由微软公司开发的一种多媒体编程接口&#xff0c;它提供了一系列的API和工具&#xff0c;用于开发游戏和多…

打造专业开发者指南:针对ShardingProxy分库分表解决策略的深度剖析 – 详解部署、使用、服务治理与优化技巧

一、 ShardingProxy快速使用 ShardingProxy的功能同样是分库分表&#xff0c;但是他是一个独立部署的服务端&#xff0c;提供 统一的数据库代理服务。注意&#xff0c;ShardingProxy目前只支持MySQL和PostgreSQL。并且&#xff0c;客户端连接ShardingProxy时&#xff0c;最好使…

java每日一题——双色球系统(答案及编程思路)

前言&#xff1a; 打好基础&#xff0c;daydayup! 题目&#xff1a;要求如下&#xff08;同时&#xff1a;红球每个号码不可以相同&#xff09; 编程思路&#xff1a;1&#xff0c;创建一个可以录入数字的数组&#xff1b;2&#xff0c;生成一个可以随机生成数字的数组&#xf…

MT8766安卓核心板规格参数_MTK8766核心板模块方案定制

MT8766安卓核心板&#xff1a;高性能、稳定可靠、集成度高的一体化解决方案 MT8766安卓核心板采用联发科MTK8766四核4G模块方案&#xff0c;是一款高度集成的安卓一体板。四核芯片架构&#xff0c;主频可达到2.0GHz&#xff0c;支持国内4G全网通。12nm制程工艺&#xff0c;支持…

虾皮跨境电商选品有哪些规则

如何在虾皮&#xff08;Shopee&#xff09;平台上进行跨境电商选品在如今全球化的商业环境中&#xff0c;跨境电商已成为许多卖家拓展业务的重要途径。虾皮&#xff08;Shopee&#xff09;作为一家知名的跨境电商平台&#xff0c;为卖家提供了丰富的销售机会。然而&#xff0c;…

Linux 485驱动通信异常

背景 前段时间接到一个项目&#xff0c;要求用主控用485和MCU通信。将代码调试好之后&#xff0c;验证没问题就发给测试了。测试测的也没问题。 但是&#xff0c;到设备量产时&#xff0c;发现有几台设备功能异常。将设备拿回来排查&#xff0c;发现是485通信有问题&#xff…

大语言模型LLM微调技术:P-Tuning

1 引言 Bert时代&#xff0c;我们常做预训练模型微调&#xff08;Fine-tuning&#xff09;&#xff0c;即根据不同下游任务&#xff0c;引入各种辅助任务loss和垂直领域数据&#xff0c;将其添加到预训练模型中&#xff0c;以便让模型更加适配下游任务的方式。每个下游任务都存…

生活中危险的气体:一氧化碳与二氧化碳中毒的症状及安全预防措施

一氧化碳和血红蛋白亲和力超过氧气&#xff0c;会占用血红蛋白&#xff0c;导致缺氧。 二氧化碳会和血浆结合&#xff0c;导致血液pH值不正常&#xff0c;抑制呼吸&#xff0c;导致窒息。 通俗点说&#xff1a;一氧化碳是中毒&#xff0c;二氧化碳则是窒息。 一氧化碳中毒 …

【完整代码】网上书店信息管理系统--基于Mysql数据库与java

网上书店信息管理系统 一、需求分析&#xff08;一&#xff09;设计系统的意义以及用途&#xff08;二&#xff09;实现的功能1.用户模块&#xff1a;1、全部图书浏览2、图书搜索3、购物车管理和订单查看4、修改密码 2.书店管理员模块1、图书类别管理2、图书管理3、全部订单查看…

互联网加竞赛 Yolov安全帽佩戴检测 危险区域进入检测 - 深度学习 opencv

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; Yolov安全帽佩戴检测 危险区域进入检测 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 该项目较为新颖&am…

ISCTF 2023 miscweb wp

web 圣杯战争!!! 题目: PHP <?php highlight_file(__FILE__); error_reporting(0); class artifact{ public $excalibuer; public $arrow; public function __toString(){ echo "为Saber选择了对的武器!<br>"; return $this…