The objective of this project is that you develop a (simplified) storage manager that cooperates
a Concurrency Control Module (CCM) to offer a server; the latter offers serializable accessing
to disk-resident data-objects. Such data objects are expected to be concurrently accessed from
multiple simultaneously running client programs (that can be realized as processes) simply called
In the context of the server:
• The CCM should offer serializable accesses to data-objects based on the 2-Phase Locking
• Your CCM should preferably function atop a simplified buffer area that can host up to a
maximum (finite) number objects. While objects are in memory, they stay there for some
time until they receive “processing”.
• The storage manager should be able to
1. Store an (ideally infinite) number of data objects.
2. Access (fetch) from the disk to the buffer area –with the help of CCM– any of the stored
3. Have an indexing structure that allows the variable-length data-objects to be accessed
4. Delete a sequence of objects, should they are not in use by any client program
5. Provide search-by-content and/or listing capabilities for the stored objects.
6. Be able to handle a few multiple type of objects (such as text and binary). Objects have
variable length and they can be identified either by unique ObjectIDs or logical names.
7. Provide persistent storage between sessions of the storage manager.
The overall operation and coordination of the CCM module and the storage manager should be
organized as a multi-threaded program that accepts and fulfills requests from the multiple simultaneously
Client Functionality - Server Organization:
Clients simply generate the traffic of data object. The multi-threaded server retrieves of behalf of
clients data objects from the disk.