01 2022 档案
摘要: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\
阅读全文
摘要:Lab page tables 内核地址空间,进程地址空间。 地址映射 守护页,PTE的flags 物理内存分配 sbrk和exec Speed up system calls 通过在用户空间和内核之间的只读区域共享数据加速特定的系统调用,执行这些系统调用可以不再进入内核。本实验可以学习向页表中插入
阅读全文
摘要:Chapter 3 Page tables 页表是操作系统保证每个进程有独立的地址空间和内存的最常用的机制。页表决定内存地址代表什么,决定哪部分物理地址可以访问,使 xv6 可以分隔不同进程的地址空间,并将它们映射在一块物理内存上。页表是常用的设计,因为它实现了很多 tricks ,如 xv6 的一
阅读全文
摘要:Lab System calls 物理资源抽象设计(文件系统管理,内存使用,CPU切换,管道交互);指令执行的三种状态(M,S,U),系统调用;宏内核和微内核;进程机制(S/U mode,地址空间,时间片),进程目的(增强隔离性),进程的地址空间和状态项,进程的设计思想;xv6的启动概述;安全相关。
阅读全文
摘要:Chapter 2 Operating system organization 一个操作系统的关键特征是支持多个任务。例如,用fork系统调用接口创建新的进程,这些进程分时共享计算资源。尽管进程数量比硬件CPU数量多,操作系统一定可以确保所有进程都有机会执行。另一个特征是进程的隔离性(isolati
阅读全文
摘要:Lab Utilities 本章实验学习xv6的一些softerware tools的实现,学习系统调用。 学习进程、文件相关的系统调用使用。 sleep 使用sleep系统调用,暂停指定的ticks(一个tick代表两次时钟中断的时间间隔)。 使用exit系统调用终止当前进程。 #include
阅读全文
摘要:Chapter 1 Operating system interfaces xv6采用传统的内核形式,由内核为运行的程序提供服务。每个运行的程序称为进程,其内存里包含指令,数据,栈。指令实现程序的计算,数据是计算执行的对象——变量,栈组织程序的过程调用。 进程常常通过system call调用内核服
阅读全文
