| RAS(9) | Kernel Developer's Manual | RAS(9) |
ras_lookup,
ras_fork, ras_purgeall
— restartable atomic sequences
#include
<sys/types.h>
#include <sys/proc.h>
#include <sys/ras.h>
void *
ras_lookup(struct
proc *p, void
*addr);
int
ras_fork(struct
proc *p1, struct proc
*p2);
int
ras_purgeall(struct
proc *p);
Restartable atomic sequences are user code sequences which are guaranteed to execute without preemption. This property is assured by checking the set of restartable atomic sequences registered for a process during cpu_switchto(9). If a process is found to have been preempted during a restartable sequence, then its execution is rolled-back to the start of the sequence by resetting its program counter saved in its process control block (PCB).
The RAS functionality is provided by a combination of the
machine-independent routines discussed in this page and a machine-dependent
component in
cpu_switchto(9). A port
which supports restartable atomic sequences will define
__HAVE_RAS in
<machine/types.h> for
machine-independent code to conditionally provide RAS support.
A complicated side-effect of restartable atomic sequences is their interaction with the machine-dependent ptrace(2) support. Specifically, single-step traps and/or the emulation of single-stepping must carefully consider the effect on restartable atomic sequences. A general solution is to ignore these traps or disable them within restartable atomic sequences.
The functions which operate on restartable atomic sequences are:
ras_lookup(p,
addr)ras_fork(p1,
p2)ras_purgeall(p)The RAS framework itself is implemented within the file
sys/kern/kern_ras.c. Data structures and function
prototypes for the framework are located in
<sys/ras.h>.
Machine-dependent portions are implemented within
cpu_switchto(9) in the
machine-dependent file
sys/arch/<arch>/<arch>/locore.S.
rasctl(2), cpu_switchto(9), fork1(9)
Gregory McGarry, An Implementation of User-level Restartable Atomic Sequences on the NetBSD Operating System, Proceedings of the FREENIX Track: 2003 USENIX Annual Technical Conference, USENIX Association, http://www.usenix.org/publications/library/proceedings/usenix03/tech/freenix03/full_papers/mcgarry/mcgarry.pdf, 311-322, June 9-14, 2003.
The RAS functionality first appeared in NetBSD 2.0.
| April 17, 2010 | NetBSD 11.0 |