抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

锁锁速查

Cheat sheet 枚举各种情况 普通自旋锁 缓存与不可扩展 MCS锁(排队锁) 可扩展但开销更高 QSpinLock spinlock + MCS lock 以上都没考虑numa的影响 Delegation Lock(代理锁) 同类临界区操作都发送同一个NUMA中执行 解决了NUMA带来的不同性能问题 以上都没考虑异构核的影响 LibASL可扩展锁(乱序重排锁) 不...

MIT6.S081 lazy allocate lab

lazy page allocationxv6使用sbrk系统调用申请内存。sbrk系统调用申请到内存后映射到用户空间中。当在申请大量内存时会带来很大的耗时,而且程序往往会预先申请暂时不用的内存。使用lazy allocate以提高效率,sbrk可以只标记以申请的虚拟地址但立刻申请物理页,当真正使用到该物理页时,产生缺页中断,然后真正分配物理内存,初始化为0, 映射。 Eliminate a...

MIT6.S081 cow lab

Copy on Write虚拟内存可以通过修改标记位来让内存地址由不同含义,如通过标记PTE为只读或invalid可以触发page fault。lazy allocation和这个lab的COW都是例子。 fork会拷贝父进程的所有内容,但是这往往是浪费的,因为如果fork后立马exec执行新程序这fork花费那么大代价拷贝就浪费了。COW就是当子进程和父进程fork时先共享相同内存,当由写...

MIT6.S081 fs lab

File system添加对大文件和符号链接的支持。可查阅参考书Chapter 8 Large files修改xv6支持的最大文件(目前是268block(即BSIZE,BSIZE=1024byte))。 之所以由这样的限制是因为xv6的inode用的12个直接块和1个”singly-indirect”块。所以总的有12+256 = 268block 每个块号是uint(8B),那么一个b...

MIT6.S081 lock lab

Locks重新设计代码,提高并行度,降低锁竞争。降低锁的竞争会涉及数据结构和锁策略的改变。 提升xv6内存分配和块缓存的并行度。 Section 3.5: “Code: Physical memory allocator”Section 8.1 through 8.3: “Overview”, “Buffer cache layer”, and “Code: Buffer cache” ...

MIT6.S081 mmap lab

mmapmmap和munmap系统调用让程序可以更详细地控制他们的地址空间。 如 可以让内存在进程间共享,可以将文件映射到进程的地址空间,可以用于实现用户态缺页策略(如lecture中讨论的垃圾回收算法) 这个lab你将要实现的mmap和munmap重点关注于文件到内存的映射。 可以查看man 2 mmap获得细节。mmap有多种调用方式,但这个lab只要求实现一部分功能。 12void *...

MIT6.S081 page table lab

page tables学习page table,然后够魔改使能够实现用户空间到内核空间的复制。 kern/memlayout.h内存布局 kern/vm.c虚拟内存相关代码 kernel/kalloc.c动态分配物理内存 print a page table实现vmprint(pagetable_t pt)打印页表的内容。在exec.c:exec()的return argc;前插入if(...

MIT6.S081 network lab

networking编写一个xv6设备驱动程序,驱动网卡 Background 参考书Chapter5 中断和设备驱动 你会使用一个叫作e1000的网络设备来处理网络通信。qemu虚拟化e1000,e1000就相当于现实中真正链接网络的网卡设备。 xv6的ip地址为10.0.2.15。qemu会让宿主机(the computer running qemu)的ip地址为10.0.2.2。qe...

MIT6.S081 syscall lab

system calls user space user.h usys.pl kernel space syscall.h syscall.c process related proc.h proc.c trace实现trace,以便后续实验调试 trace系统调用 一个int参数, “mask” trace(1 << SYS_fork) 对tracing的系...

MIT6.S081 traps lab

Trapsriscv assembly通过make fs.img的可以生成call.c对应的汇编代码辅助阅读和学习。如根据需求修改call.c然后时候make fs.img生成call.asm,就可以查看对应汇编内容。 回答以下问题 哪些寄存器用来保存函数? a0~a2 汇编代码如何执行函数调用的? f和g函数分别在哪调用? 编译优化成了li a1,12 函数printf...