Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Repository files navigation
It was a course taught at Stony Brook University by Prof. Donald Porter.
Developed along with Rahul Madan (rahulsachint@gmail.com).
COURSE PROJECT
Implemented task schedulers used in various versions of linux
- O(1) Scheduler (kern/sched_o.c)
- Completely Fair Scheduler (kern/sched_cfs.c)
- Lottery Scheduler (kern/sched_lottery.c)
COURSE LABS
OVERVIEW : Implement (the interesting pieces of) a real operating system that will boot on a PC. The operating system is called JOS. (JOS exokernel was developed at MIT)
LAB1: Bootloader
- Trace through the first few instructions of the boot loader
- Implement a stack backtrace function that displays function name, source file name and line number for each EIP
LAB2: Memory Management
- Implement page table management functions like page_alloc, page_insert, page_lookup etc...
LAB3: Processes/Environments
- Implement process/environment management functions for allocating an environment, loading a binary, start environment in user mode etc...
- Setup a interrupt descriptor table and implement a trapframe handler
- Implement a page fault, breakpoint and system call handler
LAB4: System Calls & Inter Process Communication
- Implement a round-robin scheduler
- Implement system calls to allocate a page of physical memory, copy a page mapping etc...
- Implement Copy On Write fork (COW) using the above system calls
- Implement timer interrupt and enable preemptive multitasking
- Implement Inter Process Communication (IPC) and the additional system calls it requires
LAB5: FileSystems
- Implement the file system as its own user-space process in micro-kernel fashion
- Key components of the file system implemented
-> reading blocks into the block cache & flushing them back to disk
-> allocating disk blocks
-> mapping file offsets to disk blocks
-> implementing read, write and open in the IPC interface
- Spawn a process, load a ELF binary, start a child process running this program
LAB6: Network Driver
- Write a driver for a network interface card that will be based on the Intel 82559ER chip
- Transmit & receive packets by polling DMA rings for valid data
- Create system calls for transmitting and receiving packets
LAB7: Shell
- Minimize copying of data when spawning a new process by copying just the mapping for shared pages
- Implement a shell to run basic commands like ls, cat etc...
Source Code: https://github.com/rahulsachint/JOS