【MIT6.S081】Lab5 copy-on-write fork

为什么我们需要copy on write 通过xv6的实验指导书,我们可以知道: xv6中的fork()系统调用将父进程的所有用户空间内存复制到子进程中。如果父进程所使用的页数很大,复制可能需要很长时间,而这样的复制操作经常是没有用的:fork()之后通常是子进程中的exec(),这会丢弃复制的内存而不是使用它们。 那么,我们是不是可以在子进程刚创建时将其页表的映射到父进程的物理页,而在其需要对内存进行写操作时再重新分配内存呢?没错,这就是通过copy on write(写时复制)技术来进行优化。 该实验的代码实现见:仓库commit ...

2024-11-12 · 4 min · 728 words · Kerolt

【MIT6.S081】Lab4 trap backtrace

backtrace这个lab非常有意思,虽然实现的代码量不多,但是能让我们更好地理解栈、栈帧、指针、gdb的一些知识。 该实验的代码实现见:仓库commit ...

2024-11-10 · 3 min · 440 words · Kerolt

【MIT6.S081】Lab4 trap alarm

Alarm综合了该lab中前几个练习的知识点:系统调用、中断、寄存器等,我们需要对trap机制有比较好的认识才能理解。Alarm的任务是需要我们完成一个定时器的实现:sigalarm(interval, handler),当调用sigalarm(n, fn)时,内核会每n个时间间隔(tick)执行fn函数。 该实验的代码实现见:仓库commit ...

2024-11-07 · 2 min · 241 words · Kerolt

【MIT6.S081】Lab3 page tables(上)

前言 页表是最常用的机制,操作系统通过它为每个进程提供自己的私有地址空间和内存。页表决定了内存地址的含义,以及可以访问物理内存的哪些部分。在本文中,记录了Lab: page tables的前两个实验:加速系统调用和打印页表。 ...

2024-11-05 · 2 min · 371 words · Kerolt

【MIT6.S081】Lab3 page tables(下)

本关的任务为“Detect which pages have been accessed”,需要实现一个新的系统调用pgaccess,它指出访问了哪些页面被访问了(读、写等)。系统调用需要三个参数: 第一个用户页面的起始虚拟地址 需要检查页数 一个存储每一页是否被访问的掩码 该lab的所有代码:Github ...

2024-11-05 · 1 min · 206 words · Kerolt

【MIT6.S081】Lab2 system calls

前言 这个lab开始我们就正式进入了xv6的世界了,这一次我们可以了解到内核中系统调用的注册和运行原理,这可以说是之后lab的一个基石。 ...

2024-10-28 · 6 min · 1195 words · Kerolt

【MIT6.S081】Lab1 utilities

前言 该Lab通过实现几个命令来熟悉 xv6 及其系统调用 sleep pingpong primes find xargs 官方实验指导:https://pdos.csail.mit.edu/6.S081/2021/labs/util.html 个人代码实现仓库:https://github.com/kerolt/xv6-labs-2023 ...

2024-10-27 · 4 min · 685 words · Kerolt

【CMU15-445 Fall2023】Project1 Buffer Pool 小结

该系列博客只是为了记录自己在写Lab时的思路,按照课程要求不会在Github和博客中公开源代码。欢迎与我一起讨论交流! 这个Project需要我们实现一个缓存池,减少对于磁盘的频繁IO。开始慢慢上强度了,细节拉满! ...

2024-10-12 · 2 min · 295 words · Kerolt

【CMU15-445 Fall2023】Project0 C++ Primer 小结

该系列博客只是为了记录自己在写Lab时的思路,按照课程要求不会在Github和博客中公开源代码。欢迎与我一起讨论交流! project0只在task4中浅浅涉及了一点BusTub的内容,其他都是检测我们对于C++的一个掌握,主要涉及智能指针和C++的常用特性(dynamic_cast、std::move、并发与锁等)。 ...

2024-10-06 · 1 min · 65 words · Kerolt

【动手写协程库 5】常用IO函数的HOOK功能

【动手写协程库】系列笔记是学习sylar的协程库时的记录,参考了从零开始重写sylar C++高性能分布式服务器框架和代码随想录中的文档。文章并不是对所有代码的详细解释,而是为了自己理解一些片段所做的笔记。 hook函数的具体定义实现可以在这里查看:Github: src/hook.cpp 该协程库框架的目标并不是做成类似goroutine那样,而是希望能够通过协程来提高IO处理的效率。因此,对于每个文件描述符fd,我们都希望它有一个读写IO的超时时间。 hook的目的是在不重新编写代码的情况下,把老代码中的socket IO相关的API都转成异步,以提高性能。 ...

2024-09-30 · 1 min · 108 words · Kerolt