Intermec ck1 Reference Guide

Page of 390
Appendix A — 
µClinux System 
294 
CK1 SDK Programmer’s Reference Manual 
In 1991, when the Linux kernel was released, the academic research was 
oriented to the microkernel approach of operating systems. As Linus was 
designing the kernel structure, he noticed the advantages of the 
modularized approach where all operating system layers are relatively 
independent and the microkernel includes all the hardware dependencies. 
Linus Torvalds introduced modules to the monolithic kernel structure, 
which still enabled the monolithic roots to exist. Modules bring the 
theoretical advantages of microkernel to the monolithic Linux kernel, by 
allowing modules to be compiled as normal object files, but the actual 
linking is not done to the kernel image until the runtime. The loaded 
module or drivers act exactly as if it would have been compiled directly to 
the kernel image, until they are unloaded. Linux can be said to be a hybrid 
monolithic kernel. This approach still enables the kernel to be compiled as 
a true monolithic kernel by not compiling anything as a module and by 
not enabling the CONFIG_MODVERSIONS support.  
The microkernel approach also provides easy portability. Originally, the 
idea with Linux was not to be a portable operating system toward the 
hardware, as it was with the applications. In a true monolithic kernel 
approach, the code includes the low-level interaction with the hardware so 
the kernel appears to be specific to a particular architecture. A microkernel 
performs a much smaller set of operations, abstracting all the details so that 
a port to another platform would require only minimal changes. Torvalds 
noticed that in order for the code to be portable, the abstraction layer was 
not necessarily needed. Instead the Linux kernel structure is layered, so all 
the hardware dependencies can be implemented to the lowest level of the 
kernel. 
Processes 
Linux is a multitasking operating system, which means that it allows many 
programs to run at once by switching the CPU between several tasks. 
When a program is executed, it generates an instance that is called a 
process. Each of these processes is indicated with a unique process 
identifier (PID), which is assigned a positive number usually between 2 
and 32768. After this, Linux starts to recycle the lower unused PIDs. The 
first PID is reserved for the init process, which is in charge of managing 
other processes. Many times the PID is relevant in system administration 
that may have to debug or terminate processes by referencing the PID. 
The difference between programs and processes should be noticed. Several 
processes can execute the same program simultaneously, while the same 
process can execute several programs one after another. Each process also 
has a user identifier (uid) and group identifier (gid). They are used to 
control the processes access to the files and devices in the system.  
The kernel in the multitasking environment is the one that is responsible 
for the management of different processes. The multitasking is transparent 
to user processes. Each different process can act as if it is the only process 
on the computer, with exclusive use of main memory and other hardware 
resources. The processes in monolithic systems are also written in such