Introduction to Operating Systems

Academic Year 2023 - 2024
Semester 1

NUSMods Description

This course introduces the basic concepts in operating systems and links it with contemporary operating systems (eg. Unix/Linux and Windows). It focuses on OS structuring and architecture, processes, memory management, concurrency and file systems. Topics include kernel architecture, system calls, interrupts, models of processes, process abstraction and services, scheduling, review of physical memory and memory management hardware, kernel memory management, virtual memory and paging, caches, working set, deadlock, mutual exclusion, synchronisation mechanisms, data and metadata in file systems, directories and structure, file system abstraction and operations, OS protection mechanisms, and user authentication.

Review

This has got to be one of the most interesting modules that I have taken in NUS. I have always been wanting to learn what goes underneath the hood when it came to computers and I get mind-blown and awed during every lecture.

I think the content is quite manageable. The course is split into 3 parts: Process Management, Memory Management and File Management. There is a lot to learn but it is doable. We have 2 lecturers teaching this semester. Dr Li Jialin taught us Process Management portions of the lecture up till Synchronisation whereas Prof Colin Tan taught us everything after the midterms (Memory Management, Disjoint Memory Scheme onwards). I think it might be wise to attend all the lectures, otherwise, it gets bad since everything is linked.

At first, I had a bit of trouble with this class because I failed to see the bigger picture. When I first learnt Memory Management, for example, or Memory Partition, I always questioned how this fits in the bigger picture of things. My favourite topic was perhaps Synchronisation. I love doing semaphores questions and it gives you the space to be creative. The last portion was a bit rushed. Due to the holidays, I did not have any File System Implementation tutorial. Hence, I have to self-tutor myself in the tutorial worksheet.

Labs were the most fun, there were 4 of them and I think I spent 3 hrs max on each of them. I was already familiar with C, hence doing the labs was pretty ok. I think the hard part was not implementing, but giving the explanations on my lab report. Sometimes, I turn in an essay haha. I would rather be rigorous in explaining all my steps.

Tutorials were not hard except some questions I really do not know what is going on. We were selected (by name order) to answer questions to gain participation marks and out of the 13 tutorials, maybe there were 2 that I stumbled because i.) I did not understand the question and ii.) it got super complicated and I lost myself. Other than that, I think I usually had no issue explaining my thought process. However, I am of the opinion that practicing tutorial questions does not really help you in preparing for exam and that the questions are just to ensure you get the basics.

As for examinations, there was a midterm and a final. I did not do well for the midterms as I was so tired from a midterm (MA3236 midterm which ended just before so). Despite having studied much for it, I could not concentrate. It was an easy paper that did not require much deep thinking. As for finals, I went in relatively calm, some questions stumped me. I think the main barrier for me is reading and understanding what the Prof wants me to do. I really hated reading chunks of text on Examplify too.

As for revision, I read the textbook “Modern Operating Systems” by Tanenbaum (yes the same Tanenbaum and his solution to the Dining Philosopher’s Problem) and Bos. I think some of the Lecture material and diagrams originated from this book. This textbook was easy to read and I consulted it regularly during revision.

Overall, nice class. I was also doing UROP and in my work, I use system calls as well and I am directly using what I learnt into my project implementation too. Hence, following the class was not that hard. I just do not like the exams for this module.