Extension of the Banker's algorithm for resource allocation in a distributed operating system
Information Processing Letters
Compilers: principles, techniques, and tools
Compilers: principles, techniques, and tools
An operating systems vade mecum; (2nd ed.)
An operating systems vade mecum; (2nd ed.)
An extensible programming environment for Modula-3
SDE 4 Proceedings of the fourth ACM SIGSOFT symposium on Software development environments
IEEE Transactions on Software Engineering
Concurrent programming: principles and practice
Concurrent programming: principles and practice
Modula-3
Systems programming with Modula-3
Systems programming with Modula-3
Developing and integrating ProDAG in the Arcadia environment
SDE 5 Proceedings of the fifth ACM SIGSOFT symposium on Software development environments
A method for implementing lock-free shared-data structures
SPAA '93 Proceedings of the fifth annual ACM symposium on Parallel algorithms and architectures
A fair Banker's Algorithm for read and write locks
Information Processing Letters
Some Deadlock Properties of Computer Systems
ACM Computing Surveys (CSUR)
Guardians and Actions: Linguistic Support for Robust, Distributed Programs
ACM Transactions on Programming Languages and Systems (TOPLAS)
Synchronization with eventcounts and sequencers
Communications of the ACM
The notions of consistency and predicate locks in a database system
Communications of the ACM
Monitors: an operating system structuring concept
Communications of the ACM
Automatically Mapping Sequential Objects to Concurrent Objects: The Mutual Exclusion Problem
ICPP '93 Proceedings of the 1993 International Conference on Parallel Processing - Volume 02
Hi-index | 0.02 |
Concurrent servers in a multiprocessor system, concurrent graphical user interfaces, and operating systems containing concurrent objects are fairer on a uniprocessor and can yield better performance on a multiprocessor than their sequential counterparts. However, concurrent servers are more difficult to implement correctly. Our contribution is a tool that generates correct concurrent servers from correct sequential ones. The only restriction on the sequential servers is that they must be programmed in a slightly restricted subset of Modula-3 in the Generic Server Format using the Defensive Object Model. Our tool uses well known static analysis techniques from compiler theory to insert locks that are guaranteed to be free from deadlock. It uses information obtained from exception handling statements to insert synchronization primitives. The tool produces very readable Modula-3 programs that are subsequently compiled using standard Modula-3 compilers. In addition to describing the rationale, design, and implementation of our tool, this paper presents performance comparisons between hand-tuned and automatically generated queues and search structures. Moreover, we report on the lessons that were learned from automatically generating various concurrent servers.