Mit6.s081
文章平均质量分 79
yang_le_ge_yang
c++/go
展开
-
Mit6.s081 lab8
基本思想是为每个CPU维护一个空闲列表,每个列表都有自己的锁。因为每个CPU将在不同的列表上运行,不同CPU上的分配和释放可以并行运行。主要的挑战将是处理一个CPU的空闲列表为空,而另一个CPU的列表有空闲内存的情况;在这种情况下,一个CPU必须“窃取”另一个CPU空闲列表的一部分。窃取可能会引入锁争用,但这种情况希望不会经常发生。原创 2024-08-04 17:06:43 · 586 阅读 · 0 评论 -
Mit6.s081 lab7
假设现在有两个线程T1和T2,两个线程都走到put函数,且假设两个线程中key%NBUCKET相等,即要插入同一个散列桶中。本实验是在给定的代码基础上实现用户级线程切换,相比于XV6中实现的内核级线程,这个要简单许多。实验要求: 实现线程的同步,即每一个线程必须等待其他所有线程都到达barrier之后才能继续进行下面的操作,需要用到。清零之后才能将所有正在睡眠的线程唤醒, 否则如果先唤醒线程的话其他线程如果跑得很快, 在之前的线程将。加1. 注意, 一定要等到所有的线程都达到了这个round, 将。原创 2024-08-02 17:44:46 · 239 阅读 · 0 评论 -
Mit6.s081 lab6
许多内核使用页面错误来实现写时拷贝版本的fork——。要解释COW fork,请回忆第3章内容:xv6的fork通过调用uvmcopy:309) 为子级分配物理内存,并将父级的内存复制到其中,使子级具有与父级相同的内存内容。如果父子进程可以共享父级的物理内存,则效率会更高。然而武断地实现这种方法是行不通的,因为它会导致父级和子级通过对共享栈和堆的写入来中断彼此的执行。由页面错误驱动的COW fork可以使父级和子级安全地共享物理内存。原创 2024-08-01 13:43:03 · 468 阅读 · 0 评论 -
Mit6.s081-lab5
本实验主要关于懒分配的知识。原创 2024-07-30 16:58:30 · 209 阅读 · 0 评论 -
Mit6.s081lab4
有三种事件会导致中央处理器搁置普通指令的执行,并强制将控制权转移到处理该事件的特殊代码上。一种情况是系统调用,当用户程序执行ecall指令要求内核为其做些什么时;另一种情况是异常:(用户或内核)指令做了一些非法的事情,例如除以零或使用无效的虚拟地址;第三种情况是设备中断,一个设备,例如当磁盘硬件完成读或写请求时,向系统表明它需要被关注。原创 2024-07-25 15:23:40 · 964 阅读 · 0 评论 -
Mit6.s081 lab3
首先是物理地址布局理解pagetable_t是uint64*页表指针(64位无符号整数),他指向包含512个页表项的数组,每个页表项也是uint64类型即64位无符号整数,512×64 bits=512×8 bytes=4096 bytes=4 KB,那么每个页表就是占用4KB物理内存申请内存(kalloc.c)添加页表映射copyin函数,将用户态下的地址通过页表查询,转换成物理地址,再把数据从用户空间,拷贝到内核空间,供内核使用。后面会修改成,不拷贝到内核空间,通过进程内核页表直接解引用用户指针。原创 2024-07-16 19:43:26 · 649 阅读 · 0 评论 -
MIT6.S081 lab1-2
Mit6.s081 lab1和lab2原创 2024-07-10 20:34:39 · 1193 阅读 · 0 评论