XV6 Lab 2: syscall

MIT 6.S081 Lab2 website 为了完成 Syscall 作业,需要阅读: XV6-book, Chapter 2, Sections 4.3 and 4.4 files: user/user.h, kernel/proc.c kernel/proc.h, kernel/syscall.c kernel/syscall.h system call tracing system call tracing 需要我们补充 kernel 中的一些程序,将某程序中指定的 system call 打印出来。当然,这需要我们新增一个 system_trace 系统调用函数。题中,给定的 tracing 程序以 trace [system-call-number] [cmd] 的方式运行。我们首先去看 user/trace.c 中的内容,看看 system call number 是怎么传入系统调用的。 user/trace.c 的程序如下所示: int main(int argc, char *argv[]) { int i; char *nargv[MAXARG]; if(argc < 3 || (argv[1][0] < '0' || argv[1][0] > '9')){ fprintf(2, "Usage: %s mask command\n", argv[0]); exit(1); } if (trace(atoi(argv[1])) < 0) { fprintf(2, "%s: trace failed\n", argv[0]); exit(1); } for(i = 2; i < argc && i < MAXARG; i++){ nargv[i-2] = argv[i]; } exec(nargv[0], nargv); exit(0); } 我们发现这个程序直接使用了 trace 系统调用来实现。所以接下来的任务是进行 trace 系统调用的实现。再次回顾 Lab 1 中的内容,在 Lab 1 中我们分析系统调用是通过在 usys....

February 25, 2023 · 3 min · chenghua.Wang

XV6 Lab 1: Xv6 and Unix utilities

MIT 6.S081 Lab1 website 本章节的实验是为了熟悉 XV6 环境和 interface 而准备的。包含了 interface 调用、多进程编程、Pipeline。 阅读 book-riscv-ref3 熟悉 XV6 的系统组织形式 sleep 通过调用 user.h 中的系统调用函数来完成 sleep 程序。主要是为了介绍 系统调用 的工作方式。 /** * @author chenghua.wang * @brief Lab1-utilities. sleep prog using syscall. * @time Feb 23, 2023 * */ #include "kernel/types.h" #include "kernel/stat.h" #include "user/user.h" int main(int argc, char *argv[]){ if (argc != 2){ printf("[ error ] you should follow anw integer with sleep prog to indicate ticks times!...

February 23, 2023 · 5 min · chenghua.Wang