Launching a process in a partition

You can use options in your buildfile to launch applications at boot time. In general, you need to launch only the command that starts a multiprocess application, since child processes of your initial command — including shells and commands run from those shells — run in the same partition.

You can also launch a process into a partition at the command line. The interface defined in sys/sched_aps.h lets you launch individual threads into a partition and move currently running threads into another partition.

Using a buildfile

To launch a command into a partition, use the [sched_aps=partition_name] attribute in your buildfile's startup script. For example:

[+session pri=35 sched_aps=DebugReserve] ksh &

launches a high-priority shell in the DebugReserve partition.

The statements you use to start a command in a partition may appear anywhere in the startup script after you've created the partition.

Using the command line

To launch a program in a partition from the command line, use the -Xaps=partition_name option of the on command. (The X refers to an external scheduler, the thread scheduler in this case.) For example:

on -Xaps=DebugReserve ksh

launches a shell into the DebugReserve partition.

Using a program

To launch a program into a partition from a program, start the program (e.g by calling spawn), and then use the SCHED_APS_JOIN_PARTITION command to SchedCtl() to make the program run in the appropriate partition. For example, this code makes the current process join a given partition:

sched_aps_join_parms join_data;

memset(&join_data, 0, sizeof(join_data));
join_data.id = partition_ID;
join_data.pid = 0;
join_data.tid = 0;

ret = SchedCtl( SCHED_APS_JOIN_PARTITION, &join_data,
                sizeof(join_data));
if (ret != EOK) {
   printf("Couldn't join partition %d: %s (%d).\n",
            join_data.id, strerror(errno), errno);
} else {
   printf ("Process is now in partition %d.\n", join_data.id);
}