This repository contains design exercises/assignment submissions made in the course CS330A (2022-23 I Sem.) in a team of four (Team Name: amogOS; Team Members: Soham Samaddar, Samarth Arora, Sarthak Kohli, and me, Aditya Tanwar).
The assignments required us to implement programs, syscalls, scheduling algorithms, synchronization primitives, etc. in the xv6 OS evironment. Each of them have a .md
of their own, describing the assignments (not verbatim, there are slight omissions like submission instructions, overviews, etc.), which can be found in the assignments directory.
There is also a report corresponding to each assignment, which can be found in the reports directory.
- Assignment#1-Part A: Implement user programs which use syscalls like
getpid()
,fork()
,pipe()
, etc. - Assignment#1-Part B: Implement syscalls like
getppid()
,waitpid()
, custom implementation offork()
, process info, etc.
Full marks were awarded for Assignment#1. - Assignment#2: Implement four scheduling algorithms: non-preemptive FCFS, non-preemptive SJF, preemptive RR, and preemptive UNIX scheduler, and compare them using some statistics.
17 marks were deducted in total with the remark:Completion time wrong. (-2)
SJF implementation buggy: Burst estimates are wrong. (-15) - Assignment#3: Implement
Condition Variables
andSemaphores
and use them in the barrier problem and the MP-MC BB problem (Multiple Producers-Multiple Consumers Bounded Buffer Problem).
Full marks were awarded for Assignment#3.
Most of the xv6-riscv directory was provided to us (in each assignment), we do not take credit for it. We have only made some minor changes/ added new programs to it as part of our assignments, and they have been listed in markdown files included in the repository.
The course website used to be this but it was removed as soon as the semester ended.