A method and system for allocating blocks of disk in persistent storage to
requesting threads. A primary data structure is provided for organizing
and categorizing blocks of disk space. In addition, a secondary data
structure is provided for maintaining a list of all active file system
processes and blocks of disk space used by those processes. Blocks of
disk space are assigned to pages. At such time as a thread may request
allocation of disk space, both data structures are reviewed to determine
if the requested disk space is available and to limit access of available
disk space to a single page of memory to a single thread at any one time.