自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 6.824/6.5840(2024)环境配置wsl2+vscode

设置完上述环境变量后,这个环境变量只会在当前打开的这个shell中起作用,是临时性的。也就是假如我们再打开一个新的shell,会发现go环境依然不存在。要确保这些环境变量在每次打开新终端时都能自动生效,我们需要将这些配置添加到合适的配置文件中。3、将 go 的压缩包从 go 的官方网站下载并解压缩到指定的目录中,这里我们安装到usr/local/go这个目录中。接下来开始为Ubuntu(笔者使用的版本依然是20.04)配置go的相关环境。最常用的做法是将这些环境变量的配置添加到用户的 ~/.bashrc。

2024-11-30 21:39:13 569

原创 6.s081通关小结

正巧彼时我又发现了一本名为《30天自制操作系统》的书籍,这仿佛成了另一缕穿透迷雾的光。再然后就到了pgtbl。说实话这个lab给我带来的感觉是全系列最难,要考虑的点实在太多了,重重陷阱让我一次又一次地跌倒。每个lab都带走了我数不清的脑细胞,又不断巩固着我的道心。那个时候感觉每一步前进都是沉重的——困难的不是解决问题的过程,而是寻找着手点。但有了lab1的拷打,我慢慢找到了那种可意会不可言传的解题感觉,理清思路然后完成lab变成了一个自然而然的过程。有了这次的经历,我眼中的s081慢慢褪去了神秘的面纱。

2024-06-01 10:26:32 521 2

原创 把自己在本地完成的mit6.s081项目上传到自己的github仓库里

之前我在GitHub上问一个博主怎么把这种分支形式的文件传到GitHub上,那位博主前两天回我了。结果,我一看这熟悉的链接,熟悉的John Snow,这这这不就是我自己嘛哈哈哈哈。让三月份的我来参考九个月后的我也太搞笑了嘻嘻。

2024-03-06 11:59:20 984 2

原创 Mit6.s081环境配置踩坑之旅WSL2+VScode

久闻6.s081大名,于是寒假尝试完成几个lab。在折腾了几天的环境配置后,依然是不得要领,遂作罢。近日尝试了另一种环境,终有所得,欣然献于诸君。

2023-04-05 17:46:38 3834 11

原创 CMU15445(2023fall) Project #4 - Concurrency Control踩坑历程

我个人认为是需要的,别的不说,单从UndoLogs的可读性来讲为Insert操作生成UndoLog就是必要的,但是根据lab的测试点来说并不推荐这种做法。用那张图上的内容来说,A1、B1等元素只是版本链最后一个有效的UndoLog,它们包含的UndoLink会指向一个空的内容,如下图。老规矩,是时候展示我的匠心图例了。version_info_我觉得是十分精妙的,利用了每个page_id的唯一性(由Project 02的bufferpool分配),越过table_heap直接管理每个page的版本链信息。

2025-03-01 23:15:05 776 6

原创 CMU15445(2023fall) Project #3 - Query Execution(下)详细分析

当查询中包含多个等值条件时,哈希连接仍然能够高效执行,原因是哈希连接擅长处理等值连接,并且可以通过构建复合哈希键来处理多个条件。HashJoinPlanNode 作为哈希连接的计划节点,允许数据库在遇到等值连接条件时使用哈希连接算法,构建哈希表并进行高效的连接操作。在查询中出现多个等值条件时,哈希连接依然能够通过处理这些条件的哈希值,利用哈希表快速查找匹配的元组。

2025-03-01 22:50:13 979

原创 CMU15445(2023fall) Project #3 - Query Execution(上)详细分析

要准确体会executor的执行过程,进行调试是相当重要的。但是Lab 03的测试方法不同于以前,是利用sqllogictest来执行slt文件。搞得我一直以为调试要从sqllogictest下手,但这样配置显然是有问题的去群里问了也没有得到想要的答案。反复看了几遍handout才发现有可能是通过bustub-shell进行调试,试了一下还真是。会了如何进行调试之后,我们就可以着手先分析各种sql语句的执行过程了。

2025-02-28 23:30:07 1198

原创 CMU15445(2023fall) Project #2 - Extendible Hash Index 匠心分析

在缓冲池管理器中,FetchPage和NewPage函数返回已经锁定的页面指针。这个锁定机制确保页面在没有任何读取和写入时不会被驱逐。为了表示页面在内存中不再需要,程序员必须手动调用UnpinPage。然而,如果程序员忘记调用UnpinPage,页面将永远不会被驱逐出缓冲池。由于缓冲池实际上只有较少的帧,这将导致更多的页面在磁盘和内存之间交换。这样不仅会影响性能,而且这个bug很难被发现。

2025-02-28 23:05:23 1514

原创 CMU15445(2024fall) Project #1 - Buffer Pool Manager踩坑大全

有一说一2023fall的BPM实现起来要比2024fall的流畅不少。2024fall版本的函数拆分粒度太高了,乍一看完全不知道每个函数到底是充当一种什么样的角色,更像是将一份优化过后的代码。相反2023fall的函数设计则较为合理,而且也专门将page guard拆分成了一个单独的task完成。接下来分析2024fall版本的BPM。

2025-02-27 19:01:07 1221

原创 CMU15445(2024 fall) Project #0 - C++ Primer

其实Lab 0有个重点贯穿始终——无符号整形的处理,一定要注意无符号整形不会小于0这个特点

2025-02-27 16:44:09 815

原创 CMU15445(2023fall) Project #0 - C++ Primer前置知识学习

const_cast用来移除const限定符,使得可以修改指向的内容,或者用于访问原本被声明为const的数据。用于指针类型之间的强制转换,允许将指针转换为完全不同类型的指针,按新的类型去解释数据。这种转换是非常低级且不安全的,可能会引发未定义行为,必须小心使用六、几种整形类总结最后,把几个整数类型都理清楚一下。这里重点调int、int8、int8_t、size_tint通常是 4 字节(32 位),但这取决于平台(例如,某些 64 位平台上的 int 可能为 8 字节)。符号。

2025-02-26 23:24:30 972

原创 WSL2下,向github进行push时出现timeout的问题

主要表明你的 WSL2 环境无法通过 SSH 连接到 GitHub 的 22 端口。GitHub 在默认情况下使用 SSH 协议通过 22 端口进行通信,但有时候一些网络环境或者配置问题可能会导致无法连接。443 是 HTTPS 协议的标准端口,通常不受防火墙限制,因此是连接 GitHub 的理想选择。我开始还以为是网络波动,测试了多次之后才发现应该是22端口出问题了,重启电脑也没效果。

2025-02-26 22:58:36 418

原创 Visual Studio的解决方案管理器怎么从文件夹视图切换回原视图——最后一根稻草

这种状态下的vs基本就只能运行当前的文件,其他cpp文件都是无法运行的。可以看到尽管这里启动项选择的是“当前文档”,但点击运行就会出现“这两天笔者发现自己的vs2019出现了个奇怪的bug,只有第一次创建项目的解决方案的视图是正常的,如下图。在网上看了诸多方法无果, 因为很多文件选项这时都直接不见了,谈何通过属性进行修改呢?结果还真被我发现解决办法了——点击这里的“如果第二次再打开这个项目,那视图就会切换为文件夹视图。”,然后这块页面就会切换成下面这样。在解决方案和可用视图之间切换。,这就显得十分离谱了。

2024-12-12 00:03:24 911

原创 6.824/6.5840 Lab 5: Sharded Key/Value Service不完全指南

A:在同一个group内,Leader通过将来自Clerk的command发送至raft进行一致性同步,接下来所有的Server都可以从raft peer中收到这个command,再将这个command应用至自己的状态机。但这样会忽略对旧Config的处理。在刚才的例子中,group100和group101发现自己的Config过时后,会跳过对Config3的处理,重新查询并处理Config4。我一开始就是选择的方案1,后面发现需要考虑的情况实在是太多了,不胜其烦,稍不留神就会出bug。

2024-12-08 23:18:45 1106

原创 FaRM译文

具有强一致性和高可用性的事务简化了分布式系统的构建和推理。然而,之前的实现表现不 佳。这迫使系统设计人员要么完全避免使用事务,要么削弱一致性保证,或者提供需要程序 员自己划分数据的单机事务。在本文中,我们展示了在现代数据中心中无需妥协。我们展示 了一种称为FaRM的主存分布式计算平台能够提供具有严格可串行化、高性能、持久性和高 可用性的分布式事务。FaRM在90台机器上使用4.9 TB数据库实现了每秒1.4亿次TATP 事务的峰值吞吐量,并能在不到50毫秒内从故障中恢复。

2024-12-04 23:57:54 380

原创 6.824/6.5840 Lab 4: Fault-tolerant Key/Value Service踩坑之路

这次的Lab和Lab2确实有点类似,不同之处是Put和Append都不应向客户端返回值。这里不返回值指的是忽略Value,但是可以设置Err字段来确保操作的成功处理。令人辛酸的是貌似我踩完了这个Lab所有的坑,从最粗糙的方法一步步改进直到最后构架出一份几乎无懈可击的代码,可谓是筚路蓝缕下面来看具体的实验要求。

2024-12-04 23:29:49 1882

原创 6.824/6.5840 Lab 3: Raft——Part 3D

在完成Lab之前,务必把论文多读几遍,力求完全理解Leader选举、log日志等过程。

2024-12-03 23:52:50 1110

原创 6.824/6.5840 Lab 3: Raft——Part 3B&3C

在完成Lab之前,务必把论文多读几遍,力求完全理解Leader选举、log日志等过程。

2024-12-03 23:35:52 933

原创 6.824/6.5840 Lab 3: Raft——Part 3A

完整代码见:在完成Lab之前,务必把论文多读几遍,力求完全理解Leader选举、log日志等过程。

2024-12-02 23:57:27 963 4

原创 6.824/6.5840 Lab 2: Key/Value Server

故事里能毁坏的只有风景谁也摧毁不了我们的梦境弦月旁的流星划过了天际我许下 的愿望 该向谁 去说明——我是如此相信完整代码见:还是那句话,尽量只是参考思路而不是照抄先阅读几遍实验说明的Introduction部分,Lab的核心就在下面这段话:客户端可以向键值服务器发送三种不同的RPC:Put(key, value)、Append(key, arg)和Get(key)。服务器维护一个内存中的键值对映射。键和值都是字符串。

2024-12-02 23:47:45 799

原创 6.824/6.5840 Lab 1: MapReduce

尽管使用普通文件存储中间键值对也可以实现,但使用 JSON 文件提供了更高的可读性、调试性、跨语言兼容性和实现简单性。JSON 格式的标准化和广泛支持,使得它成为 MapReduce 中间键值对存储的一个理想选择。8、worker 的 map 任务可以使用 ihash(key) 函数(在 worker.go 中)为给定键选择 Reduce 任务。这里属于一个小难点,要用合适的方法将中间键写入NBUCKET个文件中,否则多次遍历intermediate会导致处理任务的用时激增。

2024-11-30 22:18:34 928

原创 win11安装WSL2时报错Error: 0x800701bc WSL 2 ?????????????????? https://aka.ms/wsl2kernel

在网上查看诸多解决方法无果,最后发现一句简单的命令即可完成。最近笔者在用win11电脑重新安装wsl2,一直报错。先打开powershell,再输入。

2024-10-24 20:56:11 1475 5

原创 6.824/6.5840 的Debugging by Pretty Printing配置

我的Python解释器目录在/usr/bin,目录的后缀/xxx是把xxx.py文件复制到这个文件夹中并且改名为xxx。我这里就是把dtest.py复制到了/usr/bin后改名为dtest。4.修改当前需要执行的文件的权限 chmod +x xxx.py。如果你没有遇到pip的问题,成功安装好了rich库,进行下一步。如果你的WSL2没有安装过Python的库,一般还会报错。这句命令的意思是为xxx.py这个文件添加可执行权限。如果你也碰到了类似的问题,把上述语句改为。然后我发现我的pip命令报错了。

2024-07-09 17:00:19 510

原创 将克隆到本地的6.824项目上传到自己的github

git pull <自己创建的远程分支名称> <从自己的仓库哪条分支拉取> --allow-unrelated-histories。为了尝试把远程仓库里的内容拉取到本地,我可谓是绞尽脑汁。最后重要试出了正确的格式。要先把仓库里的README拉取到本地才行,然后在把本地文件夹一起提交到远程仓库里。由于github可以给自己的主分支改名了,我这次是勾选了创建README文件。git push <刚才创建的远程分支名> <本地分支名>:<远程分支名>将远程仓库的内容成功拉取到本地后,就是经典三板斧操作了。

2024-06-09 23:20:34 688

原创 Virtual Memory Primitives for User Program翻译

传统上,内存管理单元(MMUS)被操作系统用于实现磁盘分页的虚拟内存。一些操作系统允许用户程序指定页面的保护级别(不可访问、只读、读写),并允许用户程序处理保护违规。但这些机制不总是坚固、高效,也不总是与应用程序的需求匹配。我们调查了几种使用页面保护技术的用户级算法,并分析了它们的共同特点,试图回答以下问题:“操作系统应该为用户进程提供什么虚拟内存基元,当前的操作系统如何提供它们?

2024-06-09 22:58:39 1123

原创 CSAPP Lab01——Data Lab完成思路

既然对x的每位进行判断有困难,那还是老样子直接考虑数字这个整体。由于题目提供的运算符也不多,所以x的正负性成了可以拿来解题的性质。注意到一点,只要x不为0,那x的相反数符号位就和x的符号位是不同的。从正负性和符号位着手这题就很容易解决了。

2024-06-09 22:54:20 1105

原创 CSAPP Lab02——Bomb Lab完成思路详解

可使用命令 touch answers.txt 新建名为answers的.txt文件,将所有拆弹密码写入该文件,然后用命令 ./bomb answers.txt 运行bomb可执行文件 (之前的每一关调试结束后,也可以将新的拆弹密码写入.txt文件,用这个方法验证是否爆炸,就不用每次重复输入之前关卡的拆弹密码了)。

2024-06-04 23:31:05 1143

原创 CSAPP Lab03——Attack Lab

这次的要求看上去和touch2差不多,不过它要求的是传递指向cookie的指针到touch3里面。所以这个lab需要完成的就是两大点:把cookie的地址赋给edi传给touch3,注意这个地址不能放在getbuf开辟的缓冲区里,否则可能被hexmatch和strncmp覆盖。跳转到存放汇编代码的首地址跳转到touch3

2024-06-04 23:15:50 1174

原创 CSAPP Lab04——Cache Lab大师手笔,匠心制作

​最后得到的“cache simulator”模式如下:cache看成一个二维数组,组Si 里面的每一行因为不考虑数据位就可以看成是一个结构体元素,有几行就可以看成有几个结构体元素,相当于做了降维处理。写到题解的后半部分的时候,我才发现其实把cache也声明成一个结构体(S,E都是它的成员)才是一个最好的选择。

2024-06-03 12:47:50 1750

原创 CSAPP Lab05——Performance Lab完成思路

这次由于被测试的矩阵大小从32×32到1024×1024,所以再笼统地把分块定为8×8肯定是不妥当的。同时本次lab没有给出cache的大小,所以我测试了8×8、16×16、32×32等不同尺度的分块,最终发现32×32的分块尺度是最佳的。

2024-06-03 11:28:10 860

原创 CSAPP Lab06——Shell Lab通关思路

上来就遇到了些小问题:①本来想看看“tshref”支持的命令,结果命令居然被拒绝执行了,显示“。然后又试了下“./sdriver.pl -h”这个命令,也是报错“我还以为是用户权限的问题,试了下切到root,结果还是不能执行。最后查看了下文件,发现除了自己编译的文件,其他文件都是“rw-r--r--”。下面是GPT对文件默认权限问题的回答。②书上P239,关于子进程和父进程对各自内存里的内容进行操作后的结果。③在正式进行实验之前,还得正式了解一番waitpid函数。

2024-06-02 23:49:03 1112

原创 CSAPP Lab07——Malloc Lab完成思路

这也是浪费最多时间的一部分。3.3.2、next block已分配,或者两块大小和blocksize_Sumaszie:对下一块使用place()

2024-06-02 23:23:54 1239

原创 CSAPP Lab08——Proxy Lab完成思路

Q:计算机网络中port的作用是什么?A:在计算机网络中,"port"(端口)是用于标识网络通信中的特定应用程序或服务的数字标识符。端口是网络通信的重要组成部分,它允许多个应用程序在同一台计算机上共享网络连接,并确保正确地将数据传递给目标应用程序。端口通常与 IP 地址结合使用,构成了网络通信中的目标地址。IP 地址用于标识网络中的设备,而端口则用于标识设备上的具体应用程序或服务。

2024-06-01 10:54:46 1682

原创 2020 6.s081——Lab1:Xv6 and Unix utilities梦开始的地方

首先透彻理解Lecture01的知识很是重要①“wait(int *status)”函数用于等待子进程的终止,它的参数是一个指向整数的指针(通常是 int * 类型),并且通常用来存储子进程的终止状态。这里“0”意思是将指针赋值为NULL,表示不关心子进程的退出状态信息,这意味着不打算获取子进程的终止状态。如果传递一个非NULL的指针给wait(int *status)函数,它将用来存储子进程的退出状态信息,以便可以检查子进程的退出状态,例如子进程是正常终止还是出错等。

2024-05-31 23:06:28 1533

原创 2020 6.s081——Lab2:system calls

在完成这个lab的时候,我突然想到一个问题,用户空间中使用的函数是trace(int n),但是内核空间使用的却是sys_trace(void),那用户空间传递的这个n到底是怎么被内核接收到的呢?我们按照hints查看sys_fstat() (kernel/sysfile.c)和filestat() ( kernel/file.c ),可以发现一条及其重要的注释。④在user.h中定义函数trace(int),在usys.pl中设置sys_trace的调用入口。读懂了实验要求,就可以着手实验部分了。

2024-05-31 22:45:01 998

原创 2020 6.s081——Lab3:page tables坐牢日记

在sbrk()真正的实现函数growproc中,如果空间是增长的,那需要进行的映射是“把用户页表新增长的空间映射到内核页表中”,而不是从头开始映射一遍,不然就会出现下列“panic: remap”的问题。因为在内核页表中0~oldsize的部分已经是用户页表的内容了,但是oldsize~newsize的部分确实空的,所以需要映射的只有这一小块。同时,涉及到某页表内容(trapframe、kstack)时,给它们给配的空间默认也是一个页表的初始大小,故涉及空间大小时参数也是PGSIZE。

2024-05-30 20:34:08 1361

原创 2020 6.s081——Lab4:traps

本 lab 的直接要求时实现 sigalarm,什么意思呢?就是当进程调用 sigalarm 时,就会按照 CPU 时钟来定时的执行某一个函数。比如,test0调用了 sigalarm(2, func), 那该进程就会每隔 2 个 CPU 时钟调用一次 func。

2024-05-30 17:23:20 1028

原创 2020 6.s081——Lab5:Lazy page allocation

我们在walkaddr()内部进行和usertrap相似的操作,区别是在walkaddr()中我们操作的对象是传入的va,而非usertrap中的stval。发现这个函数内部倒是没报错,是内核出了问题。接下来就是处理最麻烦的部分了,也就是hint4:处理这种情形:进程从sbrk()向系统调用(如read或write)传递有效地址,但尚未分配该地址的内存。在前面搞多了注释“panic:xxx”的操作之后,我下意识地就是来一手掩耳盗铃,直接把上述panic给注释了,发现没有效果才开始认真思考到底是什么原因。

2024-05-29 17:08:07 1048

原创 2020 6.s081——Lab6:Copy-on-Write Fork for xv6踩坑历程

只有当子进程尝试写入共享的页面时,COW机制才会触发,为子进程创建新的物理页面,并将子进程的level2页表中相应的PTE更新为指向新分配的物理页面。因此,子进程的level2页表中的PTE实际上指向父进程的level1页表,而不是直接指向父进程的物理页面。在COW fork()过程中,子进程的level2层次的页表是与父进程的level2层次的页表相同的。页面,那么写操作会触发页面错误,操作系统会通过页错误处理机制来创建该页面的副本,并将副本映射到写操作发生的进程的地址空间中。

2024-05-29 16:37:01 1100

原创 2020 6.s081——Lab7:Multithreading完成思路

应该是有史以来最轻松的一个lab,大部分时间都花在了看实验说明给出的阅读材料和代码阅读上。真正着手完成代码的时间总共也就个把小时。上周过于摆烂,没怎么学进去。

2024-05-27 23:21:10 1326

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除