TM based dietlibc system library is used and adopted in a way that programmers could use it in TM application without changing their programming models and habits. The API of the library remained the same, with the only difference that the inner implementation could be chosen between internally lock based and TM based. It was not always possible to replace locks with transactions, but the statical separation of locks and transactions provides no interaction with each other.
For some cases where system calls occur, an idea is proposed to detect conflicts for system calls without modifying the kernel. The idea is to keep a local user-space copy of the data passed to the kernel in the system call. Those copies exist in the user space, so the conflicts are automatically detected and resolved, and on an abort, they are used to revert the state of the operating system data structures. Unfortunately, some system calls change the memory state that cannot be reverted if the transaction aborts. Those transactions have to be executed in the serial mode which always guarantees each transaction to commit without conflicting with other transactions.
We evaluated our work with several micro-benchmarks and the Red-black tree benchmark.