最难且重量级的一项放在lab3,后面的实验就都是水怪实验。创建一个内核页表,我们为proc额外初始化一个k_pagetable与kstack_pa: proc.h: struct proc { struct spinlock lock; // p->lock must be held when using these: enum procstate state; // Process state struct proc *parent; // Parent process ...
遇到bug在仔细思考后如果还有问题可以用搜索引擎查一下(虚拟机性能太差,要改timeout,lab2发现的,lab3仍然一样) 代码在:yy6768/xv6-2021: my implementation of xv6 2021 version (github.com) 实验结果: 实验结果 引用 Lab: Xv6 and Unix utilities (mit.edu) FrankZn/xv6-riscv-book-Chinese (github.com)...
Lab0:Utilities Lab1:System calls Lab2:Page tables Lab3:Traps Lab4:Copy on-write Lab5:Multithreading Lab6:Network driver(选做) Lab7:Lock Lab8:File system Lab9:mmap 时间安排 参考资料 MIT课程视频 双语字幕版MIT 6.S081 2020 操作系统 xv6-book 中文翻译版 https://github.com/FrankZn/xv6-risc...
Long long time ago, I finished Lab2. And now, let me face Lab3 目标:建立用户环境,可以追踪进程的运行情况,可以创建一个新的用户环境。也要完成系统调用和可能引发的异常 在这门课看来,环境和进程是可以对等的,都指程序运行期间的抽象。不直接叫进程是因为jos中实现的系统调用和UNIX是有差别的 描述环境的...
实验实施过程中,注意到在页面映射时不能仅包含PTE_R位,需同时添加PTE_U位,以允许用户空间调用ugetpid()。尽管问题描述为“痛苦”,但仔细参考RISC-V及课程内容后,正确配置得以实现。第二部分实验要求打印页面表。实验流程明确,结果直接可见。第三部分实验需检测已访问页面。实验提出三个参数,但其实...
之所以是一般,是因为每个操作系统内核在这块儿的设计上都会有各自的小心思,lab 3 就是拿这里展开做文章的。 对于来自 user space 的中断,一条清晰的函数调用链是uservec->usertrap->usertrapret->userret。我们需要在uservec中从用户页表切换至内核页表。为了在切换前后,使函数代码能够继续执行,需要满足以下两个必...
XV6实验报告 学院软件学院 专业软件工程 年级2012级 姓名殷博 学号2512218482 2012 年 11 月 1日 Xv6 Lab3实验报告 PART A Ex.1 分配环境数组 设置page[]数组已经在Lab2中做过,以下envs是具体代码:Kern/pmap.c: men_init()分配物理空间,然后为它在虚拟地址空间中创建映射:Kern/pmap.c: men_init()EX....
xv6 lab3 Traps, interrupts, and drivers 学习Traps, interrupts, and drivers 1.保护性控制转移 异常和中断都是保护性控制转移,让处理器从用户模式切换到内核模式(CPL=0),这样用户代码不会对内核或者其他环境造成影响。中断是由外部异步事件导致的处理器保护性控制转移,比如外设I/O的通知信号。异常是正在...
xv6 lab3 Traps, interrupts, and drivers 学习Traps, interrupts, and drivers 1.保护性控制转移 异常和中断都是保护性控制转移,让处理器从用户模式切换到内核模式(CPL=0),这样用户代码不会对内核或者其他环境造成影响。中断是由外部异步事件导致的处理器保护性控制转移,比如外设I/O的通知信号。异常是正在...
usertrapret();return0; } 后记 Lab4 比 Lab3 相比实在顺畅很多。 因为做 Lab3 的时候把 xv6 book 的第四章也一起看了,所以自己一个人从头到做到尾不到半天时间。 Lab3 跟 Lab4 相比,主要还是要想的东西太多,出异常中断了也不好排错……