home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 3 / PDCD_3.iso / pocketbk / utilsm / psionics / process < prev    next >
Text File  |  1995-01-17  |  7KB  |  178 lines

  1. PSIONICS FILE - PROCESS
  2. =======================
  3. Processes and their properties
  4. Last modified 1994-09-08
  5. ==============================
  6.  
  7. The Series 3 operating system is a fully multitasking one; at any time it can
  8. be running any number of processes (up to some limit). Much useful information
  9. about processes can be displayed with the SPY program.
  10.  
  11. Each process has a name, a task number, and a process ID. The task number runs
  12. from 1 upwards (the Series 3 is limited to 24), and a task number can be
  13. reused whenever a process terminates. The process ID consists of the address
  14. of the control block for the process in kernel memory in the bottom 12 bits,
  15. and a simple counter in the top 4 bits; this starts at 0 for the first
  16. process to use this control block, and is incremented whenever the block is
  17. reused.
  18.  
  19. The name of a process is normally the name of the program, followed by ".$"
  20. and the task number as 2 decimal digits.
  21.  
  22. Each process has a priority. Non-operating system processes are limited to
  23. priority 192; the normal priorities are 128 for foreground and 112 for
  24. background.
  25.  
  26.  
  27. System processes
  28. ----------------
  29.  
  30. There are two kinds of system processes: fixed ones and optional ones. The
  31. fixed processes are:
  32.  
  33.     SYS$NULL.$01   handles power off
  34.     SYS$MANG.$02   the process and resource manager
  35.     SYS$FSRV.$03   the file server
  36.     SYS$WSRC.$04   the window server
  37.     SYS$SHLL.$05   the process launcher and system screen
  38.     TIME.$06       the time and alarm server
  39.  
  40. The optional processes are:
  41.  
  42.     SYS$NCP.$??    the remote link manager
  43.  
  44.  
  45. Registers
  46. ---------
  47.  
  48. Processes may use the data registers (AX, BX, CX, DX, SI, and DI) without
  49. restriction. The Psion operating system may move memory segments about in
  50. memory at any time without warning; when it does so, those of the segment
  51. registers (CS, DS, ES, and SS) that appear to the kernel to be valid will
  52. be adjusted automatically. If it is desired to change these registers at any
  53. other time, it should therefore be done with interrupts disabled.
  54.  
  55. OPL uses CS, DS, and SS, and these should not be altered by assembler code
  56. invoked from with OPL. ES is not used by the OPL interpreter, and is normally
  57. left the same as DS and SS (which are always the same). Many system calls
  58. use data registers to hold pointers; a segment register is also used with
  59. each such pointer. No attempt has been made in the Psionics files SYSCALLS.n
  60. to identify which segment registers are so used, and any assembler code should
  61. therefore exit with ES equal to DS; this should also be the case when making
  62. system calls.
  63.  
  64. The only other values that can usefully be placed in ES are the kernel data
  65. segment (using system call GenDataSegment), and segments created with the
  66. system call SegCreate. To do the former, just invoke INT $8F; ES will then
  67. point to the kernel data segment, and accesses via ES will behave just as
  68. if done with the system call GenGetOsData (it is not possible to write in
  69. this way). The latter is done as follows:
  70.  
  71.     ; Assume the segment handle is in BX.
  72.     INT $8F
  73.     MOV ES,ES:[BX]
  74.     ; ES now points to the start of the segment.
  75.     ; If the segment moves, ES will change automatically.
  76.     ; Before returning to OPL:
  77.     CLI      ; with interrupts disabled
  78.     PUSH DS  ; copy DS to ES
  79.     POP ES
  80.     STI      ; and allow interrupts again
  81.  
  82.  
  83. Memory
  84. ------
  85.  
  86. Each process has a single segment of memory. From zero upwards, this contains:
  87.     reserved statics
  88.     stack (grows downwards)
  89.     normal statics
  90.     heap (grows upwards)
  91.  
  92. The heap is divided into allocated and free cells. The SPY program shows the
  93. number and total byte count of each kind of cell. The kernel will remove free
  94. cells from the end of the heap when it needs space.
  95.  
  96. The stack is initialized to all $FF; it must always hold at least 256 bytes
  97. to allow interrupts to be processed (otherwise panic 69 will occur). A typical
  98. stack size is $A00. The SPY program allows the unused portion of the stack to
  99. be refilled with $FF (to allow the high water mark to be reset).
  100.  
  101. The heap consists of consecutive cells:
  102.   Offset  0 (word): length of data portion (L)
  103.   Offset  2 to L+1: data portion (whose address is returned by allocators)
  104. @Is that right, or is it 2 to L-1 ?@
  105.  
  106. Cells are always aligned to even addresses, and for this and other reasons may
  107. be larger than requested.
  108.  
  109.  
  110. Specific memory locations
  111. -------------------------
  112.  
  113. The following table lists some specific use of memory locations.
  114.  
  115.   Offset  0 (word): initialized to $DEAD; should never change
  116.   Offset 18 (word): address of block <P18>.
  117.   Offset 34 (word): 0 = process can be terminated without warning
  118.                     non-zero = application that can accept an "X" message.
  119.   Offset 36 (word): address of cstr holding the full path name of the program
  120.                     being executed.
  121.   Offset 40 to  53: not used by the kernel or OPL.
  122.   Offset 58 (word): non-zero if locked (by OPL "LOCK ON" or equivalent).
  123.   Offset 64       : maximum limit of stack (if floating point emulation is
  124.                     in use, the emulator uses offsets 64 to 767).
  125.  
  126. Block <P18> has the following contents:
  127.   Offset 32 (word): address of block <P18P32>
  128.  
  129. Block <P18P32> has the following contents:
  130.   Offset 12 (word): address of block <P18P32P12>
  131.  
  132. Block <P18P32P12> is created by the MINIT keyword and destroyed by the MENU
  133. keyword. Outside this range, the block is invalid, and the pointer in the
  134. <P18P32> block is invalid. Each MCARD keyword can move this block, thus
  135. altering that pointer. The block has the following contents:
  136.   Offset  0 (byte): number of MCARD calls so far
  137.   Offset  1 onward: menu information blocks, in order of menu creation
  138.  
  139. Each menu information block has the following contents:
  140.   Offset  0 (word): address of secondary menu information block
  141.   Offset  2 (cstr): menu title
  142.  
  143. Each secondary menu information block has the following contents:
  144.   Offset  0 (long): [Only ever seen $7392A1DF]
  145.   Offset  4 (word): number of items in the menu
  146.   Offset  6 (long): [Only ever seen 1 so far]
  147.   Offset 10 (word): address of item table
  148.  
  149. Each item table has the following contents:
  150.   Offset  0 (byte): number of items in the menu
  151.   Offset  1 onward: item information blocks, in order of item
  152.  
  153. Each item information block has the following contents:
  154.   Offset  0 (byte): number of bytes in the block, excluding this one
  155.   Offset  1 (byte): Psion+ accelerator code (lowercased)
  156.   Offset  2 (cstr): item text
  157.  
  158.  
  159. Time process
  160. ------------
  161.  
  162. The pending alarms can be located in the memory of the Time process. At some
  163. location between offset $0A00 and $0AFF is a block with the form:
  164.   Offset  0 (long): $08040201
  165.   Offset  4 (long): $00402010
  166.   Offset 12 (word): first alarm control block
  167.  
  168. The alarm control blocks are in a circular list, with the last pointing to
  169. offset 12 of the above block (which is not an alarm control block). Each block
  170. has the form:
  171.   Offset  0 (word): next alarm control block
  172.   Offset  6 (word): process ID of process owning alarm
  173.   Offset  8 (byte): 0 = clock alarm, 1 = has time and date, 2 = has date
  174.   Offset 10 (long): abstime alarm expires
  175.   Offset 14 (long): abstime displayed in alarm message
  176.   Offset 28 (cstr): text displayed in alarm message
  177.   Offset 93 to 255: [unknown; alleged to be part of the block]
  178.