NOTE: These notes are by Allan Gottlieb, and are reproduced here, with superficial modifications, with his permission. "I" in this text generally refers to Prof. Gottlieb, except in regards to administrative matters.

================ Start Lecture #10 (Feb. 27)

#### MVT Introduces the ``Placement Question'', which hole (partition) to choose

• Best fit, worst fit, first fit, circular first fit, quick fit, Buddy
• Best fit doesn't waste big holes, but does leave slivers and is expensive to run.
• Worst fit avoids slivers, but eliminates all big holes so a big job will require compaction. Even more expensive than best fit (best fit stops if it finds a perfect fit).
• Quick fit keeps lists of some common sizes (but has other problems, see Tanenbaum).
• Buddy system (Tanenbaum, p. 721)
• Round request to next highest power of two (causes internal fragmentation).
• Look in list of blocks this size (as with quick fit).
• If list empty, go higher and split into buddies.
• When returning coalesce with buddy.
• Do splitting and coalescing recursively, i.e. keep coalescing until can't and keep splitting until successful.
• See Tanenbaum for more details (or an algorithms book).
• A current favorite is circular first fit (also know as next fit)
• Use the first hole that is big enough (first fit) but start looking where you left off last time.
• Doesn't waste time constantly trying to use small holes that have failed before, but does tend to use many of the big holes, which can be a problem.

### 4.2.1: Memory Management with Bitmaps

Divide memory into blocks and associate a bit with each block, used to indicate if the corresponding block is free or allocated. To find a chunk of size N blocks need to find N consecutive bits indicating a free block.

The only design question is how much memory does one bit represent.

• Big: Serious internal fragmentation.
• Small: Many bits to store and process.

### 4.2.2: Memory Management with Linked Lists

• Each item on list gives the length and starting location of the corresponding region of memory and says whether it is a Hole or Process.
• The items on the list are not taken from the memory to be used by processes.
• Keep in order of starting address.

### Memory Management using Boundary Tags

• Use the same memory for list items as for processes
• Don't need an entry in linked list for blocks in use, just the avail blocks are linked.
• For the blocks currently in use, just need a hole/process bit at each end and the length. Keep this in the block itself.
• See Knuth, The Art of Computer Programming vol 1.

#### MVT also introduces the ``Replacement Question'', which victim to swap out.

We will study this question more when we discuss demand paging.

Considerations in choosing a victim

• Cannot replace a job that is pinned, i.e. whose memory is tied down. For example, if Direct Memory Access (DMA) I/O is scheduled for this process, the job is pinned until the DMA is complete.
• Victim selection is a medium term scheduling decision
• Job that has been in a wait state for a long time is a good candidate.
• Often choose as a victim a job that has been in memory for a long time.
• Another point is how long should it stay swapped out.
• For demand paging, where swaping out a page is not as drastic as swapping out a job, choosing the victim is an important memory management decision and we shall study several policies,
NOTEs:
1. So far the schemes presented so far have had two properties:
1. Each job is stored contiguously in memory. That is, the job is contiguous in physical addresses.
2. Each job cannot use more memory than exists in the system. That is, the virtual addresses space cannot exceed the physical address space.

2. Tanenbaum now attacks the second item. I wish to do both and start with the first.

3. Tanenbaum (and most of the world) uses the term ``paging'' to mean what I (Gottlieb) call demand paging. This is unfortunate as it mixes together two concepts.
1. Paging (dicing the address space) to solve the placement problem and essentially eliminate external fragmentation.
2. Demand fetching, to permit the total memory requirements of all loaded jobs to exceed the size of physical memory.

4. Tanenbaum (and most of the world) uses the term virtual memory as a synonym for demand paging. Again I consider this unfortunate.
1. Demand paging is a fine term and is quite descriptive.
2. Virtual memory ``should'' be used in contrast with physical memory to describe any virtual to physical address translation.