6.s081
結城
渴望着美好结局,却没能成为自己。
展开
-
6.s081 Lab:file system
Lab:file system1.实验目的向xv6文件系统添加大文件和符号链接。2.实验内容1)在这个任务中,我们需要增加xv6文件的最大大小。目前xv6文件被限制为268个块,也就是268BSIZE字节(在xv6中BSIZE是1024)。这个限制来自于这样一个限定:一个xv6索引节点包含12个直接索引和一个一级间接索引(最多可容纳256个块号的块),总共有12+256=268个块。我们需要更改xv6文件系统代码,以支持每个inode中的二级间接索引,其中包含256个一级间接索引块的地址,每个块最多原创 2020-09-22 21:48:21 · 3354 阅读 · 2 评论 -
6.s081 Lab:locks
Lab:locks1.实验目的在这个实验中,我们需要重新设计代码以提高并行性。多核计算机上并行性差的一个常见症状是高锁争用。为了减少争用,提高并行性通常需要同时改变数据结构和锁定策略。这需要我们为xv6内存分配器和块缓存执行此操作。2.实验内容1)实现每CPU空闲列表,并在一个CPU的列表为空时进行窃取。运行kalloctest查看您的实现是否减少了锁争用,并检查它是否仍然可以分配所有内存。2)修改块缓存,以便在运行bcachetest时,bcache中所有锁的测试和集数接近于零。理想情况下,块缓原创 2020-09-22 21:43:24 · 2200 阅读 · 1 评论 -
6.s081 Lab:user-level threads and alarm
Lab:user-level threads and alarm1.实验目的本实验目的在于熟悉如何在上下文切换和系统调用中保存和恢复状态。我们将在一个用户级线程包中实现线程之间的切换,并实现一个“报警”特性,其向程序传递类似中断的事件。2.实验内容1)阅读call.asm中的函数f,g,main的代码。2)想出一个计划来创建线程和保存/恢复寄存器,以便在线程之间切换,并实现该计划。3) 向xv6添加一个特性,该特性在进程使用CPU时间时定期发出警报。对于那些希望限制占用CPU时间的计算绑定进程,原创 2020-09-22 21:39:37 · 510 阅读 · 0 评论 -
6.s081 Lab:Copy-on-Write Fork for xv6
Lab:Copy-on-Write Fork for xv61.实验目的在xv6内核中实现copy-on-write-fork。2.实验内容xv6中的fork()系统调用将父进程的所有用户空间内存复制到子进程中。如果父对象很大,复制可能需要很长时间。此外,副本通常会浪费内存;在许多情况下,父级或子级都不会修改页面,因此原则上它们可以共享相同的物理内存。如果子级调用exec(),则效率低下的情况尤其明显,因为exec()将丢弃复制的页面,可能不会使用大部分页面。另一方面,如果父项和子项都使用一个页,并原创 2020-09-22 21:34:50 · 2163 阅读 · 1 评论 -
6.s081 Lab:xv6 lazy page allocation
Lab:xv6 lazy page allocation1.实验目的O/S可以在页表硬件上使用的许多巧妙的技巧之一是延迟分配用户空间堆内存。Xv6应用程序使用sbrk()系统调用向内核请求堆内存。在我们给您的内核中,sbrk()分配物理内存并将其映射到进程的虚拟地址空间。但是,有些程序使用sbrk()来请求大量内存,但从未使用大部分内存,例如实现大型稀疏数组。为了对这种情况进行优化,复杂的内核延迟地分配用户内存。也就是说,sbrk()不分配物理内存,只是记住分配了哪些地址。当进程第一次尝试使用任何给定的原创 2020-09-22 21:29:53 · 2123 阅读 · 0 评论 -
6.s081 Lab:Allocator for xv6
Lab:Allocator for xv61.实验目的我们用一个buddy allocator替换了xv6内核中的页面allocator。我们需要修改xv6以使用这个allocator来分配和释放文件结构,这样xv6可以拥有比现有系统范围的限制NFILE更多的打开文件描述符。此外,还要实现一个优化,以减少buddy对内存的使用。2.实验内容1)修改kernel/file.c以使用buddy分配器,使文件结构的数量受内存而不是NFILE的限制。2)buddy allocator空间效率低。alloc原创 2020-09-22 21:25:16 · 1332 阅读 · 0 评论 -
6.s081 Lab:Simple xv6 shell
Lab:Simple xv6 shell1.实验目的了解Unix shell如何使用基本的系统调用。2.实验内容为xv6编写一个简单的shell,能够运行带参数的命令,处理输入和输出重定向,并设置两个元素管道。3.实验步骤(要细化如何实现的思路或流程图)1)首先先创建一个user/nsh.c文件。2)按照要求修改Makefile文件。3)main函数参考sh.c文件来编写,不过没有必要实现那么复杂的功能,只需要实现管道和重定向功能就可以,那我们也就只需要简化一下sh.c中的代码即可拿来直原创 2020-09-22 21:20:18 · 1735 阅读 · 2 评论 -
6.s081 Lab:Xv6 and Unix utilities
Lab:Xv6 and Unix utilities1.实验目的进一步了解熟悉xv6和系统调用命令。2.实验内容1)为xv6实现UNIX程序sleep;sleep应该暂停一段用户指定的时间间隔。解决方案放在user/sleep.c文件中。2)编写一个程序,它使用UNIX系统调用在两个进程之间通过一对管道“ping-pong”一个字节,每个方向一个。父进程通过向父进程parent_fd[1]写入一个字节来发送,子进程通过从父进程parent_fd[0]读取来接收。在从父进程接收到一个字节后,子进程用原创 2020-09-22 21:07:56 · 2582 阅读 · 0 评论