servers should be concurrent. i.e., should handle messages from multiple clients/servers without blocking. note that this gives rise to a local ME problem in accessing the request queue.
multiple clients can connect to a single server.
it's not necessary to have a name server. the name service can be provided through a common file. the file may also store information like server id, client id and the group information (may vary with different algorithms.
the client should contact a single server. the server should contact the other servers according to the algorithm. the user running the client program should have the liberty of choosing which server to contact.
on getting access to the CS, the client can use the UNIX commands more/less to read the file or vi to edit the file.
it can be assumed that the client does not behave maliciously.
it can be assumed that the servers and clients are up all the time. if anything crashes, you are allowed to restart everything.
the servers and clients should be robust. i.e., not crash during the normal course of operation.
the readers/writers problem has to be solved. i.e., readers should be able to access the critical section simultaneously.
it's very important to print diagnostic messages to notify events like message arrival and other events specific to the algorithm for the grader to verify that the algorithm is actually works. the client should not get access to the critical section magically. e.g., if a server gets a token, a message should be printed.
you're algorithm should be fair and should not cause starvation.
timeout values, and other variables, like which server to connect to, should be configurable either as command line arguments or as parameters in a configuration file.
you've to define metrics to evaluate your algorithm and argue why you're algorithm is good. write a small report on this.
extra credit (5 %): interworking with other groups. i.e. i should be able to use X's client & Y's server, etc.
extra credit (10 %): implementation of a more complex/efficient algorithm (raymond's or maekawa's). you've to argue why it's a better algorithm using the metrics you've defined.
remember that there are points for efficient and sensible design, good user interfaces, etc. even if you meet all the requirements, you may lose some points here.