Updates:
1. If you have not already submitted your project, or would like to submit an updated version, please do so by Tuesday, 08 July, 2025. The final Teachers' Committee meeting will be held the following week.
2. Mid-sem and end-sem answer scripts for the MTech students have been checked. If/when you are back on campus, please come by to take a look. I'm currently checking answer scripts for JRFs, and expect to be done by next week.
Best,
Mandar.
> General information
> -------------------
> You are encouraged to formulate your own project: the only requirement is that it should have enough to do with what you're learning in the course.
>
> The system that you implement has to run on a standard Linux distribution. Your code will be checked for plagiarism against submissions from earlier years, and standard repositories like github and gitlab.
>
> Depending on your project, you may also be required to submit a short
> written report.
>
>
> General problems
> ----------------
> 1. Implement a basic shell. Your program should run in an infinite loop in
> which it prints a command prompt, accepts a command, executes the
> command, and prints the prompt for the next command.
> (upto 4 students)
>
> Your program should handle:
> . running jobs in the foreground and background (see the man page for
> the wait system call ("$ man 2 wait" on Linux) for details)
> . simple input/output redirection (>, <, |)
> . inbuilt commands cd, logout, exit
> . keeping track of a PATH variable, so that programs can be run without
> specifying the complete path
> . simple shell variables and variable substitution
> . command-line editing and history
>
>
> Process related problems (1-2 students)
> ------------------------
> 1. Write your own version of the pstree command.
> 2. Write a program to kill a process and all its (current) descendants.
> Your program should take the PID of the target process as its only
> compulsory argument.
>
> Information about the proc file system:
>
>
https://medium.com/@razika28/inside-proc-a-journey-through-linuxs-process-file-s
> ystem-5362f2414740
>
>
https://www.geeksforgeeks.org/proc-file-system-linux/
>
>
https://www.tecmint.com/exploring-proc-file-system-in-linux/
>
>
https://docs.kernel.org/filesystems/proc.html
>
>
https://en.wikipedia.org/wiki/Procfs
>
> Videos:
>
https://www.youtube.com/watch?v=BuasM8AH8AM
>
https://www.youtube.com/watch?v=0XdjODvsRN8
>
>
> Memory management problems (upto 3 students)
> --------------------------
> 1. Write a simulator for a demand paging memory management system. The
> following will be input parameters for your program:
> - a file containing a list of processes and their sizes
> - a file containing a sequence of memory accesses in the following form:
> <pid> <logical address>
> - page replacement algorithm (implement at least FIFO, optimal, true
> LRU, and reference byte/second chance)
> - amount of RAM and swap available
> - number of TLB entries
> Your simulator should have data structures for per-process page tables,
> and the kernel frame table. The simulator's output should report TLB
> hits/misses, and page faults for each process.
> 2. Implement replacements for the malloc/calloc, realloc and free system
> calls.
> Please see:
https://en.wikipedia.org/wiki/Buddy_memory_allocation.
> Notes:
> - Your functions should have the same calling conventions as the
> original malloc, calloc, and realloc. Put them together in a static
> library (.a).
> - I should be able to take a working program, link it to your library
> and run it, and it should behave normally. If you find it easier to
> give your functions different names, then I will do the required
> string replacements before compiling.
> - You should preferably include a debug() or info() or similarly-named
> function (not provided by the standard C library). A call to this
> function should print information about the current state of the heap
> to stderr.
>
>
> Filesystem problems
> -------------------
> 1. Write a directory search routine (like a simplified version of
> "find"). Your program should take a name, and look for a file /
> directory / etc. by that name recursively within the current
> directory. If the named file/directory is found, the path to the
> file/directory should be printed along with the filetype (file /
> directory / link / etc.). Otherwise, a suitable error message should be
> displayed.
> (1-2 students. A 2-student group is expected to write something that is
> close to "find" in functionality.)
> 2. Write a multi-threaded filesystem simulator that works in client-server
> mode. Your program will function in a manner similar to the filesystem
> component of a kernel. Use a regular file to simulate the underlying
> physical storage.
> (3-4 students)
> 3. Write a multi-threaded file downloader. Your program should take a URL
> as a compulsory argument, and the number of threads and the output file
> name as optional arguments. Create a heterogeneous sample of 10 URLs and
> compare the times taken by your program and wget to download the files
> pointed to by these URLs.
> Optional: Design your program so that it is possible to interrupt and
> resume downloads. (1-2 students)
>
>
> Other problems
> --------------
> 1. Write a version control system. Content can be "checked in" and "checked
> out". Changes must be kept track of, so that rollbacks are possible.
>
http://en.wikipedia.org/wiki/Revision_control
> (3-4 students)
> 2. Implement your own simplified version of file system synchronisation
> software (like Dropbox / Ubuntu One). You should create a server that
> will run on an ISI machine, and will keep a designated folder
> synchronised acrss several client machines.
>
> See the documentation for inotify.
> (3-4 students)
> 3. Implement a boot loader that selects from installed and *multiple*
> images of hibernating systems.
>
> ---
>
> References:
>
> 1. Advanced Programming in the UNIX Environment - Stevens
> Chapter 14 (semaphores, and shared memory).
> 2. Man pages for shmget, shmat, semget, semop, pthread_create, pthread_exit,
> etc.
> 3. Linux synchronization slides (course web-site).
> 4. Pthread tutorials:
>
http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html
>
http://www.ibm.com/developerworks/library/l-posix1.html
> 5. Man pages for opendir, readdir, scandir, etc.
> 6. Linux Kernel Development - Robert Love
> (Sams Publishing)
> 7. Linux Kernel in a Nutshell - Greg Kroah-Hartman
> 8.
http://www.faqs.org/docs/Linux-HOWTO/Kernel-HOWTO.html