minix/servers/is/dmp_rs.c
Cristiano Giuffrida 0164957abb Unified crash recovery and live update.
RS CHANGES:
- Crash recovery is now implemented like live update. Two instances are kept
side by side and the dead version is live updated into the new one. The endpoint
doesn't change and the failure is not exposed (by default) to other system
services.
- The new instance can be created reactively (when a crash is detected) or
proactively. In the latter case, RS can be instructed to keep a replica of
the system service to perform a hot swap when the service fails. The flag
SF_USE_REPL is set in that case.
- The new flag SF_USE_REPL is supported for services in the boot image and
dynamically started services through the RS interface (i.e. -p option in the
service utility).
- Fixed a free unallocated memory bug for core system services.
2010-04-27 11:17:30 +00:00

70 lines
1.9 KiB
C

/* This file contains procedures to dump RS data structures.
*
* The entry points into this file are
* rproc_dump: display RS system process table
*
* Created:
* Oct 03, 2005: by Jorrit N. Herder
*/
#include "inc.h"
#include <timers.h>
#include <minix/rs.h>
#include "kernel/priv.h"
#include "../rs/const.h"
#include "../rs/type.h"
PUBLIC struct rprocpub rprocpub[NR_SYS_PROCS];
PUBLIC struct rproc rproc[NR_SYS_PROCS];
FORWARD _PROTOTYPE( char *s_flags_str, (int flags, int sys_flags) );
/*===========================================================================*
* rproc_dmp *
*===========================================================================*/
PUBLIC void rproc_dmp()
{
struct rproc *rp;
struct rprocpub *rpub;
int i, n=0;
static int prev_i=0;
getsysinfo(RS_PROC_NR, SI_PROCPUB_TAB, rprocpub);
getsysinfo(RS_PROC_NR, SI_PROC_TAB, rproc);
printf("Reincarnation Server (RS) system process table dump\n");
printf("----label---- endpoint- -pid- flags- -dev- -T- alive_tm starts command\n");
for (i=prev_i; i<NR_SYS_PROCS; i++) {
rp = &rproc[i];
rpub = &rprocpub[i];
if (! (rp->r_flags & RS_IN_USE)) continue;
if (++n > 22) break;
printf("%13s %9d %5d %6s %3d/%1d %3u %8u %5dx %s",
rpub->label, rpub->endpoint, rp->r_pid,
s_flags_str(rp->r_flags, rpub->sys_flags), rpub->dev_nr,
rpub->dev_style, rpub->period, rp->r_alive_tm, rp->r_restarts,
rp->r_args
);
printf("\n");
}
if (i >= NR_SYS_PROCS) i = 0;
else printf("--more--\r");
prev_i = i;
}
PRIVATE char *s_flags_str(int flags, int sys_flags)
{
static char str[10];
str[0] = (flags & RS_ACTIVE) ? 'A' : '-';
str[1] = (flags & RS_UPDATING) ? 'U' : '-';
str[2] = (flags & RS_EXITING) ? 'E' : '-';
str[3] = (flags & RS_NOPINGREPLY) ? 'N' : '-';
str[4] = (sys_flags & SF_USE_COPY) ? 'C' : '-';
str[5] = (sys_flags & SF_USE_REPL) ? 'R' : '-';
str[6] = '\0';
return(str);
}