Implementation - version 1 free is O(log n) (same as previous implementation) alloc is O(log n) (was O(n)) failed alloc is O(log n) (was O(n) for large value of n) i386 had 2 free-space trees: one for executable mappings one for non-executable mappings