![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
操作系统实验
文章平均质量分 84
EGNIR
这个作者很懒,什么都没留下…
展开
-
操作系统实验Mit6.S081笔记 Lab7:Multithreading
Uthread: switching between threads (moderate)要求:在本练习中,您将为用户级线程系统设计上下文切换机制,然后实现它。为了让您开始,您的 xv6 有两个文件 user/uthread.c 和 user/uthread_switch.S,以及 Makefile 中用于构建 uthread 程序的规则。uthread.c 包含大部分用户级线程包,以及三个简单测试线程的代码。threading 包缺少一些用于创建线程和在线程之间切换的代码。您的工作是制定一个计划来创原创 2021-10-11 16:46:11 · 1713 阅读 · 0 评论 -
操作系统实验Mit6.S081笔记 Lab6: Copy on-write
xv6中的fork()系统调用将父进程的所有用户空间内存复制到子进程中。 如果父节点很大,复制可能需要很长时间。 更糟糕的是,这些工作往往大部分都被浪费了; 例如,子进程中的fork()后跟exec()将导致子进程丢弃复制的内存,可能根本不会使用其中的大部分内存。 另一方面,如果父母和孩子都使用一个页面,并且其中一个或双方都写了它,那么副本是非常必要的。写时拷贝(COW) fork()的目标是推迟为子进程分配和复制物理内存页,直到实际需要拷贝(如果需要的话)。COW fork()只为子进程创建一个可分页原创 2021-10-06 17:38:44 · 735 阅读 · 1 评论 -
操作系统实验Mit6.S081笔记 Lab5: Lazy allocation
O/S使用页表硬件可以使用的许多巧妙技巧之一是延迟分配用户空间堆内存。 Xv6应用程序使用sbrk()系统调用向内核请求堆内存。 在我们给出的内核中,sbrk()分配物理内存并将其映射到进程的虚拟地址空间。 内核为大型请求分配和映射内存可能需要很长时间。 例如,考虑一个千兆字节由262,144个4096字节的页组成; 这是一个巨大的分配数量,即使每一个都是便宜的。 此外,一些程序分配的内存比它们实际使用的内存要多(例如,实现稀疏数组),或者在使用之前分配内存。 为了让sbrk()在这些情况下更快地完成,复杂原创 2021-10-02 09:37:06 · 2591 阅读 · 1 评论 -
操作系统实验Mit6.S081笔记 Lab4: Traps
RISC-V assembly (easy)要求:理解一点RISC-V组装是很重要的,这在6.004中已经介绍过了。 在您的xv6 repo中有一个文件user/call.c。 fs.img编译它,并在user/call.asm中生成程序的可读汇编版本。阅读call.asm中函数g、f和main的代码。RISC-V的使用说明书在参考页。 这里有一些你应该回答的问题(将答案存储在文件answers-traps.txt中):Backtrace (moderate)要求:对于调试来说,使用回溯跟踪通常原创 2021-09-27 14:37:19 · 1066 阅读 · 1 评论 -
操作系统实验Mit6.S081笔记 Lab3: Page tables
Print a page table要求:定义一个名为vmprint()的函数。 它应该接受一个pagetable_t参数,并以下面描述的格式打印该可分页对象。 在exec.c中,在return argc之前插入if(p->pid==1) vmprint(p->pagetable),打印第一个进程的页表。提示:把vmprint()放在kernel/vm.c中。使用kernel/riscv.h文件末尾的宏。可使用函数freewalk。在kernel/defs.h中定义vmprint的原创 2021-09-23 16:06:33 · 1582 阅读 · 0 评论 -
操作系统实验Mit6.S081笔记 Lab2:System calls
system call tracing要求:在本作业中,您将添加一个系统调用跟踪特性,这可能会在调试以后的实验时帮助您。 您将创建一个新的跟踪系统调用来控制跟踪。 它应该接受一个参数,一个整数“mask”,其位指定要跟踪哪个系统调用。 例如,要跟踪fork系统调用,程序调用trace(1 << SYS_fork),其中SYS_fork是来自kernel/syscall.h的一个系统调用号。 如果在掩码中设置了系统调用的编号,则必须修改xv6内核,以便在每个系统调用即将返回时打印一行。 这一行原创 2021-08-16 15:18:02 · 1413 阅读 · 0 评论 -
操作系统实验Mit6.S801笔记 Lab1: Util
sleeptips:相关代码 user/echo.c, user/grep.c, user/rm.c参数错误提示atoi 字符串转整型数可以调用系统调用sleepkernel/sysproc.c 内核代码,看系统调用sleep的实现;user/user.h 对用户程序调用sleep的C定义;user/usys.S 从用户代码跳转到内核执行sleepmain得调用exit()返回在Makefile中添加sleep,编译执行sleep.c#include "kernel/types.h"#原创 2021-08-07 13:30:26 · 1067 阅读 · 0 评论 -
操作系统实验Mit6.S801笔记 Lab0
测试0、进入目录zxj@zxj-virtual-machine:~/文档/xv6-labs-2020$ 1、测试安装$ riscv64-unknown-elf-gcc --versionriscv64-unknown-elf-gcc (GCC) 10.1.0//我的版本是9.3.0...$ qemu-system-riscv64 --versionQEMU emulator version 5.1.0//我的版本是4.2.12、运行xv6qemu是模拟处理器# in the原创 2021-08-07 11:41:19 · 310 阅读 · 0 评论