Notes on Project 2
-
Formatting, variable/function/method naming, and comments were
greatly improved.
-
Most groups had working virtual->physical mappings, page
swappings, and forking. These kernels responded well to
multiple, large processes running in a small main memory.
-
Most kernels broke under stress, but usually only under
reasonably severe stress (many processes, some forking,
forcing some page swapping, and a memory with fewer page
frames than the TLB had mappings.) That's not bad.
-
There were frequent allocation/deallocation mistakes. These
mistakes, unfortunately, tended not to cause crashes on the CS
Suns. Rather, in spite of the errant pointers and prematurely
deleted objects, the programs continued to run correct for
most inputs. These errors turned up when run on different
systems. When you see the comments regarding your errors, be
sure you understand what they really mean.
-
There was an overuse of hash tables in many places. Nobody
lost credit for it, but hash tables are not an ``inexpensive''
data structure, in that they tend to require more space than
other data structures. People used them as backing stores,
and used complicated structures like a hash table of hash
tables. Such a structure will require large amounts of
memory, and aren't really appropriate for kernel programming.
-
There was a common confusion between (or misuse of) page
numbers and starting page addresses. Many groups
would use a mask to set the offset bits of an address to zero,
and then refer to it as a ``page number''. It is not a page
number. It is the address of the first byte on that page.
The page number would be obtained by shifting the virtual
address down by nine bits. There are only
223 different page numbers. Be sure that
you can see the difference between these two!
Last modified: Mon Nov 26 23:43:19 EST 2001