当前位置: 首页 > 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!

相关文章:

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

说明:看完这节,不会让你称为汇编程序员,知识操作系统的前置。 ref:https://binhack.readthedocs.io/zh/latest/assembly/mips.html https://www.bilibili.com/video/BV1w94y1a7i8/?p7 MIPS MIPS的意思是 “无内部互锁流水级的微…...

C++力扣题目111--二叉树的最小深度

力扣题目链接(opens new window) 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 返回它的最小深度 2 思路 看完了这篇104.二…...

【图像拼接】源码精读:Adaptive As-Natural-As-Possible Image Stitching(AANAP/ANAP)

第一次来请先看这篇文章:【图像拼接(Image Stitching)】关于【图像拼接论文源码精读】专栏的相关说明,包含专栏内文章结构说明、源码阅读顺序、培养代码能力、如何创新等(不定期更新) 【图像拼接论文源码精读】专栏文章目录 【源码精读】As-Projective-As-Possible Imag…...

解决docker run报错:Error response from daemon: No command specified.

将docker镜像export/import之后,对新的镜像执行docker run时报错: docker: Error response from daemon: No command specified. 解决方法: 方案1: 查看容器的command: docker ps --no-trunc 在docker run命令上增加…...

算法第十二天-最大整除子集

最大整除子集 题目要求 解题思路 来自[宫水三叶] 根据题意:对于符合要求的[整除子集]中的任意两个值,必然满足[较大数]是[较小数]的倍数 数据范围是 1 0 3 10^3 103,我们不可能采取获取所有子集,再检查子集是否合法的暴力搜解法…...

简单易懂的PyTorch 损失函数:优化机器学习模型的关键

目录 torch.nn子模块Loss Functions详解 nn.L1Loss 用途 用法 使用技巧 注意事项 代码示例 nn.MSELoss 用途 用法 使用技巧 注意事项 代码示例 nn.CrossEntropyLoss 用途 用法 使用技巧 注意事项 代码示例 使用类别索引 使用类别概率 nn.CTCLoss 用途 …...

Kubernetes/k8s的存储卷/数据卷

k8s的存储卷/数据卷 容器内的目录和宿主机的目录挂载 容器在系统上的生命周期是短暂的,delete,k8s用控制创建的pod,delete相当于重启,容器的状态也会回复到初始状态 一旦回到初始状态,所有的后天编辑的文件都会消失…...

【漏洞复现】锐捷RG-UAC统一上网行为管理系统信息泄露漏洞

Nx01 产品简介 锐捷网络成立于2000年1月,原名实达网络,2003年更名,自成立以来,一直扎根行业,深入场景进行解决方案设计和创新,并利用云计算、SDN、移动互联、大数据、物联网、AI等新技术为各行业用户提供场…...

Android - 串口通讯(SerialPort)

最早的博客Android 模拟串口通信过程_launch virtual serial port driver pro-CSDN博客里就是用过 Google 提供的 demo,最近想再写个其他的demo发现用起来有点麻烦,还需要导入其他 module,因此在网上找到了Android-SerialPort-API: https://g…...

如何使用設置靜態住宅IP

靜態住宅IP就是一種靜態的、分配給住宅用戶的IP地址。與動態IP地址不同,靜態住宅IP一旦分配給用戶,就會一直保持不變,除非ISP(Internet Service Provider,互聯網服務提供商)進行手動更改。那麼,…...

在学习爬虫前的准备

1. 写一个爬虫程序需要分几步 获取网页内容。 我们会通过代码给一个网站服务器发送请求,它会返回给我们网页上的内容。 在我们平时使用浏览器访问服务器内容是,本质上也是向服务器发送一个请求,然后服务器返回网页上的内容。只不过浏览器还会…...

windows下安装oracle-win-64-11g超详细图文步骤

官方下载地址:点这里 1.根据自己电脑情况,解压64或者32位客户端,以及database压缩包 2.解压后双击执行database文件夹下的setup.exe 3.详细的安装步骤 (1)数据库安装 一、配置安全更新 电子邮件可写可不写&#xf…...

Go模板后端渲染时vue单页面冲突处理

go后端模版语法是通过 {{}} ,vue也是通过双花括号来渲染的,如果使用go渲染vue的html页面的时候就会报错,因为分别不出来哪个是vue的,哪个是go的,既可以修改go的模板语法 template.New("output").Delims(&qu…...

笔记本摄像头模拟监控推送RTSP流

使用笔记本摄像头模拟监控推送RTSP流 一、基础安装软件准备 本文使用软件下载链接:下载地址 FFmpeg软件: Download ffmpeg 选择Windows builds by BtbN 一个完整的跨平台解决方案,用于录制、转换和流式传输音频和视频。 EasyDarwin软件:Download Easy…...

鸿蒙开发已解决-ArkTS编译时遇到arkts-no-obj-literals-as-types错误

文章目录 项目场景:问题描述原因分析:解决方案:解决方案1解决方案2此Bug解决方案总结项目场景: 在开发鸿蒙项目过程中,遇到了arkts-no-obj-literals-as-types,总结了自己和网上人的解决方案,故写下这篇文章。 遇到问题: rkTS编译时遇到arkts-no-obj-literals-as-type…...

实现目标检测中的数据格式自由(labelme json、voc、coco、yolo格式的相互转换)

在进行目标检测任务中,存在labelme json、voc、coco、yolo等格式。labelme json是由anylabeling、labelme等软件生成的标注格式、voc是通用目标检测框(mmdetection、paddledetection)所支持的格式,coco是通用目标检测框&#xff0…...

一文读懂JVS逻辑引擎如何调用规则引擎:含详细步骤与场景示例

在当今的数字化时代,业务逻辑和规则的复杂性不断增加,这使得逻辑引擎和规则引擎在处理业务需求时显得尤为重要。逻辑引擎和规则引擎通过定义、解析和管理业务逻辑和规则,能够帮助企业提高工作效率、降低运营成本,并增强决策的科学…...

苹果应用上架是否需要软件著作权?

苹果应用上架是否需要软件著作权? 摘要 随着移动互联网的发展,苹果应用在市场上占据了很大份额。但是,很多开发者在上传苹果应用到App Store时,都会遇到一个问题,即是否需要进行软著申请?本文将深入探讨这…...

LDD学习笔记 -- Linux字符设备驱动

LDD学习笔记 -- Linux字符设备驱动 虚拟文件系统 VFS设备号相关Kernel APIs动态申请设备号动态创建设备文件内核空间和用户空间的数据交换系统调用方法readwritelseek 写一个伪字符设备驱动在主机上测试pcd(HOST)在目标板上测试pcd(TARGET) 字符驱动程序用于与Linux内核中的设备…...

杰理AC63串口收发实例

在event.h文件中预定义串口消息 #define DEVICE_EVENT_FROM_MY_UART ((M << 24) | (Y << 16) | (U << 8) | \0)在app_spp_and_le.c文件里对SYS_DEVICE_EVENT做处理&#xff0c;添加收到DEVICE_EVENT_FROM_MY_UART消息时的处理函数my_rx_handler(); cas…...

2-1爬取豆瓣电影数据

数据来源网站&#xff1a;https://movie.douban.com/chart import requests import json import timedef fetch_douban():all_movies []start 0limit 20print("开始爬取豆瓣电影榜单")headers {"User-Agent": "Mozilla/5.0","Referer&…...

I-Lang SEO实战部署:用结构化协议让Google的AI爬虫读懂你的网页

前言&#xff1a; 我们用I-Lang的结构化方法论做SEO&#xff0c;一个全新的英文商业站&#xff0c;七天打进Google搜索第一页。这篇文章把具体方法公开。 一、前提&#xff1a;Google的爬虫已经是AI了 2024年之后&#xff0c;Google的搜索排名算法发生了根本性变化。Googlebot…...

手把手教你用kafka-storage.sh重新格式化Kafka KRaft集群数据目录(解决No meta.properties报错)

深入解析Kafka KRaft模式下数据目录重构与集群恢复实战指南 当你在深夜收到Kafka集群告警&#xff0c;发现所有节点因No meta.properties报错而集体罢工时&#xff0c;那种头皮发麻的感觉我太熟悉了。去年双十一大促前夜&#xff0c;我们因为临时调整存储路径而遭遇类似问题&am…...

新手入门:用快马平台生成第一个labelimg式图像标注demo

今天想和大家分享一个特别适合计算机视觉新手的小项目——用InsCode(快马)平台快速搭建一个简易版的图像标注工具。这个工具类似labelimg的核心功能&#xff0c;但更轻量级&#xff0c;能帮助理解数据标注的基本流程。 项目背景理解 图像标注是计算机视觉的基础环节&#xff0c…...

3.23-3.25笔记

这期实现温湿度采集、光照强度监测、智能设备控制&#xff08;加湿器、PWM 调光 LED、PWM 调速风扇&#xff09;确定引脚&#xff0c;根据原理图找出可以使用的引脚开关。根据手册信息PWM口GPIO0_D0和GPIO0_C6&#xff0c;把设备树GPIO0_D0做5G的复位disable&#xff0c;再加入…...

从零开始理解Transformer的计算复杂度:自注意力与前馈网络的详细对比

从零开始理解Transformer的计算复杂度&#xff1a;自注意力与前馈网络的详细对比 在人工智能领域&#xff0c;Transformer架构已经成为自然语言处理任务的事实标准。但对于初学者来说&#xff0c;理解其内部工作机制&#xff0c;特别是计算复杂度这一关键概念&#xff0c;往往充…...

纯粹直播:革新直播观看体验的一站式跨平台解决方案

纯粹直播&#xff1a;革新直播观看体验的一站式跨平台解决方案 【免费下载链接】pure_live 纯粹直播:哔哩哔哩/虎牙/斗鱼/快手/抖音/网易cc/M38自定义源应有尽有。 项目地址: https://gitcode.com/gh_mirrors/pur/pure_live 您是否曾为在多个直播平台间频繁切换而感到困…...

工业现场的空压机监控总得整点活吧?今天咱们拿MCGS6.2搞个仿真系统,带曲线报警和报表那种。直接上干货,先开工程建个空压机模型

空压机mcgs6.2仿真&#xff0c;带曲线报警和报表界面在设备窗口拖个模拟设备&#xff0c;配四个关键变量&#xff1a;出口压力&#xff08;0-1.6MPa&#xff09;、运行温度&#xff08;0-120℃&#xff09;、电机电流&#xff08;0-50A&#xff09;、运行状态&#xff08;0/1&a…...

HSTracker:精准追踪炉石传说对战数据的macOS智能辅助工具

HSTracker&#xff1a;精准追踪炉石传说对战数据的macOS智能辅助工具 【免费下载链接】HSTracker A deck tracker and deck manager for Hearthstone on macOS 项目地址: https://gitcode.com/gh_mirrors/hs/HSTracker HSTracker是一款专为macOS平台设计的开源炉石传说辅…...

Frida安装后别急着‘玩’!这5个必做的环境验证与排错步骤你做了吗?

Frida安装后必做的5个环境验证与排错步骤 当你兴冲冲地按照教程安装完Frida和Server&#xff0c;准备开始"玩耍"时&#xff0c;却发现frida-ps -U毫无反应&#xff0c;或者遇到各种连接失败的问题。这种"安装成功却用不了"的尴尬&#xff0c;往往源于环境…...