• xv6 Lab (net)

    网络驱动这一章节,需要实现一个网络驱动。实际上写的过程中我主要是看 lab 官网的 hint,只有在遇到不确定的内容的时候再去看技术手册。 xv6 的网络结构xv6 实现了简单的 udp、ip、arp,并抽象成 socket。下面以发送 udp 数据...
  • xv6 Lab (thread)

    这个实验总体来说难度很小,第一个实验是在 xv6 中实现一个简单的协程,然后之后的两个实验均只需要简单地使用多线程的锁,并且在自己的电脑上完成。 Uthread: switching between threads这个实验主要涉及到用户程序 uthr...
  • xv6 Lab (cow)

    COW 章节仅有一个实验,要求在 xv6 操作系统中实现 fork 的写时复制操作。 概念父进程 fork 出子进程时,不对内存进行复制,而当需要改写某内存页面上的内容时,再将该页面进行复制,称为写时复制;这样一来内存的利用率上升了,与此同时对于没有...
  • xv6 Lab (traps)

    博客的进度总算是跟上了实验的进度,接下来就是博客催着实验往前跑了。 这章倒是花了我不少时间。 RISC-V assembly回答一些问题,大致目的是帮助读者来熟悉 riscv 相关的知识,跟 csapp 以及计组中学到的知识大差不差,此处略过。 Ba...
  • xv6 Lab (pgtbl)

    读完教材的页表章节后再开始写代码,要比直接上手开始写代码然后边写边学习轻松很多。最重要的就是理解:内核态下独有一份页表而用户态下每个用户进程都各自有一个页表,以及这两种页表的结构。 总的来说,一直听到传闻说 Page Tables 这章的实验非常难,...
  • 初识线段树

    实话实说,作为半个 ACM 选手,不会线段树,实在是有些说不过去。那么问题来了:“线段树都不会,你这 ACM 怎么过的题?怕是签到都难哦。”但是问题不大,ACM 是多人游戏。我有队友。 以往的的确确,碰到线段树就让队友写,他键盘敲得飞快,我和另外一个...
  • xv6 Lab (syscall)

    整个 syscall 实验感觉就是照猫画虎实现一些系统调用,在已有的框架的基础上。 Using gdb没什么好说的。 System call tracing实现 trace 系统调用,然后用户程序 trace.c 会对它进行调用,来追踪其他系统调用。...
  • xv6 Lab (util)

    其实 util 和 syscall 在寒假时候就已经写完了,一直没有回过头来再作一些分析。恰逢今天更新一下博客,今晚时间也勉强还算充裕,于是打开代码,进行一波复盘。 整个 util 实验就是通过写一些用户程序来了解并且熟悉 xv6 的系统调用。 Bo...
  • Leetcode 周赛 311

    近来显然有点急功近利了。想要快速把 Leetcode 刷到两千分。但是原先平均 3.5 道题,近两次周赛却分别只做对了一道和两道题。 做题时的代码的凌乱、思路的混乱,以及赛后惨不忍睹的结果,将近来浮躁的心态展现得淋漓尽致。 2560. House R...
  • 你好,世界

    正式接触计算机到现在已经有两年半之久。(大家好,我是练习时长为两年半的程序员菜鸟,擅长关机、拔线、删库、写 bug) 两年半,这段不长不短的时间反映到大学本科上,把我送到一个尴尬的位置——大三。朋友们说,大学最好玩的就是大一大二,虽然课多一点,但是压...