随笔分类 - Mit6.s081(2020)
摘要:MIT6.s081 Lab10:mmap 看网上说这是第二难的Lab了,综合了文件,虚拟内存,还有页面计数的思想,花了大概一天的时间,刚开始想的很复杂,越深入越复杂,后来根据测试改已经写出来的代码的一些bug,简化一些就通过测试了,最后考虑的内存释放的事情。 代码,在写这个文章的时候,将一些没用的操
阅读全文
摘要:MIT6.s081 Lab9:file system 不太顺利的一个Lab,Large files写的还行,写Symbolic links卡了很久,全是细节。 代码 这里补充一点,xv6里的cache似乎是在disk中,我理解的是在内存中,好像现在有那种带缓存的固态和不带的缓存的固态,可能区别在这里
阅读全文
摘要:MIT6.s081 Lab8:locks 这个lab主要就是实现“一个锁变成多个锁”,对于一个相同的数据类型,分成多份,然后分别加锁。这个真的是做的最快的实现,所有测试一把过。 代码 1. Memory allocator 内核中的页表都是由一个链表维护的,每次需要申请或者释放内存的时候,我们需要链
阅读全文
摘要:MIT6.s081 Lab7:Multithreading 总体来说,是最简单的一个,基本不涉及到内核,但是需要理解函数,以及线程的切换。 代码 1. Uthread: switching between threads 这个题目需要理解题目的意思,以及线程切换的基本知识,我在这里花了挺长时间的,当
阅读全文
摘要:MIT6.s081 Lab6:Copy-on-write fork 这个实验思路不难,大概2-3h就把改写的写完了,当时还很高兴,有史以来最快的一次。但是在测试的时候就出问题了。逻辑上没有问题,但是实际测试,各种错误,最后完成时间大概在12h,调试也调不出来,最后是用uvmunmap替换我的方法,解
阅读全文
摘要:MIT6.s081 Lab5:xv6 lazy page allocation 这个实验老师在课上已经讲了一些内容,主要就是实现一个lazy allocation,大概意思就是不主动,你需要了再给你。先告诉进程你有那么大空间了,然后等进程真需要的时候通过trap的方式进行分配,优点是省空间,缺点是费
阅读全文
摘要:MIT6.s081 Lab4:Traps 之前的实验实现过Syscall,这个实验是为了更深刻的理解如何进入的系统调用。简单来说,Backtrace打印函数的调用信息,Alarm根据时钟信息来调用传入的函数。 代码 1. Backtrace Lab中是在sys_sleep中调用的,要打印所有的调用信
阅读全文
摘要:MIT6.s081 Lab3:Page tables Lab3虚拟内存页面管理号称s081最难的Lab,断断续续做了4天,感觉操作系统真的太牛了。第一个打印页表属于比较简单的内容,就是遍历+递归,可以很快的写出来,但是需要了解一些细节;第二个是每个进程一个内核页表,这个一定要理解题目,否则会费很多时
阅读全文
摘要:MIT6.s081 Lab2:System calls 这次的实验主要是写两个System Call,分别是tracing和Sysinfo。tracing是对系统调用的跟踪,接收一个mask,来对系统调用进行过滤;Sysinfo用来收集系统的一些信息,比如剩余内存、进程的数量。文笔较烂,主要做记录,
阅读全文
摘要:MIT6.s081 Lab1:Unix utilities lab1比较简单,内容较多,但是都是实现一些简单的命令,其中primes这个很有趣,还是花了点时间。 代码 1. sleep 在user/sleep.c中添加如下代码: int main(int argc, char** argv) { i
阅读全文
摘要:在进行pgtbl实验的时候遇到了很多问题,必须要进行调试了,发现课程上的暴怒能直接使用,因为我是ubuntu,需要另外配置。下面是参考别人的配置过程记录一下 1 GDB调试 GDB调试(第一次运行) echo "add-auto-load-safe-path $(pwd)/.gdbinit " >>
阅读全文

浙公网安备 33010602011771号