MIT 6.S081 Lab syscall

Compulsory exercises

Preparation

  • reading
    pre

  • To start the lab, switch to the syscall branch:

1
2
3
$ git fetch
$ git checkout syscall
$ make clean

System call tracing (moderate)

  • 了解trace的过程

    • trace.c调用系统调用trace()
    • 系统调用trace()调用sys_trace()设置进程的mask
  • 理解mask的含义

    • mask作为作为系统调用序号的掩码,如mask = (1 << SYS_read) | (1 << SYS_fork)代表同时trace read 和 fork系统调用
    • 当mask = 2147483647时代表trace序号1 - 31的系统调用
    • question: mask的类型? uint64 or uint32? 理论上都是可行的
  • 添加编译依赖
    make

  • 添加trace系统调用
    trace

Sysinfo (moderate)

  • 了解sysinfo的过程

    • sysinfotest调用sysinfo()
    • 系统调用sysinfo()调用sys_sysinfo获取struct sysinfo
  • 添加编译依赖
    make2

  • 添加sysinfo系统调用
    sysinfo

Optional challenge exercises

  • Print the system call arguments for traced system calls (easy).

  • Compute the load average and export it through sysinfo(moderate).

作者

huayi

发布于

2023-03-31

更新于

2023-05-03

许可协议