CS245A LAB #3 Due by 5pm, Tuesday, March 10, 1998. 100pts |
Input
Each line of the input is a request to the lock manager. Each request may contain a transaction ID (transID), which is an ASCII representation of a number between 0 and 255; and an object name (object) which is an alphanumeric string of at most 10 characters. Following are the possible requests and their formats:
Output
The output for each request will start with the request being considered, followed by a colon and one or more messages. In the following table we present a list of possible messages for each request. You can change the format of the messages or add extra messages if you want.
Request |
Possible Messages |
---|---|
ST |
Transaction started |
SL |
Lock granted |
XL |
Lock granted
|
EN |
Transaction ended |
UO |
Lock released |
You may assume that the schedule that is sent to the lock manager is legal and well-formed. Also, no requests (except EN) will be made for a transaction that it is waiting for a lock.
Sample Input and Output
Input |
Output |
---|---|
ST1 |
ST 1 : Transaction 1 started |
ST 2 |
ST 2 : Transaction 2 started |
SL 1 A |
SL 1 A: Lock granted |
XL 2 A |
XL 2 A: Waiting for lock (S-lock held by: 1) |
UO 1 A |
UO 1 A: Lock released |
XL 1 B |
XL 1 B: Lock granted |
XL 2 B |
XL 2 B: Waiting for lock (X-lock held by: 1) |
XL 1 A |
XL 1 A: Waiting for lock (X-lock held by: 2) |
EN 1 |
EN 1 : Transaction 1 ended |
UO 2 A |
UO 2 A: Lock released |
EN 2 |
EN 2 : Transaction 2 ended |
For your program, you need to implement a lock table. You can use the implementation outlined in class or make your own design. In any case, your lock table will reside in memory and will contain information for every outstanding lock in the system. The minimum information that you should maintain is: which transactions have the lock and in which mode; as well as which transactions are waiting for the lock.
For extra credit, after processing a request for an exclusive or share lock your program can report any deadlocks (it does not need to prevent or solve them). For example, in the sample input above, a deadlock is created after processing
XL 1 A ; at that moment, your program can print a message like ``Deadlock detected (involving transactions: 1 and 2)''. For your deadlock detection algorithm, do not reinvent the wheel: use an algorithm that detects cycles in a graph from a textbook.
Documentation and Grading
Each student is expected to submit a 1 page description of your design and algorithms in a plain text file called lockmgr.doc, and to include comments in the code. The grade of your program will be based on three aspects: Functionality - that the program correctly implements the specifications. Quality - elegant design and modularity. Documentation - as described above.