{nonref}Debugging Programs that Manipulate Nodes
We suggest here running the program in a substitution regime {(p3,sub-regime)} with synthetic nodes {(p3,synnodes)}. The maker of these nodes is in communication with the debugger and can display the inner workings of the nodes.
We decide to solve the conflict problem by aborting and restarting those transactions that take so long that some of the data that they read changes before the end of the transaction. This strategy shows thru to the callers of the transactions.
In Gnosis terms imagine a set of domains each designed to use read access to some constant data and read-write access to S.
A relation R is kept between the transactions and pages of S. When transaction t reads page p, tRp is made to hold. When a transaction t finishes all tRp's cease holding. When page p is modified, all of the transactions t such that tRp except the one that did the modification are terminated.
Another relation W is kept between the transactions and pages. When transaction t writes page p tWp is made to be true. When a transaction reads a page p then all incomplete transactions t such that tWp are terminated. {So hurry and finish after you have changed pages.} In this case the page is put back to the state it was in at the beginning of ther terminated transaction.
Note that records of terminated or completed transactions need not be kept.
Actions that would terminate transactions can be delayed if a suitable heuristic is available. Indefinite such delays would correspond to traditional interlocks and can cause deadlocks unless specifically avoided.
The relations R and W can be kept by a committee comprised of segment keepers for each of the transactions that manage a segment devoted to that transaction which holds a subset of the pages of S. These keepers must communicate with each other and collectively have the authority to terminate the transactions.
With different hardware this scheme could be made far more efficient than is possible with the 370 architecture.
Suppose that we have a domain that writes into a segment formatted as an array of 32 bit binary integers and that we have a program that needs read access to an array of 4 byte packed decimal integers with the values corresponding to the first array. A mutual segment keeper may arrange that for each page position, both pages are read-only, or that the first page is read-write while the second page is undefined. Faults for the first segment cause a page from the second segment to be undefined and faults from the second segment cause the page of binary integers to be converted to decimal.
These are special cases of tactics to make sure that information is up-to-date.
See (change-note) for related dilemmas.