Week 8 - Final Week

Wow, it is already the end of this semester's operating system course. I swore we were just working on our first programming assignment a week ago learning about how to set up docker and debugging our C code.

I believe I learned a great deal this semester from processes and virtualization of CPU, virtualization of memory, concurrency with locks and synchronization, and persistence and filesystems. The programming assignments were such a big part of this course and I thoroughly enjoyed doing them due to the endless cycles of having to get all the tests to pass. It was just really satisfying managing to get the final test to pass after having some fail due to a minor logic issue in the C code.

My biggest takeaway from this course has got to be about concurrency. The idea of creating threads to process different points of execution of code was so interesting to me, I sort of knew what it did beforehand but I didn't know the process in which it took to get there. For example learning about the critical sections of code where using threads may cause the code to have indeterminate results or even when you do have mutexes to manage mutual exclusion there would be the cases of race conditions when it is not handled properly. The management of concurrency is just mind boggling and I would love to learn some more about these concepts in the future. The chapter in OSTEP about all the different bugs also got me quite interested, because it mentioned all these big companies and software having similar bugs related to concurrency. The programming assignment accompanying the concurrency module was also beneficial since it taught me how to implement conditional variables for read and write locks. The OSTEP book went over this with how to implement it with a semaphore but since we were tasked to do so with condition variables we had to figure it out on our own and it was very challenging. I would also say it was satisfying because I had some very big issues where the tests would all pass "occasionally", there was a while loop logic issue with the signaling that would cause my program to not be concurrent thus resulting in failing the actual concurrency tests although the tests would all pass on certain test runs. I managed to fix this issue by just initiating conditional variable broadcasting to both the read and write lock thus fixing the problem.

Lastly I just want to touch upon the topic of virtualizing memory. It was interesting to see how we manage memory of processes by translating them in different ways to RAM, the ideas from base and bound, to segmentation, paging, and to swapping. It was very eye opening to see all the different methods that manage such an important resource. The labs that involved translating memory with virtual addresses for segmentation, base and bounds, and even caching in relation to swapping were some of my biggest takeaways from the assignments in the class. The unlimited practice quizzes were great. I just had so much fun doing the practice quizzes as I was preparing for the exams since I could take them over and over again.

The course was very satisfying and very enjoyable. The instructors were great and gave clear instructions. Overall it was a great experience and I hope to have some more like this in the future. Thank you Sam Ogden, Krishna and the class for facilitating such a great course.

Comments