COHERENT manpages

This page displays the COHERENT manpage for kernel [Master program of the COHERENT system].

List of available manpages
Index


kernel -- Technical Information

Master program of the COHERENT system

The kernel  is the master program  of the COHERENT system.   It manages the
file systems, processes, devices, and users.

When you boot COHERENT on your system, the COHERENT bootstrap automatically
loads and  runs the program /autoboot.  This file usually is  linked to the
kernel that you build when you installed COHERENT onto your computer.

Your system may have multiple kernels  on it.  For example, when you update
COHERENT, often the old kernel is  saved; and you can also build customized
versions  of  the  kernel.  The  COHERENT  bootstrap  lets  you boot  other
versions of  the kernel besides the  one that is linked  to file /autoboot.
For details on how to do this, see the Lexicon article booting.

For  information on  the  file system  that  the kernel  supports, see  the
Lexicon entry for file.

The Lexicon  entry coff.h describes the format of  programs that the kernel
can execute.

The COHERENT  system comes with a  set of system calls,  which you can call
from within  user application to  obtain kernel services.   See the Lexicon
entry libc summarizes the calls that the kernel offers.

The function ulimit() returns and sets some limits for the current process.
For details, see its entry in the Lexicon.

The Lexicon article device drivers describes the suite of drivers that come
with the  COHERENT system.  It gives  the major and minor  numbers of each,
plus information on how to access and manipulate each driver.

Modifying the Kernel

Beginning with  release 4.2, COHERENT  contains a System  V-style mechanism
for modifying the kernel and building a new bootable kernel.

File /etc/conf/mtune  defines the suite of  ``tunable variables'' available
within  the kernel  and its  drivers.  These variables  define many  of the
kernel's default  behaviors.  For  a complete  list of these  variables and
notes on what each does, see /etc/conf/mtune.

File /etc/conf/stune sets the values of the variables actually used in your
kernel.  To  modify the  values of  these variable, you  can edit  stune by
hand,   or   you   can   use   the   commands   /etc/conf/bin/cohtune   and
/etc/conf/bin/idtune. The former command  lets you set or modify the values
of variables  used by device  drivers; the latter  command lets you  set or
modify variables used in the kernel itself.

File /etc/conf/mdevice  names the drivers that  are available for inclusion
in your kernel.  File /etc/conf/sdevice names the drivers that actually are
included in  your kernel.  To include  or exclude a driver,  you can modify
sdevice by hand; or you can use the command /etc/conf/bin/idenable.

Command   /etc/conf/bin/idmkcoh   builds  a   new   bootable  kernel   that
incorporates  any  changes  you have  made.   For  your  changes to  become
effective, you must build a  new kernel that incorporates your changes, and
then boot it.

Finally, command  /etc/conf/bin/idbld walks you the  configuration of every
device drivers  in the kernel, then  invokes idmkcoh to link  a new kernel.
In effect, this command lets you reconfigure the entire kernel.

Each of the above commands and files is described in its own Lexicon entry.

Two other files are of interest if you wish to modify the kernel.

-> Header  file <sys/devices.h>  gives the  major-device  numbers for
   every driver in your kernel.  It  is read when drivers are compiled.  If
   you are  adding a  new driver,  you must add  its name  and major-device
   number to this header file.

-> Normally, when you build a new kernel, the symbol table is stripped from
   it and kept in file /kernel_name.sym.  The symbols in this file are used
   to  decipher kernel  tracebacks, and  can  be read  by the  debugger db.
   However, if  you wish  to hot-patch  a kernel variable,  that variable's
   symbol   (or  name)   must  be   kept  in   the  binary   itself.   File
   /etc/conf/install_conf/keeplist names the  variables (or, more properly,
   the symbols)  that are left in  the binary after it  is linked.  You can
   then  use the  command  /conf/patch to  hot-patch  these variables.   We
   discourage you from doing this unless it is absolutely necessary.

Example

The  Lexicon entry  device drivers  gives an  example of how  to add  a new
driver to the kernel.  The  following example walks you through the process
of changing the size of the buffer cache on your system.

The buffer cache is a reserved portion of memory in which the kernel stores
data recently  read from the disk  or to be written to  the disk.  When you
invoke  a command  from your  command  line, the  kernel checks  its buffer
cache.  If you had invoked the  command recently, the kernel should find it
within the  buffer cache; and it  can then call up  the command from memory
rather  than  reading  it  from  the  disk.  This  speeds  up  your  system
noticeably.

Like everything  else in  life, the buffer  cache involves a  tradeoff: the
larger the  buffer cache,  the faster  your system will  run, but  the less
memory will  be available for running your  programs.  By default, COHERENT
sets aside  a portion of memory  for the buffer cache;  the more memory you
have, the more  is set aside for the cache.   However, you can set the size
of  the cache by  hand.  Usually,  this is  done to limit  the size  of the
cache, which is necessary if your  system has limited amounts of memory and
you want to run large user programs (e.g., the X Window System).

The  following walks  you through  the process of  modifying the  kernel to
reduce the size of the buffer cache.

1. Log in as the superuser root. cd to directory /etc/conf.

2. Edit file /etc/conf/stune and add the following lines:

       NBUF_SPEC   100
       NHASH_SPEC  97

   NBUF_SPEC sets  the size of the buffer, in  blocks.  Here, we're setting
   it to  100 blocks (50  kilobytes), which is very  small.  NASH_SPEC sets
   the number  of hash lists  in the kernel;  this must be  the first prime
   number smaller  than the number  of blocks in  the cache (in  this case,
   97).  This, too, is very small.

3. Build a new kernel with the following command:

       /etc/conf/bin/idmkcoh -o /cohtest

   This builds a new kernel named cohtest, which incorporates your changes.

4. Shut down your  system and boot the new kernel.   For information on how
   to shut the system down, see the Lexicon entry for shutdown. For details
   on how to  boot a kernel other than the  default kernel, see the Lexicon
   entry for booting.

That's all there is to it.   If you wish to make these variables patchable,
so  you can  change them  without  going to  the bother  of building  a new
kernel, do the following:

1. In the file /etc/conf/install_conf/keeplist, change

       echo '-I SHMMNI:SEMMNI:NMSQID'
   to

       echo '-I SHMMNI:SEMMNI:NMSQID:NBUF:NHASH'

2. Build a new kernel as described above.

Then, to change limit the size of the buffer cache to 50 kilobytes, use the
command:

    /conf/patch /testcoh NBUF=100 NHASH=97

Then,  boot  the  patched kernel.   As  noted  above,  you  should not  use
/conf/patch unless you absolutely must.

Files

/autoboot -- The default kernel
/etc/conf -- Directory that holds configuration files
/etc/conf/mdevices -- Suite of available device drivers
/etc/conf/mtune -- Suite of legal patchable variables
/etc/conf/sdevices -- Drivers included in kernel
/etc/conf/stune -- Patchable variables included in kernel
/etc/conf/install_conf/keeplist -- Symbols kept in kernel

See Also

Administering COHERENT,
booting,
coff.h,
COHERENT,
device drivers,
file,
idmkcoh,
libc,
mtune,
stune,
ulimit()

Diagnostics

The kernel  can produce the following error  messages.  Most are meaningful
only to Mark Williams Company.   If you encounter these errors, contact MWC
and describe the circumstances during which you saw the error.  MWC Support
will try to solve this problem for you.

Arena number too small (hardware)

Bad block number (alloc) (hardware)
     The kernel attempted to allocate a  block of memory, only to find that
     there was something physically wrong with it.

Bad block number (free) (hardware)
     The kernel  attempted to  free a  block of memory,  only to  find that
     there was something physically wrong with it.

Bad free number (hardware)

Bad freelist (halt)
     The  freelist is  a list  of free  blocks on  the disk.   The COHERENT
     system maintains  this list so it  can see where it  can write data on
     the disk.  This message indicates that the freelist has been corrupted
     somehow.  To fix this  problem, run /etc/shutdown to return to single-
     use mode;  use sync to  flush the buffers;  use umount to  unmount the
     affected file system; and then run fsck to repair the file system.

Bad segment count (hardware)
Bus error at number (hardware)
Cannot allocate stack (hardware)
Cannot create process (hardware)
Corrupt arena (hardware)
Illegal instruction at number (hardware)
Inode number busy (hardware)
Inode table overflow (hardware)
Not a separate I/D machine (hardware)

Out of i-nodes (halt)
     A COHERENT file system has one i-node for each file it maintains.  The
     number of i-nodes is set when the file system is created.  If you have
     numerous small files on a file  system, it is possible to exhaust that
     file system's  resources even though  the command df  shows that space
     remains  on the  file system.   To get around  this problem,  you must
     delete files, one  file for each i-node needed; or  you must use ar to
     archive  a mass  of files.   To  do this,  first use  /etc/shutdown to
     return  the system  to single-user mode,  as described  above.  Delete
     files,  or use  ar as  described above.   Then use  sync to  flush all
     buffers,  and use  the  command umount  to unmount  the affected  file
     system.  Then  run fsck on the affected  file system before rebooting.
     fsck  checks  COHERENT  file  systems  and  fixes them  if  necessary.
     Consult the Lexicon entry on fsck  before you use this program for the
     first time.

Out of space (m,n) (halt)
     When this  error message appears,  your file system  still has i-nodes
     but the alloted disk space has  been exhausted; perhaps you have a few
     large  files  that are  eating  up  disk space.   To  get around  this
     problem, you  must delete  or compress files  to clear up  disk space.
     First, use  /etc/shutdown to return to  single-user mode, as described
     above; then  delete files  or compress  them as described  above until
     enough space has been cleared to allow you to continue your work.  Use
     sync to flush buffer, use  umount to unmount the affected file system,
     and run fsck on the affected file system.  Then reboot.

Random trap (hardware)
Raw I/O from non user (hardware)
System too large (hardware)