next up previous index
Next: Task Switching Up: Chapter 5: Process Management Previous: Chapter 5: Process Management   Index

Process Table

Information about processes is maintained in the process table, which contains one entry for each possible process (NPROC, defined in the C header file <gno/conf.h>. There is other per-process information spread about the kernel, but those are usually used for maintaining compatibility with older software, and thus are not described here. Please note that the data in this section is informational only (e.g. for programs like ps(1)). Do not attempt to modify kernel data structures or the GNO Kernel will likely respond with a resounding crash. Only 'interesting' fields are documented.

Copies of process entries should be obtained by using the Kernel Virtual Memory (KVM) routines (kvm_open(2), and so forth). These are documented in the electronic manual pages.

Processes have a state associate with them. The state of the process is a description of what the process is doing. The possible process states (as listed in <gno/proc.h> and described here) are:

The process is currently in execution.
The process is not currently executing, but is ready to be executed as soon as it is assigned a time slice.
The process is waiting for a slow I/O operation to complete (for instance, a read from a TTY).
The process has been created, but has not executed yet.
The process was stopped with SIGSTOP, SIGTSTP, SIGTTIN, or SIGTTOU.
The process is waiting on a semaphore ``signal'' operation. Programs waiting for data from a pipe have this state.
The process is waiting to receive a SIGCHLD signal.
The process is waiting for any signal.

The device number of the controlling TTY for this process. This is not a GS/OS refnum; rather, it is an index into the kernel's internal character device table. The value of this field can be interpreted as follows:

0 .null
1 .ttya
2 .ttyb
3 .ttyco
6 .ptyq0 pty0 master side
7 .ttyq0 pty0 slave side

Other values may be appropriate depending on the /etc/tty.config file. Namely, 1 and 2 (by default the modem and printer port drivers), and 4 and 5 (unassigned by default) may be assigned to different devices.

The number of full ticks this process has executed. If a process gives up it's time slice due to an I/O operation, this value is not incremented. A tick is 1/60 second.

If an alarm(2) request was made, this is the number of seconds remaining until the process is sent SIGALRM.

This is a structure which stores information about the files a process has open. See struct ftable and struct fdentry in <gno/proc.h> .

irq_A, irq_X, irq_Y, irq_S, irq_D, irq_B, irq_P, irq_state, irq_PC, irq_K
Context information for the process. These fields are the values of the 65816 registers at the last context switch. They only truly represent the machine state of the process if the process is not RUNNING.

This is a NULL-terminated (C-style) string that contains the command line with which the process was invoked. This string begins with ``BYTEWRKS'', the shell identifier.

For more details and an example of how to investigate process information, look at the source code for the ``GNO Snooper CDA''.

next up previous index
Next: Task Switching Up: Chapter 5: Process Management Previous: Chapter 5: Process Management   Index