2.Lab-6 Multithreading

news/2024/5/18 13:21:19

Uthread: switching between threads (moderate)

Riscv32 Callee寄存器

Name ABI Name Description Saver
x0 zero Zero -
x1 ra Return address Caller
x2 sp Stack pointer Callee
x3 gp Global pointer -
x4 tp Thread pointer -
x5-x7 t0-t2 Temporary registers Caller
x8 s0/fp Saved register/frame pointer Callee
x9 s1 Saved register Callee
X10-x11 a0-a1 Function arguments/return values Caller
x12-x17 a2-a7 Function arguments Caller
x18-x27 s2-s11 Saved registers Callee
x28-x31 t3-t6 Temporary registers Caller
  • Caller:临时寄存器,当发生函数跳转,回来继续执行时,这些寄存器中的数据可能会发生变化
  • Callee:当发生函数跳转,回来继续执行时,默认这些寄存器中的数据不会发生变化。

在本次Lab中,需要保存Callee寄存器

可以完全抄进入内核态时的相关代码:

proc.c的context定义了所有Callee寄存器
swtch.s包含了保存和恢复Callee寄存器的相关代码

代码地址

https://github.com/INnoVationv2/xv6-labs-2023/commit/d6f71098147159d5a378f283a3516714d7aadc0b

image-20240303231433334

Using threads (moderate)

给每个桶加个锁就行

代码地址

https://github.com/INnoVationv2/xv6-labs-2023/commit/1269b6a72aad6a7974636c2e51bf2d56963f79f9

image-20240304001412201

Barrier(moderate)

https://github.com/INnoVationv2/xv6-labs-2023/commit/0a856ed17b7d2ee4cf1d0778233cc48f57b8b87a

image-20240304224656039

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/22761.html

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

相关文章

2.CH-4文档学习笔记

一、trap简介 三类 trap系统调用:用户程序执行ecall指令要求内核为其提供服务 异常:(用户或内核)指令做了一些非法的事情,例如除以零或使用无效的虚拟地址; 设备中断,一个设备,例如当磁盘硬件完成读或写请求时,向系统表明需要处理。trap执行流程 1. 强制将控制权转移到内…

3.LAB-5 COW

LAB-5 COW 主要是修改fork和缺页中断处理程序 以前fork时,会直接复制原进程的页表内容到新页表,具体过程是 ​ 对于原页表中的每一页,malloc一个新页,然后复制数据到新页,最后把这一页映射到新页表 现在进行修改: 1. fork复制页表对于新进程,为其创建新页表 直接复用旧页…

南昌航空大学-23201406-第一次OOP博客作业

这个Blog,主要是为了将在面向对象的程序设计课程(Java)中的前三次pta题目集进行一个总结。 一、前言总结三次题目集的题目情况关于题目集 这三次题目集的题量都不大,主要内容都集中在最后的判题程序中。且三次的难度循序渐进,充分起到了锻炼的作用。 题目本身这三次题目集…

30 天精通 RxJS (26):简易实作 Observable(一)

因为实在太多读者在问要如何实作 Observable,所以特别调整了本系列文章最后几篇的内容,空出一天的位置来写如何简易实作 Observable。为什么是简易实作而不完整实作呢? 当然这个系列的文章是希望读者能学会如何使用 RxJS,而 实作 Observable 其实只是帮助我们理解 Observab…

Linux共享库、静态库、动态库详解

1. 介绍使用GNU的工具我们如何在Linux下创建自己的程序函数库?一个“程序函数库”简单的说就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程序使用。程序函数库可以使整个程序更加模块化,更容易重新编译,而且更方便升级。 程序函数…

本地部署Llama3-8B/72b 并进行逻辑推理测试

美国当地时间4月18日,Meta开源了Llama3大模型,目前开源版本为8B和70B。Llama 3模型相比Llama 2具有重大飞跃,并在8B和70B参数尺度上建立了LLM模型的新技术。由于预训练和后训练的改进,Llama3模型是目前在8B和70B参数尺度上存在的最好的模型。训练后程序的改进大大降低了错误…

跳跃游戏精细化

跳跃游戏 ​ 给定一个数组,每个元素代表跳跃的距离,判断是否能从起点出发,跳到数组的末尾。 ​ 例如:给定一数组[3,7,8,1,5],从起点出发,可以跳跃3步,跳到位置3,然后跳1步,跳到位置4,跳4步到达末尾 思路分析定义一个变量,用来初始化当前能到达最远位置 遍历数组…

MFC-error C2589: “(”:“::”右边的非法标记

MFC-error C2589: “(”:“::”右边的非法标记错误信息 出错语句 问题原因 解决办法 错误信息 ① 错误 C2589 “(”:“::”右边的非法标记② 错误 C2059 语法错误:“)” 出错语句inline double getFitnessScore (double max_range = std::numeric_limits<double>::max()…