#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
|
\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}