CMU 15-445/645 Lab1-BUFFER POOL

这篇博客主要介绍了CMU 15-445课程的Lab1,内容涉及LRU替换策略的实现及其在缓冲池管理中的应用。作者分享了在完成Lab1过程中遇到的问题,如2020与2021版本的区别、测试细节、Autograder错误及解决方法。Lab1任务包括理解并实现LRU算法,以及缓冲池管理,这两个任务都需要对数据结构和数据库管理有深入理解。

0.写在前面

GitHub同步更新,欢迎star~ https://github.com/kaniel-outis/CMU15-445
写这篇文章的时候看到 lecture 5:Buffer Pool. 写完homework 1,然后准备动手Lab1。
Lab1的地址:https://15445.courses.cs.cmu.edu/fall2020/project1/
本文主要总结一下在写Lab1遇到的几个问题,然后是Task的解决思路(不公开代码,如果有问题可以留言)。

1.问题汇总

1.1 关于2020与2021的lab

首先就是我在写的时候,git上的lab已经更新到2021了,在2021中有些类的设计发生了变化(Andy Pavlo教授上课说每年都会有些区别,为了防止抄袭),所以我在第一次写的时候没注意到,直接pull了2021的项目,而且因为Task1(LRU)在本地测试也通过了(这个2020与2021没有产生变化),在写Task2的时候,就在本地一直过不去。
在这里插入图片描述
(buffer_pool_manager_instance.cpp是2021的)
然后就去网上找资源,看一下2020的空白模版。然后在这位同学这里找到了:https://github.com/TYBisok/bustub

1.2 测试细节

在测试时候需要把所有*_test.cpp中的,DISABLED_SampleTest改成SampleTest。(note:一个cpp文件中可能有多个DISABLED)
在这里插入图片描述

1.3 Autograder 错误-1

在这里插入图片描述
这个问题大概率是文件提交的格式不正确。
应该是:src/include/buffer/lru_replacer.h(类似这样)

1.4 Autograder 错误-2

在这里插入图片描述
这个问题真的困扰了我很久。之后我发现在discord真的非常棒啊,啥都有。你遇到过的问题基本上都能在上面找到。这个问题是语法兼容上的问题。有些写法会导致测评机不识别。
在这里插入图片描述

Task1 - LRU REPLACEMENT POLICY

这一部分的Lab在 lecture 5:Buffer Pool中有一些讲解,还有一些预备知识,需要提前了解。

1.1 实验目的

这部分的任务更多的还是对LRU替换算法的理解,已经如何用数据结构表示。
最早接触LRU是在本科学OS的时候,了解算法的原理但是从来没有手动实现过。这一次写发现LRU的思想非常好理解,但是实现起来却遇到不少困难。实践真的很重要!

1.2 实验分析

LRU算法最简单的思路是仅维护一个List,只要知道每个frame的距离上次的访问时间即可。
但是这样查询的时间复杂度是O(n),在这个基础之上我们可以引入一个hash表,来提高访问的效率。

unordered_map<frame_id_t, list<frame_id_t> > Hashmap_t;

在这里插入图片描述

Task2 - BUFFER POOL MANAGER

在lecture5中有理论基础。

1.1 实验目的

这个实验的主要目的是让我们更好的理解在buffer pool中数据的传递是如何的。

1.2 实验分析

BufferPoolManager负责从DiskManager获取数据库Page,并将它们存储在内存中。
在内存中都是Page为数据单位进行传递。
在这里涉及到Page table,Buffer Pool,disk中的交互,同时也会运用到上面的LRU算法。
每个函数的逻辑操作在空白的模版中几乎都有,可以按照思路进行code即可。
在这里插入图片描述
在FQA:https://15445.courses.cs.cmu.edu/fall2020/faq.html
中有邀请码和 Gradescope的地址,注册完之后,进行提交。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值