Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Microkernel
(section)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
==History== Microkernels trace their roots back to Danish computer pioneer [[Per Brinch Hansen]] and his tenure in Danish computer company [[Regnecentralen]] where he led software development efforts for the RC 4000 computer.<ref name="ieee_2002">{{cite web | url = https://www.computer.org/profiles/per-hansen | title = Per Brinch Hansen | publisher = IEEE Computer Society | access-date = 13 September 2016 }} </ref> In 1967, Regnecentralen was installing a RC 4000 prototype in the [[Zakłady Azotowe Puławy]] fertilizer plant in Poland. The computer used a small real-time operating system tailored for the needs of the plant. Brinch Hansen and his team became concerned with the lack of generality and reusability of the RC 4000 system. They feared that each installation would require a different operating system so they started to investigate novel and more general ways of creating software for the RC 4000.<ref name="Hansen_2004">{{cite book | url = http://brinch-hansen.net/memoirs/contents.html | title = A Programmer's Story: The Life of a Computer Pioneer | last= Brinch Hansen | first=Per | year=2004 | access-date = 13 September 2016}} </ref> In 1969, their effort resulted in the completion of the [[RC 4000 multiprogramming system|RC 4000 Multiprogramming System]]. Its nucleus provided inter-process communication based on message-passing for up to 23 unprivileged processes, out of which 8 at a time were protected from one another. It further implemented scheduling of time slices of programs executed in parallel, initiation and control of program execution at the request of other running programs, and initiation of data transfers to or from peripherals. Besides these elementary mechanisms, it had no built-in strategy for program execution and resource allocation. This strategy was to be implemented by a hierarchy of running programs in which parent processes had complete control over child processes and acted as their operating systems.<ref name="Hansen_1969">{{cite tech report | first = Per | last = Brinch Hansen | title = RC 4000 Software: Multiprogramming System | institution = Regnecentralen | date = April 1969 | url = http://brinch-hansen.net/papers/1969a.pdf | access-date = 13 September 2016 }} </ref><ref>{{cite journal | author = Brinch Hansen, Per | year = 1970 | volume = 13 | title = The Nucleus of a Multiprogramming Operating System | journal = Communications of the ACM | pages = 238–250 | url = http://www.brinch-hansen.net/papers/1970a.pdf | doi = 10.1145/362258.362278 | citeseerx = 10.1.1.105.4204 | issue = 4 | s2cid = 9414037 }} </ref> Following Brinch Hansen's work, microkernels have been developed since the 1970s.<ref name="Wulf_74">.{{cite journal | last1 = Wulf | first1 = William | last2 = Cohen | first2 = Ellis | last3 = Corwin | first3 = William | last4 = Jones | first4 = Anita | last5 = Levin | first5 = Roy | last6 = Pierson | first6 = C. | last7 = Pollack | first7 = Fred | date = June 1974 | title = HYDRA: The Kernel of a Multiprocessor Operating System | journal = Communications of the ACM | volume = 17 | issue = 6 | pages = 337–345 | doi = 10.1145/355616.364017 | s2cid = 8011765 | doi-access = free }}</ref> The term microkernel itself first appeared no later than 1981.<ref name="Rashid_81">{{cite conference | last1 = Rashid | first1 = Richard | last2 = Robertson | first2 = George | title = Accent: A communication oriented network operating system kernel | doi = 10.1145/800216.806593 | book-title = SOSP '81 Proceedings of the eighth ACM symposium on Operating systems principles | pages = 64–75 | date = December 1981 | location = Pacific Grove, California, USA }}</ref> Microkernels were meant as a response to changes in the computer world, and to several challenges adapting existing "[[mono-kernel]]s" to these new systems. New device drivers, protocol stacks, file systems and other low-level systems were being developed all the time. This code was normally located in the monolithic kernel, and thus required considerable work and careful code management to work on. Microkernels were developed with the idea that all of these services would be implemented as user-space programs, like any other, allowing them to be worked on monolithically and started and stopped like any other program. This would not only allow these services to be more easily worked on, but also separated the kernel code to allow it to be finely tuned without worrying about unintended side effects. Moreover, it would allow entirely new operating systems to be "built up" on a common core, aiding OS research. Microkernels were a very hot topic in the 1980s when the first usable [[local area network]]s were being introduced.{{Citation needed|date=November 2012}}. The AmigaOS [[Exec (Amiga)|Exec]] kernel was an early example, introduced in 1986 and used in a PC with relative commercial success. The lack of memory protection, considered in other respects a flaw, allowed this kernel to have very high message-passing performance because it did not need to copy data while exchanging messages between user-space programs.<ref name="amiga_rkm_libs_exec">{{cite book|title=Amiga ROM Kernel Reference Manual|last=Sassenrath|first=Carl|year=1986|location=Exec}}</ref> The same mechanisms that allowed the kernel to be distributed into user space also allowed the system to be distributed across network links. The first microkernels, notably [[Mach (kernel)|Mach]] created by [[Richard Rashid]], proved to have disappointing performance, but the inherent advantages appeared so great that it was a major line of research into the late 1990s.<ref>{{cite web |title=CMU CS Project Mach Home Page |url=https://www.cs.cmu.edu/afs/cs/project/mach/public/www/mach.html |website=www.cs.cmu.edu |publisher=Carnegie Mellon University |access-date=8 August 2024}}</ref> However, during this time the speed of computers grew greatly in relation to networking systems, and the disadvantages in performance came to overwhelm the advantages in development terms.{{citation needed|date = June 2015}} Many attempts were made to adapt the existing systems to have better performance, but the overhead was always considerable and most of these efforts required the user-space programs to be moved back into the kernel. By 2000, most large-scale [[Mach (kernel)|Mach]] kernel efforts had ended, although Apple's [[macOS]], released in 2001, still uses a [[hybrid kernel]] called [[XNU]], which combines a heavily modified (hybrid) [[OSF/1]]'s [[Mach kernel]] ([[OSFMK]] 7.3 kernel) with code from BSD UNIX,<ref>{{cite AV media|url=https://www.youtube.com/watch?v=ggnFoDqzGMU |archive-url=https://ghostarchive.org/varchive/youtube/20211211/ggnFoDqzGMU| archive-date=2021-12-11 |url-status=live|author=Jim Magee|title=WWDC 2000 Session 106 - Mac OS X: Kernel|minutes=14}}{{cbignore}}</ref><ref>{{cite web|title=Porting UNIX/Linux Applications to Mac OS X|url=https://developer.apple.com/library/mac/#documentation/Porting/Conceptual/PortingUnix/glossary/glossary.html#//apple_ref/doc/uid/TP40002859-TPXREF101|publisher=Apple|access-date=26 April 2011}}</ref> and this kernel is also used in [[iOS]], [[tvOS]], and [[watchOS]]. [[Windows NT]], starting with [[Windows NT 3.1|NT 3.1]] and continuing with [[Windows 11]], uses a hybrid kernel design. {{As of|2012}}, the Mach-based [[GNU Hurd]] is also functional and included in testing versions of [[Arch Linux]] and [[Debian]]. Although major work on microkernels had largely ended, experimenters continued development.<ref>{{cite web |title=Redox - Your Next(Gen) OS - Redox - Your Next(Gen) OS |url=https://www.redox-os.org/ |website=www.redox-os.org}}</ref><ref>{{cite web |title=Helios |url=https://ares-os.org/docs/helios/ |website=ares-os.org |language=en-us}}</ref> Using a more pragmatic approach to the problem, including [[assembly code]] and relying on the processor to enforce concepts normally supported in software led to a new series of microkernels with dramatically improved performance. Microkernels are closely related to [[exokernel]]s.<ref name="Liedtke_96">{{cite journal | last = Liedtke | first = Jochen | date = September 1996 | title = Towards Real Microkernels | journal = Communications of the ACM | volume = 39 | issue = 9 | pages = 70–77 | doi = 10.1145/234215.234473 | s2cid = 2867357 | doi-access = free }}</ref> They also have much in common with [[hypervisor]]s,<ref name="Heiser_UL_06">{{cite journal |title = Are Virtual-Machine Monitors Microkernels Done Right? |author-link1 = Gernot Heiser |last1 = Heiser |first1 = Gernot |last2 = Uhlig |first2 = Volkmar |last3 = LeVasseur |first3 = Joshua |journal = ACM SIGOPS Operating Systems Review |volume = 40 |issue = 1 |pages = 95–99 |date = January 2006 |url = http://os.ibds.kit.edu/65_747.php |publisher = ACM |doi = 10.1145/1113361.1113363 |s2cid = 7414062 |access-date = 13 January 2014 |archive-date = 13 January 2014 |archive-url = https://web.archive.org/web/20140113115308/http://os.ibds.kit.edu/65_747.php |url-status = dead }}</ref> but the latter make no claim to minimality and are specialized to supporting [[virtual machine]]s; the [[L4 microkernel]] frequently finds use in a hypervisor capacity.
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)