Xv6 RISC: Add new Syscall

Learn to add a new System Call (Syscall) to the Xv6 Kernel and call it from user space program

258 Participants 45 Minutes Advance

Xv6 RISC-V, a blend of the Xv6 operating system and the RISC-V architecture, serves as a remarkable educational platform for exploring operating system development and computer architecture. In this description, we will cover the process of adding a new system call (syscall) to the Xv6 OS, which will display the total number of system calls made since the system was booted.



Pre-requisite lab: Xv6 RISC: Code Userspace Program

Introduction about Xv6-RISCV:

Xv6-RISCV is a lightweight, educational operating system designed for teaching and learning the fundamentals of operating systems and systems programming. It is based on the Unix Version 6 operating system and serves as an excellent platform for understanding the inner workings of an operating system.

What is Syscalls:

System calls, often referred to as syscalls, are the fundamental interface between user-level processes and the operating system. They allow user programs to request services or perform operations that are typically restricted to privileged kernel code. In this lab, we'll be adding a new syscall to Xv6-RISCV.

Certainly, here are headings for different types of syscalls:

1. Process Control Syscalls

2. File and I/O Syscalls

3. File and Directory Manipulation Syscalls

4. Memory Management Syscalls

5. Communication Syscalls

6. Time Syscalls

7. Signal Syscalls

8. Device Control Syscalls

9. User and Group Management Syscalls

10. Network Syscalls (for network communication)

What is Userspace Program:

A userspace program refers to software that runs in user mode, outside of the operating system's kernel. Userspace programs are the applications and utilities that users interact with on a daily basis. In this lab, we will create a userspace program to test the newly added syscall.

How to Add a New Syscall :

In this lab, you will perform the following steps to add a new syscall to Xv6-RISCV:

  1. Clone the Xv6-RISCV repository from GitHub.

  2. Modify key files such as syscall.h, defs.h, user.h, usys.pl, sysproc.c, and syscall.c to add the new syscall.

  3. Create a userspace program to test the syscall.

  4. Update the Makefile to include the new user program.

  5. Compile and run the Xv6-RISCV OS with QEMU emulator.

  6. Test the new syscall using the created user program.


By successfully adding a new syscall to the Xv6-RISCV operating system, you have delved into the realm of operating system development and system calls. This lab equips you with a foundational understanding of how to extend and modify an operating system, which is a valuable skill for those interested in systems programming and operating system development. You are now encouraged to explore and experiment with the Xv6-RISCV OS, and even add more syscalls to further enhance your understanding.

More on : github.com/mit-pdos/xv6-riscv

Xv6: Add new Syscall


Have a doubt? Got stuck somewhere?



Related Labs


Linux Basic Commands

Operating System

  • 45 m
  • Beginner
  • 250
Learn basic Linux commands and try these hands-on in our Sandbox environment

Linux System Calls

Operating System

  • 30 m
  • Beginner
  • 223
Explore fundamental concept of system calls (syscalls) in Linux OS with Python code

Linux I/O System Calls

Operating System

  • 30 m
  • Beginner
  • 193
Explore UNIX/Linux I/O system calls that allow programs to interact with files/directories with Python example code

Banker's Algorithm

Operating System

  • 30 m
  • Beginner
  • 190
Explore Banker's Algorithm with Python code example