diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 94d1919..5c3ef77 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -13,12 +13,12 @@ "state": { "type": "markdown", "state": { - "file": "Concurrent Systems/notes/1b - Peterson algorithm.md", + "file": "Concurrent Systems/notes/2b - Round Robin algorithm.md", "mode": "source", "source": false }, "icon": "lucide-file", - "title": "1b - Peterson algorithm" + "title": "2b - Round Robin algorithm" } } ] @@ -191,8 +191,8 @@ }, "active": "7c5b0ca6f7687800", "lastOpenFiles": [ - "Concurrent Systems/notes/images/Pasted image 20250405000438.png", "Concurrent Systems/notes/1b - Peterson algorithm.md", + "Concurrent Systems/notes/images/Pasted image 20250405000438.png", "Pasted image 20250405000428.png", "Concurrent Systems/notes/3b - Aravind's algorithm and improvements.md", "Concurrent Systems/notes/4 - Semaphores.md", diff --git a/Concurrent Systems/notes/1b - Peterson algorithm.md b/Concurrent Systems/notes/1b - Peterson algorithm.md index 9b1f6ab..425ef18 100644 --- a/Concurrent Systems/notes/1b - Peterson algorithm.md +++ b/Concurrent Systems/notes/1b - Peterson algorithm.md @@ -140,7 +140,7 @@ Easy to generalize to k-MUTEX. Peterson's algorithm cost $O(n^2)$ A first way to reduce this cost is by using a tournament of MUTEX between pairs of processes: -![350](Concurrent%20Systems/notes/images/Pasted%20image%2020250304082459.png|) +![350](images/Pasted%20image%2020250304082459.png|) Of course this is a binary tree, and the height of a binary tree is logaritmic to the number of leaves. A process then wins after $\lceil \log_{2}n \rceil$ competitions $\to O(\log n)$ cost. diff --git a/Concurrent Systems/notes/4 - Semaphores.md b/Concurrent Systems/notes/4 - Semaphores.md index 403794d..48a3f63 100644 --- a/Concurrent Systems/notes/4 - Semaphores.md +++ b/Concurrent Systems/notes/4 - Semaphores.md @@ -180,7 +180,7 @@ producer A: - so producer A will write at `BUF[0]` - but wait! Consumer B is still reading there - **Producer A doesn't give a fuck.** - ![200](Concurrent%20Systems/notes/images/Pasted%20image%2020250312121828.png|) + ![]() *don't be like Producer A, be more like Bob, who always scans EMPTY before!* So the issue here is that producers just assume that IN is the first available slot. But it its not necessarily the case. diff --git a/Concurrent Systems/notes/4c - Dining Philosophers.md b/Concurrent Systems/notes/4c - Dining Philosophers.md index 367af42..8bd0533 100644 --- a/Concurrent Systems/notes/4c - Dining Philosophers.md +++ b/Concurrent Systems/notes/4c - Dining Philosophers.md @@ -3,7 +3,7 @@ The first real practical example of a concurrent system. - one chopstick between each pair of philosophers - a philosophers must pick up its two nearest chopsticks in order to eat - a philosopher must pick up first one chopstick, then the second one, not both at once -![100](Concurrent%20Systems/notes/images/Pasted%20image%2020250317100456.png|) +![]() **PROBLEM:** *Devise a deadlock-free algorithm for allocating these limited resources (chopsticks) among several processes (philosophers).*