Transactional memory service must keep track of the database changes to
ensure ACID property. In user-space transactional memory
implementations, writes to the database are usually detected by the
MMU protection and upcalls from the operating system (SIGSEGV
signals in UNIX). However, such implementations incur high
overhead [thekkath], as shown in Figure
1 (a). When a page fault occurs, the kernel
performs a full context switch into the signal handler. The signal
handler calls the server to bring the faulted page into client memory.
It then issues a system call, such as mprotect
, to change the
MMU protection and makes a context switch back to the faulted context.
The whole process requires at least eight user-kernel boundary crossings and
four context switches.