Skip to main content

Linux Kernel - Introduction


Linux Torvalds developed the first version of Linux in 1991 as an operating system for computers powered by the intel microprocessor.  Started as a terminal emulator Linux evolved over a period.

What is an operating system ?

The operating system is considered as a part of the system responsible for basic use and administration. This includes the kernel and device drivers, boot loaders, command shell or other user interface and basic file and system utilities. The term system, in turn refers to the operating system  and all the application running on top of it.

The user interface is the outermost portion of the operating system, the kernel is the innermost. The kernel sometimes referred as the supervisor, core or internals of the operating system. Typical components if the kernel are interrupt handlers to service interrupt requests, a scheduler to share the processor time among multiple processes, a memory management system to manage process address spaces and system services such as networking and inter process communication.

On modern system with the protected memory management units the kernel typically resides in an elevated system state compared to  normal user applications. This includes a protected memory space and full access to the hardware. The system state and memory space is collectively referred as kernel space. Conversely user applications execute in a user space.

Applications running on the system communicate with the kernel via system calls. An application typically calls  he functions in a library for example, the C library that in turn depend in the system call interface to instruct the kernel to carry out certain tasks on the applications behalf. When an application executes a system call, we say that the kernel is executing on behalf of an application, furthermore the application is said to be executing a system call in a kernel space and the kernel is running in process-context. This relationship that applications call into the kernel via the system call interface, is the fundamental manner in which the applications get work done.



The kernel also manages the systems hardware. When the hardware wants to communicate with the system it will generate an interrupt, which will interrupt the processor and in turn it interrupts the kernel. Each interrupts will have a interrupt number and respective interrupt handler for it. We will discuss about interrupts in out further posts.

Monolithic and Microkernel designs

Monolithic Kernels are designed as entirely single process running in a single address space. They are implemented as single static binaries.

Microkernels are not implemented as a single process, instead the functionality of the kernel is broken down into separate processes, called as servers. Since they are running as separate processes, the communication within  kernel happens via inter process communication such as message passing.

Linux is a monolithic kernel, which means it is built as a single static binary, and runs in a single address space entirely in kernel mode. However Linux borrows many things from the microkernel, like capability to preempt itself, support for kernel threads and the capability to dynamically load kernel binaries ; called as kernel modules.

Comments

Popular posts from this blog

Basics of Programming : Variables

Variables Before going into definition of variable, let us consider any mathematical equation which we have studied in our schools. For example consider, 2x + 5y = 35 We do not have to know the use of this equation, but we just know that we can substitute some values for x and y which can satisfy the equation. For example (x,y) can take values (10, 3) or (5, 4). So we can say that x and y can hold some values or x and y can are placeholders for some data. In the same way we need something for holding data in computers. Those are called as variables. In other words we can also say that, variables are the name given for memory location. Since data are stored in some memory location, variables are the labels for those memory locations.

Basics of Programming : Data Types

We have seen that variables are placeholders for data. When we say data, it can be a integral numbers like 3,5 or it can be a real number like 2.6 , 1.8. In computer science, we define different types of data which we can store in memory location. A data type in a programming language is set of data with predefined values. Examples include, integers, floating point, characters, Strings etc. Even though ultimatly everything in memory stored in terms of zeros and ones, it is not practical  for us to code interms of zeros and ones. So to help users with programming compilers provide programmers the data types, which are in readable data which we use in day today transactions. The data types are categorized based on the representation in memory or the size it occupies in memory. For example, integer takes 4 bytes ( depends on the compiler, some may take 2 bytes), float takes 4 bytes, a character takes 1 byte. There are two types of data types. System define...