MIT6.S081 lab合集
文章平均质量分 95
MIT6.S081 lab实验详解与知识点归纳
In_qing青
https://github.com/InQing
C++选手~找实习中
展开
-
MIT6.S081最详解析与归纳——lab11:network driver
从lab1的不知所云,lab2的手足无措,到遇上最难的lab3——pagetable,几乎每一步都是重重阻碍,要结合多家大佬的博客才能完全理解,抄一半写一半的完成代码。对我来说最费心思的点莫过于xv6 book的阅读,个人的英语阅读水平不算太差,至少也裸考过了六级,但也许是第一次读相关专业英文教材的原因,阅读的过程若不借助翻译AI,会非常的吃力,直到整本书读完,也依然有这种感觉。观看课程视频时,总能被mit大佬们的思路惊艳,确实能从中感觉到那种鸿沟,但是并无关系,走好自己的路,与自己比较即可。原创 2024-09-03 11:28:53 · 751 阅读 · 0 评论 -
MIT6.S081最详解析与归纳——lab10:mmap
定义VMA,用以记录文件映射内存区域的。原创 2024-08-27 19:17:21 · 690 阅读 · 0 评论 -
MIT6.S081最详解析与归纳——lab9:File system
本实验虽然名为File system,但在文件系统的七个层次中,主要涉及的还是inode层往上的层次,层次较高。上个实验涉及了Buffer cache层。但中间重要的一层logging层并没有过多涉及本实验较为简单,手撕代码的时间可能总共不超过一小时,但debug的时间嘛……一整天(原创 2024-08-21 14:30:48 · 975 阅读 · 0 评论 -
MIT6.S081最详解析与归纳——lab8:Locks
此外,还有一点也很重要,我们不是从id=0的CPU开始窃取,而是从缺内存的CPU向后轮询,即编号cpuid的CPU缺内存了,那就窃取编号为cpuid+1、+2的CPU的内存。接下来都是轻松的工作了,由于此处是用时间戳实现LRU策略,所以brelse要做的仅仅是修改释放的缓冲块的时间戳,记录一下最后一次使用的时间。理由也很简单,总不能让编号靠前的CPU一直被偷吧,向后偷能尽可能让每个CPU被偷的次数平均,从而也能降低偷窃的次数,提高性能。是:当前CPU空闲块不足时,向其它CPU的空闲链表中偷窃内存块。原创 2024-08-15 17:16:34 · 813 阅读 · 0 评论 -
MIT6.S081最详解析与归纳——lab7:Multithreading
又因为get()是只读操作,不会修改临界资源的值,所以,我们只需要给put()的临界区上锁即可。调用编写好的thread_switch即可完成工作,此处不涉及锁,也没有所谓的调度线程,直接从旧线程的上下文切换到新线程的上下文即可。额外提一点,这里增加桶的数量NBUCKET,会减少访问临界资源的概率,也就减少了锁导致的性能开销,因此也可以大大提高程序的并行效率。在多线程编程中,Barrier(屏障)是一种同步机制,用于使一组线程在某个特定的同步点(即屏障点)等待,直到所有线程都达到这个点。原创 2024-08-09 14:53:58 · 305 阅读 · 1 评论 -
MIT6.S081最详解析与归纳——lab6:Copy on-Write
接着找到kinit()里freerange的范围,可以看到物理页面(RAM)的地址范围是end~PHYSTOP,但是end的注释为first address after kernel,随内核代码段和数据段的大小而变化,是个变量,不能用于确定数组的大小。关于数组放在哪里,它显然是一个内核的全局变量,可以放在vm.c中,在要用到的地方用extern声明,但这其实不是最好的方案,我们稍后再讨论。只当该页面计数为0时,才真正释放页面。很显然,计数结构是一个数组,对每个物理页面,维护共享进程的个数,原创 2024-07-31 14:24:40 · 648 阅读 · 2 评论 -
MIT6.S081最详解析与归纳——lab5:Lazy allocation
写时复制懒惰分配按需调页按需补零内存映射文件。原创 2024-07-26 14:55:24 · 731 阅读 · 0 评论 -
MIT6.S081最详解析与归纳——lab4:Traps
以系统调用write为例,先概括一下trap的流程trap的详细流程,更深入的了解了系统调用的过程函数的独立存储空间——栈帧结构xv6中trap保存寄存器与恢复现场的方式——蹦床页面与trapframe结构。原创 2024-07-22 18:18:00 · 695 阅读 · 1 评论 -
MIT6.S081最详解析与归纳——lab2:System calls
本章最重要的莫过于系统调用的执行流程,再回顾一遍:1.用户态下执行函数fork(),触发中断。这是系统调用提供给用户的接口2.通过ecall跳转入内核态下的中断处理函数3.trap函数判断中断类型为系统调用,转入响应函数syscall4.syscall从寄存器中获取系统调用的编号,索引到相应的系统调用5.转入sys_fork,这是系统调用的具体实现函数内存管理的知识:分页存储、空闲链表法进程相关概念:PCB。原创 2024-07-10 17:40:31 · 904 阅读 · 0 评论 -
MIT6.S081最详解析与归纳——lab3:Page tables
1.详细了解了页表2.虚拟内存相关知识,空间分配、回收、映射3.实现了页表的新功能,从全局内核页表到独立内核页表的替换4.简化了用户进程与内核之间的数据传输,将其升级为硬件方式。原创 2024-07-15 19:40:02 · 1108 阅读 · 2 评论 -
MIT6.S081最详解析与归纳——lab1:Utilities
1.几个系统调用的使用如fork,wait,exec2.管道的使用3.多进程编程4.文件操作,FCB,目录项,文件遍历。原创 2024-05-13 00:25:03 · 929 阅读 · 0 评论