【MIT6.S081】Lab4 trap backtrace
backtrace这个lab非常有意思,虽然实现的代码量不多,但是能让我们更好地理解栈、栈帧、指针、gdb的一些知识。
该实验的代码实现见:仓库commit
该Lab通过实现几个命令来熟悉 xv6 及其系统调用
官方实验指导:https://pdos.csail.mit.edu/6.S081/2021/labs/util.html
该系列博客只是为了记录自己在写Lab时的思路,按照课程要求不会在Github和博客中公开源代码。欢迎与我一起讨论交流!
这个Project需要我们实现一个缓存池,减少对于磁盘的频繁IO。开始慢慢上强度了,细节拉满!
该系列博客只是为了记录自己在写Lab时的思路,按照课程要求不会在Github和博客中公开源代码。欢迎与我一起讨论交流!
project0只在task4中浅浅涉及了一点BusTub的内容,其他都是检测我们对于C的一个掌握,主要涉及智能指针和C的常用特性(dynamic_cast、std::move、并发与锁等)。
【动手写协程库】系列笔记是学习sylar的协程库时的记录,参考了从零开始重写sylar C++高性能分布式服务器框架和代码随想录中的文档。文章并不是对所有代码的详细解释,而是为了自己理解一些片段所做的笔记。
hook函数的具体定义实现可以在这里查看:Github: src/hook.cpp
该协程库框架的目标并不是做成类似goroutine那样,而是希望能够通过协程来提高IO处理的效率。因此,对于每个文件描述符fd,我们都希望它有一个读写IO的超时时间。
hook的目的是在不重新编写代码的情况下,把老代码中的socket IO相关的API都转成异步,以提高性能。
【动手写协程库】系列笔记是学习sylar的协程库时的记录,参考了从零开始重写sylar C++高性能分布式服务器框架和代码随想录中的文档。文章并不是对所有代码的详细解释,而是为了自己理解一些片段所做的笔记。
IOManager
类中具体定义实现可以在这里查看:Github: src/iomanager.cpp
之前实现的协程调度器的功能其实非常简单,当添加任务后调度器只是单纯的从任务队列中取出任务交给协程去执行。sylar的协程库的关注对象是网络IO,如果采用这么简单的调度就根本没有用到协程的精髓。
sylar的IO协程调度解决了之前调度器在idle状态下忙等待导致CPU占用率高的问题。IO协程调度器使用一对管道fd来tickle调度协程,当调度器空闲时,idle协程通过epoll_wait阻塞在管道的读描述符上,等管道的可读事件。添加新任务时,tickle方法写管道,idle协程检测到管道可读后退出,调度器执行调度。