【MIT6.S081】Lab10 mmap
什么是mmap? mmap 是一种用于将文件或设备与进程的地址空间关联起来的内存映射技术。通过 mmap,可以将文件的内容直接映射到进程的虚拟内存地址空间,使得文件的内容可以像操作普通内存一样进行读取和写入。 ...
什么是mmap? mmap 是一种用于将文件或设备与进程的地址空间关联起来的内存映射技术。通过 mmap,可以将文件的内容直接映射到进程的虚拟内存地址空间,使得文件的内容可以像操作普通内存一样进行读取和写入。 ...
Intro 在这个实验中,我们需要让xv6支持更大的文件和软链接。实验总体不是特别难,不过需要我们理解好文件系统是如何工作的。Lab8 lock中的Buffer Cache也是文件系统的一部分,不过它位于文件系统的下层,这里我们需要处理的更多在上层,偏应用层。 ...
Intro 这个实验个人感觉挺难的,需要我们重新设计数据结构,还要考虑在并发(并行)情况下对于锁的操作,以减少多核情况下对于锁的竞争。其中主要涉及内存分配和IO缓冲块分配,在这个lab之前,xv6对于这两个分配都是使用的全局对象,并只有一把全局锁进行操作,这样的话在并行情况下锁的竞争是很激烈的,我们的任务就是重新设计这两个分配器,它们的重构思路并不完全一致,需要具体问题具体分析。 ...
在做thread lab的时候,阅读xv6的源码后对于进程调度的实现有了大致的了解,但是其中锁的获取与释放顺序让我困惑了好久:在yield函数中,不是先获取了进程p的锁吗,那么之后在调度器中又获取p的锁,那不是会死锁吗?在调度器内使用swtch发生进程切换后,又会跳转到哪里? 而在我观摩大佬的一些博客和视频后,发现我之前的想法有很大的问题,归根结底是没有弄明白xv6何时发生了切换,切换后应该从哪里开始运行。这篇笔记就是对于分析xv6进程调度的总结。 ...
本次的实验总体都不是很难,第一个练习让我们在用户态模拟了线程的切换,这里重要的就是进程/线程上下文的保存与恢复;第二三个练习则是让我们跳出了xv6,去熟悉pthread库和线程的同步互斥。 ...
为什么我们需要copy on write 通过xv6的实验指导书,我们可以知道: xv6中的fork()系统调用将父进程的所有用户空间内存复制到子进程中。如果父进程所使用的页数很大,复制可能需要很长时间,而这样的复制操作经常是没有用的:fork()之后通常是子进程中的exec(),这会丢弃复制的内存而不是使用它们。 那么,我们是不是可以在子进程刚创建时将其页表的映射到父进程的物理页,而在其需要对内存进行写操作时再重新分配内存呢?没错,这就是通过copy on write(写时复制)技术来进行优化。 该实验的代码实现见:仓库commit ...
backtrace这个lab非常有意思,虽然实现的代码量不多,但是能让我们更好地理解栈、栈帧、指针、gdb的一些知识。 该实验的代码实现见:仓库commit ...
Alarm综合了该lab中前几个练习的知识点:系统调用、中断、寄存器等,我们需要对trap机制有比较好的认识才能理解。Alarm的任务是需要我们完成一个定时器的实现:sigalarm(interval, handler),当调用sigalarm(n, fn)时,内核会每n个时间间隔(tick)执行fn函数。 该实验的代码实现见:仓库commit ...