Kernel

The secondary startup program, ufsboot, which was described in the preceding section, loads the operating system kernel. The platform-specific kernel used by ufsboot is named /platform/`uname -m`/kernel/unix.

The kernel initializes itself and begins loading modules, using ufsboot to read the files. After the kernel has loaded enough modules to mount the root file system, it unmaps the ufsboot program and continues, using its own resources. The kernel creates a user process and starts the /sbin/init process, which starts other processes by reading the /etc/inittab file. (The /sbin/init process is described in Chapter 9.)

The kernel is dynamically configured in Solaris 9. It consists of a small static core and many dynamically loadable kernel modules. A kernel module is a hardware or software component that is used to perform a specific task on the system. An example of a loadable kernel module is a device driver that is loaded when the device is accessed. Drivers, file systems, STREAMS modules, and other modules are loaded automatically as they are needed, either at startup or at runtime. After these modules are no longer in use, they can be unloaded. Modules are kept in memory until that memory is needed. The modinfo command provides information about the modules currently loaded on a system.

When the kernel is loading, it reads the /etc/system file where system configuration information is stored. This file modifies the kernel’s parameters and treatment of loadable modules. It specifically controls the following:

  • The search path for default modules to be loaded at boot time as well as the modules not to be loaded at boot time

  • The modules to be forcibly loaded at boot time rather than at first access

  • The root type and device

  • The new values to override the default kernel parameter values

The following is an example of the default /etc/system file:

*ident     "@(#)system  1.18  97/06/27 SMI" /* SVR4 1.5 */ 
* 
* SYSTEM SPECIFICATION FILE 
* 
* moddir: 
* 
*Set the search path for modules. This has a format similar to the 
*csh path variable. If the module isn't found in the first directory 
*it tries the second and so on. The default is /kernel /usr/kernel 
* 
*Example: 
*moddir: /kernel /usr/kernel /other/modules 
* root device and root filesystem configuration: 
* 
*The following may be used to override the defaults provided by 
*the boot program: 
* 
*rootfs:          Set the filesystem type of the root. 
* 
*rootdev:         Set the root device. This should be a fully 
*                 expanded physical pathname. The default is the 
*                 physical pathname of the device where the boot 
*                 program resides. The physical pathname is 
*                 highly platform and configuration dependent. 
* 
*Example: 
*           rootfs:ufs 
*           rootdev:/sbus@1,f8000000/esp@0,800000/sd@3,0:a 
* 
*(Swap device configuration should be specified in /etc/vfstab.) 
* exclude: 
* 
*Modules appearing in the moddir path which are NOT to be loaded, 
*even if referenced. Note that `exclude' accepts either a module name, 
*or a filename which includes the directory. 
* 
*Examples: 
*           exclude: win 
*           exclude: sys/shmsys 
* forceload: 
* 
*Cause these modules to be loaded at boot time, (just before mounting 
*the root filesystem) rather than at first reference. Note that 
*forceload expects a filename which includes the directory. Also 
*note that loading a module does not necessarily imply that it will 
*be installed. 
* 
*Example: 
*           forceload: drv/foo 
* set: 
* 
*Set an integer variable in the kernel or a module to a new value. 
*This facility should be used with caution. See system(4). 
* 
*Examples: 
* 
*To set variables in 'unix': 
* 
*           set nautopush=32 
* set maxusers=40 
* 
*To set a variable named 'debug' in the module named 'test_module' 
* 
*           set test_module:debug = 0x13 

The /etc/system file contains commands of this form:

set parameter=value 

For example, the setting for the kernel parameter MAXUSERS is set in the /etc/ system file with the following line:

set maxusers = 40 

Commands that affect loadable modules are of this form:

set module:variable=value 

Note

Commands must be 80 characters or less in length, and comment lines must begin with an asterisk (*) and end with a newline character.


If a system administrator needs to change a tunable parameter in the /etc/ system file, the sysdef command can be used to verify the change. sysdef lists all hardware devices, system devices, loadable modules, and the values of selected kernel-tunable parameters. The following is the output produced from the sysdef command:

* 
* Hostid 
* 
  80a26382 
* 
* sun4u Configuration 
* 
*  
* Devices 
* 
packages (driver not attached) 
        terminal-emulator (driver not attached) 
        deblocker (driver not attached) 
        obp-tftp (driver not attached) 
        disk-label (driver not attached) 
        SUNW,builtin-drivers (driver not attached) 
        sun-keyboard (driver not attached) 
        ufs-file-system (driver not attached) 
chosen (driver not attached) 
openprom (driver not attached) 
        client-services (driver not attached) 
options, instance #0 
<output truncated> 
... 
* Utsname Tunables 
* 
     5.9  release (REL) 
  ultra5  node name (NODE) 
   SunOS  system name (SYS) 
Beta_Refresh  version (VER) 
* 
* Process Resource Limit Tunables (Current:Maximum) 
* 
0x0000000000000100:0x0000000000010000   file descriptors 
* 
* Streams Tunables 
* 
     9  maximum number of pushes allowed (NSTRPUSH) 
 65536  maximum stream message size (STRMSGSZ) 
  1024  max size of ctl part of message (STRCTLSZ) 
* 
* IPC Messages module is not loaded 
* 
* 
* IPC Semaphores module is not loaded 
* 
* 
* IPC Shared Memory module is not loaded 
* 
* 
* Time Sharing Scheduler Tunables 
* 
60      maximum time sharing user priority (TSMAXUPRI) 
SYS     system class name (SYS_NAME) 

The mdb (modular debugger) command can also be used to verify that a change was actually made after the system has been started up, but be careful using it.

Caution

mdb can change kernel parameters on a running system and could potentially crash your system if used improperly. Undertake the following procedures with caution. Improper entries in the /etc/system file or improper use of mdb can result in a corrupted system, causing the system to crash or be unable to restart.


If the kernel parameter you’re looking for is not displayed with sysdef (for example, MAXUSERS), use mdb. At the UNIX command prompt, when you’re logged in as root, execute the following command:

mdb -k /dev/ksyms  /dev/mem 

/dev/ksyms is a special driver that provides an image of the kernel’s symbol table. This can be used to examine the information in memory. mdb will reply as follows :

Loading modules: [ unix krtld genunix ip ufs_log nfs random ptm ] 
> 

You will not receive a > prompt after this, and mdb is running and is ready for a command. To check a tunable parameter while in mdb, use the following syntax:

<parameter>/D Displays the integer parameter in decimal
<parameter>/X Displays the integer parameter in hexadecimal

<parameter> is replaced with the kernel symbol being examined. For example:

maxusers/D 

This will display the MAXUSERS parameter in decimal notation, as follows:

maxusers: 
maxusers:     118 

Exit mdb by typing $q and pressing Enter.

mdb is a general-purpose debugging tool for the Solaris operating environment, which is backward compatible with adb. Refer to the Solaris Modular Debugger Guide for more information.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset