aboutsummaryrefslogtreecommitdiff
path: root/2.5.lyx
diff options
context:
space:
mode:
authorJuan Marín Noguera <juan@mnpi.eu>2025-05-16 22:18:44 +0200
committerJuan Marín Noguera <juan@mnpi.eu>2025-05-16 22:18:44 +0200
commit4f670b750af5c11e1eac16d9cd8556455f89f46a (patch)
treee0f8d7b33df2727d89150f799ee8628821fda80a /2.5.lyx
parent16ccda6c459c0fd7ca2081e9d541124c28b0c556 (diff)
Changed layout for more manageable volumes
Diffstat (limited to '2.5.lyx')
-rw-r--r--2.5.lyx1706
1 files changed, 0 insertions, 1706 deletions
diff --git a/2.5.lyx b/2.5.lyx
deleted file mode 100644
index 11320d9..0000000
--- a/2.5.lyx
+++ /dev/null
@@ -1,1706 +0,0 @@
-#LyX 2.4 created this file. For more info see https://www.lyx.org/
-\lyxformat 620
-\begin_document
-\begin_header
-\save_transient_properties true
-\origin unavailable
-\textclass book
-\begin_preamble
-\input defs
-\end_preamble
-\use_default_options true
-\maintain_unincluded_children no
-\language english
-\language_package default
-\inputencoding utf8
-\fontencoding auto
-\font_roman "default" "default"
-\font_sans "default" "default"
-\font_typewriter "default" "default"
-\font_math "auto" "auto"
-\font_default_family default
-\use_non_tex_fonts false
-\font_sc false
-\font_roman_osf false
-\font_sans_osf false
-\font_typewriter_osf false
-\font_sf_scale 100 100
-\font_tt_scale 100 100
-\use_microtype false
-\use_dash_ligatures true
-\graphics default
-\default_output_format default
-\output_sync 0
-\bibtex_command default
-\index_command default
-\float_placement class
-\float_alignment class
-\paperfontsize default
-\spacing single
-\use_hyperref false
-\papersize default
-\use_geometry false
-\use_package amsmath 1
-\use_package amssymb 1
-\use_package cancel 1
-\use_package esint 1
-\use_package mathdots 1
-\use_package mathtools 1
-\use_package mhchem 1
-\use_package stackrel 1
-\use_package stmaryrd 1
-\use_package undertilde 1
-\cite_engine basic
-\cite_engine_type default
-\biblio_style plain
-\use_bibtopic false
-\use_indices false
-\paperorientation portrait
-\suppress_date false
-\justification true
-\use_refstyle 1
-\use_formatted_ref 0
-\use_minted 0
-\use_lineno 0
-\index Index
-\shortcut idx
-\color #008000
-\end_index
-\secnumdepth 3
-\tocdepth 3
-\paragraph_separation indent
-\paragraph_indentation default
-\is_math_indent 0
-\math_numbering_side default
-\quotes_style english
-\dynamic_quotes 0
-\papercolumns 1
-\papersides 1
-\paperpagestyle default
-\tablestyle default
-\tracking_changes false
-\output_changes false
-\change_bars false
-\postpone_fragile_content false
-\html_math_output 0
-\html_css_as_file 0
-\html_be_strict false
-\docbook_table_output 0
-\docbook_mathml_prefix 1
-\end_header
-
-\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
-<lyxtabular version="3" rows="5" columns="3">
-<features tabularvalignment="middle">
-<column alignment="center" valignment="top">
-<column alignment="center" valignment="top">
-<column alignment="center" valignment="top">
-<row>
-<cell alignment="center" valignment="top" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\emph on
-memory
-\begin_inset Newline newline
-\end_inset
-
-request
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\emph on
-available areas,
-\begin_inset Newline newline
-\end_inset
-
-first-fit
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-
-\emph on
-available areas,
-\begin_inset Newline newline
-\end_inset
-
-best-fit
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-—
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-1300,
- 1200
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-1300,
- 1200
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-1100
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-200,
- 1200
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-1300,
- 100
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-250
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-200,
- 950
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-1050,
- 100
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-1000
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-stuck
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-50,
- 100
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\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}<c$
-\end_inset
-
-,
- set
-\begin_inset Formula $\mathtt{K}\gets0$
-\end_inset
-
-.
- Then,
- set
-\begin_inset Formula $\mathtt{L}\gets\mathtt{P}+\mathtt{K}$
-\end_inset
-
- and
-\begin_inset Formula $\mathtt{TAG(L)}\gets\mathtt{TAG(P+SIZE(P)}-1\mathtt{)}\gets\text{``\ensuremath{+}''}$
-\end_inset
-
-.
- Finally,
- if
-\begin_inset Formula $\mathtt{K}=0$
-\end_inset
-
-,
- set
-\begin_inset Formula $\mathtt{LINK(LINK(P}+1\mathtt{))}\gets\mathtt{LINK(P)}$
-\end_inset
-
- and
-\begin_inset Formula $\mathtt{LINK(LINK(P)}+1\mathtt{)}=\mathtt{LINK(P}+1\mathtt{)}$
-\end_inset
-
-;
- otherwise set
-\begin_inset Formula $\mathtt{SIZE(L)}\gets\mathtt{N}$
-\end_inset
-
-,
-
-\begin_inset Formula $\mathtt{SIZE(P)}\gets\mathtt{SIZE(L}-1\mathtt{)}\gets\mathtt{K}$
-\end_inset
-
-,
- and
-\begin_inset Formula $\mathtt{TAG(L}-1\mathtt{)}\gets\text{``\ensuremath{-}''}$
-\end_inset
-
-.
- The result is an allocation of size
-\begin_inset Formula $\mathtt{SIZE(L)}-2\geq\mathtt{N}-2$
-\end_inset
-
- that spans from
-\begin_inset Formula $\mathtt{L}+1$
-\end_inset
-
- to
-\begin_inset Formula $\mathtt{L}+\mathtt{SIZE(L)}-1$
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Standard
-\begin_inset ERT
-status open
-
-\begin_layout Plain Layout
-
-
-\backslash
-rexerc15[24]
-\end_layout
-
-\end_inset
-
-Show how to speed up Algorithm C at the expense of a slightly longer program,
- by not changing any more links than absolutely necessary in each of four cases depending on whether
-\begin_inset Formula $\mathtt{TAG(P0}-1\mathtt{)}$
-\end_inset
-
-,
-
-\begin_inset Formula $\mathtt{TAG(P0}+\mathtt{SIZE(P0))}$
-\end_inset
-
- are plus or minus.
-\end_layout
-
-\begin_layout Standard
-\begin_inset ERT
-status open
-
-\begin_layout Plain Layout
-
-
-\backslash
-answer
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Enumerate
-[Initialize.] Set
-\begin_inset Formula $\mathtt{S}\gets\mathtt{SIZE(P0)}$
-\end_inset
-
- and
-\begin_inset Formula $\mathtt{PU}\gets\mathtt{P0}+\mathtt{S}$
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Enumerate
-[Check lower bound.] If
-\begin_inset Formula $\mathtt{TAG(P0}-1\mathtt{)}=\text{``\ensuremath{+}''}$
-\end_inset
-
-,
- go to step
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "enu:e2515e"
-plural "false"
-caps "false"
-noprefix "false"
-nolink "false"
-
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Enumerate
-[Move to lower area.] Set
-\begin_inset Formula $\mathtt{S}\gets\mathtt{S}+\mathtt{SIZE(P0}-1\mathtt{)}$
-\end_inset
-
- and
-\begin_inset Formula $\mathtt{P0}\gets\mathtt{P0}-\mathtt{SIZE(P0}-1\mathtt{)}$
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Enumerate
-[Remove upper area.] If
-\begin_inset Formula $\mathtt{TAG(PU)}=\text{``\ensuremath{-}''}$
-\end_inset
-
-,
- set
-\begin_inset Formula $\mathtt{P1}\gets\mathtt{LINK(PU)}$
-\end_inset
-
-,
-
-\begin_inset Formula $\mathtt{P2}\gets\mathtt{LINK(PU}+1\mathtt{)}$
-\end_inset
-
-,
-
-\begin_inset Formula $\mathtt{LINK(P1}+1\mathtt{)}\gets\mathtt{P2}$
-\end_inset
-
-,
-
-\begin_inset Formula $\mathtt{LINK(P2}\mathtt{)}\gets\mathtt{P1}$
-\end_inset
-
-,
- and
-\begin_inset Formula $\mathtt{S}\gets\mathtt{S}+\mathtt{SIZE(PU)}$
-\end_inset
-
-.
- Go to step
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "enu:e2515g"
-plural "false"
-caps "false"
-noprefix "false"
-nolink "false"
-
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Enumerate
-\begin_inset CommandInset label
-LatexCommand label
-name "enu:e2515e"
-
-\end_inset
-
-[Allocate.] If
-\begin_inset Formula $\mathtt{TAG(PU)}=\text{``\ensuremath{+}''}$
-\end_inset
-
-,
- set
-\begin_inset Formula $\mathtt{LINK(P0)}\gets\mathtt{AVAIL}$
-\end_inset
-
-,
-
-\begin_inset Formula $\mathtt{LINK(P0}+1\mathtt{)}\gets\mathtt{LOC(AVAIL)}$
-\end_inset
-
-,
-
-\begin_inset Formula $\mathtt{LINK(AVAIL}+1\mathtt{)}\gets\mathtt{P0}$
-\end_inset
-
-,
- and
-\begin_inset Formula $\mathtt{AVAIL}\gets\mathtt{P0}$
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Enumerate
-[Merge upper area.] Otherwise let
-\begin_inset Formula $\mathtt{P1}\gets\mathtt{LINK(P0)}\gets\mathtt{LINK(PU)}$
-\end_inset
-
-,
-
-\begin_inset Formula $\mathtt{P2}\gets\mathtt{LINK(P0}+1\mathtt{)}\gets\mathtt{LINK(PU}+1\mathtt{)}$
-\end_inset
-
-,
-
-\begin_inset Formula $\mathtt{LINK(P1}+1\mathtt{)}\gets\mathtt{LINK(P2)}\gets\mathtt{P0}$
-\end_inset
-
-,
- and
-\begin_inset Formula $\mathtt{S}\gets\mathtt{SIZE(P0)}+\mathtt{SIZE(PU)}$
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Enumerate
-\begin_inset CommandInset label
-LatexCommand label
-name "enu:e2515g"
-
-\end_inset
-
-[Update size.] Set
-\begin_inset Formula $\mathtt{TAG(P0)}\gets\mathtt{TAG(P0}+\mathtt{S}-1\mathtt{)}\gets\text{``\ensuremath{-}''}$
-\end_inset
-
- and
-\begin_inset Formula $\mathtt{SIZE(P0)}\gets\mathtt{SIZE(P0}+\mathtt{S}-1\mathtt{)}\gets\mathtt{S}$
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Standard
-\begin_inset ERT
-status open
-
-\begin_layout Plain Layout
-
-
-\backslash
-exerc17[10]
-\end_layout
-
-\end_inset
-
-What should the contents of
-\begin_inset Formula $\mathtt{LOC(AVAIL)}$
-\end_inset
-
- and
-\begin_inset Formula $\mathtt{LOC(AVAIL)}+1$
-\end_inset
-
- be in (9) when there are no available blocks present?
-\end_layout
-
-\begin_layout Standard
-\begin_inset ERT
-status open
-
-\begin_layout Plain Layout
-
-
-\backslash
-answer
-\end_layout
-
-\end_inset
-
-They should both point to
-\begin_inset Formula $\mathtt{LOC(AVAIL)}$
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Standard
-\begin_inset ERT
-status open
-
-\begin_layout Plain Layout
-
-
-\backslash
-rexerc18[20]
-\end_layout
-
-\end_inset
-
-Figures 42 and 43 were obtained using the same data,
- and essentially the same algorithms (Algorithms A and B),
- except that Fig.
- 43 was prepared by modifying Algorithm A to choose best-fit instead of first-fit.
- Why did this cause Fig.
- 42 to have a large available area in the
-\emph on
-higher
-\emph default
- locations of memory,
- while in Fig.
- 43 there is a large available area in the
-\emph on
-lower
-\emph default
- locations?
-\end_layout
-
-\begin_layout Standard
-\begin_inset ERT
-status open
-
-\begin_layout Plain Layout
-
-
-\backslash
-answer
-\end_layout
-
-\end_inset
-
-Both algorithms allocate at the end of the block of free memory that they choose,
- and in the beginning,
- both will allocate from higher to lower locations,
- leaving a large area at the end.
-
-\end_layout
-
-\begin_layout Standard
-However,
- as soon as some of the areas allocated are freed,
- the best fit method will tend to use those newly freed areas from the higher locations since they will tend to be smaller,
- whereas the first fit method will prefer to allocate in the large lower area.
-
-\end_layout
-
-\begin_layout Standard
-Eventually the first-fit method fills up the large area and starts allocating at other areas in the lower part,
- leaving the higher locations mostly free as the first chunks are freed,
- whereas the best fit method continues to avoid filling up this large area.
-\end_layout
-
-\begin_layout Standard
-Note that this works because most allocations have a limited lifetime;
- in other algorithms it might be the case that some of the first allocations are never freed until the end of the algorithm while many other chunks appear and disappear quickly.
- In this case,
- the first fit method would still show some allocations in the higher locations,
- although more sparse than those in lower locations.
-\end_layout
-
-\begin_layout Standard
-\begin_inset ERT
-status open
-
-\begin_layout Plain Layout
-
-
-\backslash
-rexerc19[24]
-\end_layout
-
-\end_inset
-
-Suppose that blocks of memory have the form of (7),
- but without the
-\family typewriter
-TAG
-\family default
- or
-\family typewriter
-SIZE
-\family default
- fields required in the last word of the block.
- Suppose further that the following simple algorithm is being used to make a reserved block free again:
-
-\begin_inset Formula $\mathtt{Q}\gets\mathtt{AVAIL}$
-\end_inset
-
-,
-
-\begin_inset Formula $\mathtt{LINK(P0)}\gets\mathtt{Q}$
-\end_inset
-
-,
-
-\begin_inset Formula $\mathtt{LINK(P0}+1\mathtt{)}\gets\mathtt{LOC(AVAIL)}$
-\end_inset
-
-,
-
-\begin_inset Formula $\mathtt{LINK(Q}+1\mathtt{)}\gets\mathtt{P0}$
-\end_inset
-
-,
-
-\begin_inset Formula $\mathtt{AVAIL}\gets\mathtt{P0}$
-\end_inset
-
-,
-
-\begin_inset Formula $\mathtt{TAG(P0)}\gets\text{``\ensuremath{-}''}$
-\end_inset
-
-.
- (This algorithm does nothing about collapsing adjacent areas together.)
-\end_layout
-
-\begin_layout Standard
-Design a reservation algorithm,
- similar to Algorithm A,
- that does the necessary collapsing of adjacent free blocks while searching the
-\family typewriter
-AVAIL
-\family default
- list,
- and at the same time avoids any unnecessary fragmentation of memory as in (2),
- (3),
- and (4).
-\end_layout
-
-\begin_layout Standard
-\begin_inset ERT
-status open
-
-\begin_layout Plain Layout
-
-
-\backslash
-answer
-\end_layout
-
-\end_inset
-
-The following algorithm reserves a block of size
-\begin_inset Formula $\mathtt{N}\geq2$
-\end_inset
-
- in the first available area while collapsing adjacent free blocks to find such area.
- In order to avoid unnecessary fragmentation,
- it allocates in the beginning of the block that is found rather than in the end.
-\end_layout
-
-\begin_layout Enumerate
-[Initialize.] Set
-\begin_inset Formula $\mathtt{P}\gets\mathtt{AVAIL}$
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Enumerate
-\begin_inset CommandInset label
-LatexCommand label
-name "enu:e2519b"
-
-\end_inset
-
-[Collapse free blocks.] Let
-\begin_inset Formula $\mathtt{PU}\gets\mathtt{P}+\mathtt{SIZE(P)}$
-\end_inset
-
-.
- If
-\begin_inset Formula $\mathtt{TAG(PU)}=\text{``\ensuremath{-}''}$
-\end_inset
-
-,
- then set
-\begin_inset Formula $\mathtt{P1}\gets\mathtt{LINK(PU)}$
-\end_inset
-
-,
-
-\begin_inset Formula $\mathtt{P2}\gets\mathtt{LINK(PU}+1\mathtt{)}$
-\end_inset
-
-,
-
-\begin_inset Formula $\mathtt{LINK(P1}+1\mathtt{)}\gets\mathtt{P2}$
-\end_inset
-
-,
-
-\begin_inset Formula $\mathtt{LINK(P2)}\gets\mathtt{P1}$
-\end_inset
-
-,
-
-\begin_inset Formula $\mathtt{SIZE(P)}\gets\mathtt{SIZE(P)}+\mathtt{SIZE(PU)}$
-\end_inset
-
-,
- and repeat this step.
-\end_layout
-
-\begin_layout Enumerate
-[Do we have enough space?] If
-\begin_inset Formula $\mathtt{SIZE(P)}<\mathtt{N}$
-\end_inset
-
-,
- go to step
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "enu:e2519e"
-plural "false"
-caps "false"
-noprefix "false"
-nolink "false"
-
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Enumerate
-[Advance.] Set
-\begin_inset Formula $\mathtt{P}\gets\mathtt{LINK(P)}$
-\end_inset
-
-.
- If
-\begin_inset Formula $\mathtt{P}=\mathtt{LOC(AVAIL)}$
-\end_inset
-
-,
- terminate unsuccessfully;
- otherwise go to step
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "enu:e2519b"
-plural "false"
-caps "false"
-noprefix "false"
-nolink "false"
-
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Enumerate
-\begin_inset CommandInset label
-LatexCommand label
-name "enu:e2519e"
-
-\end_inset
-
-[Reserve block.] Set
-\begin_inset Formula $\mathtt{P1}\gets\mathtt{LINK(P)}$
-\end_inset
-
-,
-
-\begin_inset Formula $\mathtt{P2}\gets\mathtt{LINK(P}+1\mathtt{)}$
-\end_inset
-
-,
-
-\begin_inset Formula $\mathtt{LINK(P1}+1\mathtt{)}\gets\mathtt{P2}$
-\end_inset
-
-,
-
-\begin_inset Formula $\mathtt{LINK(P2)}\gets\mathtt{P1}$
-\end_inset
-
-,
- and
-\begin_inset Formula $\mathtt{TAG(P)}\gets\text{``}+''$
-\end_inset
-
-.
-
-\begin_inset Formula $\mathtt{PF}\gets\mathtt{P+N}$
-\end_inset
-
-,
-\end_layout
-
-\begin_layout Enumerate
-[Reclaim extra space.] Let
-\begin_inset Formula $\mathtt{K}\gets\mathtt{SIZE(P)}-\mathtt{N}$
-\end_inset
-
- and
-\begin_inset Formula $\mathtt{PU}\gets\mathtt{P}+\mathtt{SIZE(P)}$
-\end_inset
-
-.
- If
-\begin_inset Formula $\mathtt{K}=0$
-\end_inset
-
-,
- or
-\begin_inset Formula $\mathtt{K}=1$
-\end_inset
-
- and
-\begin_inset Formula $\mathtt{TAG(P1)}=\text{``\ensuremath{+}''}$
-\end_inset
-
-,
- then terminate the algorithm.
- Otherwise,
- set
-\begin_inset Formula $\mathtt{P1}\gets\mathtt{AVAIL}$
-\end_inset
-
- and
-\begin_inset Formula $\mathtt{P2}\gets\mathtt{LOC(AVAIL)}$
-\end_inset
-
- if
-\begin_inset Formula $\mathtt{TAG(PU)}=\text{``\ensuremath{+}''}$
-\end_inset
-
-,
-
-\begin_inset Formula $\mathtt{P1}\gets\mathtt{LINK(PU)}$
-\end_inset
-
- and
-\begin_inset Formula $\mathtt{P2}\gets\mathtt{LINK(PU}+1\mathtt{)}$
-\end_inset
-
- otherwise.
- Finally set
-\begin_inset Formula $\mathtt{LINK(P1}+1\mathtt{)}\gets\mathtt{LINK(P2)}\gets\mathtt{PF}\gets\mathtt{P}+\mathtt{N}$
-\end_inset
-
-,
-
-\begin_inset Formula $\mathtt{LINK(PF)}\gets\mathtt{P1}$
-\end_inset
-
-,
-
-\begin_inset Formula $\mathtt{LINK(PF}+1\mathtt{)}\gets\mathtt{P2}$
-\end_inset
-
-,
-
-\begin_inset Formula $\mathtt{SIZE(PF)}\gets\mathtt{K}$
-\end_inset
-
-,
-
-\begin_inset Formula $\mathtt{TAG(PF)}\gets\text{``\ensuremath{-}''}$
-\end_inset
-
-,
- and
-\begin_inset Formula $\mathtt{SIZE(P)}\gets\mathtt{N}$
-\end_inset
-
-.
- The resulting block is at position
-\begin_inset Formula $\mathtt{P}$
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Standard
-\begin_inset ERT
-status open
-
-\begin_layout Plain Layout
-
-
-\backslash
-exerc20[00]
-\end_layout
-
-\end_inset
-
-Why is it desirable to have the
-\begin_inset Formula $\mathtt{AVAIL[}k\mathtt{]}$
-\end_inset
-
- lists in the buddy system doubly linked instead of simply having straight linear lists?
-\end_layout
-
-\begin_layout Standard
-\begin_inset ERT
-status open
-
-\begin_layout Plain Layout
-
-
-\backslash
-answer
-\end_layout
-
-\end_inset
-
-To be able to remove arbitrary elements from the lists efficiently in step S2 of the liberation algorithm.
-\end_layout
-
-\begin_layout Standard
-\begin_inset Note Note
-status open
-
-\begin_layout Plain Layout
-TODO 22,
- 23,
- 25,
- 26,
- 36
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset ERT
-status open
-
-\begin_layout Plain Layout
-
-
-\backslash
-rexerc22[21]
-\end_layout
-
-\end_inset
-
-The text repeatedly states that the buddy system allows only blocks of size
-\begin_inset Formula $2^{k}$
-\end_inset
-
- to be used,
- and exercise 21 shows this can lead to a substantial increase in the storage required.
- But if an 11-word block is needed in connection with the buddy system,
- why couldn't we find a 16-word block and divide it into an 11-word piece together with two free blocks of sizes 4 and 1?
-\end_layout
-
-\begin_layout Standard
-\begin_inset ERT
-status open
-
-\begin_layout Plain Layout
-
-
-\backslash
-answer
-\end_layout
-
-\end_inset
-
-We could indeed modify the algorithms to work like this,
- although they would get quite complicated and slower (more blocks would have to be marked as reserved for the liberation algorithm to work).
-\end_layout
-
-\begin_layout Standard
-\begin_inset ERT
-status open
-
-\begin_layout Plain Layout
-
-
-\backslash
-exerc23[05]
-\end_layout
-
-\end_inset
-
-What is the binary address of the buddy of the block of size 4 whose binary address is 011011110000?
- What would it be if the block were of size 15 instead of 4?
-\end_layout
-
-\begin_layout Standard
-\begin_inset ERT
-status open
-
-\begin_layout Plain Layout
-
-
-\backslash
-answer
-\end_layout
-
-\end_inset
-
-011011110100 and 011011100000,
- respectively.
-\end_layout
-
-\begin_layout Standard
-\begin_inset ERT
-status open
-
-\begin_layout Plain Layout
-
-
-\backslash
-rexerc25[22]
-\end_layout
-
-\end_inset
-
-Criticize the following idea:
-
-\begin_inset Quotes eld
-\end_inset
-
-Dynamic storage allocation using the buddy system will never reserve a block of size
-\begin_inset Formula $2^{m}$
-\end_inset
-
- in practical situations (since this would fill the whole memory),
- and,
- in general,
- there is a maximum size
-\begin_inset Formula $2^{n}$
-\end_inset
-
- for which no blocks of greater size will ever be reserved.
- Therefore it is a waste of time to start with such large blocks available,
- and to combine buddies in Algorithm S when the combined block has a size larger than
-\begin_inset Formula $2^{n}$
-\end_inset
-
-.
-\begin_inset Quotes erd
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset ERT
-status open
-
-\begin_layout Plain Layout
-
-
-\backslash
-answer
-\end_layout
-
-\end_inset
-
-While this is correct when we actually know the program and the size of the allocations it can make is bounded for any valid input,
- there are many situations where this is not the case,
- for example when we are writing a library or when the size of some allocation depends on the input;
- then the program would spuriously fail for inputs that it could otherwise have processed at least in a some computer.
-\end_layout
-
-\begin_layout Standard
-\begin_inset ERT
-status open
-
-\begin_layout Plain Layout
-
-
-\backslash
-rexerc26[21]
-\end_layout
-
-\end_inset
-
-Explain how the buddy system could be used for dynamic storage allocation in memory locations 0 through
-\begin_inset Formula $\mathtt{M}-1$
-\end_inset
-
- even when
-\family typewriter
-M
-\family default
- does not have the form
-\begin_inset Formula $2^{m}$
-\end_inset
-
- as required in the text.
-\end_layout
-
-\begin_layout Standard
-\begin_inset ERT
-status open
-
-\begin_layout Plain Layout
-
-
-\backslash
-answer
-\end_layout
-
-\end_inset
-
-If
-\begin_inset Formula $m$
-\end_inset
-
- is an integer such that
-\begin_inset Formula $2^{m}\leq\mathtt{M}<2^{m+1}$
-\end_inset
-
-,
- the memory could be split into pieces of size
-\begin_inset Formula $2^{k}$
-\end_inset
-
-,
-
-\begin_inset Formula $0\leq k\leq m$
-\end_inset
-
-,
- no more than one piece of the same size.
- For example,
- for locations 0 to 3999,
- we would initially have one free area at 0 of size 2048,
- another one at 2048 of size 1024,
- another one at 3072 of size 512,
- another one at 3584 of size 256,
- another one at 3840 of size 128,
- and another one at 3968 of size 32.
-\end_layout
-
-\begin_layout Standard
-\begin_inset ERT
-status open
-
-\begin_layout Plain Layout
-
-
-\backslash
-rexerc36[20]
-\end_layout
-
-\end_inset
-
-A certain lunch counter in Hollywood,
- California,
- contains 23 seats in a row.
- Diners enter the shop in groups of one or two,
- and a glamorous hostess shows them where to sit.
- Prove that she will always be able to seat people immediately without splitting up any pairs,
- if no customer who comes alone is assigned to any of the seats numbered 2,
- 5,
- 8,
- ...,
- 20,
- provided that there never are more than 16 customers present at a time.
- (Pairs leave together.)
-\end_layout
-
-\begin_layout Standard
-\begin_inset ERT
-status open
-
-\begin_layout Plain Layout
-
-
-\backslash
-answer
-\end_layout
-
-\end_inset
-
-A single customer can always seat,
- and they can avoid the
-\begin_inset Quotes eld
-\end_inset
-
-forbidden
-\begin_inset Quotes erd
-\end_inset
-
- seats.
- Now,
- if a pair comes,
- there were at most 14 customers already there.
- If seats 22 and 23 are free,
- then we can sit the pair there.
- Otherwise there are at most 13 customers in the seats 1–21,
- so if we divide the seats in 7 groups of 3 (1–3,
- 4–6,
- etc.),
- at least one of these groups has no more than one seat taken,
- and it cannot be the middle one,
- so that group has two consecutive free seats where we can seat the pair.
-\end_layout
-
-\end_body
-\end_document