Category: Notes
-
A short review on Zettlr (open source Zettelkasten app)
I serendipitously stumbled on another Zettelkasten desktop application called Zettlr. Perusing the online forum over at Zettelkasten.de, I had noticed that at least three of four members repping the app in their signatures. Naturally, I was curious so I followed the scent on the trail and loaded up the Zettlr website in my browser. After…
-
Recovery management in Quicksilver – Notes and Summary
The original paper “Recovery management in quicksilver” introduces a transaction manager that’s responsible for managing servers and coordinates transactions. The below notes discusses how this operating system handles failures and how it makes recovery management a first class citizen. Cleaning up state orphan processes Key Words: Ophaned, breadcrumbs, stateless In client/server systems, state gets created…
-
Operating System Transactions – Summary and notes
This post is a cliff notes version I scrapped together after reading the paper Operating Systems Transactions. Although I strongly recommend you read the paper if you are interested in how the authors pulled inspiration from database systems to create a transactional operating system, this post should give you a good high overview if you…
-
Lightweight recoverable virtual machine – Summary and Notes
Summary and main take away As system designers, we can make persistence into the virtual memory manager, offering persistence to application developers. However, it’s no easy feat: we need to ensure that the solution performs well. To this end, the virtual machine manager offers an API that allows developer to wrap their code in transactions;…
-
Distributed File Systems – Summary and notes
This lesson introduces network file system (NFS) and presents the problems with it, bottlenecks including limited cache and expensive input/output (I/O) operations. These problems motivate the need for a distributed file system, in which there is no longer a centralized server. Instead, there are multiple clients and servers that play various roles including serving data…
-
Distributed Shared Memory (Part 2 of 2) Notes
An example Summary Key Words: Conditional variable, pthread_signal, pthread_wait in the concrete example (screenshot below), P1 instructions that update memory (e.g. flag = 1) can be run in parallel with that of P2 because of release consistency model Advantage of RC over SC Summary In a nutshell, we gain performance in a shared memory…
-
Distributed Shared Memory (Part 1 of 2) Notes
Introduction Summary Main question is this: can we make a cluster look like a shared memory machine Cluster as a parallel machine (sequential program) Summary One strategy is to not write explicit parallel programs and instead use language assisted features (like pragma) that signal to the compiler that this section be optimized. But, there are…
-
Global memory systems (part 1 of 2) notes
Introduction Summary Lessons will be broken down into three modules: GMS (i.e. can we use peer memory for paging across LAN) and DSM (i.e. can we make the cluster appear as a shared memory machine) and DFS (i.e. can we use cluster memory for cooperative caching of files) Context for Global Memory Systems Summary Key…
-
Distributed Systems – Latency Limits (Notes)
Introduction Summary Lamport’s theories provided deterministic execution for non determinism exists due to vagaries of the network. Will discuss techniques to make OS efficient for network communication (interface to kernel and inside the kernel network protocol stack) Latency Quiz Summary What’s the difference between latency and throughput. Latency is 1 minute and throughput is 5…
-
Lamport’s Clocks (notes)
[ez-toc] Introduction Summary Now that we talked about happened before events, we can talk about lamport clocks Lamport’s Logical Clock Summary A logical clock that each process has and that clock monotonically increases as events unfold. For example, if event A happens before event B, then the event A’s clock (or counter value) must be…
-
Distributed Systems Introduction notes
The main take away with the introduction to distributed systems lectures is that as system designers, we need to carefully inspect our program and identify what events in our system can run concurrently (as well as what cannot run concurrency or must be serialized). To this end, we need to identify what events must happen…
-
OpenMP tutorial notes (Part 1)
I’m watching the YouTube learning series called “Introduction to OpenMP” in order to get a better understanding of how I can use the framework for my second project in advanced operating systems. You might find the below notes useful if you don’t want to sit through the entire video series. Introduction to OpenMP: 02 part…
-
My Anki settings for cramming for an exam
I spent a few minutes fiddling with my Anki settings yesterday, modifying the options for the advanced operating systems deck that I had created to help me prepare for the midterm. Although Anki’s default settings are great for committing knowledge and facts over a long period of time (thanks to its internal algorithm exploiting the…
-
Shared memory multiprocessing (notes for advanced operating systems)
OS for parallel machines Summary There are many challenges that the OS faces when building for parallel machines: size bloat (features OS just has to run), memory latency (1000:1 ratio) and numa effects (one process accessing another process’s memory across the network), false sharing (although I’m not entirely sure whether false sharing is a net…
-
Midterm preparation (part 3/3) – Virtualization to Test-And-Set
Question 3d The algorithm is implemented on a cache coherent architecture with an invalidation-based shared-memory bus. The circular queue is implemented as an array of consecutive bytes in memory such that each waiting thread has a distinct memory location to spin on. Let’s assume there are N threads (each running on distinct processors) waiting…
-
Midterm preparation (part 2/3) – Virtualization to Test-And-Set
This is a continuation of me attempting to answer the midterm questions without peeking at the answers. Part 1 covered questions from OS Structures and this post (part 2) covers virtualization and includes questions revolving around memory management in hypervisors and how to test-and-set atomic operations work. A few useful links I found while trying…
-
Midterm preparation – Questions and my guesses for OS Structures section
As mentioned in my recent post on taking a multi pass approach for midterm preparation, I’m taking a stab at answering the midterm questions myself and below are my unfiltered attempts followed by the correct answer that I pulled from the answer key. OS Structures Question 1a Protection domains allow providing independence, integrity, and isolation…
-
Advanced Operating Systems (AOS) notes
If you are an online masters of computer science student (OMSCS) at Georgia Tech and enrolled in advanced operating systems (AOS) course, you might want to check out the notes I’ve taken for the lectures by clicking on the advanced operating systems category on my blog. For each video lecture, I’ve written down a summary…
-
Parallel Systems – Scheduling (notes)
The key take away for scheduling is that as OS designers you want to follow this mantra: “keep the caches warm“. Following this principle will ensure that the scheduler performs well. There are many different scheduling algorithms including first come first serve (FCFS), fixed processor (focus on fairness), fixed processor (thread runs on the same…
-
Remote Procedure Call (RPC) notes
Remote procedure call (RPC) is a framework offered within operating systems (OS) to develop client/server systems and they promote good software engineering practices and promote logical protection domains . But without careful consideration, RPC calls (unlike simple procedure calls) can be cost prohibitive in terms over overhead incurred when marshaling data from client to server…
-
Barrier Synchronization (Part 2/2)
Part 1 of barrier synchronization covers my notes on the first couple types of synchronization barriers including the naive centralized barrier and the slightly more advanced tree barrier. This post is a continuation and covers the three other barriers: MCS barrier, tournament barrier , dissemination barrier. Summary In the MCS tree barrier, there are two…
-
Barrier Synchronization (Part 1/2)
As mentioned previously, there are different types of synchronization primitives that us operating system designers offer. If as an application designer you nee to ensure only one thread can access a piece of shared memory at a time, use a mutual exclusion synchronization primitive. But what about a different scenario in which you need all…
-
Making sense of the “sense reversing barrier” (synchronization)
What’s the deal with a sense reversing barrier? Even after watching the lectures on the topic, I was still confused as to how a single flag could toggle between two values (true and false) can communicate whether or not all processes (or threads) are running in the same critical section. This concept completely baffled me.…
-
Synchronization notes (part 2/2) – Linked Based Queuing lock
In part 1 of synchronization, I talked about the more naive spin locks and other naive approaches that offer only marginally better performance by adding delays or reading cached caches (i.e. avoiding bus traffic) and so on. Of all the locks discussed thus far, the array based queuing lock offers low latency, low contention and…