From ab3e39135a0a419b733c513b62bf023bf25c6634 Mon Sep 17 00:00:00 2001 From: ysthakur <45539777+ysthakur@users.noreply.github.com> Date: Sun, 15 Dec 2024 11:11:25 -0500 Subject: [PATCH] Don't use own term for acyclic edges --- writeup/writeup.pdf | Bin 305921 -> 305789 bytes writeup/writeup.typ | 6 +++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/writeup/writeup.pdf b/writeup/writeup.pdf index 521639d2d9d45cc2b54d2a95f360e236fdd789c4..a6fdc717ac7c6272d254a6cfbd242b0a11c70e06 100644 GIT binary patch delta 21631 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 Rn9&I6!bUKQi>qp%`ZpkZuJix^ delta 21754 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 diff --git a/writeup/writeup.typ b/writeup/writeup.typ index d81e1fc..7066ca8 100644 --- a/writeup/writeup.typ +++ b/writeup/writeup.typ @@ -101,7 +101,7 @@ After running that code, this is what the graph of objects looks like: #image("img/quadratic_scanning_example.png", height: 40%) ] -The green edges in the diagram above are references that are known not to introduce any cycles. Therefore, when doing mark-scan, we will not follow them (this is our modification from the previous section, not part of lazy mark scan). There are other references that don’t cause cycles in there, but we can't know this at compile-time. I'm going to call these green edges "innocent", because I don't know what sort of terms are actually used for them by real researchers. +The green edges in the diagram above are references that are known not to introduce any cycles. Therefore, when doing mark-scan, we will not follow them (this is our modification from the previous section, not part of lazy mark scan). There are other references that don’t cause cycles in there, but we can't know this at compile-time. At some point, the variables `ctx`, `file`, and `expr` will go out of scope, so the `Context`, `File`, and `Expr` objects will all have their refcounts decremented before being added to the list of PCRs. All the objects in the diagram above have become garbage and are eagerly waiting to be freed. @@ -121,11 +121,11 @@ Let's trace what our naively modified lazy mark scan algorithm would do here: `File` lives because it has a reference from the `FileCons` object, and it keeps the rest of the bottom cycle alive. Thus, all the scanning we did on the bottom cycle was in vain. We'll have to go back and re-scan the `File` object. -Therefore, it is not enough to simply not traverse innocent edges. Fortunately, the solution to this is pretty simple. +Therefore, it is not enough to simply not traverse known acyclic edges. Fortunately, the solution to this is pretty simple. == Fixing the quadratic scanning problem -You may notice above that because we don't traverse innocent edges, processing the `Context` object happens completely separately from processing the `File` and `Expr` objects. We could have processed the `Context` object first, found it to be garbage, decremented the `File` object's reference count, and then processed the `File` and `Expr` objects together. This way, all of the objects would have been marked as garbage without processing any PCR multiple times. +You may notice above that because we don't traverse references known not to cause cycles, processing the `Context` object happens completely separately from processing the `File` and `Expr` objects. We could have processed the `Context` object first, found it to be garbage, decremented the `File` object's reference count, and then processed the `File` and `Expr` objects together. This way, all of the objects would have been marked as garbage without processing any PCR multiple times. In general, how do we determine which objects should be processed before which objects? We can do this based on which objects can reference which objects (directly or indirectly). A `Context` object can refer to `File` and `Expr` objects, so it must be processed before them. `File` and `Expr` objects can both refer to each other, so they must be processed together.