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

该实验的代码实现见:仓库commit

阅读全文 »

前言

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

阅读全文 »

本关的任务为“Detect which pages have been accessed”,需要实现一个新的系统调用pgaccess,它指出访问了哪些页面被访问了(读、写等)。系统调用需要三个参数:

  1. 第一个用户页面的起始虚拟地址
  2. 需要检查页数
  3. 一个存储每一页是否被访问的掩码

该lab的所有代码:Github

阅读全文 »

该系列博客只是为了记录自己在写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协程检测到管道可读后退出,调度器执行调度。

阅读全文 »
0%