摘要:
SimpleDB 组成: classes: 表示 fields, tuples, tuple schemas。 classes: 作用于 tuples 的谓词和条件类。 methods: 在硬盘上存储关系(如heap files),处理并发控制和事务。 classes: 处理 tuples 的操作类 阅读全文
摘要:
Lab: networking Background 使用 E1000 网络设备处理网络通信。对于 xv6 和 开发者所写驱动,E1000 像一个真正的硬件,连接到真正的以太网 LAN (local area network)。实际,和驱动通信的 E1000 是由 qemu 仿真的,E1000 连接 阅读全文
摘要:
Lab Multithreading Uthread: switching between threads 本题为用户级线程系统设计上下文切换机制,并实现这个机制。uthread.c 含有大多数用户级线程包,以及一些简单的测试线程。需要完善线程包中的创建和切换相关代码。 提出一个创建线程和保存/恢复 阅读全文
摘要:
Chapter 5 Interrupts and device drivers 理解当设备产生中断时: CPU 会发生什么? 如何从设备读、写信息? 中断相比系统调用的新特点 中断是异步的(asynchronous)。当硬件产生一个中断时,中断处理程序开始运行,中断处理程序可能和 CPU 上正在运行 阅读全文
摘要:
Chapter 7 Scheduling 任何操作系统运行的进程数量都可能超过计算机 CPUs 的数量,所以这些进程需要一个策略分时共享 CPUs。理想情况下,共享对用户进程是透明的(用户进程不感知共享)。一种常用的方法是通过多路复用(\(multiplexing\)),在硬件 CPUs 上调度这些 阅读全文
摘要:
Chapter 6 Locking 许多内核,包括 xv6 ,交替执行多个任务。交替执行的原因之一是多处理器硬件:计算机有多个独立执行的 CPUs,如 xv6 的 RISC-V。多个 CPUs 共享物理 RAM,xv6 利用这种共享维护所有 CPU 都能读写的数据结构。 这种共享产生了一种可能:一个 阅读全文
摘要:
Lab cow The problem xv6 中的 fork 系统调用复制所有的父进程的用户空间内存到子进程。如果父进程用户空间内存很大,复制会很耗时。有时这个复制是不必要的,如果 fork 之后子进程调用 exec,会释放掉复制的内存,可能大部分复制的内存都没有使用。如果父子进程共享一页,其中一 阅读全文
摘要:
Lab traps RISC-V assembly 阅读 call.asm 的 f(),g() 函数,回答一些问题: Ans Backtrace backtrace 对于 debug 很有用:在 error 发生时输出一列栈上的函数调用链。 编译器在每个 stack frame 中存放有一个 fra 阅读全文
摘要:
调试,调用规则,栈 MIT6.S081调试总结 debug开启 在一个窗口运行make qemu-gdb。 在另一窗口运行gdb-multiarch,如果要导入其他debubg的可执行文件,如调试find程序,执行file user/_find,然后正常调试(需要将项目目录下的.gdbinit文件a 阅读全文
摘要:
Chapter 4 Traps and system calls 有三种事件会使 CPU 放弃正常的指令执行,强制将控制权交给一段特殊的代码处理这个事件: 一种情况是 \(system\ call\):当一个用户程序执行 ecall 指令请求内核为它做事的时候。 一种情况是 \(exception\ 阅读全文