6.S081 Lab8:Locks
locks lab大概是pagetable labs后面第二个折磨人的实验了,两个实验虽然细节不同,但目的都是重新实现一个并行效率更高,lock contention更少的机制,因此需要花了大量的时间去考虑并行的问题。 Problem 1:Memory allocator重新实现物理内存分配器,总体的思想是为每个CPU核心维护一个free page…
6.S081 Lab4:trap
经过Lab3的折磨后,很轻松的完成Lab4,Lab4的思路在于实现一个软件中断处理机制,提供一个系统调用接口启动定时中断和相应的处理函数,在中断的时候运行相应的处理函数。 整体思路:原程序发送中断后,进入trap,保存相应的寄存器到trapframe,在内核模式中运行相应动作后恢复现场,返回到trap前的位置。因此可以通过替换sepc原程序的位置为…
6.S081 Lab3:page tables
完成Lab3花费了将近两周的时间,主要的时间都花在了DEBUG第三个问题Simplify copyin/copyinst上,第一个问题Print a page table对后面的DEBUG起到了非常大的帮助。在这个lab3大部分BUG几乎都是内存访问错误,因此很难通过gdb定位,最简单的方法是直接通过vmprint打印出页表检查。 Problem1…
6.S081 Lab2:system calls
Lab2:system calls 编写两个系统调用 Problem 1:System call tracingSystem call tracing需要对系统调用进行跟踪,并且要求能够继承给子进程,因此需要将相关的信息记录到存储进程相关信息的数据结构中。 Problem 2:SysinfoSysinfo涉及到了系统调用的传参和返回值,要点在于意识…
6.S081 Lab1:Xv6 and Unix utilities
Lab1:Xv6 and Unix utilities,主要内容是利用系统调用完成一些小程序。 Problem 1:环境配置第一个难题是boot xv6,配置环境使xv6在qemu上运行。一开始我是在Vmware上的Ubuntu18.04上配置,交叉编译工具需要自己手动安装,但是从github的clone一直失败,最后索性在wsl的Ubuntu20…
thumbnail
#九月杂谈
此时的我坐在国庆回家的高铁上,距离大三开学已经过去了一个月,在这个月里,我投出了自己人生的第一份简历(虽然至今未有回信),通过自己的所学赚取了第一桶金,开始使用新的思维方式学习。 工程师思维 Problem List 这个想法源于一篇文章——工程师思维方式Probelm List,文章表达的观点是大部分在学习上的突破并不是在学习某一种工具的过程,而…
thumbnail
大三了#我的两年编程生活
前记: 为什么写这篇文章?在大二暑假那段时间,我看了很多的学习经历和学习路线,这给了我巨大的打击,相比之下我发现自己过去学的东西不过冰山一角,于是我开始反思,并且在那段时间规划了自己的学习路线,一口气读完了《CSAPP》《Algorithm》《C++ Primer》三本书,收获颇丰。所以,我决定分享出自己过去两年的学习经历。 两年: 第一次接触编程…
C++之尝试把类成员作为回调函数
问题提出: 在使用openGL的时候我想通过在类里面使用并且定义回调函数,经过对这个问题了解并且寻找解决办法,我才发现其实这绝非易事。 尝试解决: 一开始发现普通的成员函数由于隐藏着一个参数this,因此他无法作为回调函数。于是我将函数改成静态成员函数。但是这时候却发现静态成员函数只能访问静态成员变量,这就失去了我想把回调函数写在类里面的初衷,我希…
C++之类成员相互引用问题
问题: 在一个类中调用PacMan::keyStates数组,该数组是PacMan类的静态成员 在A类中是可以使用B类的静态成员变量的,那这个错误来自哪里? 解决: 原来在PacMan.h中#include"Game.h",在Game.h中#include"PacMan.h",将PacMan.h中的include去掉即可。 一探究竟:类成员之间的相…
Dijkstra’s 最短路径算法究竟能不能计算负权重
Cousera普林斯顿算法课提出,Dijkstra是不可以计算含负权值的路线的,但是经过自己跑了一遍发现某些路径上是可以,这里参考了知乎,stackflow上的回答。 这里的问题主要在于如何实现Dijkstra,从algs4官方上的实现上这个版本的Dijkstra是可以计算负权值的,其原因在于如知乎所讲的该实现是优先队列优化+允许重入队,因此在出现…