diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index b5f65a5..f683b21 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -13,30 +13,15 @@ "state": { "type": "markdown", "state": { - "file": "Concurrent Systems/notes/3b - Aravind's algorithm and improvements.md", + "file": "Concurrent Systems/notes/1b - Peterson algorithm.md", "mode": "source", "source": false }, "icon": "lucide-file", - "title": "3b - Aravind's algorithm and improvements" - } - }, - { - "id": "e453bba00fdc57d6", - "type": "leaf", - "state": { - "type": "markdown", - "state": { - "file": "Concurrent Systems/notes/4c - Dining Philosophers.md", - "mode": "source", - "source": false - }, - "icon": "lucide-file", - "title": "4c - Dining Philosophers" + "title": "1b - Peterson algorithm" } } - ], - "currentTab": 1 + ] } ], "direction": "vertical" @@ -204,26 +189,29 @@ "companion:Toggle completion": false } }, - "active": "0d5325c0f9289cea", + "active": "7c5b0ca6f7687800", "lastOpenFiles": [ - "Concurrent Systems/notes/Untitled.md", + "Concurrent Systems/notes/2b - Round Robin algorithm.md", + "Concurrent Systems/notes/3b - Aravind's algorithm and improvements.md", + "Concurrent Systems/notes/4b - Monitors.md", "Concurrent Systems/notes/4c - Dining Philosophers.md", "Concurrent Systems/notes/4 - Semaphores.md", + "Concurrent Systems/a.md", + "Concurrent Systems/notes/images/Pasted image 20250404235033.png", + "Concurrent Systems/notes/images/Pasted image 20250304093223.png", + "Concurrent Systems/notes/Untitled.md", "Concurrent Systems/notes/9 - Consensus.md", "Concurrent Systems/notes/10 - Implementing Consensus.md", "Concurrent Systems/notes/8 - Enhancing Liveness Properties.md", "Concurrent Systems/notes/7- MUTEX-free concurrency.md", "Concurrent Systems/notes/6 - Atomicity.md", "Concurrent Systems/notes/5 - Software Transactional Memory.md", - "Concurrent Systems/notes/4b - Monitors.md", "Concurrent Systems/notes/3a - Hardware primitives & Lamport Bakery algorithm.md", "Concurrent Systems/notes/1 - CS Basics.md", "Concurrent Systems/notes/1b - Peterson algorithm.md", "Concurrent Systems/notes/6a - Alternatives to Atomicity.md", - "Concurrent Systems/notes/2b - Round Robin algorithm.md", "Concurrent.md", "Concurrent Systems/slides/class 5.pdf", - "Concurrent Systems/notes/3b - Aravind's algorithm and improvements.md", "Concurrent Systems/notes/2 - Fast mutex by Lamport.md", "Concurrent Systems/ignore this folder/Untitled.md", "Foundation of data science/notes/9 XGBoost.md", @@ -232,8 +220,6 @@ "Foundation of data science/notes/9 Decision tree.md", "Foundation of data science/notes/6 PCA.md", "HCIW/slides/1 Interface and Interaction for IoT.pdf", - "HCIW/notes/1 - UX for IoT.md", - "HCIW/notes/3 - Beacons.md", "Concurrent Systems/slides/class 4.pdf", "Concurrent Systems/slides/class 9.pdf", "Concurrent Systems/slides/class 10.pdf", @@ -250,8 +236,6 @@ "Concurrent Systems/notes/images/Pasted image 20250324082545.png", "Concurrent Systems/notes/images/Pasted image 20250324092633.png", "Concurrent Systems/notes/images/Pasted image 20250324100652.png", - "Concurrent Systems/notes/images/Pasted image 20250318090909.png", - "Concurrent Systems/notes/images/Pasted image 20250318090733.png", "Senza nome.canvas" ] } \ No newline at end of file diff --git a/Concurrent Systems/notes/1 - CS Basics.md b/Concurrent Systems/notes/1 - CS Basics.md index 6a226e1..7142d24 100644 --- a/Concurrent Systems/notes/1 - CS Basics.md +++ b/Concurrent Systems/notes/1 - CS Basics.md @@ -62,7 +62,7 @@ function withdraw() { While `read()` and `write()` may be considered as atomic, their sequential composition **is not**. -![[/Concurrent Systems/notes/images/Pasted image 20250303090135.png]] +![](Concurrent%20Systems/notes/images/Pasted%20image%2020250303090135.png) #### Mutual Exclusion (MUTEX) Ensure that some parts of the code are executed as *atomic*. @@ -100,7 +100,7 @@ Every solution to a problem should satisfy at least: **Both inclusions are strict:** $$\text{Deadlock freedom} \not \implies \text{Starvation freedom}$$ - ![[/Concurrent Systems/notes/images/Pasted image 20250303093116.png]] + ![](Concurrent%20Systems/notes/images/Pasted%20image%2020250303093116.png) *p1 is starving!* $$\text{Starvation freedom} \not \implies \text{Bounded bypass}$$ Assume a $f$ and consider the scheduling above, where p2 wins $f(3)$ times and so does p3, then p1 looses (at least) $2f(3)$ times before winning. diff --git a/Concurrent Systems/notes/10 - Implementing Consensus.md b/Concurrent Systems/notes/10 - Implementing Consensus.md index 6f77010..2e3765a 100644 --- a/Concurrent Systems/notes/10 - Implementing Consensus.md +++ b/Concurrent Systems/notes/10 - Implementing Consensus.md @@ -30,7 +30,7 @@ A configuration C obtained during the execution of all A is called: If A wait-free implements binary consensus for n processes, then there exists a bivalent initial configuration. *Proof:* -![[/Concurrent Systems/notes/images/Pasted image 20250401083747.png]] +![](Concurrent%20Systems/notes/images/Pasted%20image%2020250401083747.png) ### CN(Atomic R/W registers) = 1 **Thm:** There exists no wait-free implementation of binary consensus for 2 processes that uses atomic R/W registers. @@ -135,7 +135,7 @@ propose(i, v) := Let us consider a verison of the compare&swap where, instead of returning a boolean, it always returns the previous value of the object, i.e.: -![[/Concurrent Systems/notes/images/Pasted image 20250401092557.png]] +![](Concurrent%20Systems/notes/images/Pasted%20image%2020250401092557.png) ``` CS a compare&swap object init at ⊥ diff --git a/Concurrent Systems/notes/1b - Peterson algorithm.md b/Concurrent Systems/notes/1b - Peterson algorithm.md index 8c3d8a9..22625d3 100644 --- a/Concurrent Systems/notes/1b - Peterson algorithm.md +++ b/Concurrent Systems/notes/1b - Peterson algorithm.md @@ -53,10 +53,10 @@ unlock(i) := **How has p0 entered its CS?** a) `FLAG[1] = down`, this is possible only with the following interleaving: -![[/Concurrent Systems/notes/images/Pasted image 20250303100721.png]] +![](Concurrent%20Systems/notes/images/Pasted%20image%2020250303100721.png) b) `AFTER_YOU = 1`, this is possible only with the following interleaving: -![[/Concurrent Systems/notes/images/Pasted image 20250303100953.png]] +![](Concurrent%20Systems/notes/images/Pasted%20image%2020250303100953.png) ##### Bounded Bypass proof (with bound = 1) - If the wait condition is true, then it wins (and waits 0). @@ -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: -![[/Concurrent Systems/notes/images/Pasted image 20250304082459.png|350]] +![350](Concurrent%20Systems/notes/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/2 - Fast mutex by Lamport.md b/Concurrent Systems/notes/2 - Fast mutex by Lamport.md index 1f2b923..ca60352 100644 --- a/Concurrent Systems/notes/2 - Fast mutex by Lamport.md +++ b/Concurrent Systems/notes/2 - Fast mutex by Lamport.md @@ -49,9 +49,9 @@ unlock(i) := ##### MUTEX proof How can pi enter its CS? -![[/Concurrent Systems/notes/images/Pasted image 20250304084537.png]] +![](Concurrent%20Systems/notes/images/Pasted%20image%2020250304084537.png) -![[/Concurrent Systems/notes/images/Pasted image 20250304084901.png]] +![](Concurrent%20Systems/notes/images/Pasted%20image%2020250304084901.png) (*must finished before nel senso che $p_i$ deve aspettare $p_j$*) ##### Deadlock freedom Let $p_i$ invoke lock @@ -72,6 +72,6 @@ Let $p_i$ invoke lock - In the second wait Y = ⊥: but then there exists a $p_h$ that eventually enters its CS -> good - In the ∀j.wait FLAG[j]=down: this wait cannot block a process forever -![[/Concurrent Systems/notes/images/Pasted image 20250304090219.png]] +![](Concurrent%20Systems/notes/images/Pasted%20image%2020250304090219.png) esercizio: prova che NON soddisfa starvation freedom \ No newline at end of file diff --git a/Concurrent Systems/notes/2b - Round Robin algorithm.md b/Concurrent Systems/notes/2b - Round Robin algorithm.md index fcda91c..e1cbc7e 100644 --- a/Concurrent Systems/notes/2b - Round Robin algorithm.md +++ b/Concurrent Systems/notes/2b - Round Robin algorithm.md @@ -50,5 +50,5 @@ By Deadlock freedom of RR, at least one process eventually unlocks The worst case is when TURN = *i+1* mod n when FLAG[i] is set. -![[/Concurrent Systems/notes/images/Pasted image 20250304093223.png]] +![](Concurrent%20Systems/notes/images/Pasted%20image%2020250304093223.png) diff --git a/Concurrent Systems/notes/3b - Aravind's algorithm and improvements.md b/Concurrent Systems/notes/3b - Aravind's algorithm and improvements.md index 2941bb7..d333ed8 100644 --- a/Concurrent Systems/notes/3b - Aravind's algorithm and improvements.md +++ b/Concurrent Systems/notes/3b - Aravind's algorithm and improvements.md @@ -31,7 +31,7 @@ unlock(i) := *Proof:* by contradiction. Let's consider the execution of $p_i$ leading to its CS: -![[/Concurrent Systems/notes/images/Pasted image 20250310172134.png]] +![](Concurrent%20Systems/notes/images/Pasted%20image%2020250310172134.png) **Corollary** (of the MUTEX proof)**:** DATE is never written concurrently. @@ -57,7 +57,7 @@ Let's consider the execution of $p_i$ leading to its CS: **Theorem:** the algorithm satisfies bounded bypass with bound $2n-2$. *Proof:* -![[/Concurrent Systems/notes/images/Pasted image 20250310103703.png]] +![](Concurrent%20Systems/notes/images/Pasted%20image%2020250310103703.png) so by this, the very worst possible case is that my lock experiences that. It looks like I can experience at most $2n-1$ other critical sections, but it is even better, let's see: diff --git a/Concurrent Systems/notes/4 - Semaphores.md b/Concurrent Systems/notes/4 - Semaphores.md index 9dbc7a4..403794d 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.** - ![[/Concurrent Systems/notes/images/Pasted image 20250312121828.png|200]] + ![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 0edf2af..367af42 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 -![[/Concurrent Systems/notes/images/Pasted image 20250317100456.png|100]] +![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).* diff --git a/Concurrent Systems/notes/5 - Software Transactional Memory.md b/Concurrent Systems/notes/5 - Software Transactional Memory.md index 4c389c8..3a00fd3 100644 --- a/Concurrent Systems/notes/5 - Software Transactional Memory.md +++ b/Concurrent Systems/notes/5 - Software Transactional Memory.md @@ -105,7 +105,7 @@ The **casual past** of a transaction T is the set of all T' and T'' such that VWC allows more transactions to commit -> it is a more liberal property than opacity. -![[/Concurrent Systems/notes/images/Pasted image 20250317105355.png]] +![](Concurrent%20Systems/notes/images/Pasted%20image%2020250317105355.png) #### A Vector clock based STM system We have m shared MRMW registers; register X is represented by a pair XX, with: diff --git a/Concurrent Systems/notes/6 - Atomicity.md b/Concurrent Systems/notes/6 - Atomicity.md index 5645a13..8a00e32 100644 --- a/Concurrent Systems/notes/6 - Atomicity.md +++ b/Concurrent Systems/notes/6 - Atomicity.md @@ -21,9 +21,9 @@ A complete history $\hat{H}$ is **linearizable** if there exists a sequential hi Given an history $\hat{K}$, we can define a binary relation on events $⟶_{K}$ s.t. (op, op’) ∈ ⟶K if and only if res[op] _{proc} op'$ to hold whenever there exists a process p that ### Sequential consistency **Def:** a complete history is sequentially consistent if there exists a sequential history $𝑆$ s.t. -![[/Concurrent Systems/notes/images/Pasted image 20250324082534.png]] +![](Concurrent%20Systems/notes/images/Pasted%20image%2020250324082534.png) -![[/Concurrent Systems/notes/images/Pasted image 20250324082545.png]] +![](Concurrent%20Systems/notes/images/Pasted%20image%2020250324082545.png) >[!warning] >The problem with sequential consistency is that it is NOT compositional. diff --git a/Concurrent Systems/notes/7- MUTEX-free concurrency.md b/Concurrent Systems/notes/7- MUTEX-free concurrency.md index 68ccb1b..e4a40dc 100644 --- a/Concurrent Systems/notes/7- MUTEX-free concurrency.md +++ b/Concurrent Systems/notes/7- MUTEX-free concurrency.md @@ -64,7 +64,7 @@ this implementation satisfies the three requirements for the splitter - let us consider the last process that writes into LAST (this is an atomic register, so this is meaningful) - if the door is closed, it receives R and √ 3. let $p_i$ be the first process that receives $S \to LAST=i$ in its second if - ![[/Concurrent Systems/notes/images/Pasted image 20250324091452.png]] + ![](Concurrent%20Systems/notes/images/Pasted%20image%2020250324091452.png) ### An Obstruction-free Timestamp Generator A **timestamp generator** is a concurrent object that provides a single operation get_ts such that: @@ -98,7 +98,7 @@ this implementation satisfies the three properties of the timestamp generator - every process that starts after its termination will find NEXT to a greater value (NEXT never decreases!) 3. Obstruction freedom is trivial -**REMARK:** this implementation doesn’t satisfy the non-blocking property:![[/Concurrent Systems/notes/images/Pasted image 20250324092633.png]] +**REMARK:** this implementation doesn’t satisfy the non-blocking property:![](Concurrent%20Systems/notes/images/Pasted%20image%2020250324092633.png) ### A Wait-free Stack REG is an unbounded array of atomic registers (the stack) @@ -149,7 +149,7 @@ This is needed for the so called ABA problem with compare&set: - with the compare&set you mainly test that the sequence_number has not changed TOP : a register that can be read or compare&setted - ![[/Concurrent Systems/notes/images/Pasted image 20250324100652.png]] + ![](Concurrent%20Systems/notes/images/Pasted%20image%2020250324100652.png) ``` push(w) :=