Home
clingfei
Cancel

MIT 6.s081 Lab copy-on-write fork

Lab: Copy-on-Write Fork for xv6 (mit.edu) Problem and Solution xv6中的fork系统调用将父进程的用户空间内存全部复制到子进程,而如果需要拷贝的内存数量比较大,拷贝过程会引起严重的开销问题。并且在子进程中,fork系统调用后通常紧跟着exec系统调用以修改进程影响,导致fork复制的内存被丢弃。如果父进程和子进程使...

MIT 6.s081 Lab lazy allocation

Lab: xv6 lazy page allocation (mit.edu) Page-fault exceptions 当CPU无法将虚拟地址转换成物理地址时,生成一个page-fault excecption,称为缺页异常。RISC-V中存在三种类型的缺页异常:load(load指令)/store(store指令)/instruction(指令所在的虚拟地址无法转换成物...

MIT 6.s081 Lab traps

Lab: Traps (mit.edu) RISC-V assembly 1. Which registers contain arguments to functions? For example, which register holds 13 in main’s call to printf? 在main函数中,对printf的调用如下:  printf("%d %d\...

xv6 trap and system call notes

trap包括三种情况: 系统调用,用户程序执行ecall指令切换到内核态执行对应的系统调用处理程序 异常,用户或内核执行某些非法指令,例如除零或访问无效的虚拟地址 设备中断 与trap有关的控制寄存器 stvec: 保存trap处理程序的地址 sepc: trap发生时,pc将会切换到trap处理程序的首地址,...

如何使用gdb调试LLVM Pass?

前置知识 本文使用的LLVM 版本为10.0,使用LegacyPassManager管理Pass。 由于LLVM Pass被编译为运行时动态加载的链接库,因此与普通的可执行文件不同,无法使用gdb在加载文件之后设置断点。 LLVM Pass编译的.so文件通过opt动态加载执行,opt是模块化的LLVM优化器和分析器,使用LLVM源文件作为输入,在源文件上运行指定的优化或分析程序,...

MIT 6.s081 Lab page tables

Lab: page tables (mit.edu) Print a page table 实现vmprint函数,接收一个pagetable_t类型的参数,然后按照规定格式输出pte和pa,功能是输出给定进程的页表,例如: page table 0x0000000087f6e000 ..0: pte 0x0000000021fda801 pa 0x0000000087f6...

MIT 6.s081 Lab system calls

Lab: System calls (mit.edu) System call tracing 实现系统调用trace,输入参数为一个int类型的mask,其中mask的某一位为1代表与该位对应的系统调用应该被trace。例如trace(1« SYS_fork)表示trace fork这一系统调用。被trace的系统调用输出:pid: syscall syscall_name...

Linux内核与模块数据交互方式总结

1. 通过Linux内核与模块之间的接口 定义静态全局变量,通过Linux内核与模块之间的接口,将全局变量的地址传递给kernel 以ixgbe驱动为例:模块中定义了static全局变量 ixgbe_driver: static struct pci_driver ixgbe_driver = { .name = ixgbe_driver_name, .id_table...

CS144 Lab Assignments 学习笔记

CS 144: Introduction to Computer Networking Lab 0 Writing webget 要求使用TCPSocket和Address类实现get_URL函数。get_URL的功能是向指定的host和path发送GET请求,以抓取页面。可以参考Sponge: TCPSocket Class Reference (cs144.github...

6.824 Lab2 Raft Implementation

6.824 Lab 2: Raft (mit.edu)记录 Lab 2A leader election Lab 2A要完成的是初始的leader选举过程,而没有日志的参与。主要需要完成三个部分:定时器,RequestVote和heartBeat. 定时器 定时器的逻辑很简单,无非是在随机等待时间超时后将状态切换为Candidate,然后开启一个协程开始选举过程,并继续等待下...