- 2024-12-09MIT xv6 2020 系列实验:Lab4 traps
主要是一个内核调度alarm,定时中断并输出alarm。任务一:backtrace首先取出内核栈栈顶指针fp,对应到xv6的寄存器名是s0。staticinlineuint64r_fp(){uint64x;asmvolatile("mv%0,s0":"=r"(x));returnx;}backtrace:内核栈大小一页也就是4KB,其中fp往下依次存储
- 2024-12-09MIT xv6 2020系列实验:Lab7 thread
这次实验的内容比较杂,但是简单。任务一:Uthread:switching(线程切换)为thread添加context来保存寄存器上下文:structcontext{uint64ra;uint64sp;//callee-saveduint64s0;uint64s1;uint64s2;uint64s3;uint64s4;uint64s5;uint64s6;uin
- 2024-12-09MIT xv6 2020系列实验:Lab8 lock
锁实验。锁算是比较简单的一个实验,之前了解过openmp就有了一个类似窃取的概念,那在这个实验里同样也是窃取,只需要对于每个CPU分配的内存块/cache块进行维护即可。kmem:将一个kmemfreelist拓展为NCPU个即可。修改init部分:一个初始化改为NCPU个初始化。voidkinit(){for
- 2024-12-09xv6 lab9
比较简单的一项实验大索引(bigfile):xv6的单文件索引有13个,其中只有一个二级索引,文件最大块数目是256+12=268块。现在要给文件索引改成一个二级带一个三级索引,最大块数目就是11+256+256*256=65803块,可以容纳下很大的文件了。先在fs.h中进行相应的更改:...defineFSMAGIC0x1
- 2024-12-09xv6 lab10: mmap
实现两个功能:分别是mmap与munmap,将文件映射到内存当中,并为一个线程记录他管理的文件所在的页表目录。函数原型如下:char*mmap(char*addr,intlen,intprot,intflags,intfd,intoff);intmunmap(char*addr,intlen);其中mmap参数含义分别是映射地址(为0时由内核代
- 2024-11-30新手村Day1.5
OK.接下来是标识符。在教程里老秦列了几十个关键字,虽然看着多但是熟能生巧嘛。我先用我刚学到的代码解释一下。publicclassCaogao{publicstaticvoidmain(String[]args){System.out.println("Helloworld!");}}在这里main是方法,称之为main方法。类名
- 2024-07-23【xv6】xv6源码调试环境搭建
1.xv6源代码下载gitclonehttps://github.com/ytcoode/xv6.git2.编译并在qemu中运行xv6镜像2.1安装qemusudoapt-getinstallqemu2.2编译并运行xv6将54行QEMU前面的#号注释掉然后直接在当前目录下执行makeqemu即可直接加载并运行xv6镜像手动运行:qemu-syste
- 2024-07-17操作系统实验四 文件管理
实验目的与要求: 实验目的:(1)、掌握计算机操作系统管理进程、处理机、存储器、文件系统的基本方法。(2)、了解进程的创建、撤消和运行,进程并发执行;自行设计解决哲学家就餐问题的并发线程,了解线程(进程)调度方法;掌握内存空间的分配与回收的基本原理;通过模拟文件管理的工作
- 2024-07-17操作系统综合实验二
实验目的与要求: 实验目的:(1)、掌握计算机操作系统管理进程、处理机、存储器、文件系统的基本方法。(2)、了解进程的创建、撤消和运行,进程并发执行;自行设计解决哲学家就餐问题的并发线程,了解线程(进程)调度方法;掌握内存空间的分配与回收的基本原理;通过模拟文件管理的工作
- 2024-04-16MIT6.S081 - Lab1: Xv6 and Unix utilities
Part1:sleep实验要求与提示可以参考user/echo.c,user/grep.c和user/rm.c文件如果用户忘记传递参数,sleep应该打印一条错误消息命令行参数传递时为字符串,可以使用atoi函数将字符串转为数字使用系统调用sleep,有关实现sleep系统调用的内核代码参考kernel/sysproc.c(
- 2024-04-16xv6代码执行流
xv6代码执行流xv6executionflowCreated:2024-01-08T19:56+08:00Publish:2024-04-16T10:10+08:00Categories:OperatingSystem基于git://g.csail.mit.edu/xv6-labs-2020代码前置知识:编译原理,计算机组成poe.com:一个gpt网站一个方便的在线查看汇编网站:CompilerExpl
- 2024-04-01[os]xv6系列学习计划
选了个劳什子OS课,想着弥补一下本科的时候没写成uCore的遗憾,结果感觉是给自己纯纯找事情做了。开课的时候说是读xv6源码,结果后来发现是上课讲专题,作业读源码,然后写lab(结果还是judge),后来又多了看ostep的作业。只能说每周跟着把ostep重温一遍,同时把xv6的lab写了,然后写点笔记加强记忆
- 2024-02-14【XV6】 mmap
代码:https://github.com/JasenChao/xv6-labs.git文件映射到进程地址题目要求实现两个系统调用:mmap和munmap。主要功能就是将文件映射到进程的内存中。题目给出了mmap和munmap的声明:void*mmap(void*addr,size_tlen,intprot,intflags,intfd,off_toffset)
- 2024-02-14【XV6】 Xv6 and Unix utilities
代码:https://github.com/JasenChao/xv6-labs.git运行xv6实验环境使用的是Ubuntu20.04,需要安装一些工具:sudoapt-getinstallgitbuild-essentialgdb-multiarchqemu-system-miscgcc-riscv64-linux-gnubinutils-riscv64-linux-gnu安装完成后验证qemu是否安装成功,成功的话
- 2024-02-14【XV6】 page tables
代码:https://github.com/JasenChao/xv6-labs.git快速获取pid-ugetpid题目要求参考已实现的ugetpid()使用USYSCALL快速获取pid。实现的思路是在每一个进程中增加一个共享页面,通过USYSCALL指定的虚拟地址,找到指定的页面。参考进程中的Trampoline页和Trapframe页。Trampoline页保
- 2024-02-14【XV6】 system calls
代码:https://github.com/JasenChao/xv6-labs.git使用GDB调试安装risc-v的GDB先安装依赖:sudoapt-getinstalllibncurses5-devpython2python2-devtexinfolibreadline-dev再下载源码,可以从清华镜像源下载:wgethttps://mirrors.tuna.tsinghua.edu.cn/gnu/gdb/gdb-13.2.ta
- 2024-02-14【XV6】 Multithreading
代码:https://github.com/JasenChao/xv6-labs.git用户级线程切换题目要求完成用户级线程系统,提示程序要在uthread.c和uthread_switch.S中补充完成。用户级线程调度和进程的机制是类似的,因此uthread_switch.S可以复制swtch.S中的内容: .globlthread_switchthread_switch:
- 2024-02-14【XV6】 traps
代码:https://github.com/JasenChao/xv6-labs.gitbacktrace题目要求实现backtrace来对堆栈上调用发生错误的地方进行跟踪。寄存器s0包含指向当前堆栈帧的指针,那么返回地址就位于帧指针的固定偏移量-8,前一个fp地址的偏移量为-16。在riscv.h文件中增加提示中的代码:staticinline
- 2024-02-14【XV6】 file system
代码:https://github.com/JasenChao/xv6-labs.git支持大文件XV6目前只支持268个blocks大小的文件,一个block(BSIZE)为1024,文件块inode包含12个一级地址和1个二级地址,二级地址指向另一个block,其中存放了256个一级地址,因此一共是268个。题目要求支持大文件(65803个blocks),提示通过三级
- 2024-02-14【XV6】 locks
代码:https://github.com/JasenChao/xv6-labs.git内存分配器单个空闲内存列表可能引起多个CPU的频繁锁争用,题目要求设计内存分配器,让每个CPU维护一个空闲内存列表,不同CPU的分配和释放可以并行执行,但如果一个CPU可用列表为空,而其他CPU可用列表不为空,则这个CPU必须窃取其他CPU的空
- 2024-02-14【XV6】 networking
代码:https://github.com/JasenChao/xv6-labs.gitE1000网络设备驱动题目已经在kernel/e1000.c中给出了E1000的初始化函数和发送接收函数,要求完善发送和接收的功能。其他相关的代码,上层的网络协议在kernel/net.c和kernel/net.h中。PCI总线上搜索网卡的代码在kernel/pci.c中://t
- 2024-02-11[MIT 6.S081] Lab: Copy-on-Write Fork for xv6
Lab:Copy-on-WriteForkforxv6在这个实验中,我们要为xv6实现cowfork。Implementcopy-onwrite根据写时复制的方式,我们在复制页面的时候应该采用的是将父级的物理页面映射到子级的页面,因此我们需要修改kernel/vm.c中的uvmcopy,将页面复制修改为映射的方式,同时应当将
- 2024-02-06MIT 6.1810 Lab: Copy-on-Write Fork for xv6
lab网址:https://pdos.csail.mit.edu/6.828/2022/labs/cow.htmlxv6Book:https://pdos.csail.mit.edu/6.828/2022/xv6/book-riscv-rev3.pdfImplementcopy-on-writefork这部分需要我们实现写时拷贝,题目给出解决方案为,当fork时,将父子进程的页表项都设置为只度,当发生写错误时,在处
- 2024-01-21[MIT 6.S081] Lab: Xv6 and Unix utilities
Lab:Xv6andUnixutilitiesGradesleepsleep格式如下sleep5这边需要使用kernal/stat.h中的sleep系统调用,并将参数转化为传入。#include"kernel/types.h"#include"kernel/stat.h"#include"user/user.h"intmain(intargc,char*argv[]){if(