From ed7cb4560c81c944cbc3347c966a49fbabd4c990 Mon Sep 17 00:00:00 2001 From: Juan Marín Noguera Date: Mon, 6 Jan 2025 22:29:34 +0100 Subject: Finish TAOCP Volume 1 (Third Edition) MMIX fascicle not included. --- 2.5.lyx | 1608 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 1596 insertions(+), 12 deletions(-) (limited to '2.5.lyx') diff --git a/2.5.lyx b/2.5.lyx index bfd6063..11320d9 100644 --- a/2.5.lyx +++ b/2.5.lyx @@ -91,31 +91,1615 @@ \begin_body +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +rexerc5[18] +\end_layout + +\end_inset + +Suppose it is known that +\family typewriter +N +\family default + is always 100 or more in Algorithm A. + Would it be a good idea to set +\begin_inset Formula $c=100$ +\end_inset + + in the modified step +\begin_inset Formula $\text{A4}'$ +\end_inset + +? +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +answer +\end_layout + +\end_inset + +No, + because while we cannot use that storage +\emph on +right now +\emph default +, + it might be worth it after the next allocated block gets freed. +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +rexerc6[23] +\end_layout + +\end_inset + +( +\emph on +Next fit. +\emph default +) After Algorithm A has been used repeatedly, + there will be a strong tendency for blocks of small +\family typewriter +SIZE +\family default + to remain at the front of the +\family typewriter +AVAIL +\family default + list, + so that it will often be necessary to search quite far into the list before finding a block of length +\family typewriter +N +\family default + or more. + For example, + notice how the size of the blocks essentially increases in Fig. + 42, + for both reserved and free blocks, + from the beginning of memory to the end. + (The +\family typewriter +AVAIL +\family default + list used while Fig. + 42 was being prepared was kept sorted by the order of location, + as required by Algorithm B.) Can you suggest a way to modify Algorithm A so that +\end_layout + +\begin_layout Enumerate +short blocks won't need to accumulate in a particular area, + and +\end_layout + +\begin_layout Enumerate +the +\family typewriter +AVAIL +\family default + list may still be kept in order of increasing memory locations, + for purposes of algorithms like Algorithm B? +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +answer +\end_layout + +\end_inset + +Yes, + we could arrange the free space as a circular list and start each search where the previous one left off. + In more precise terms, + in A1 we would change +\begin_inset Formula $\mathtt{Q}\gets\mathtt{LOC(AVAIL)}$ +\end_inset + + to +\begin_inset Formula $\mathtt{Q}\gets\mathtt{AVAIL}$ +\end_inset + +, + in A4 we would add +\begin_inset Formula $\mathtt{AVAIL}\gets\mathtt{Q}$ +\end_inset + +, + and the test in A2 would be +\begin_inset Formula $\mathtt{Q}=\mathtt{AVAIL}$ +\end_inset + + rather than +\begin_inset Formula $\mathtt{P}=\Lambda$ +\end_inset + + and it would be skipped in the first iteration. + Other algorithms that deal with memory management might need to be modified as well to avoid invalidating +\family typewriter +AVAIL +\family default +. + For example, + algorithm B would have to deal with this when freeing the block just before it. +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +exerc7[10] +\end_layout + +\end_inset + +The example (1) shows that first-fit can sometimes be definitely superior to best-fit. + Give a similar example that shows a case where best-fit is superior to first-fit. +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +answer +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\align center +\begin_inset Tabular + + + + + + + +\begin_inset Text + +\begin_layout Plain Layout + +\emph on +memory +\begin_inset Newline newline +\end_inset + +request +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\emph on +available areas, +\begin_inset Newline newline +\end_inset + +first-fit +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout + +\emph on +available areas, +\begin_inset Newline newline +\end_inset + +best-fit +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Plain Layout +— + +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout +1300, + 1200 +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout +1300, + 1200 +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Plain Layout +1100 +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout +200, + 1200 +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout +1300, + 100 +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Plain Layout +250 +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout +200, + 950 +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout +1050, + 100 +\end_layout + +\end_inset + + + + +\begin_inset Text + +\begin_layout Plain Layout +1000 +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout +stuck +\end_layout + +\end_inset + + +\begin_inset Text + +\begin_layout Plain Layout +50, + 100 +\end_layout + +\end_inset + + + + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +rexerc12[20] +\end_layout + +\end_inset + +Modify Algorithm A so that it follows the boundary-tag conventions (7)–(9), + uses the modified step A4' described in the text, + and also incorporates the improvement of exercise 6. +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +answer +\end_layout + +\end_inset + + +\series bold +Algorithm A' +\series default + ( +\emph on +Next-fit method with boundary-tag conventions +\emph default +). + Let the heap be stored as in (7)–(9), + +\begin_inset Formula $c$ +\end_inset + + be as in step A4' in the text, + and let +\family typewriter +PTR +\family default + be a variable whose value persists among runs of this algorithm and which starts with the value +\family typewriter +AVAIL +\family default +. + (We could just get rid of the list head in +\family typewriter +LOC(AVAIL) +\family default + and use this +\family typewriter +Q +\family default + instead of +\family typewriter +AVAIL +\family default +, + but let's follow convention (9).) For this algorithm +\begin_inset Formula $\mathtt{N}$ +\end_inset + + is two more than the number of words we want to allocate. +\end_layout + +\begin_layout Enumerate +\begin_inset Argument item:1 +status open + +\begin_layout Plain Layout + +\series bold +A1. +\end_layout + +\end_inset + +[Initialize.] Set +\begin_inset Formula $\mathtt{P}\gets\mathtt{PTR}$ +\end_inset + +. +\end_layout + +\begin_layout Enumerate +\begin_inset Argument item:1 +status open + +\begin_layout Plain Layout + +\series bold +A2. +\end_layout + +\end_inset + + +\begin_inset CommandInset label +LatexCommand label +name "enu:e2512b" + +\end_inset + +[Is +\family typewriter +SIZE +\family default + enough?] If +\begin_inset Formula $\mathtt{SIZE(P)}\geq\mathtt{N}$ +\end_inset + +, + go to +\begin_inset CommandInset ref +LatexCommand ref +reference "enu:e2512d" +plural "false" +caps "false" +noprefix "false" +nolink "false" + +\end_inset + +. +\end_layout + +\begin_layout Enumerate +\begin_inset Argument item:1 +status open + +\begin_layout Plain Layout + +\series bold +A3. +\end_layout + +\end_inset + +[End of list?] Set +\begin_inset Formula $\mathtt{P}\gets\mathtt{LINK(P)}$ +\end_inset + +. + If +\begin_inset Formula $\mathtt{P}=\mathtt{PTR}$ +\end_inset + +, + the algorithm terminates unsuccessfully; + there is no room for a block of +\family typewriter +N +\family default + consecutive blocks. + Otherwise go back to +\begin_inset CommandInset ref +LatexCommand ref +reference "enu:e2512b" +plural "false" +caps "false" +noprefix "false" +nolink "false" + +\end_inset + +. +\end_layout + +\begin_layout Enumerate +\begin_inset Argument item:1 +status open + +\begin_layout Plain Layout + +\series bold +A4. +\end_layout + +\end_inset + + +\begin_inset CommandInset label +LatexCommand label +name "enu:e2512d" + +\end_inset + +[Reserve +\family typewriter +N +\family default +.] Set +\begin_inset Formula $\mathtt{K}\gets\mathtt{SIZE(P)}-\mathtt{N}$ +\end_inset + +, + but if +\begin_inset Formula $\mathtt{K}