MIT S081 Lab 2 System Calls

Lab链接

一 实现trace功能

1 题目要求

In this assignment you will add a system call tracing feature that may help you when debugging later labs. You'll create a new trace system call that will control tracing. It should take one argument, an integer "mask", whose bits specify which system calls to trace. For example, to trace the fork system call, a program calls trace(1 << SYS_fork), where SYS_fork is a syscall number from kernel/syscall.h. You have to modify the xv6 kernel to print out a line when each system call is about to return, if the system call's number is set in the mask. The line should contain the process id, the name of the system call and the return value; you don't need to print the system call arguments. The trace system call should enable tracing for the process that calls it and any children that it subsequently forks, but should not affect other processes.

We provide a trace user-level program that runs another program with tracing enabled (see user/trace.c). When you're done, you should see output like this:

cpp 复制代码
$ trace 32 grep hello README
3: syscall read -> 1023
3: syscall read -> 966
3: syscall read -> 70
3: syscall read -> 0
$
$ trace 2147483647 grep hello README
4: syscall trace -> 0
4: syscall exec -> 3
4: syscall open -> 3
4: syscall read -> 1023
4: syscall read -> 966
4: syscall read -> 70
4: syscall read -> 0
4: syscall close -> 0
$
$ grep hello README
$
$ trace 2 usertests forkforkfork
usertests starting
test forkforkfork: 407: syscall fork -> 408
408: syscall fork -> 409
409: syscall fork -> 410
410: syscall fork -> 411
409: syscall fork -> 412
410: syscall fork -> 413
409: syscall fork -> 414
411: syscall fork -> 415
...
$   

trace是一个运行在用户空间的程序。 你需要实现一个用户空间程序 trace,它将启动另一个程序并启用跟踪功能。

trace调用时,会传入一个int类型的mask值,来指明需要对哪些系统调用trace。

获取argument,获取系统调用号、

相关推荐
开心工作室_kaic21 分钟前
springboot548二手物品交易boot代码(论文+源码)_kaic
前端·数据库·vue.js·后端·html5
叱咤少帅(少帅)2 小时前
Ubuntu Server安装谷歌浏览器
linux·运维·ubuntu
old_power2 小时前
Linux(Ubuntu24.04)安装Eigen3库
linux·c++·人工智能
聚名网4 小时前
加固服务器有什么用?
运维·服务器
比钻石还闪亮的nan人4 小时前
ubuntu 使用s3fs配置自动挂载对象存储
linux·运维·ubuntu
m0_634601664 小时前
2025.1.2
java·服务器·数据库
milo.qu6 小时前
二、CSS基础
前端·javascript·css
冷曦_sole6 小时前
linux-26 文件管理(四)install
linux·运维·服务器
千千道6 小时前
linux的线程同步(条件变量和锁)
linux·arm开发·驱动开发·物联网·arm
IT北辰6 小时前
Linux中隐藏操作身法
linux·运维·服务器