Posts

CST 370 - Week 1

 Hey everyone, This week, we learned several important topics that form the foundation of computer science and programming. We started with GitHub and practiced using manual commands like git init, git add, git commit, and git push to manage our code. This helped us understand version control and how to keep track of changes when working on projects, especially when collaborating with others. We were also introduced to algorithms and learned what they are—step-by-step methods for solving problems. One example we focused on was Euclid’s Algorithm for finding the greatest common divisor (GCD) of two numbers. It uses a simple but powerful idea: repeatedly replace the numbers with GCD(b, a % b) until the second number becomes zero. We also practiced writing pseudocode, which helped us plan out algorithms in plain language before coding. We also had a homework assignment to help us further understand GitHub commands. Later in the week, we learned about graphs, both weighted and unweight...

CST 462 - FINAL WEEK

 Hey everyone! What went well? One of the most positive aspects of my Service Learning experience was the opportunity to contribute meaningfully to a real-world open-source project—LibreOffice. I gained hands-on experience with bug testing and bibisecting, and felt a strong sense of accomplishment when I successfully identified the root of a table formatting bug. Collaborating with an active community and receiving feedback on my contributions was both encouraging and motivating. What would you improve? If I were to do this again, I would spend more time early on familiarizing myself with the project’s communication channels and workflow. It took a while to fully understand the bug tracking system, how to navigate the codebase, and the expectations for filing reports. A more structured onboarding guide or peer mentor would have helped speed up the process. What was the most impactful part? The most impactful part of the experience was realizing how open-source work supports user...

CST 334 - Week 8

 Hey everyone, This is the last week of this class. Time went by so fast and I learned so much!       This week in CST 334, I explored the concept of persistence, both as it applies to operating systems and as a crucial trait for success in this course. In the context of operating systems, persistence refers to the ability to maintain system state and data beyond the lifespan of the processes that created them. This is achieved through storage mechanisms such as file systems, databases, and other non-volatile storage solutions. Understanding how operating systems manage data storage, retrieve persistent states, and ensure data integrity has been eye-opening. Concepts such as journaling file systems and crash recovery mechanisms illustrate the importance of designing systems that can withstand unexpected interruptions and preserve critical information.      On a personal level, persistence in this course has meant pushing through challenges such ...

CST 334 - Week 7

 Hey everyone,      This week in CST 334, I studied the concept of persistence and explored how operating systems manage data storage reliably over time. The readings from OSTEP Chapters 36 to 40 and the accompanying lectures focused on key topics such as I/O devices, hard disk drives, RAIDs (Redundant Arrays of Inexpensive Disks), files and directories, and file system implementation. I learned how I/O devices interact with the operating system to transfer data between the system and storage devices. Chapter 37 provided a detailed explanation of how hard disk drives operate, including their physical structure and the challenges in optimizing performance for data access. Chapter 38 introduced RAIDs, which use multiple drives to improve reliability, performance, or both, through techniques like mirroring and striping.      The lectures and slides on persistence and file system implementation explained how operating systems organize data into files and ...

CST 334 - Week 6

 Hey everyone!      This week we submitted our research collab project. It was quite interesting and fun. I learned a lot and our team bonded more as well. We also learned many new things through our lectures and labs.       Concurrency is a critical concept in computer systems, enabling multiple processes to execute simultaneously. However, with great power comes great complexity.       A semaphore is a synchronization primitive that helps manage access to shared resources in a concurrent environment. Semaphores can be thought of as counters that control the number of processes allowed to access a resource. They come in two main types :             - Counting Semaphores : These can have values greater than one and are often used to manage a   pool of resources, such as threads or connections.           - Binary Semaphores : These function like locks and c...

CST 334 - Week 4

Hey everyone!       This week, I learned about how operating systems manage memory, which is one of their most important jobs. One topic was free space management , where the system keeps track of memory or storage that isn’t being used. Two common methods are bitmaps (using bits to mark if memory is free or taken) and linked lists (connecting free memory blocks together). Each method has its pros and cons, like how much space they use or how fast they work.      I also studied paging , which splits memory into small chunks called pages. These pages are mapped to physical memory, keeping processes separate and organized. However, this mapping can slow things down because the computer has to translate addresses often. To make it faster, Translation Lookaside Buffers (TLBs) store recent translations in a small, quick cache. I also learned about advanced page tables , which are smarter ways of organizing these mappings to save memory.    ...

CST 334 - Week 3

 Hello everyone! I am back with an update on my online journey of learning. It was quite a week, I must say.       In the third week of CST 334, I learned about memory virtualization, which is key to how operating systems manage and allocate memory. The first concept covered was Address Space , both in the video and slides, where we saw how the operating system uses address spaces to provide an abstraction between the physical memory and what the programs see, helping to avoid conflicts and manage resources better. Next, we explored the Memory API in C through a lecture and slides, which showed how programs request memory from the operating system using system calls, giving them the ability to allocate, access, and manage memory dynamically. We then delved into Address Translation , a process where the operating system translates virtual memory addresses into physical ones, ensuring that programs access the correct memory locations without interfering with othe...