Kernels: Difference between revisions

From OSDev.wiki
Jump to navigation Jump to search
[unchecked revision][unchecked revision]
Content added Content deleted
m (Stupi Spelling Mistakes by Me)
 
(9 intermediate revisions by 6 users not shown)
Line 1: Line 1:
#REDIRECT [[Kernel]]
:''This article concerns itself with the theory behind '''kernels'''. There also exist several [[:Category:Kernel tutorials|Kernel tutorials]].''


{{Redirect page}}
==Introduction==
The Kernel is the central component of an Operating System. It is a natural consequence of an operating system's need to manage resource, and often the most important part of a hobby operating system. It's responsibilities include managing memory and devices and also providing an interface for software applications to use those resources. Depending on the architecture of the operating system, the kernel often manages protection of programs and multitasking.

There are a number of Kernel Models considered in the development of a kernel, each dependent upon personal choice and research into reliability, speed and how easily goals can be reached using the specified method. The two major Models are the Monolithic Kernel and Microkernel. The Monolithic kernel is based on the idea of the kernel being a single program that sits in high memory and manages the system. At the other end of the scale, the microkernel provides as few as possible kernel mode services and negotiates the rest to user mode components.

==Main Kernel Models==

===Monolithic Kernel===
{{main|Monolithic kernel}}
Monolithic Kernels function with all of the kernel and device drivers inside one address space running in kernel mode. The principle advantage to this approach is efficiency (especially on x86 architectures where a task switch is a particularly expensive operation). Unfortunately, due to it's single address space, a bug in a device driver can bring down the entire system.

===Microkernel===
{{main|Microkernel}}
A Microkernel tries to run runs most of it's services and device drivers in userspace. This can result in an increase in stability and security on machines that have sufficient memory protection. In most current implementations the speed loss is considered too great to make the Microkernel practical as of yet in most commercial systems.

==Subset Kernel Models==

These models can usually be categorised as either of the above and usual mix concepts from both.

===Hybrid Kernel===
{{main|Hybrid Kernel}}
The Hybrid kernel, often called the Macrokernel is primarily a Monolithic Kernel. It differs in that the parts of it are usually segmented either in code, by a few physical modules or a mixture of both. Unlike Microkernels use a message passing system to communicate with user space modules, Hybrid Kernels are usually linked together at run time and still exist as a whole in kernel space. The term is usually reserved for kernels whose core functions are modularised, not for systems who have the ability to load drivers as seperate kernel modules.

===Modular Kernel===
{{main|Modular Kernel}}
Also a Monolithic Model, the Modular Kernel, which is usually far more Modular than the Hybrid Kernel is based upon the same concept. The major difference is the usual ability for the kernel to load numerous unknown core modules, as opposed to simply loading in known kernel parts. It is also never considered modular because of the use of namespaces, or a simplified codebase.

===Nanokernel===
{{main|Nanokernel}}
Often considered an incredibly minimal Microkernel. The Nanokernel design does not actually define the method by which parts are combined and is therefore able to sit in either camp. Most nanokernels use a message passing system to communicate with other components in order to make the the system as architecturaly independent as possible. It is basically a stripped down kernel without any form of Hardware absraction, so it required extra device drivers for each architecture.

===Exokernel===
{{main|Exokernel}}
Also a tiny kernel design, the Exokernel represents as little abstraction as possible, the complete opposite of the Nanokernel. An Exokernel is intended to give untrusted programs as much control over the hardware as possible, and in a secure way. This allows programs to take advantage of the details of present hardware instead of having to rely on the kernel to do this, which in some cases can result in drastic performance improvements. This goes however at the cost of having to write more complex software. This is quite often programmed in system libraries which provide the abstraction on the kernels behalf.
[[Category:Kernel]]

Latest revision as of 09:59, 22 June 2024

Redirect to:

This page is a redirect.
This redirect is categorized in following manner: