<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://homeostasis.scs.carleton.ca/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Asoknack</id>
	<title>Soma-notes - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://homeostasis.scs.carleton.ca/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Asoknack"/>
	<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php/Special:Contributions/Asoknack"/>
	<updated>2026-04-22T11:21:17Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=MashupOS&amp;diff=17393</id>
		<title>MashupOS</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=MashupOS&amp;diff=17393"/>
		<updated>2012-10-04T12:28:54Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Protection and communication abstractions for web browsers in MashupOS&lt;br /&gt;
* Where was it written - for OS people&lt;br /&gt;
** Proceedings of twenty-first ACM SIGOPS symposium on Operating systems principles&lt;br /&gt;
Pages 1-16 &lt;br /&gt;
** Not security and not web people&lt;br /&gt;
* What the purposed&lt;br /&gt;
** Written by the same people as subspace paper&lt;br /&gt;
*** Which came first ?&lt;br /&gt;
** Sandbox EVERYTHING &amp;lt;-- solution to everything&lt;br /&gt;
* What the implemented&lt;br /&gt;
** Sandbox&lt;br /&gt;
*** private that is hosted at and belongs to the integrator ??&lt;br /&gt;
** Opensandbox&lt;br /&gt;
*** Ment for any scripted hosted on any domain&lt;br /&gt;
** Service Instance&lt;br /&gt;
*** think starting a new process in linux - each alocated it&#039;s own resources&lt;br /&gt;
*** each service request &lt;br /&gt;
** Commservice request - aka &amp;quot;Ports&amp;quot;&lt;br /&gt;
*** Allows separate components to talk to each other threw the parent , but never directly child to child&lt;br /&gt;
** friv&lt;br /&gt;
*** the display driver each service instances needs it own display aka friv&lt;br /&gt;
** vop &amp;lt;-- Do we want to talk about&lt;br /&gt;
** sop &amp;lt;-- Do we want to talk about&lt;br /&gt;
* What was implemented&lt;br /&gt;
** Proxy server and MME filter&lt;br /&gt;
**&lt;br /&gt;
* What the testing was&lt;br /&gt;
** Running speed tests not security test , Anil said WHY ? mabey because OS conference cares about speed&lt;br /&gt;
** Open sandbox was not implemented&lt;br /&gt;
** only one service instance per friv&lt;br /&gt;
* Conclusions&lt;br /&gt;
** Mostly a theoretical paper&lt;br /&gt;
*** But interesting&lt;br /&gt;
** Notes&lt;br /&gt;
*** Do we want to show figure 2 &amp;lt;---- for what they did&lt;br /&gt;
*** Do we want to show figure 3 &amp;lt;--- for what they did and how it works&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=MashupOS&amp;diff=17392</id>
		<title>MashupOS</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=MashupOS&amp;diff=17392"/>
		<updated>2012-10-04T12:26:30Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Protection and communication abstractions for web browsers in MashupOS&lt;br /&gt;
* Where was it written - for OS people&lt;br /&gt;
** Proceedings of twenty-first ACM SIGOPS symposium on Operating systems principles&lt;br /&gt;
Pages 1-16 &lt;br /&gt;
** Not security and not web people&lt;br /&gt;
* What the purposed&lt;br /&gt;
** Written by the same people as subspace paper&lt;br /&gt;
*** Which came first ?&lt;br /&gt;
** Sandbox EVERYTHING &amp;lt;-- solution to everything&lt;br /&gt;
* What the implemented&lt;br /&gt;
** Sandbox&lt;br /&gt;
*** private that is hosted at and belongs to the integrator ??&lt;br /&gt;
** Opensandbox&lt;br /&gt;
*** Ment for any scripted hosted on any domain&lt;br /&gt;
** Service Instance&lt;br /&gt;
*** think starting a new process in linux - each alocated it&#039;s own resources&lt;br /&gt;
*** each service request &lt;br /&gt;
** Commservice request - aka &amp;quot;Ports&amp;quot;&lt;br /&gt;
*** Allows separate components to talk to each other threw the parent , but never directly child to child&lt;br /&gt;
** friv&lt;br /&gt;
*** the display driver each service instances needs it own display aka friv&lt;br /&gt;
** vop &amp;lt;-- Do we want to talk about&lt;br /&gt;
** sop &amp;lt;-- Do we want to talk about&lt;br /&gt;
* What was implemented MME filter&lt;br /&gt;
** Proxy server and &lt;br /&gt;
**&lt;br /&gt;
* What the testing was&lt;br /&gt;
** Running speed tests not security test , Anil said WHY ? mabey because OS conference cares about speed&lt;br /&gt;
** Open sandbox was not implemented&lt;br /&gt;
** only one service instance per fric&lt;br /&gt;
* Conclusions&lt;br /&gt;
** Mostly a theoretical paper&lt;br /&gt;
*** But interesting&lt;br /&gt;
** Notes&lt;br /&gt;
*** Do we want to show figure 2 &amp;lt;---- for what they did&lt;br /&gt;
*** Do we want to show figure 3 &amp;lt;--- for what they did and how it works&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=MashupOS&amp;diff=17389</id>
		<title>MashupOS</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=MashupOS&amp;diff=17389"/>
		<updated>2012-10-03T15:09:00Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Protection and communication abstractions for web browsers in MashupOS&lt;br /&gt;
* Where was it written - for OS people&lt;br /&gt;
** Proceedings of twenty-first ACM SIGOPS symposium on Operating systems principles&lt;br /&gt;
Pages 1-16 &lt;br /&gt;
** Not security and not web people&lt;br /&gt;
* What the purposed&lt;br /&gt;
** Written by the same people as subspace paper&lt;br /&gt;
*** Which came first ?&lt;br /&gt;
** Sandbox EVERYTHING &amp;lt;-- solution to everything&lt;br /&gt;
* What the implemented&lt;br /&gt;
** friv&lt;br /&gt;
** Sandbox&lt;br /&gt;
** Opensandbox&lt;br /&gt;
** Service Instance&lt;br /&gt;
** &amp;quot;Ports&amp;quot;&lt;br /&gt;
** vop &amp;lt;-- Do we want to talk about&lt;br /&gt;
** sop &amp;lt;-- Do we want to talk about&lt;br /&gt;
* What the testing was&lt;br /&gt;
** Running speed tests not security test , Anil said WHY ? mabey because OS conference cares about speed&lt;br /&gt;
** &lt;br /&gt;
* Conclusions&lt;br /&gt;
** Mostly a theoretical paper&lt;br /&gt;
&lt;br /&gt;
** Notes&lt;br /&gt;
*** Do we want to show figure 2 &amp;lt;---- for what they did&lt;br /&gt;
*** Do we want to show figure 3 &amp;lt;--- for what they did and how it works&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=MashupOS&amp;diff=17388</id>
		<title>MashupOS</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=MashupOS&amp;diff=17388"/>
		<updated>2012-10-03T14:37:06Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: Added Basic framework&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Protection and communication abstractions for web browsers in MashupOS&lt;br /&gt;
* Where was it written - for OS people&lt;br /&gt;
** Proceedings of twenty-first ACM SIGOPS symposium on Operating systems principles&lt;br /&gt;
Pages 1-16 &lt;br /&gt;
** Not security and not web people&lt;br /&gt;
* What the purposed&lt;br /&gt;
** Written by the same people as subspace paper&lt;br /&gt;
*** Which came first ?&lt;br /&gt;
** Sandbox EVERYTHING &amp;lt;-- solution to everything&lt;br /&gt;
* What the implemented&lt;br /&gt;
** friv&lt;br /&gt;
** Sandbox&lt;br /&gt;
** Opensandbox&lt;br /&gt;
** Service Instance&lt;br /&gt;
** &amp;quot;Ports&amp;quot;&lt;br /&gt;
* What the testing was&lt;br /&gt;
** Running speed tests not security test , Anil said WHY ? mabey because OS conference cares about speed&lt;br /&gt;
** &lt;br /&gt;
* Conclusions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
** Notes&lt;br /&gt;
*** Do we want to show figure 2 &amp;lt;---- for what they did&lt;br /&gt;
*** Do we want to show figure 3 &amp;lt;--- for what they did and how it works&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=OSWebSec:_Web_Mashups&amp;diff=17387</id>
		<title>OSWebSec: Web Mashups</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=OSWebSec:_Web_Mashups&amp;diff=17387"/>
		<updated>2012-10-03T14:19:54Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[MashupOS]]&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=OSWebSec:_Web_Mashups&amp;diff=17386</id>
		<title>OSWebSec: Web Mashups</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=OSWebSec:_Web_Mashups&amp;diff=17386"/>
		<updated>2012-10-03T14:18:29Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[WebOS]]&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=OSWebSec:_Web_Mashups&amp;diff=17385</id>
		<title>OSWebSec: Web Mashups</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=OSWebSec:_Web_Mashups&amp;diff=17385"/>
		<updated>2012-10-03T14:18:08Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: Created page with &amp;quot;wikipedia:WebOS&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[wikipedia:WebOS]]&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=COMP_3000_Essay_2_2010_Question_7&amp;diff=5580</id>
		<title>COMP 3000 Essay 2 2010 Question 7</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=COMP_3000_Essay_2_2010_Question_7&amp;diff=5580"/>
		<updated>2010-11-25T21:19:36Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Paper==&lt;br /&gt;
===Ad Hoc Synchronization Considered Harmful===&lt;br /&gt;
Weiwei Xiong&lt;br /&gt;
University of California, San Diego&lt;br /&gt;
&lt;br /&gt;
Soyeon Park, Jiaqi Zhang, Yuanyuan Zhou&lt;br /&gt;
University of Illinois at Urbana-Champaign&lt;br /&gt;
&lt;br /&gt;
Zhiqiang Ma&lt;br /&gt;
Intel&lt;br /&gt;
==Research Problem==&lt;br /&gt;
As the computer industry continues to shift towards multicore processors, concurrent programming and the use of multithreaded designs has increased to keep up with this growing trend. Multithreaded applications can be found in a variety of popular applications today as they take advantage of the multithreaded approach. However, the concepts behind concurrent programming bring with them a host of potential dangers in the form of race conditions and deadlocks resulting from bad programming design and threads accessing shared memory. Fortunately, there are well known and standard methods for dealing with these problems, i.e synchronization primitives. But in real world situations, due to a variety of reasons, as we shall see, programmers often implement their own &amp;quot;ad hoc&amp;quot; synchronizations that eschew common design standards. Ad hoc synchronizations are not well documented and are not discovered by traditional tools for race conditions that look for standard synchronization primitives.&lt;br /&gt;
&lt;br /&gt;
This paper addresses these concerns in two regards, first it details a thorough study of ad hoc synchronizations. It details their nature, dangers, impact on bug detection tools and prevalence in several major open-source applications. Secondly, it introduces SyncFinder, a program that detects all ad hoc synchronizations and automatically annotates the source code where ad hoc sychnronizations are found. This can see use in conjunction with other data race checkers to improve accuracy and to build custom tools for finding deadlocks and bad programming practices. &lt;br /&gt;
&lt;br /&gt;
With detailed analysis of ad hoc synchronization and study of their occurrences in several applications, the research ultimately concludes that they are harmful and should be removed. At the same time, SyncFinder detects and documents ad hoc synchronizations in the source code enabling programmers for the first time to easily track and remove them.&lt;br /&gt;
&lt;br /&gt;
==Background Concepts==&lt;br /&gt;
===Race conditions, deadlocks===&lt;br /&gt;
Race conditions are an unintended side-effects of programming in concurrent systems, they occur when two or more processes have access to a shared resource and at least one of them have write privilege. This leads to processes modifying the data that all processes share as other may be reading them and results in the reading of stale/incorrect data. They will occur during the execution of the program and often times very difficult to detect or manipulate data in subtle ways. &lt;br /&gt;
&lt;br /&gt;
Deadlock is when two or more processes share a resource and each process is waiting on the other processes to unlock the resource. It becomes a circular chain and no process can continue.&lt;br /&gt;
&lt;br /&gt;
Both these issues occur in concurrent programming and although there are no general solutions for deadlock&amp;lt;sup&amp;gt;[[#Foot9|9]]&amp;lt;/sup&amp;gt;, there are suitable methods for dealing with them, and in the case of race conditions, using mutual exclusion locks and synchronization primitives can prevent race conditions. But no programmer is infallible and so there is always the issue of race conditions and deadlocks present in production code.&lt;br /&gt;
===Ad Hoc Synchronization===&lt;br /&gt;
Ad hoc synchronizations are loops called sync loops that continue until certain conditions are met via outside variables called sync variables. They are designed to control the flow of thread execution much like locking and unlocking of resources. There can be multiple sync variables in a sync loop and they can have multiple exit conditions and dependencies. The diversity of the sync loops, their dependencies and execution paths leads to difficulty in finding them.&lt;br /&gt;
===Synchronization primitives===&lt;br /&gt;
Synchronization variables act as barriers to memory that prevent threads from accessing the same shared resource concurrently&amp;lt;sup&amp;gt;[[#Foot8|8]]&amp;lt;/sup&amp;gt;. They come in many forms such as mutexes and condition variables.&lt;br /&gt;
Mutexes are mutual exclusive locks that threads employ to lock a resource that they need. No other threads can access them at that point. Once they are finished, they release the lock and the other threads can then lock and access the resource.&lt;br /&gt;
Condition variables are variables that will block the thread until a certain condition is met. This allows the thread to only execute when it is safe to perform its operation.&lt;br /&gt;
&lt;br /&gt;
==Contribution==&lt;br /&gt;
Intro to the study of the major applications and what they found&lt;br /&gt;
&lt;br /&gt;
===Findings===&lt;br /&gt;
1.they are prevalent, all applications had them&lt;br /&gt;
&lt;br /&gt;
2. hard to find&lt;br /&gt;
&lt;br /&gt;
3. error prone&lt;br /&gt;
&lt;br /&gt;
4.effect other bug detection&lt;br /&gt;
&lt;br /&gt;
5. They are diverse. Different forms, multiple exits and dependencies&lt;br /&gt;
&lt;br /&gt;
Reasons behind why people use ad hoc synchronization and possible improvements over them ie Synchronization primitives&lt;br /&gt;
&lt;br /&gt;
===SyncFinder===&lt;br /&gt;
Intro to what it is and what it does&lt;br /&gt;
====How it works====&lt;br /&gt;
1. find loops&lt;br /&gt;
&lt;br /&gt;
2. identify sync loops&lt;br /&gt;
&lt;br /&gt;
3. EDV analysis&lt;br /&gt;
&lt;br /&gt;
4. Pruning&lt;br /&gt;
&lt;br /&gt;
5. Annotation of found sync&lt;br /&gt;
&lt;br /&gt;
====Uses====&lt;br /&gt;
1. A tool to detect bad practices&lt;br /&gt;
&lt;br /&gt;
2. Extensions to data race detection&lt;br /&gt;
&lt;br /&gt;
====Accuracy====&lt;br /&gt;
&lt;br /&gt;
====Related Work and similar tools====&lt;br /&gt;
There has been attempts to remove synchronization issues entirely from concurrent programming, such as transactional memory&amp;lt;sup&amp;gt;[[#Foot1|1]]&amp;lt;/sup&amp;gt;, a lock-free synchronization that does not require mutexes, and avoids having to use lock, unlock operations. Other attempts have been made to remove bugs that would otherwise be safe from data races but are are still at risk of unintended effects from thread interactions, such as Atomizer&amp;lt;sup&amp;gt;[[#Foot2|2]]&amp;lt;/sup&amp;gt;, a dynamic atomicity checker.&lt;br /&gt;
&lt;br /&gt;
There are tools that detect data races such as CHESS&amp;lt;sup&amp;gt;[[#Foot3|3]]&amp;lt;/sup&amp;gt;, a dynamic data race checker that runs through all possible thread execution paths and CTrigger&amp;lt;sup&amp;gt;[[#Foot4|4]]&amp;lt;/sup&amp;gt;, a tool that checks for atomicity violations. The problem with these programs is that they only look for standard synchronization methods and structures, such as lock() and cond_wait(). They are not looking for ad hoc synchronizations.&lt;br /&gt;
&lt;br /&gt;
A similar tool to SyncFinder exists that can detect simple spinning, also an ad hoc synchronization&amp;lt;sup&amp;gt;[[#Foot5|5]]&amp;lt;/sup&amp;gt;, but it only detects simple spinning and not the more complicated ad hoc variations.&lt;br /&gt;
&lt;br /&gt;
Several studies on bug characteristics&amp;lt;sup&amp;gt;[[#Foot6|6]]&amp;lt;/sup&amp;gt; and concurrency bugs&amp;lt;sup&amp;gt;[[#Foot7|7]]&amp;lt;/sup&amp;gt; have been composed. This paper complements these studies to better understand the nature of ad hoc synchronizations and their occurrence in concurrent programs.&lt;br /&gt;
&lt;br /&gt;
==Critique==&lt;br /&gt;
1. Uses static approach, dynamic would be better&lt;br /&gt;
* As stated in the paper, dynamic introduces run-time overhead and is not guaranteed to find if not executed in the test cases&lt;br /&gt;
&lt;br /&gt;
2. not entirely accurate, some false positives.&lt;br /&gt;
&lt;br /&gt;
3. In terms of style, lots of unnecessary repetition&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot1&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; M Herlihy and J.E.B. Moss, 2NA0. Transactional Memory:&lt;br /&gt;
Architectural Support for Lock-Free Data Structures. [online] Available at: &amp;lt;http://www.cs.brown.edu/~mph/HerlihyM93/herlihy93transactional.pdf&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot2&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; C Flanagan and S N Freund, 2NA0. Atomizer: A Dynamic Atomicity Checker For Multithreaded Programs (Summary). [online] Company(optional) Available at: &amp;lt;http://www.cs.williams.edu/~freund/papers/atomizer-padtad.pdf&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot3&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; T Ball,M Musuvathi and S Qadeer, 2NA0. CHESS: A Systematic Testing Tool for Concurrent. [online] Company(optional) Available at: &amp;lt;http://research.microsoft.com/pubs/70509/tr-2007-149.pdf&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot4&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;4&amp;lt;/sup&amp;gt; Author, 2NA0. Title. [online] Company(optional) Available at: &amp;lt;http://pages.cs.wisc.edu/~shanlu/paper/asplos092-zhou.pdf&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot5&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;5&amp;lt;/sup&amp;gt; LI, T., LEBECK, A. R., AND SORIN, D. J. Spin detection hardware for improved management of multithreaded systems. IEEE Transactions on Parallel and Distributed Systems PDS-17, 6 (June 2006), 508–521.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot6&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;6&amp;lt;/sup&amp;gt; Author, 2NA0. Title. [online] Company(optional) Available at: &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.121.1203&amp;amp;amp;rep=rep1&amp;amp;amp;type=pdf&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot7&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;7&amp;lt;/sup&amp;gt; Author, 2NA0. Title. [online] Company(optional) Available at: &amp;lt;[http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.121.1203&amp;amp;amp;rep=rep1&amp;amp;amp;type=pdf]&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot8&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;8&amp;lt;/sup&amp;gt; Author, 2NA0. Title. [online] Company(optional) Available at: &amp;lt;[http://www.usenix.org/events/bsdcon/full_papers/baldwin/baldwin_html/node5.html]&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot9&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;9&amp;lt;/sup&amp;gt; Author, 2010. Title. [online] Company(optional) Available at: &amp;lt;http://homeostasis.scs.carleton.ca/wiki/index.php/Basic_Synchronization_Principles&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=COMP_3000_Essay_2_2010_Question_7&amp;diff=5579</id>
		<title>COMP 3000 Essay 2 2010 Question 7</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=COMP_3000_Essay_2_2010_Question_7&amp;diff=5579"/>
		<updated>2010-11-25T21:01:49Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Paper==&lt;br /&gt;
===Ad Hoc Synchronization Considered Harmful===&lt;br /&gt;
Weiwei Xiong&lt;br /&gt;
University of California, San Diego&lt;br /&gt;
&lt;br /&gt;
Soyeon Park, Jiaqi Zhang, Yuanyuan Zhou&lt;br /&gt;
University of Illinois at Urbana-Champaign&lt;br /&gt;
&lt;br /&gt;
Zhiqiang Ma&lt;br /&gt;
Intel&lt;br /&gt;
==Research Problem==&lt;br /&gt;
As the computer industry continues to shift towards multicore processors, concurrent programming and the use of multithreaded designs has increased to keep up with this growing trend. Multithreaded applications can be found in a variety of popular applications today as they take advantage of the multithreaded approach. However, the concepts behind concurrent programming bring with them a host of potential dangers in the form of race conditions and deadlocks resulting from bad programming design and threads accessing shared memory. Fortunately, there are well known and standard methods for dealing with these problems, i.e synchronization primitives. But in real world situations, due to a variety of reasons, as we shall see, programmers often implement their own &amp;quot;ad hoc&amp;quot; synchronizations that eschew common design standards. Ad hoc synchronizations are not well documented and are not discovered by traditional tools for race conditions that look for standard synchronization primitives.&lt;br /&gt;
&lt;br /&gt;
This paper addresses these concerns in two regards, first it details a thorough study of ad hoc synchronizations. It details their nature, dangers, impact on bug detection tools and prevalence in several major open-source applications. Secondly, it introduces SyncFinder, a program that detects all ad hoc synchronizations and automatically annotates the source code where ad hoc sychnronizations are found. This can see use in conjunction with other data race checkers to improve accuracy and to build custom tools for finding deadlocks and bad programming practices. &lt;br /&gt;
&lt;br /&gt;
With detailed analysis of ad hoc synchronization and study of their occurrences in several applications, the research ultimately concludes that they are harmful and should be removed. At the same time, SyncFinder detects and documents ad hoc synchronizations in the source code enabling programmers for the first time to easily track and remove them.&lt;br /&gt;
&lt;br /&gt;
==Background Concepts==&lt;br /&gt;
===Race conditions, deadlocks===&lt;br /&gt;
Race conditions are an unintended side-effects of programming in concurrent systems, they occur when two or more processes have access to a shared resource and at least one of them have write privilege. This leads to processes modifying the data that all processes share as other may be reading them and results in the reading of stale/incorrect data. They will occur during the execution of the program and often times very difficult to detect or manipulate data in subtle ways. &lt;br /&gt;
&lt;br /&gt;
Deadlock is when two or more processes share a resource and each process is waiting on the other processes to unlock the resource. It becomes a circular chain and no process can continue.&lt;br /&gt;
&lt;br /&gt;
Both these issues occur in concurrent programming and although there are no general solutions for deadlock&amp;lt;sup&amp;gt;[[#Foot9|9]]&amp;lt;/sup&amp;gt;, there are suitable methods for dealing with them, and in the case of race conditions, using mutual exclusion locks and synchronization primitives can prevent race conditions. But no programmer is infallible and so there is always the issue of race conditions and deadlocks present in production code.&lt;br /&gt;
===Ad Hoc Synchronization===&lt;br /&gt;
Ad hoc synchronizations are loops called sync loops that continue until certain conditions are met via outside variables called sync variables. They are designed to control the flow of thread execution much like locking and unlocking of resources. There can be multiple sync variables in a sync loop and they can have multiple exit conditions and dependencies. The diversity of the sync loops, their dependencies and execution paths leads to difficulty in finding them.&lt;br /&gt;
===Synchronization primitives===&lt;br /&gt;
Synchronization variables act as barriers to memory that prevent threads from accessing the same shared resource concurrently&amp;lt;sup&amp;gt;[[#Foot8|8]]&amp;lt;/sup&amp;gt;. They come in many forms such as mutexes and condition variables.&lt;br /&gt;
Mutexes are mutual exclusive locks that threads employ to lock a resource that they need. No other threads can access them at that point. Once they are finished, they release the lock and the other threads can then lock and access the resource.&lt;br /&gt;
Condition variables are variables that will block the thread until a certain condition is met. This allows the thread to only execute when it is safe to perform its operation.&lt;br /&gt;
&lt;br /&gt;
==Contribution==&lt;br /&gt;
Intro to the study of the major applications and what they found&lt;br /&gt;
&lt;br /&gt;
===Findings===&lt;br /&gt;
1.they are prevalent, all applications had them&lt;br /&gt;
&lt;br /&gt;
2. hard to find&lt;br /&gt;
&lt;br /&gt;
3. error prone&lt;br /&gt;
&lt;br /&gt;
4.effect other bug detection&lt;br /&gt;
&lt;br /&gt;
5. They are diverse. Different forms, multiple exits and dependencies&lt;br /&gt;
&lt;br /&gt;
Reasons behind why people use ad hoc synchronization and possible improvements over them ie Synchronization primitives&lt;br /&gt;
&lt;br /&gt;
===SyncFinder===&lt;br /&gt;
Intro to what it is and what it does&lt;br /&gt;
====How it works====&lt;br /&gt;
1. find loops&lt;br /&gt;
&lt;br /&gt;
2. identify sync loops&lt;br /&gt;
&lt;br /&gt;
3. EDV analysis&lt;br /&gt;
&lt;br /&gt;
4. Pruning&lt;br /&gt;
&lt;br /&gt;
5. Annotation of found sync&lt;br /&gt;
&lt;br /&gt;
====Uses====&lt;br /&gt;
1. A tool to detect bad practices&lt;br /&gt;
&lt;br /&gt;
2. Extensions to data race detection&lt;br /&gt;
&lt;br /&gt;
====Accuracy====&lt;br /&gt;
&lt;br /&gt;
====Related Work and similar tools====&lt;br /&gt;
There has been attempts to remove synchronization issues entirely from concurrent programming, such as transactional memory&amp;lt;sup&amp;gt;[[#Foot1|1]]&amp;lt;/sup&amp;gt;, a lock-free synchronization that does not require mutexes, and avoids having to use lock, unlock operations. Other attempts have been made to remove bugs that would otherwise be safe from data races but are are still at risk of unintended effects from thread interactions, such as Atomizer&amp;lt;sup&amp;gt;[[#Foot2|2]]&amp;lt;/sup&amp;gt;, a dynamic atomicity checker.&lt;br /&gt;
&lt;br /&gt;
There are tools that detect data races such as CHESS&amp;lt;sup&amp;gt;[[#Foot3|3]]&amp;lt;/sup&amp;gt;, a dynamic data race checker that runs through all possible thread execution paths and CTrigger&amp;lt;sup&amp;gt;[[#Foot4|4]]&amp;lt;/sup&amp;gt;, a tool that checks for atomicity violations. The problem with these programs is that they only look for standard synchronization methods and structures, such as lock() and cond_wait(). They are not looking for ad hoc synchronizations.&lt;br /&gt;
&lt;br /&gt;
A similar tool to SyncFinder exists that can detect simple spinning, also an ad hoc synchronization&amp;lt;sup&amp;gt;[[#Foot5|5]]&amp;lt;/sup&amp;gt;, but it only detects simple spinning and not the more complicated ad hoc variations.&lt;br /&gt;
&lt;br /&gt;
Several studies on bug characteristics&amp;lt;sup&amp;gt;[[#Foot6|6]]&amp;lt;/sup&amp;gt; and concurrency bugs&amp;lt;sup&amp;gt;[[#Foot7|7]]&amp;lt;/sup&amp;gt; have been composed. This paper complements these studies to better understand the nature of ad hoc synchronizations and their occurrence in concurrent programs.&lt;br /&gt;
&lt;br /&gt;
==Critique==&lt;br /&gt;
1. Uses static approach, dynamic would be better&lt;br /&gt;
* As stated in the paper, dynamic introduces run-time overhead and is not guaranteed to find if not executed in the test cases&lt;br /&gt;
&lt;br /&gt;
2. not entirely accurate, some false positives.&lt;br /&gt;
&lt;br /&gt;
3. In terms of style, lots of unnecessary repetition&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot1&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; M Herlihy and J.E.B. Moss, 2NA0. Transactional Memory:&lt;br /&gt;
Architectural Support for Lock-Free Data Structures. [online] Available at: &amp;lt;http://www.cs.brown.edu/~mph/HerlihyM93/herlihy93transactional.pdf&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot2&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; C Flanagan and S N Freund, 2NA0. Atomizer: A Dynamic Atomicity Checker For Multithreaded Programs (Summary). [online] Company(optional) Available at: &amp;lt;http://www.cs.williams.edu/~freund/papers/atomizer-padtad.pdf&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot3&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; Author, 2NA0. Title. [online] Company(optional) Available at: &amp;lt;http://research.microsoft.com/pubs/70509/tr-2007-149.pdf&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot4&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;4&amp;lt;/sup&amp;gt; Author, 2NA0. Title. [online] Company(optional) Available at: &amp;lt;http://pages.cs.wisc.edu/~shanlu/paper/asplos092-zhou.pdf&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot5&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;5&amp;lt;/sup&amp;gt; LI, T., LEBECK, A. R., AND SORIN, D. J. Spin detection hardware for improved management of multithreaded systems. IEEE Transactions on Parallel and Distributed Systems PDS-17, 6 (June 2006), 508–521.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot6&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;6&amp;lt;/sup&amp;gt; Author, 2NA0. Title. [online] Company(optional) Available at: &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.121.1203&amp;amp;amp;rep=rep1&amp;amp;amp;type=pdf&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot7&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;7&amp;lt;/sup&amp;gt; Author, 2NA0. Title. [online] Company(optional) Available at: &amp;lt;[http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.121.1203&amp;amp;amp;rep=rep1&amp;amp;amp;type=pdf]&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot8&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;8&amp;lt;/sup&amp;gt; Author, 2NA0. Title. [online] Company(optional) Available at: &amp;lt;[http://www.usenix.org/events/bsdcon/full_papers/baldwin/baldwin_html/node5.html]&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot9&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;9&amp;lt;/sup&amp;gt; Author, 2010. Title. [online] Company(optional) Available at: &amp;lt;http://homeostasis.scs.carleton.ca/wiki/index.php/Basic_Synchronization_Principles&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=COMP_3000_Essay_2_2010_Question_7&amp;diff=5578</id>
		<title>COMP 3000 Essay 2 2010 Question 7</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=COMP_3000_Essay_2_2010_Question_7&amp;diff=5578"/>
		<updated>2010-11-25T20:58:37Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Paper==&lt;br /&gt;
===Ad Hoc Synchronization Considered Harmful===&lt;br /&gt;
Weiwei Xiong&lt;br /&gt;
University of California, San Diego&lt;br /&gt;
&lt;br /&gt;
Soyeon Park, Jiaqi Zhang, Yuanyuan Zhou&lt;br /&gt;
University of Illinois at Urbana-Champaign&lt;br /&gt;
&lt;br /&gt;
Zhiqiang Ma&lt;br /&gt;
Intel&lt;br /&gt;
==Research Problem==&lt;br /&gt;
As the computer industry continues to shift towards multicore processors, concurrent programming and the use of multithreaded designs has increased to keep up with this growing trend. Multithreaded applications can be found in a variety of popular applications today as they take advantage of the multithreaded approach. However, the concepts behind concurrent programming bring with them a host of potential dangers in the form of race conditions and deadlocks resulting from bad programming design and threads accessing shared memory. Fortunately, there are well known and standard methods for dealing with these problems, i.e synchronization primitives. But in real world situations, due to a variety of reasons, as we shall see, programmers often implement their own &amp;quot;ad hoc&amp;quot; synchronizations that eschew common design standards. Ad hoc synchronizations are not well documented and are not discovered by traditional tools for race conditions that look for standard synchronization primitives.&lt;br /&gt;
&lt;br /&gt;
This paper addresses these concerns in two regards, first it details a thorough study of ad hoc synchronizations. It details their nature, dangers, impact on bug detection tools and prevalence in several major open-source applications. Secondly, it introduces SyncFinder, a program that detects all ad hoc synchronizations and automatically annotates the source code where ad hoc sychnronizations are found. This can see use in conjunction with other data race checkers to improve accuracy and to build custom tools for finding deadlocks and bad programming practices. &lt;br /&gt;
&lt;br /&gt;
With detailed analysis of ad hoc synchronization and study of their occurrences in several applications, the research ultimately concludes that they are harmful and should be removed. At the same time, SyncFinder detects and documents ad hoc synchronizations in the source code enabling programmers for the first time to easily track and remove them.&lt;br /&gt;
&lt;br /&gt;
==Background Concepts==&lt;br /&gt;
===Race conditions, deadlocks===&lt;br /&gt;
Race conditions are an unintended side-effects of programming in concurrent systems, they occur when two or more processes have access to a shared resource and at least one of them have write privilege. This leads to processes modifying the data that all processes share as other may be reading them and results in the reading of stale/incorrect data. They will occur during the execution of the program and often times very difficult to detect or manipulate data in subtle ways. &lt;br /&gt;
&lt;br /&gt;
Deadlock is when two or more processes share a resource and each process is waiting on the other processes to unlock the resource. It becomes a circular chain and no process can continue.&lt;br /&gt;
&lt;br /&gt;
Both these issues occur in concurrent programming and although there are no general solutions for deadlock&amp;lt;sup&amp;gt;[[#Foot9|9]]&amp;lt;/sup&amp;gt;, there are suitable methods for dealing with them, and in the case of race conditions, using mutual exclusion locks and synchronization primitives can prevent race conditions. But no programmer is infallible and so there is always the issue of race conditions and deadlocks present in production code.&lt;br /&gt;
===Ad Hoc Synchronization===&lt;br /&gt;
Ad hoc synchronizations are loops called sync loops that continue until certain conditions are met via outside variables called sync variables. They are designed to control the flow of thread execution much like locking and unlocking of resources. There can be multiple sync variables in a sync loop and they can have multiple exit conditions and dependencies. The diversity of the sync loops, their dependencies and execution paths leads to difficulty in finding them.&lt;br /&gt;
===Synchronization primitives===&lt;br /&gt;
Synchronization variables act as barriers to memory that prevent threads from accessing the same shared resource concurrently&amp;lt;sup&amp;gt;[[#Foot8|8]]&amp;lt;/sup&amp;gt;. They come in many forms such as mutexes and condition variables.&lt;br /&gt;
Mutexes are mutual exclusive locks that threads employ to lock a resource that they need. No other threads can access them at that point. Once they are finished, they release the lock and the other threads can then lock and access the resource.&lt;br /&gt;
Condition variables are variables that will block the thread until a certain condition is met. This allows the thread to only execute when it is safe to perform its operation.&lt;br /&gt;
&lt;br /&gt;
==Contribution==&lt;br /&gt;
Intro to the study of the major applications and what they found&lt;br /&gt;
&lt;br /&gt;
===Findings===&lt;br /&gt;
1.they are prevalent, all applications had them&lt;br /&gt;
&lt;br /&gt;
2. hard to find&lt;br /&gt;
&lt;br /&gt;
3. error prone&lt;br /&gt;
&lt;br /&gt;
4.effect other bug detection&lt;br /&gt;
&lt;br /&gt;
5. They are diverse. Different forms, multiple exits and dependencies&lt;br /&gt;
&lt;br /&gt;
Reasons behind why people use ad hoc synchronization and possible improvements over them ie Synchronization primitives&lt;br /&gt;
&lt;br /&gt;
===SyncFinder===&lt;br /&gt;
Intro to what it is and what it does&lt;br /&gt;
====How it works====&lt;br /&gt;
1. find loops&lt;br /&gt;
&lt;br /&gt;
2. identify sync loops&lt;br /&gt;
&lt;br /&gt;
3. EDV analysis&lt;br /&gt;
&lt;br /&gt;
4. Pruning&lt;br /&gt;
&lt;br /&gt;
5. Annotation of found sync&lt;br /&gt;
&lt;br /&gt;
====Uses====&lt;br /&gt;
1. A tool to detect bad practices&lt;br /&gt;
&lt;br /&gt;
2. Extensions to data race detection&lt;br /&gt;
&lt;br /&gt;
====Accuracy====&lt;br /&gt;
&lt;br /&gt;
====Related Work and similar tools====&lt;br /&gt;
There has been attempts to remove synchronization issues entirely from concurrent programming, such as transactional memory&amp;lt;sup&amp;gt;[[#Foot1|1]]&amp;lt;/sup&amp;gt;, a lock-free synchronization that does not require mutexes, and avoids having to use lock, unlock operations. Other attempts have been made to remove bugs that would otherwise be safe from data races but are are still at risk of unintended effects from thread interactions, such as Atomizer&amp;lt;sup&amp;gt;[[#Foot2|2]]&amp;lt;/sup&amp;gt;, a dynamic atomicity checker.&lt;br /&gt;
&lt;br /&gt;
There are tools that detect data races such as CHESS&amp;lt;sup&amp;gt;[[#Foot3|3]]&amp;lt;/sup&amp;gt;, a dynamic data race checker that runs through all possible thread execution paths and CTrigger&amp;lt;sup&amp;gt;[[#Foot4|4]]&amp;lt;/sup&amp;gt;, a tool that checks for atomicity violations. The problem with these programs is that they only look for standard synchronization methods and structures, such as lock() and cond_wait(). They are not looking for ad hoc synchronizations.&lt;br /&gt;
&lt;br /&gt;
A similar tool to SyncFinder exists that can detect simple spinning, also an ad hoc synchronization&amp;lt;sup&amp;gt;[[#Foot5|5]]&amp;lt;/sup&amp;gt;, but it only detects simple spinning and not the more complicated ad hoc variations.&lt;br /&gt;
&lt;br /&gt;
Several studies on bug characteristics&amp;lt;sup&amp;gt;[[#Foot6|6]]&amp;lt;/sup&amp;gt; and concurrency bugs&amp;lt;sup&amp;gt;[[#Foot7|7]]&amp;lt;/sup&amp;gt; have been composed. This paper complements these studies to better understand the nature of ad hoc synchronizations and their occurrence in concurrent programs.&lt;br /&gt;
&lt;br /&gt;
==Critique==&lt;br /&gt;
1. Uses static approach, dynamic would be better&lt;br /&gt;
* As stated in the paper, dynamic introduces run-time overhead and is not guaranteed to find if not executed in the test cases&lt;br /&gt;
&lt;br /&gt;
2. not entirely accurate, some false positives.&lt;br /&gt;
&lt;br /&gt;
3. In terms of style, lots of unnecessary repetition&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot1&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; M Herlihy and J.E.B. Moss, 2NA0. Transactional Memory:&lt;br /&gt;
Architectural Support for Lock-Free Data Structures. [online] Available at: &amp;lt;http://www.cs.brown.edu/~mph/HerlihyM93/herlihy93transactional.pdf&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot2&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; Author, 2010. Title. [online] Company(optional) Available at: &amp;lt;http://www.cs.williams.edu/~freund/papers/atomizer-padtad.pdf&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot3&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; Author, 2010. Title. [online] Company(optional) Available at: &amp;lt;http://research.microsoft.com/pubs/70509/tr-2007-149.pdf&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot4&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;4&amp;lt;/sup&amp;gt; Author, 2010. Title. [online] Company(optional) Available at: &amp;lt;http://pages.cs.wisc.edu/~shanlu/paper/asplos092-zhou.pdf&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot5&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;5&amp;lt;/sup&amp;gt; LI, T., LEBECK, A. R., AND SORIN, D. J. Spin detection hardware for improved management of multithreaded systems. IEEE Transactions on Parallel and Distributed Systems PDS-17, 6 (June 2006), 508–521.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot6&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;6&amp;lt;/sup&amp;gt; Author, 2010. Title. [online] Company(optional) Available at: &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.121.1203&amp;amp;amp;rep=rep1&amp;amp;amp;type=pdf&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot7&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;7&amp;lt;/sup&amp;gt; Author, 2010. Title. [online] Company(optional) Available at: &amp;lt;[http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.121.1203&amp;amp;amp;rep=rep1&amp;amp;amp;type=pdf]&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot8&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;8&amp;lt;/sup&amp;gt; Author, 2010. Title. [online] Company(optional) Available at: &amp;lt;[http://www.usenix.org/events/bsdcon/full_papers/baldwin/baldwin_html/node5.html]&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot9&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;9&amp;lt;/sup&amp;gt; Author, 2010. Title. [online] Company(optional) Available at: &amp;lt;http://homeostasis.scs.carleton.ca/wiki/index.php/Basic_Synchronization_Principles&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=COMP_3000_Essay_2_2010_Question_7&amp;diff=5577</id>
		<title>COMP 3000 Essay 2 2010 Question 7</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=COMP_3000_Essay_2_2010_Question_7&amp;diff=5577"/>
		<updated>2010-11-25T20:58:15Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Paper==&lt;br /&gt;
===Ad Hoc Synchronization Considered Harmful===&lt;br /&gt;
Weiwei Xiong&lt;br /&gt;
University of California, San Diego&lt;br /&gt;
&lt;br /&gt;
Soyeon Park, Jiaqi Zhang, Yuanyuan Zhou&lt;br /&gt;
University of Illinois at Urbana-Champaign&lt;br /&gt;
&lt;br /&gt;
Zhiqiang Ma&lt;br /&gt;
Intel&lt;br /&gt;
==Research Problem==&lt;br /&gt;
As the computer industry continues to shift towards multicore processors, concurrent programming and the use of multithreaded designs has increased to keep up with this growing trend. Multithreaded applications can be found in a variety of popular applications today as they take advantage of the multithreaded approach. However, the concepts behind concurrent programming bring with them a host of potential dangers in the form of race conditions and deadlocks resulting from bad programming design and threads accessing shared memory. Fortunately, there are well known and standard methods for dealing with these problems, i.e synchronization primitives. But in real world situations, due to a variety of reasons, as we shall see, programmers often implement their own &amp;quot;ad hoc&amp;quot; synchronizations that eschew common design standards. Ad hoc synchronizations are not well documented and are not discovered by traditional tools for race conditions that look for standard synchronization primitives.&lt;br /&gt;
&lt;br /&gt;
This paper addresses these concerns in two regards, first it details a thorough study of ad hoc synchronizations. It details their nature, dangers, impact on bug detection tools and prevalence in several major open-source applications. Secondly, it introduces SyncFinder, a program that detects all ad hoc synchronizations and automatically annotates the source code where ad hoc sychnronizations are found. This can see use in conjunction with other data race checkers to improve accuracy and to build custom tools for finding deadlocks and bad programming practices. &lt;br /&gt;
&lt;br /&gt;
With detailed analysis of ad hoc synchronization and study of their occurrences in several applications, the research ultimately concludes that they are harmful and should be removed. At the same time, SyncFinder detects and documents ad hoc synchronizations in the source code enabling programmers for the first time to easily track and remove them.&lt;br /&gt;
&lt;br /&gt;
==Background Concepts==&lt;br /&gt;
===Race conditions, deadlocks===&lt;br /&gt;
Race conditions are an unintended side-effects of programming in concurrent systems, they occur when two or more processes have access to a shared resource and at least one of them have write privilege. This leads to processes modifying the data that all processes share as other may be reading them and results in the reading of stale/incorrect data. They will occur during the execution of the program and often times very difficult to detect or manipulate data in subtle ways. &lt;br /&gt;
&lt;br /&gt;
Deadlock is when two or more processes share a resource and each process is waiting on the other processes to unlock the resource. It becomes a circular chain and no process can continue.&lt;br /&gt;
&lt;br /&gt;
Both these issues occur in concurrent programming and although there are no general solutions for deadlock&amp;lt;sup&amp;gt;[[#Foot9|9]]&amp;lt;/sup&amp;gt;, there are suitable methods for dealing with them, and in the case of race conditions, using mutual exclusion locks and synchronization primitives can prevent race conditions. But no programmer is infallible and so there is always the issue of race conditions and deadlocks present in production code.&lt;br /&gt;
===Ad Hoc Synchronization===&lt;br /&gt;
Ad hoc synchronizations are loops called sync loops that continue until certain conditions are met via outside variables called sync variables. They are designed to control the flow of thread execution much like locking and unlocking of resources. There can be multiple sync variables in a sync loop and they can have multiple exit conditions and dependencies. The diversity of the sync loops, their dependencies and execution paths leads to difficulty in finding them.&lt;br /&gt;
===Synchronization primitives===&lt;br /&gt;
Synchronization variables act as barriers to memory that prevent threads from accessing the same shared resource concurrently&amp;lt;sup&amp;gt;[[#Foot8|8]]&amp;lt;/sup&amp;gt;. They come in many forms such as mutexes and condition variables.&lt;br /&gt;
Mutexes are mutual exclusive locks that threads employ to lock a resource that they need. No other threads can access them at that point. Once they are finished, they release the lock and the other threads can then lock and access the resource.&lt;br /&gt;
Condition variables are variables that will block the thread until a certain condition is met. This allows the thread to only execute when it is safe to perform its operation.&lt;br /&gt;
&lt;br /&gt;
==Contribution==&lt;br /&gt;
Intro to the study of the major applications and what they found&lt;br /&gt;
&lt;br /&gt;
===Findings===&lt;br /&gt;
1.they are prevalent, all applications had them&lt;br /&gt;
&lt;br /&gt;
2. hard to find&lt;br /&gt;
&lt;br /&gt;
3. error prone&lt;br /&gt;
&lt;br /&gt;
4.effect other bug detection&lt;br /&gt;
&lt;br /&gt;
5. They are diverse. Different forms, multiple exits and dependencies&lt;br /&gt;
&lt;br /&gt;
Reasons behind why people use ad hoc synchronization and possible improvements over them ie Synchronization primitives&lt;br /&gt;
&lt;br /&gt;
===SyncFinder===&lt;br /&gt;
Intro to what it is and what it does&lt;br /&gt;
====How it works====&lt;br /&gt;
1. find loops&lt;br /&gt;
&lt;br /&gt;
2. identify sync loops&lt;br /&gt;
&lt;br /&gt;
3. EDV analysis&lt;br /&gt;
&lt;br /&gt;
4. Pruning&lt;br /&gt;
&lt;br /&gt;
5. Annotation of found sync&lt;br /&gt;
&lt;br /&gt;
====Uses====&lt;br /&gt;
1. A tool to detect bad practices&lt;br /&gt;
&lt;br /&gt;
2. Extensions to data race detection&lt;br /&gt;
&lt;br /&gt;
====Accuracy====&lt;br /&gt;
&lt;br /&gt;
====Related Work and similar tools====&lt;br /&gt;
There has been attempts to remove synchronization issues entirely from concurrent programming, such as transactional memory&amp;lt;sup&amp;gt;[[#Foot1|1]]&amp;lt;/sup&amp;gt;, a lock-free synchronization that does not require mutexes, and avoids having to use lock, unlock operations. Other attempts have been made to remove bugs that would otherwise be safe from data races but are are still at risk of unintended effects from thread interactions, such as Atomizer&amp;lt;sup&amp;gt;[[#Foot2|2]]&amp;lt;/sup&amp;gt;, a dynamic atomicity checker.&lt;br /&gt;
&lt;br /&gt;
There are tools that detect data races such as CHESS&amp;lt;sup&amp;gt;[[#Foot3|3]]&amp;lt;/sup&amp;gt;, a dynamic data race checker that runs through all possible thread execution paths and CTrigger&amp;lt;sup&amp;gt;[[#Foot4|4]]&amp;lt;/sup&amp;gt;, a tool that checks for atomicity violations. The problem with these programs is that they only look for standard synchronization methods and structures, such as lock() and cond_wait(). They are not looking for ad hoc synchronizations.&lt;br /&gt;
&lt;br /&gt;
A similar tool to SyncFinder exists that can detect simple spinning, also an ad hoc synchronization&amp;lt;sup&amp;gt;[[#Foot5|5]]&amp;lt;/sup&amp;gt;, but it only detects simple spinning and not the more complicated ad hoc variations.&lt;br /&gt;
&lt;br /&gt;
Several studies on bug characteristics&amp;lt;sup&amp;gt;[[#Foot6|6]]&amp;lt;/sup&amp;gt; and concurrency bugs&amp;lt;sup&amp;gt;[[#Foot7|7]]&amp;lt;/sup&amp;gt; have been composed. This paper complements these studies to better understand the nature of ad hoc synchronizations and their occurrence in concurrent programs.&lt;br /&gt;
&lt;br /&gt;
==Critique==&lt;br /&gt;
1. Uses static approach, dynamic would be better&lt;br /&gt;
* As stated in the paper, dynamic introduces run-time overhead and is not guaranteed to find if not executed in the test cases&lt;br /&gt;
&lt;br /&gt;
2. not entirely accurate, some false positives.&lt;br /&gt;
&lt;br /&gt;
3. In terms of style, lots of unnecessary repetition&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot1&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; M Herlihy and J.E.B. Moss, 2NA0. Transactional Memory:&lt;br /&gt;
Architectural Support for Lock-Free Data Structures. [online] Company(optional) Available at: &amp;lt;http://www.cs.brown.edu/~mph/HerlihyM93/herlihy93transactional.pdf&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot2&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; Author, 2010. Title. [online] Company(optional) Available at: &amp;lt;http://www.cs.williams.edu/~freund/papers/atomizer-padtad.pdf&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot3&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; Author, 2010. Title. [online] Company(optional) Available at: &amp;lt;http://research.microsoft.com/pubs/70509/tr-2007-149.pdf&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot4&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;4&amp;lt;/sup&amp;gt; Author, 2010. Title. [online] Company(optional) Available at: &amp;lt;http://pages.cs.wisc.edu/~shanlu/paper/asplos092-zhou.pdf&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot5&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;5&amp;lt;/sup&amp;gt; LI, T., LEBECK, A. R., AND SORIN, D. J. Spin detection hardware for improved management of multithreaded systems. IEEE Transactions on Parallel and Distributed Systems PDS-17, 6 (June 2006), 508–521.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot6&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;6&amp;lt;/sup&amp;gt; Author, 2010. Title. [online] Company(optional) Available at: &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.121.1203&amp;amp;amp;rep=rep1&amp;amp;amp;type=pdf&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot7&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;7&amp;lt;/sup&amp;gt; Author, 2010. Title. [online] Company(optional) Available at: &amp;lt;[http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.121.1203&amp;amp;amp;rep=rep1&amp;amp;amp;type=pdf]&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot8&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;8&amp;lt;/sup&amp;gt; Author, 2010. Title. [online] Company(optional) Available at: &amp;lt;[http://www.usenix.org/events/bsdcon/full_papers/baldwin/baldwin_html/node5.html]&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;Foot9&amp;quot;&amp;gt;&amp;lt;sup&amp;gt;9&amp;lt;/sup&amp;gt; Author, 2010. Title. [online] Company(optional) Available at: &amp;lt;http://homeostasis.scs.carleton.ca/wiki/index.php/Basic_Synchronization_Principles&amp;gt; [Accessed 23 November 2010].&amp;lt;/span&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_2_2010_Question_7&amp;diff=4975</id>
		<title>Talk:COMP 3000 Essay 2 2010 Question 7</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_2_2010_Question_7&amp;diff=4975"/>
		<updated>2010-11-15T16:00:26Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Attendence. Please mark your name to say you&#039;re here&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Stephany Lay&lt;br /&gt;
--[[User:Asoknack|Asoknack]] 16:00, 15 November 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3559</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3559"/>
		<updated>2010-10-14T02:45:09Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* The Essay */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
* Large amount of moving from a process to Kernel to user space and back again, this is a costly operation.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Microkernel &#039;&#039;&#039;&lt;br /&gt;
* try&#039;s to minimize the amount of software that is mandatory or required [7]&lt;br /&gt;
advantages of Microkernel&lt;br /&gt;
* favors a modular system structure [7]&lt;br /&gt;
* one failure of a program does not impact any other programs [7]&lt;br /&gt;
* can support more than one api or strategies since all programs are separated [7]&lt;br /&gt;
==== Microkernel Concepts ==== &lt;br /&gt;
* piece of code is allowed in the kernel only if moving it outside the kernel would adversely affect the system. [7]&lt;br /&gt;
* any subsystem program created must be independent of all other subsystem&#039;s, any subsystem that is used can guarantee this from all other subsystems [7]&lt;br /&gt;
===== Address Space =====&lt;br /&gt;
* a mapping that relates the physical page to the virtual page. [7]&lt;br /&gt;
* processor specific [7]&lt;br /&gt;
* hide&#039;s the hardware&#039;s concept of address space [7]&lt;br /&gt;
* based off the idea of recursion each subsystem has it&#039;s own address space [7]&lt;br /&gt;
* the micro kernel provides 3 operations [7]&lt;br /&gt;
** Grant [7]&lt;br /&gt;
*** allows the owner to give a page to a recipient, provided the recipient want&#039;s it the page is removed from the owner&#039;s address space and but in the recipients. [7]&lt;br /&gt;
*** must be available to the owner. [7]&lt;br /&gt;
** Map [7]&lt;br /&gt;
*** allows the user to share a page with a recipient [7]&lt;br /&gt;
*** page is not removed from the owner&#039;s address space. [7]&lt;br /&gt;
** Flush [7]&lt;br /&gt;
*** remove&#039;s the page from all recipients address space [7]&lt;br /&gt;
*** how does this work with Grant --[[User:Asoknack|Asoknack]] 19:10, 12 October 2010 (UTC)&lt;br /&gt;
* allows memory management and paging out side the kernel&lt;br /&gt;
* Map and flush is required for memory manger&#039;s and pagers [7]&lt;br /&gt;
* can be used to implement access right&#039;s [7]&lt;br /&gt;
* controlling I/O Right&#039;s and driver&#039;s are not done at kernel level [7]&lt;br /&gt;
&lt;br /&gt;
===== Thread&#039;s IPC =====&lt;br /&gt;
* Threads&lt;br /&gt;
** in the kernel [7]&lt;br /&gt;
** Since a thread has an address space , all changes to the thread need to be done by the kernel [7]&lt;br /&gt;
* IPC [7]&lt;br /&gt;
** in the kernel IPC&lt;br /&gt;
** grant and map also need IPC  (So buye the priciple above this has to be in the kernel)[7]&lt;br /&gt;
** basic way for sub process to communicate. [7]&lt;br /&gt;
* Interrupts&lt;br /&gt;
** partially in the kernel [7]&lt;br /&gt;
** hard ware is a set of thread&#039;s which are empty except for there unique sender id [7]&lt;br /&gt;
** transformation of the message to the interrupt is done in the kernel [7]&lt;br /&gt;
** the kernel is not involved in device - specific interrupt&#039;s and does not understand the interrupt. [7]&lt;br /&gt;
*** resting the interrupt is done at user level [7]&lt;br /&gt;
** if a privileged command is need it is done implicitly the next time an IPC command is sent from the device [7]&lt;br /&gt;
&lt;br /&gt;
===== Unique Identifiers =====&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
System Level Virtualization&lt;br /&gt;
&lt;br /&gt;
=== VMM ===&lt;br /&gt;
* stands for Virtual Machine Monitor, also known as the hyper-visor[4]&lt;br /&gt;
* responsible for virtualization of hardware(mapping physical to virtual) and the VM that run on top of the virtuallized hardware [4]&lt;br /&gt;
* usually a small os with no drivers , so it is coupled with a linux distro that provides device / hardware access [4]&lt;br /&gt;
** the os that the VMM is using for driver&#039;s is called the hostOS [6]&lt;br /&gt;
*the hostOS provides login and physical access to the hardware as well as management for the VMM [6]&lt;br /&gt;
=== VM ===&lt;br /&gt;
* the OS that the vm is running is called the guestOS [6]&lt;br /&gt;
* the guestOS only sees resources that have been allocated to the VM [6]&lt;br /&gt;
==== three approaches ====&lt;br /&gt;
*Type I virtualization [5]&lt;br /&gt;
** runs off the physical hardware [4]&lt;br /&gt;
** Isolation of the guestOs from the hardware is done threw processe level protection meachnism[6]&lt;br /&gt;
*** ring 0 = VMM [6]&lt;br /&gt;
*** ring 1 = VM [6]&lt;br /&gt;
*** this means all instructions from the VM must go threw the VMM [6]&lt;br /&gt;
** since there can be multiple VM&#039;s on a computer the scheduling is done by the VMM [6]&lt;br /&gt;
** on boot the VMM creates a hardware platform for the VM [6]&lt;br /&gt;
** load&#039;s the VM kernel into virtual memory and then boot&#039;s it like a regular computer [6]&lt;br /&gt;
** ex. Xen [4]&lt;br /&gt;
*Type II virtualization [5]&lt;br /&gt;
** run off the host Os [4]&lt;br /&gt;
** ex. VMware , QEMU [4]&lt;br /&gt;
* Para-virtualization [6]&lt;br /&gt;
** Similar to Type but use the HostOs for Device driver access [6]&lt;br /&gt;
** Provide a virtualization that is similar to hardware [From the paper posted, no citation yet]&lt;br /&gt;
** GuestOS and Hypervisor work together to improve performance&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Micro-kernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* multiplex resources securely providing protection to mutual distrustful application threw the use of secure binding&#039;s[1]&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel separates protection from management in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking access to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the number of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad parameter passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is designed to interact with a low-level machine independent level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to create low level primitives that the hardware resources can be accessed from, this also includes interrupts,exceptions [1]&lt;br /&gt;
** the exokernel also export privileged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource management except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource management is the best way to build flexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
** Use physical name&#039;s when ever possible[3] (not to sure what physical names are, I think it is as simple as what the hardware is called)--[[User:Asoknack|Asoknack]] 20:27, 9 October 2010 (UTC)&lt;br /&gt;
** Physical names capture useful information [3]&lt;br /&gt;
*** safer than and less resource intensive than virtual names as no translations are needed[3]&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource management [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release[1](Visible means that when revocation happens the exokernel tell the LibOS that resource is being revoked)&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achieved threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allows the separation of protection and resource use [1]&lt;br /&gt;
* only checks authorization during bind time [1]&lt;br /&gt;
** Application&#039;s with complex needs for resources only authorized during bind.[1]&lt;br /&gt;
* access checking is done during access time and there is no need to understand complex resources needs during access[1]&lt;br /&gt;
** (this means that the exokernel checks once to make sure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** allows the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve performance[1]&lt;br /&gt;
** eliminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be scheduled [2]&lt;br /&gt;
==== Visible Resource Revocation ====&lt;br /&gt;
* Used for most resources [1]&lt;br /&gt;
** allows for LibOS to help with deallocation [1]&lt;br /&gt;
** LibOS are able to garner what resources are scare [1]&lt;br /&gt;
* Slower than Invisible as application involvement is required [1]&lt;br /&gt;
** ex of when invisible is used is Processor addressing-context identifiers [1]&lt;br /&gt;
==== Abort Protocol ====&lt;br /&gt;
* allows the exokernel to take resources away from the LibOS [1]&lt;br /&gt;
* used when the LibOS fails to respond to the revocation request [1]&lt;br /&gt;
* Exokernel must be careful not to delete as the LibOS might need to write some system critical data to the resource [1]&lt;br /&gt;
&lt;br /&gt;
== Comparisons  ==&lt;br /&gt;
====Exokernel/Microkernel====&lt;br /&gt;
&#039;&#039;&#039;Similarities&#039;&#039;&#039;&lt;br /&gt;
* Limited functionality in kernel&lt;br /&gt;
** functionality in kernel to handle sharing of resources and security&lt;br /&gt;
** avoids programming directly to hardware which creates a dependency&lt;br /&gt;
* Additional functionality provided in user space as processes&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* Minimal abstractions provided by the kernel&lt;br /&gt;
** Applications given more power in exokernel&lt;br /&gt;
&lt;br /&gt;
====Exokernel/VM====&lt;br /&gt;
&#039;&#039;&#039;Similarities&#039;&#039;&#039;&lt;br /&gt;
* Idea of partitioning resources between applications/OSs&lt;br /&gt;
* &amp;quot;Control&amp;quot; of resource given&lt;br /&gt;
* Isolation from other applications/OSs&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* Exokernel runs applications, VM runs OS&lt;br /&gt;
* VM uses a hostOS and guestOSs run on top&lt;br /&gt;
* Virtualization on VMs, Exokernel deals with real resources&lt;br /&gt;
* VM hides a lot of information because it emulates. Exokernel does not.&lt;br /&gt;
&lt;br /&gt;
====Microkernel/VM====&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* With a virtual machine, you are not virtualizing apps like with a microkernel but virtualizing an entire Operating System.&lt;br /&gt;
* This can be costly but the benefits are that it&#039;s easier and all the standard OS features are available.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., Kaashoek, M. F., and O&#039;Toole, J. 1995. Exokernel: an operating system architecture for application-level resource management. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 251-266. DOI= http://doi.acm.org/10.1145/224056.224076 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3]&amp;lt;nowiki&amp;gt;Kaashoek, M. F., Engler, D. R., Ganger, G. R., Briceño, H. M., Hunt, R., Mazières, D., Pinckney, T., Grimm, R., Jannotti, J., and Mackenzie, K. 1997. Application performance and flexibility on exokernel systems. In Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles  (Saint Malo, France, October 05 - 08, 1997). W. M. Waite, Ed. SOSP &#039;97. ACM, New York, NY, 52-65. DOI= http://doi.acm.org/10.1145/268998.266644 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4]&amp;lt;nowiki&amp;gt;Vallee, G.; Naughton, T.; Engelmann, C.; Hong Ong; Scott, S.L.; , &amp;quot;System-Level Virtualization for High Performance Computing,&amp;quot; Parallel, Distributed and Network-Based Processing, 2008. PDP 2008. 16th Euromicro Conference on , vol., no., pp.636-643, 13-15 Feb. 2008&lt;br /&gt;
DOI= http://doi.acm.org/10.1109/PDP.2008.85 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5]&amp;lt;nowiki&amp;gt;Goldberg, R. P. 1973. Architecture of virtual machines. In Proceedings of the Workshop on Virtual Computer Systems  (Cambridge, Massachusetts, United States, March 26 - 27, 1973). ACM, New York, NY, 74-112. DOI= http://doi.acm.org/10.1145/800122.803950 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6]&amp;lt;nowiki&amp;gt;Vallee, G., Naughton, T., and Scott, S. L. 2007. System management software for virtual environments. In Proceedings of the 4th international Conference on Computing Frontiers (Ischia, Italy, May 07 - 09, 2007). CF &#039;07. ACM, New York, NY, 153-160. DOI= http://doi.acm.org/10.1145/1242531.1242555 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7]&amp;lt;nowiki&amp;gt;Liedtke, J. 1995. On micro-kernel construction. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 237-250. DOI= http://doi.acm.org/10.1145/224056.224075 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
An overview of exokernels,virtual machines, microkernels *[http://www2.supchurch.org:10999/files/school/classes/CSCI4730/Lectures/grad-structures.ppt Overview](Power Point)&amp;lt;br&amp;gt;&lt;br /&gt;
Should not be used as a source but an overview.&lt;br /&gt;
&lt;br /&gt;
The original paper on [http://portal.acm.org/citation.cfm?id=224076 Exokernels] --[[User:Gautam|Gautam]] 22:39, 6 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I&#039;m just going to post my answer for question 1 on the individuel assignment and hope it helps. --[[User:Aellebla|Aellebla]] 15:06, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
The design of the micro kernel was to take everything they could out of the Kernel and put it into a process. For ex, networking would be put into a process instead of staying in the kernel. The micro kernel dev&#039;s tried to keep lots of things in user space for efficiency. But one major problem with this is there would be a large amount of moving from a process to the kernel to user space and back again and this is a costly, non efficient process.It was an application specific OS, there was no multiplexing. With a virtual machine you are not virtualizing apps like with a microkernel but virtualizing an entire Operating System. This is very heavy however but the benefits are that it‟s easy and all the standard OS features are there whereas in a microkernel setup they would not all be there and this can be seen as a compromise.&lt;br /&gt;
&lt;br /&gt;
Exokernels can be seen as a compromise to virtual machines and microkernels because virtual machines emulate and exokernels do not. When you emulate something you hide a lot of the actual information because you wouldn‟t be able to see the „real‟ hardware. If we look at a virtual box setup running Linux, and we go look at all the hardware, it will be displayed as fake hardware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;br /&gt;
&lt;br /&gt;
I think we should divide up the paragraphs and proofread each others instead. (Are there only 4 of us?) I don&#039;t have much time to work on this today though but I&#039;ll try to work on it tomorrow morning. - Slay&lt;br /&gt;
&lt;br /&gt;
Sure guy.  That sounds good.  There should be 5 or 6 of us though.. . Oh well. Their loss.  I will do some before or after work today. Ill start with Microkernel since there is not a large amount of info here, and so we don&#039;t overlap each other - JSlonosky&lt;br /&gt;
&lt;br /&gt;
yeah i think there was more like 7 of us btw if any one has any more information feel free to add it would be nice if you add the references so that way citing is really easy on  acm.org it will auto give you the citation info (where it says Display Formats click on ACM Ref  and new window with the citation info auto pop&#039;s up) --[[User:Asoknack|Asoknack]] 02:28, 11 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I added an outline of the similarities and differences. Add any more that I missed. These are from observations so I don&#039;t have any resources. -Slay&lt;br /&gt;
That&#039;s probably fine.  Our textbook probably outlines some of them, so I am sure we can find a few there - JSlonosky&lt;br /&gt;
&lt;br /&gt;
Talked to the teacher today and for VM he said we should focus on the implementation such as Xen and VMware , he also said to talk about para virtualization --[[User:Asoknack|Asoknack]] 18:42, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
A paper about emulation and paravirtualization [http://portal.acm.org/citation.cfm?id=1189289&amp;amp;coll=GUIDE&amp;amp;dl=GUIDE&amp;amp;CFID=105648137&amp;amp;CFTOKEN=47153176&amp;amp;ret=1#Fulltext link] - Slay&lt;br /&gt;
&lt;br /&gt;
Oh no big words.  Sorry about the Microkernels not done yet.  Working on an outline now.  Finally found how to access the ACM through carleton.  Gawd. &lt;br /&gt;
I am planning an outline, quick bit about kernels in general, (maybe mention monolith kernels?), and what microkernels do.&lt;br /&gt;
I see the microkernel outline info and a reference ( Whomever did that == hero: true) about the scheduling and the Memory management.  Should that be included in kernels in general and then mention what microkernels build upon/change? - JSlonosky&lt;br /&gt;
&lt;br /&gt;
Sorry late to the party here. My mistake was not checking the discussion page when I checked in. I don&#039;t want to trample anyone&#039;s current work but I don&#039;t see any work on the final essay done. I would love to help just need to know where I can step in so as to not screw anyone else up. -- [[User:Cling|Cling]]&lt;br /&gt;
&lt;br /&gt;
I don&#039;t think I&#039;ll be able to write up something for the final essay, even though I suggested splitting it. I&#039;ll do research tonight though on the paravirtualization. If I find the time, I&#039;ll try to write something. Sorry about that. --[[User:Slay|Slay]] 21:52, 13 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
We all have 3004 to do too, man.  I do not think anyone has chosen to do Virtual Machine section yet, or the Exokernel itself. But the contrast paragraph and the intro is chosen, and intro is done.  Microkernel and kernel will be done in a hour I hope. -- JSlonosky&lt;br /&gt;
&lt;br /&gt;
I can attempt to write up anything, the issue is I don&#039;t have any context on what to write, how do I tie it in to the rest of the essay? I only have a Japanese Quiz tomorrow morning then I should be good to write anything up for the rest of the day. As someone who has already written part of the essay, and assuming I attempt the exokernel section, how much do you think I should write? Should it just be about exokernel or should there be comparisons to the other topics? Thanks --[[User:Cling|Cling]] 23:14, 13 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Go with the Exokernel itself.  Slade is getting off work in a hour and we can double check what he is doing then.  We can put it together tomorrow sometime, and fill in the other stuff. - JSLonosky&lt;br /&gt;
&lt;br /&gt;
I&#039;ll attempt to work on VM tonight, then. I would feel so bad if I didn&#039;t write anything. -Slay&lt;br /&gt;
&lt;br /&gt;
Still wondering how much to write, I think we should decide on a decent word count or length so we don&#039;t have one short section (which would probably be mine) and/or one massive section that dwarfs all the others. If anyone has already written a section could you post your word count so we can aim to be around there, it would obviously be just a recommendation but it&#039;s just better to be on the safe side and have everything uniform. I haven&#039;t seen any formal requirements for the essay but I could be wrong, I also haven&#039;t been to class in a while. --[[User:Cling|Cling]] 23:33, 13 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Yeah Slay, VM probably doesnt have much to write about.  Get something down, and we can go over it.  CLing, Just write what you think.  There is not a lot to go over if I write kernel/microkernel well enough.  What is a exokernel?  exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction, basically (As said by Slade). I will probably end up with 500 or a bit more words. -- JSlonosky&lt;br /&gt;
&lt;br /&gt;
Sound off!&lt;br /&gt;
&lt;br /&gt;
Who&#039;s actually reading this? Add your name to the list...&lt;br /&gt;
&lt;br /&gt;
Rovic P.&lt;br /&gt;
Jon Slonosky&lt;br /&gt;
Corey Ling&lt;br /&gt;
Steph Lay&lt;br /&gt;
&lt;br /&gt;
== The Essay ==&lt;br /&gt;
&lt;br /&gt;
Let&#039;s actually breakdown the essay into components then write it here.&lt;br /&gt;
&lt;br /&gt;
I&#039;d like to go along the premise that microkernels and and virtual machines are &amp;quot;weaker&amp;quot; than exokernels in design for the essay. If anyone has any objections, add it here. &lt;br /&gt;
&lt;br /&gt;
-Slade&lt;br /&gt;
&lt;br /&gt;
 what do you mean by &amp;quot;weaker&amp;quot;(i think you mean exokernels&#039; takes the best of both worlds ) --[[User:Asoknack|Asoknack]] 02:45, 13 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
What I mean by weaker is that we should focus on the things microkernels and virtual machines may not do as well compared to a system based off an exokernel design and then focus on how an exokenenel can take the best of both worlds. Please choose which section you will work on, that&#039;s not to say it&#039;ll be the only part you do, but rather we&#039;ll all contribute to each part please. 1 day left.&lt;br /&gt;
-Slade&lt;br /&gt;
&lt;br /&gt;
...to the extent that exokernels be seen as a compromise between virtual machines and microkernels. &lt;br /&gt;
-I&#039;ll work on the initial intro. -Slade&lt;br /&gt;
&lt;br /&gt;
3 paragraphs that prove it&lt;br /&gt;
Explain how the key design characteristics of these three system architectures compare with each other. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
intro/thesis statement -Rovic P.&lt;br /&gt;
&lt;br /&gt;
Paragraph 1 -Microkernel -Jon S.&lt;br /&gt;
&lt;br /&gt;
Paragraph 2 -Virtual Machine -Steph L.&lt;br /&gt;
&lt;br /&gt;
Paragraph 3 -Exokernel -Corey L&lt;br /&gt;
&lt;br /&gt;
Paragraph 4 - Contrast/Compromise --[[User:Asoknack|Asoknack]]&lt;br /&gt;
&lt;br /&gt;
Conclusion - Jon S.   -  Only a sentence per paragraph, excluding Intro&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3164</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3164"/>
		<updated>2010-10-13T02:45:22Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* The Essay */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
* Large amount of moving from a process to Kernel to user space and back again, this is a costly operation.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Microkernel &#039;&#039;&#039;&lt;br /&gt;
* try&#039;s to minimize the amount of software that is mandatory or required [7]&lt;br /&gt;
advantages of Microkernel&lt;br /&gt;
* favors a modular system structure [7]&lt;br /&gt;
* one failure of a program does not impact any other programs [7]&lt;br /&gt;
* can support more than one api or strategies since all programs are separated [7]&lt;br /&gt;
==== Microkernel Concepts ==== &lt;br /&gt;
* piece of code is allowed in the kernel only if moving it outside the kernel would adversely affect the system. [7]&lt;br /&gt;
* any subsystem program created must be independent of all other subsystem&#039;s, any subsystem that is used can guarantee this from all other subsystems [7]&lt;br /&gt;
===== Address Space =====&lt;br /&gt;
* a mapping that relates the physical page to the virtual page. [7]&lt;br /&gt;
* processor specific [7]&lt;br /&gt;
* hide&#039;s the hardware&#039;s concept of address space [7]&lt;br /&gt;
* based off the idea of recursion each subsystem has it&#039;s own address space [7]&lt;br /&gt;
* the micro kernel provides 3 operations [7]&lt;br /&gt;
** Grant [7]&lt;br /&gt;
*** allows the owner to give a page to a recipient, provided the recipient want&#039;s it the page is removed from the owner&#039;s address space and but in the recipients. [7]&lt;br /&gt;
*** must be available to the owner. [7]&lt;br /&gt;
** Map [7]&lt;br /&gt;
*** allows the user to share a page with a recipient [7]&lt;br /&gt;
*** page is not removed from the owner&#039;s address space. [7]&lt;br /&gt;
** Flush [7]&lt;br /&gt;
*** remove&#039;s the page from all recipients address space [7]&lt;br /&gt;
*** how does this work with Grant --[[User:Asoknack|Asoknack]] 19:10, 12 October 2010 (UTC)&lt;br /&gt;
* allows memory management and paging out side the kernel&lt;br /&gt;
* Map and flush is required for memory manger&#039;s and pagers [7]&lt;br /&gt;
* can be used to implement access right&#039;s [7]&lt;br /&gt;
* controlling I/O Right&#039;s and driver&#039;s are not done at kernel level [7]&lt;br /&gt;
&lt;br /&gt;
===== Thread&#039;s IPC =====&lt;br /&gt;
* Threads&lt;br /&gt;
** in the kernel [7]&lt;br /&gt;
** Since a thread has an address space , all changes to the thread need to be done by the kernel [7]&lt;br /&gt;
* IPC [7]&lt;br /&gt;
** in the kernel IPC&lt;br /&gt;
** grant and map also need IPC  (So buye the priciple above this has to be in the kernel)[7]&lt;br /&gt;
** basic way for sub process to communicate. [7]&lt;br /&gt;
* Interrupts&lt;br /&gt;
** partially in the kernel [7]&lt;br /&gt;
** hard ware is a set of thread&#039;s which are empty except for there unique sender id [7]&lt;br /&gt;
** transformation of the message to the interrupt is done in the kernel [7]&lt;br /&gt;
** the kernel is not involved in device - specific interrupt&#039;s and does not understand the interrupt. [7]&lt;br /&gt;
*** resting the interrupt is done at user level [7]&lt;br /&gt;
** if a privileged command is need it is done implicitly the next time an IPC command is sent from the device [7]&lt;br /&gt;
&lt;br /&gt;
===== Unique Identifiers =====&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
System Level Virtualization&lt;br /&gt;
&lt;br /&gt;
=== VMM ===&lt;br /&gt;
* stands for Virtual Machine Monitor, also known as the hyper-visor[4]&lt;br /&gt;
* responsible for virtualization of hardware(mapping physical to virtual) and the VM that run on top of the virtuallized hardware [4]&lt;br /&gt;
* usually a small os with no drivers , so it is coupled with a linux distro that provides device / hardware access [4]&lt;br /&gt;
** the os that the VMM is using for driver&#039;s is called the hostOS [6]&lt;br /&gt;
*the hostOS provides login and physical access to the hardware as well as management for the VMM [6]&lt;br /&gt;
=== VM ===&lt;br /&gt;
* the OS that the vm is running is called the guestOS [6]&lt;br /&gt;
* the guestOS only sees resources that have been allocated to the VM [6]&lt;br /&gt;
==== three approaches ====&lt;br /&gt;
*Type I virtualization [5]&lt;br /&gt;
** runs off the physical hardware [4]&lt;br /&gt;
** Isolation of the guestOs from the hardware is done threw processe level protection meachnism[6]&lt;br /&gt;
*** ring 0 = VMM [6]&lt;br /&gt;
*** ring 1 = VM [6]&lt;br /&gt;
*** this means all instructions from the VM must go threw the VMM [6]&lt;br /&gt;
** since there can be multiple VM&#039;s on a computer the scheduling is done by the VMM [6]&lt;br /&gt;
** on boot the VMM creates a hardware platform for the VM [6]&lt;br /&gt;
** load&#039;s the VM kernel into virtual memory and then boot&#039;s it like a regular computer [6]&lt;br /&gt;
** ex. Xen [4]&lt;br /&gt;
*Type II virtualization [5]&lt;br /&gt;
** run off the host Os [4]&lt;br /&gt;
** ex. VMware , QEMU [4]&lt;br /&gt;
* Para-virtualization [6]&lt;br /&gt;
** Similar to Type but use the HostOs for Device driver access [6]&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Micro-kernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* multiplex resources securely providing protection to mutual distrustful application threw the use of secure binding&#039;s[1]&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel separates protection from management in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking access to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the number of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad parameter passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is designed to interact with a low-level machine independent level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to create low level primitives that the hardware resources can be accessed from, this also includes interrupts,exceptions [1]&lt;br /&gt;
** the exokernel also export privileged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource management except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource management is the best way to build flexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
** Use physical name&#039;s when ever possible[3] (not to sure what physical names are, I think it is as simple as what the hardware is called)--[[User:Asoknack|Asoknack]] 20:27, 9 October 2010 (UTC)&lt;br /&gt;
** Physical names capture useful information [3]&lt;br /&gt;
*** safer than and less resource intensive than virtual names as no translations are needed[3]&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource management [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release[1](Visible means that when revocation happens the exokernel tell the LibOS that resource is being revoked)&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achieved threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allows the separation of protection and resource use [1]&lt;br /&gt;
* only checks authorization during bind time [1]&lt;br /&gt;
** Application&#039;s with complex needs for resources only authorized during bind.[1]&lt;br /&gt;
* access checking is done during access time and there is no need to understand complex resources needs during access[1]&lt;br /&gt;
** (this means that the exokernel checks once to make sure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** allows the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve performance[1]&lt;br /&gt;
** eliminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be scheduled [2]&lt;br /&gt;
==== Visible Resource Revocation ====&lt;br /&gt;
* Used for most resources [1]&lt;br /&gt;
** allows for LibOS to help with deallocation [1]&lt;br /&gt;
** LibOS are able to garner what resources are scare [1]&lt;br /&gt;
* Slower than Invisible as application involvement is required [1]&lt;br /&gt;
** ex of when invisible is used is Processor addressing-context identifiers [1]&lt;br /&gt;
==== Abort Protocol ====&lt;br /&gt;
* allows the exokernel to take resources away from the LibOS [1]&lt;br /&gt;
* used when the LibOS fails to respond to the revocation request [1]&lt;br /&gt;
* Exokernel must be careful not to delete as the LibOS might need to write some system critical data to the resource [1]&lt;br /&gt;
&lt;br /&gt;
== Comparisons  ==&lt;br /&gt;
====Exokernel/Microkernel====&lt;br /&gt;
&#039;&#039;&#039;Similarities&#039;&#039;&#039;&lt;br /&gt;
* Limited functionality in kernel&lt;br /&gt;
** functionality in kernel to handle sharing of resources and security&lt;br /&gt;
** avoids programming directly to hardware which creates a dependency&lt;br /&gt;
* Additional functionality provided in user space as processes&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* Minimal abstractions provided by the kernel&lt;br /&gt;
** Applications given more power in exokernel&lt;br /&gt;
&lt;br /&gt;
====Exokernel/VM====&lt;br /&gt;
&#039;&#039;&#039;Similarities&#039;&#039;&#039;&lt;br /&gt;
* Idea of partitioning resources between applications/OSs&lt;br /&gt;
* &amp;quot;Control&amp;quot; of resource given&lt;br /&gt;
* Isolation from other applications/OSs&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* Exokernel runs applications, VM runs OS&lt;br /&gt;
* VM uses a hostOS and guestOSs run on top&lt;br /&gt;
* Virtualization on VMs, Exokernel deals with real resources&lt;br /&gt;
* VM hides a lot of information because it emulates. Exokernel does not.&lt;br /&gt;
&lt;br /&gt;
====Microkernel/VM====&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* With a virtual machine, you are not virtualizing apps like with a microkernel but virtualizing an entire Operating System.&lt;br /&gt;
* This can be costly but the benefits are that it&#039;s easier and all the standard OS features are available.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., Kaashoek, M. F., and O&#039;Toole, J. 1995. Exokernel: an operating system architecture for application-level resource management. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 251-266. DOI= http://doi.acm.org/10.1145/224056.224076 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3]&amp;lt;nowiki&amp;gt;Kaashoek, M. F., Engler, D. R., Ganger, G. R., Briceño, H. M., Hunt, R., Mazières, D., Pinckney, T., Grimm, R., Jannotti, J., and Mackenzie, K. 1997. Application performance and flexibility on exokernel systems. In Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles  (Saint Malo, France, October 05 - 08, 1997). W. M. Waite, Ed. SOSP &#039;97. ACM, New York, NY, 52-65. DOI= http://doi.acm.org/10.1145/268998.266644 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4]&amp;lt;nowiki&amp;gt;Vallee, G.; Naughton, T.; Engelmann, C.; Hong Ong; Scott, S.L.; , &amp;quot;System-Level Virtualization for High Performance Computing,&amp;quot; Parallel, Distributed and Network-Based Processing, 2008. PDP 2008. 16th Euromicro Conference on , vol., no., pp.636-643, 13-15 Feb. 2008&lt;br /&gt;
DOI= http://doi.acm.org/10.1109/PDP.2008.85 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5]&amp;lt;nowiki&amp;gt;Goldberg, R. P. 1973. Architecture of virtual machines. In Proceedings of the Workshop on Virtual Computer Systems  (Cambridge, Massachusetts, United States, March 26 - 27, 1973). ACM, New York, NY, 74-112. DOI= http://doi.acm.org/10.1145/800122.803950 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6]&amp;lt;nowiki&amp;gt;Vallee, G., Naughton, T., and Scott, S. L. 2007. System management software for virtual environments. In Proceedings of the 4th international Conference on Computing Frontiers (Ischia, Italy, May 07 - 09, 2007). CF &#039;07. ACM, New York, NY, 153-160. DOI= http://doi.acm.org/10.1145/1242531.1242555 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7]&amp;lt;nowiki&amp;gt;Liedtke, J. 1995. On micro-kernel construction. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 237-250. DOI= http://doi.acm.org/10.1145/224056.224075 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
An overview of exokernels,virtual machines, microkernels *[http://www2.supchurch.org:10999/files/school/classes/CSCI4730/Lectures/grad-structures.ppt Overview](Power Point)&amp;lt;br&amp;gt;&lt;br /&gt;
Should not be used as a source but an overview.&lt;br /&gt;
&lt;br /&gt;
The original paper on [http://portal.acm.org/citation.cfm?id=224076 Exokernels] --[[User:Gautam|Gautam]] 22:39, 6 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I&#039;m just going to post my answer for question 1 on the individuel assignment and hope it helps. --[[User:Aellebla|Aellebla]] 15:06, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
The design of the micro kernel was to take everything they could out of the Kernel and put it into a process. For ex, networking would be put into a process instead of staying in the kernel. The micro kernel dev&#039;s tried to keep lots of things in user space for efficiency. But one major problem with this is there would be a large amount of moving from a process to the kernel to user space and back again and this is a costly, non efficient process.It was an application specific OS, there was no multiplexing. With a virtual machine you are not virtualizing apps like with a microkernel but virtualizing an entire Operating System. This is very heavy however but the benefits are that it‟s easy and all the standard OS features are there whereas in a microkernel setup they would not all be there and this can be seen as a compromise.&lt;br /&gt;
&lt;br /&gt;
Exokernels can be seen as a compromise to virtual machines and microkernels because virtual machines emulate and exokernels do not. When you emulate something you hide a lot of the actual information because you wouldn‟t be able to see the „real‟ hardware. If we look at a virtual box setup running Linux, and we go look at all the hardware, it will be displayed as fake hardware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;br /&gt;
&lt;br /&gt;
I think we should divide up the paragraphs and proofread each others instead. (Are there only 4 of us?) I don&#039;t have much time to work on this today though but I&#039;ll try to work on it tomorrow morning. - Slay&lt;br /&gt;
&lt;br /&gt;
Sure guy.  That sounds good.  There should be 5 or 6 of us though.. . Oh well. Their loss.  I will do some before or after work today. Ill start with Microkernel since there is not a large amount of info here, and so we don&#039;t overlap each other - JSlonosky&lt;br /&gt;
&lt;br /&gt;
yeah i think there was more like 7 of us btw if any one has any more information feel free to add it would be nice if you add the references so that way citing is really easy on  acm.org it will auto give you the citation info (where it says Display Formats click on ACM Ref  and new window with the citation info auto pop&#039;s up) --[[User:Asoknack|Asoknack]] 02:28, 11 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I added an outline of the similarities and differences. Add any more that I missed. These are from observations so I don&#039;t have any resources. -Slay&lt;br /&gt;
That&#039;s probably fine.  Our textbook probably outlines some of them, so I am sure we can find a few there - JSlonosky&lt;br /&gt;
&lt;br /&gt;
Talked to the teacher today and for VM he said we should focus on the implementation such as Xen and VMware , he also said to talk about para virtualization --[[User:Asoknack|Asoknack]] 18:42, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== The Essay ==&lt;br /&gt;
&lt;br /&gt;
Let&#039;s actually breakdown the essay into components then write it here.&lt;br /&gt;
&lt;br /&gt;
I&#039;d like to go along the premise that microkernels and and virtual machines are &amp;quot;weaker&amp;quot; than exokernels in design for the essay. If anyone has any objections, add it here. &lt;br /&gt;
&lt;br /&gt;
-Slade&lt;br /&gt;
&lt;br /&gt;
 what do you mean by &amp;quot;weaker&amp;quot;(i think you mean exokernels&#039; takes the best of both worlds ) --[[User:Asoknack|Asoknack]] 02:45, 13 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
We have our intro/thesis statement&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...to the extent that exokernels be seen as a compromise between virtual machines and microkernels. &lt;br /&gt;
-I&#039;ll work on the initial intro, should have it ready by tonight. -Slade&lt;br /&gt;
&lt;br /&gt;
3 paragraphs that prove it&lt;br /&gt;
Explain how the key design characteristics of these three system architectures compare with each other. &lt;br /&gt;
&lt;br /&gt;
and conclusion&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3105</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3105"/>
		<updated>2010-10-12T19:39:48Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* Address Space */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
* Large amount of moving from a process to Kernel to user space and back again, this is a costly operation.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Microkernel &#039;&#039;&#039;&lt;br /&gt;
* try&#039;s to minimize the amount of software that is mandatory or required [7]&lt;br /&gt;
advantages of Microkernel&lt;br /&gt;
* favors a modular system structure [7]&lt;br /&gt;
* one failure of a program does not impact any other programs [7]&lt;br /&gt;
* can support more than one api or strategies since all programs are separated [7]&lt;br /&gt;
==== Microkernel Concepts ==== &lt;br /&gt;
* piece of code is allowed in the kernel only if moving it outside the kernel would adversely affect the system. [7]&lt;br /&gt;
* any subsystem program created must be independent of all other subsystem&#039;s, any subsystem that is used can guarantee this from all other subsystems [7]&lt;br /&gt;
===== Address Space =====&lt;br /&gt;
* a mapping that relates the physical page to the virtual page. [7]&lt;br /&gt;
* processor specific [7]&lt;br /&gt;
* hide&#039;s the hardware&#039;s concept of address space [7]&lt;br /&gt;
* based off the idea of recursion each subsystem has it&#039;s own address space [7]&lt;br /&gt;
* the micro kernel provides 3 operations [7]&lt;br /&gt;
** Grant [7]&lt;br /&gt;
*** allows the owner to give a page to a recipient, provided the recipient want&#039;s it the page is removed from the owner&#039;s address space and but in the recipients. [7]&lt;br /&gt;
*** must be available to the owner. [7]&lt;br /&gt;
** Map [7]&lt;br /&gt;
*** allows the user to share a page with a recipient [7]&lt;br /&gt;
*** page is not removed from the owner&#039;s address space. [7]&lt;br /&gt;
** Flush [7]&lt;br /&gt;
*** remove&#039;s the page from all recipients address space [7]&lt;br /&gt;
*** how does this work with Grant --[[User:Asoknack|Asoknack]] 19:10, 12 October 2010 (UTC)&lt;br /&gt;
* allows memory management and paging out side the kernel&lt;br /&gt;
* Map and flush is required for memory manger&#039;s and pagers [7]&lt;br /&gt;
* can be used to implement access right&#039;s [7]&lt;br /&gt;
* controlling I/O Right&#039;s and driver&#039;s are not done at kernel level [7]&lt;br /&gt;
&lt;br /&gt;
===== Thread&#039;s IPC =====&lt;br /&gt;
* Threads&lt;br /&gt;
** in the kernel [7]&lt;br /&gt;
** Since a thread has an address space , all changes to the thread need to be done by the kernel [7]&lt;br /&gt;
* IPC [7]&lt;br /&gt;
** in the kernel IPC&lt;br /&gt;
** grant and map also need IPC  (So buye the priciple above this has to be in the kernel)[7]&lt;br /&gt;
** basic way for sub process to communicate. [7]&lt;br /&gt;
* Interrupts&lt;br /&gt;
** partially in the kernel [7]&lt;br /&gt;
** hard ware is a set of thread&#039;s which are empty except for there unique sender id [7]&lt;br /&gt;
** transformation of the message to the interrupt is done in the kernel [7]&lt;br /&gt;
** the kernel is not involved in device - specific interrupt&#039;s and does not understand the interrupt. [7]&lt;br /&gt;
*** resting the interrupt is done at user level [7]&lt;br /&gt;
** if a privileged command is need it is done implicitly the next time an IPC command is sent from the device [7]&lt;br /&gt;
&lt;br /&gt;
===== Unique Identifiers =====&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
System Level Virtualization&lt;br /&gt;
&lt;br /&gt;
=== VMM ===&lt;br /&gt;
* stands for Virtual Machine Monitor, also known as the hyper-visor[4]&lt;br /&gt;
* responsible for virtualization of hardware(mapping physical to virtual) and the VM that run on top of the virtuallized hardware [4]&lt;br /&gt;
* usually a small os with no drivers , so it is coupled with a linux distro that provides device / hardware access [4]&lt;br /&gt;
** the os that the VMM is using for driver&#039;s is called the hostOS [6]&lt;br /&gt;
*the hostOS provides login and physical access to the hardware as well as management for the VMM [6]&lt;br /&gt;
=== VM ===&lt;br /&gt;
* the OS that the vm is running is called the guestOS [6]&lt;br /&gt;
* the guestOS only sees resources that have been allocated to the VM [6]&lt;br /&gt;
==== three approaches ====&lt;br /&gt;
*Type I virtualization [5]&lt;br /&gt;
** runs off the physical hardware [4]&lt;br /&gt;
** Isolation of the guestOs from the hardware is done threw processe level protection meachnism[6]&lt;br /&gt;
*** ring 0 = VMM [6]&lt;br /&gt;
*** ring 1 = VM [6]&lt;br /&gt;
*** this means all instructions from the VM must go threw the VMM [6]&lt;br /&gt;
** since there can be multiple VM&#039;s on a computer the scheduling is done by the VMM [6]&lt;br /&gt;
** on boot the VMM creates a hardware platform for the VM [6]&lt;br /&gt;
** load&#039;s the VM kernel into virtual memory and then boot&#039;s it like a regular computer [6]&lt;br /&gt;
** ex. Xen [4]&lt;br /&gt;
*Type II virtualization [5]&lt;br /&gt;
** run off the host Os [4]&lt;br /&gt;
** ex. VMware , QEMU [4]&lt;br /&gt;
* Para-virtualization [6]&lt;br /&gt;
** Similar to Type but use the HostOs for Device driver access [6]&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Micro-kernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* multiplex resources securely providing protection to mutual distrustful application threw the use of secure binding&#039;s[1]&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel separates protection from management in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking access to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the number of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad parameter passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is designed to interact with a low-level machine independent level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to create low level primitives that the hardware resources can be accessed from, this also includes interrupts,exceptions [1]&lt;br /&gt;
** the exokernel also export privileged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource management except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource management is the best way to build flexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
** Use physical name&#039;s when ever possible[3] (not to sure what physical names are, I think it is as simple as what the hardware is called)--[[User:Asoknack|Asoknack]] 20:27, 9 October 2010 (UTC)&lt;br /&gt;
** Physical names capture useful information [3]&lt;br /&gt;
*** safer than and less resource intensive than virtual names as no translations are needed[3]&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource management [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release[1](Visible means that when revocation happens the exokernel tell the LibOS that resource is being revoked)&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achieved threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allows the separation of protection and resource use [1]&lt;br /&gt;
* only checks authorization during bind time [1]&lt;br /&gt;
** Application&#039;s with complex needs for resources only authorized during bind.[1]&lt;br /&gt;
* access checking is done during access time and there is no need to understand complex resources needs during access[1]&lt;br /&gt;
** (this means that the exokernel checks once to make sure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** allows the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve performance[1]&lt;br /&gt;
** eliminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be scheduled [2]&lt;br /&gt;
==== Visible Resource Revocation ====&lt;br /&gt;
* Used for most resources [1]&lt;br /&gt;
** allows for LibOS to help with deallocation [1]&lt;br /&gt;
** LibOS are able to garner what resources are scare [1]&lt;br /&gt;
* Slower than Invisible as application involvement is required [1]&lt;br /&gt;
** ex of when invisible is used is Processor addressing-context identifiers [1]&lt;br /&gt;
==== Abort Protocol ====&lt;br /&gt;
* allows the exokernel to take resources away from the LibOS [1]&lt;br /&gt;
* used when the LibOS fails to respond to the revocation request [1]&lt;br /&gt;
* Exokernel must be careful not to delete as the LibOS might need to write some system critical data to the resource [1]&lt;br /&gt;
&lt;br /&gt;
== Comparisons  ==&lt;br /&gt;
====Exokernel/Microkernel====&lt;br /&gt;
&#039;&#039;&#039;Similarities&#039;&#039;&#039;&lt;br /&gt;
* Limited functionality in kernel&lt;br /&gt;
** functionality in kernel to handle sharing of resources and security&lt;br /&gt;
** avoids programming directly to hardware which creates a dependency&lt;br /&gt;
* Additional functionality provided in user space as processes&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* Minimal abstractions provided by the kernel&lt;br /&gt;
** Applications given more power in exokernel&lt;br /&gt;
&lt;br /&gt;
====Exokernel/VM====&lt;br /&gt;
&#039;&#039;&#039;Similarities&#039;&#039;&#039;&lt;br /&gt;
* Idea of partitioning resources between applications/OSs&lt;br /&gt;
* &amp;quot;Control&amp;quot; of resource given&lt;br /&gt;
* Isolation from other applications/OSs&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* Exokernel runs applications, VM runs OS&lt;br /&gt;
* VM uses a hostOS and guestOSs run on top&lt;br /&gt;
* Virtualization on VMs, Exokernel deals with real resources&lt;br /&gt;
* VM hides a lot of information because it emulates. Exokernel does not.&lt;br /&gt;
&lt;br /&gt;
====Microkernel/VM====&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* With a virtual machine, you are not virtualizing apps like with a microkernel but virtualizing an entire Operating System.&lt;br /&gt;
* This can be costly but the benefits are that it&#039;s easier and all the standard OS features are available.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., Kaashoek, M. F., and O&#039;Toole, J. 1995. Exokernel: an operating system architecture for application-level resource management. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 251-266. DOI= http://doi.acm.org/10.1145/224056.224076 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3]&amp;lt;nowiki&amp;gt;Kaashoek, M. F., Engler, D. R., Ganger, G. R., Briceño, H. M., Hunt, R., Mazières, D., Pinckney, T., Grimm, R., Jannotti, J., and Mackenzie, K. 1997. Application performance and flexibility on exokernel systems. In Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles  (Saint Malo, France, October 05 - 08, 1997). W. M. Waite, Ed. SOSP &#039;97. ACM, New York, NY, 52-65. DOI= http://doi.acm.org/10.1145/268998.266644 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4]&amp;lt;nowiki&amp;gt;Vallee, G.; Naughton, T.; Engelmann, C.; Hong Ong; Scott, S.L.; , &amp;quot;System-Level Virtualization for High Performance Computing,&amp;quot; Parallel, Distributed and Network-Based Processing, 2008. PDP 2008. 16th Euromicro Conference on , vol., no., pp.636-643, 13-15 Feb. 2008&lt;br /&gt;
DOI= http://doi.acm.org/10.1109/PDP.2008.85 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5]&amp;lt;nowiki&amp;gt;Goldberg, R. P. 1973. Architecture of virtual machines. In Proceedings of the Workshop on Virtual Computer Systems  (Cambridge, Massachusetts, United States, March 26 - 27, 1973). ACM, New York, NY, 74-112. DOI= http://doi.acm.org/10.1145/800122.803950 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6]&amp;lt;nowiki&amp;gt;Vallee, G., Naughton, T., and Scott, S. L. 2007. System management software for virtual environments. In Proceedings of the 4th international Conference on Computing Frontiers (Ischia, Italy, May 07 - 09, 2007). CF &#039;07. ACM, New York, NY, 153-160. DOI= http://doi.acm.org/10.1145/1242531.1242555 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7]&amp;lt;nowiki&amp;gt;Liedtke, J. 1995. On micro-kernel construction. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 237-250. DOI= http://doi.acm.org/10.1145/224056.224075 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
An overview of exokernels,virtual machines, microkernels *[http://www2.supchurch.org:10999/files/school/classes/CSCI4730/Lectures/grad-structures.ppt Overview](Power Point)&amp;lt;br&amp;gt;&lt;br /&gt;
Should not be used as a source but an overview.&lt;br /&gt;
&lt;br /&gt;
The original paper on [http://portal.acm.org/citation.cfm?id=224076 Exokernels] --[[User:Gautam|Gautam]] 22:39, 6 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I&#039;m just going to post my answer for question 1 on the individuel assignment and hope it helps. --[[User:Aellebla|Aellebla]] 15:06, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
The design of the micro kernel was to take everything they could out of the Kernel and put it into a process. For ex, networking would be put into a process instead of staying in the kernel. The micro kernel dev&#039;s tried to keep lots of things in user space for efficiency. But one major problem with this is there would be a large amount of moving from a process to the kernel to user space and back again and this is a costly, non efficient process.It was an application specific OS, there was no multiplexing. With a virtual machine you are not virtualizing apps like with a microkernel but virtualizing an entire Operating System. This is very heavy however but the benefits are that it‟s easy and all the standard OS features are there whereas in a microkernel setup they would not all be there and this can be seen as a compromise.&lt;br /&gt;
&lt;br /&gt;
Exokernels can be seen as a compromise to virtual machines and microkernels because virtual machines emulate and exokernels do not. When you emulate something you hide a lot of the actual information because you wouldn‟t be able to see the „real‟ hardware. If we look at a virtual box setup running Linux, and we go look at all the hardware, it will be displayed as fake hardware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;br /&gt;
&lt;br /&gt;
I think we should divide up the paragraphs and proofread each others instead. (Are there only 4 of us?) I don&#039;t have much time to work on this today though but I&#039;ll try to work on it tomorrow morning. - Slay&lt;br /&gt;
&lt;br /&gt;
Sure guy.  That sounds good.  There should be 5 or 6 of us though.. . Oh well. Their loss.  I will do some before or after work today. Ill start with Microkernel since there is not a large amount of info here, and so we don&#039;t overlap each other - JSlonosky&lt;br /&gt;
&lt;br /&gt;
yeah i think there was more like 7 of us btw if any one has any more information feel free to add it would be nice if you add the references so that way citing is really easy on  acm.org it will auto give you the citation info (where it says Display Formats click on ACM Ref  and new window with the citation info auto pop&#039;s up) --[[User:Asoknack|Asoknack]] 02:28, 11 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I added an outline of the similarities and differences. Add any more that I missed. These are from observations so I don&#039;t have any resources. -Slay&lt;br /&gt;
That&#039;s probably fine.  Our textbook probably outlines some of them, so I am sure we can find a few there - JSlonosky&lt;br /&gt;
&lt;br /&gt;
Talked to the teacher today and for VM he said we should focus on the implementation such as Xen and VMware , he also said to talk about para virtualization --[[User:Asoknack|Asoknack]] 18:42, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== The Essay ==&lt;br /&gt;
&lt;br /&gt;
Let&#039;s actually breakdown the essay into components then write it here.&lt;br /&gt;
&lt;br /&gt;
We have our intro/thesis statement&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...to the extent that exokernels be seen as a compromise between virtual machines and microkernels. &lt;br /&gt;
-I&#039;ll work on the initial intro, should have it ready by tonight. -Slade&lt;br /&gt;
&lt;br /&gt;
3 paragraphs that prove it&lt;br /&gt;
Explain how the key design characteristics of these three system architectures compare with each other. &lt;br /&gt;
&lt;br /&gt;
and conclusion&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3104</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3104"/>
		<updated>2010-10-12T19:38:16Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* Thread&amp;#039;s IPC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
* Large amount of moving from a process to Kernel to user space and back again, this is a costly operation.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Microkernel &#039;&#039;&#039;&lt;br /&gt;
* try&#039;s to minimize the amount of software that is mandatory or required [7]&lt;br /&gt;
advantages of Microkernel&lt;br /&gt;
* favors a modular system structure [7]&lt;br /&gt;
* one failure of a program does not impact any other programs [7]&lt;br /&gt;
* can support more than one api or strategies since all programs are separated [7]&lt;br /&gt;
==== Microkernel Concepts ==== &lt;br /&gt;
* piece of code is allowed in the kernel only if moving it outside the kernel would adversely affect the system. [7]&lt;br /&gt;
* any subsystem program created must be independent of all other subsystem&#039;s, any subsystem that is used can guarantee this from all other subsystems [7]&lt;br /&gt;
===== Address Space =====&lt;br /&gt;
* a mapping that relates the physical page to the virtual page. [7]&lt;br /&gt;
* hide&#039;s the hardware&#039;s concept of address space [7]&lt;br /&gt;
* based off the idea of recursion each subsystem has it&#039;s own address space [7]&lt;br /&gt;
* the micro kernel provides 3 operations [7]&lt;br /&gt;
** Grant [7]&lt;br /&gt;
*** allows the owner to give a page to a recipient, provided the recipient want&#039;s it the page is removed from the owner&#039;s address space and but in the recipients. [7]&lt;br /&gt;
*** must be available to the owner. [7]&lt;br /&gt;
** Map [7]&lt;br /&gt;
*** allows the user to share a page with a recipient [7]&lt;br /&gt;
*** page is not removed from the owner&#039;s address space. [7]&lt;br /&gt;
** Flush [7]&lt;br /&gt;
*** remove&#039;s the page from all recipients address space [7]&lt;br /&gt;
*** how does this work with Grant --[[User:Asoknack|Asoknack]] 19:10, 12 October 2010 (UTC)&lt;br /&gt;
* allows memory management and paging out side the kernel&lt;br /&gt;
* Map and flush is required for memory manger&#039;s and pagers [7]&lt;br /&gt;
* can be used to implement access right&#039;s [7]&lt;br /&gt;
* controlling I/O Right&#039;s and driver&#039;s are not done at kernel level [7]&lt;br /&gt;
&lt;br /&gt;
===== Thread&#039;s IPC =====&lt;br /&gt;
* Threads&lt;br /&gt;
** in the kernel [7]&lt;br /&gt;
** Since a thread has an address space , all changes to the thread need to be done by the kernel [7]&lt;br /&gt;
* IPC [7]&lt;br /&gt;
** in the kernel IPC&lt;br /&gt;
** grant and map also need IPC  (So buye the priciple above this has to be in the kernel)[7]&lt;br /&gt;
** basic way for sub process to communicate. [7]&lt;br /&gt;
* Interrupts&lt;br /&gt;
** partially in the kernel [7]&lt;br /&gt;
** hard ware is a set of thread&#039;s which are empty except for there unique sender id [7]&lt;br /&gt;
** transformation of the message to the interrupt is done in the kernel [7]&lt;br /&gt;
** the kernel is not involved in device - specific interrupt&#039;s and does not understand the interrupt. [7]&lt;br /&gt;
*** resting the interrupt is done at user level [7]&lt;br /&gt;
** if a privileged command is need it is done implicitly the next time an IPC command is sent from the device [7]&lt;br /&gt;
&lt;br /&gt;
===== Unique Identifiers =====&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
System Level Virtualization&lt;br /&gt;
&lt;br /&gt;
=== VMM ===&lt;br /&gt;
* stands for Virtual Machine Monitor, also known as the hyper-visor[4]&lt;br /&gt;
* responsible for virtualization of hardware(mapping physical to virtual) and the VM that run on top of the virtuallized hardware [4]&lt;br /&gt;
* usually a small os with no drivers , so it is coupled with a linux distro that provides device / hardware access [4]&lt;br /&gt;
** the os that the VMM is using for driver&#039;s is called the hostOS [6]&lt;br /&gt;
*the hostOS provides login and physical access to the hardware as well as management for the VMM [6]&lt;br /&gt;
=== VM ===&lt;br /&gt;
* the OS that the vm is running is called the guestOS [6]&lt;br /&gt;
* the guestOS only sees resources that have been allocated to the VM [6]&lt;br /&gt;
==== three approaches ====&lt;br /&gt;
*Type I virtualization [5]&lt;br /&gt;
** runs off the physical hardware [4]&lt;br /&gt;
** Isolation of the guestOs from the hardware is done threw processe level protection meachnism[6]&lt;br /&gt;
*** ring 0 = VMM [6]&lt;br /&gt;
*** ring 1 = VM [6]&lt;br /&gt;
*** this means all instructions from the VM must go threw the VMM [6]&lt;br /&gt;
** since there can be multiple VM&#039;s on a computer the scheduling is done by the VMM [6]&lt;br /&gt;
** on boot the VMM creates a hardware platform for the VM [6]&lt;br /&gt;
** load&#039;s the VM kernel into virtual memory and then boot&#039;s it like a regular computer [6]&lt;br /&gt;
** ex. Xen [4]&lt;br /&gt;
*Type II virtualization [5]&lt;br /&gt;
** run off the host Os [4]&lt;br /&gt;
** ex. VMware , QEMU [4]&lt;br /&gt;
* Para-virtualization [6]&lt;br /&gt;
** Similar to Type but use the HostOs for Device driver access [6]&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Micro-kernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* multiplex resources securely providing protection to mutual distrustful application threw the use of secure binding&#039;s[1]&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel separates protection from management in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking access to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the number of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad parameter passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is designed to interact with a low-level machine independent level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to create low level primitives that the hardware resources can be accessed from, this also includes interrupts,exceptions [1]&lt;br /&gt;
** the exokernel also export privileged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource management except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource management is the best way to build flexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
** Use physical name&#039;s when ever possible[3] (not to sure what physical names are, I think it is as simple as what the hardware is called)--[[User:Asoknack|Asoknack]] 20:27, 9 October 2010 (UTC)&lt;br /&gt;
** Physical names capture useful information [3]&lt;br /&gt;
*** safer than and less resource intensive than virtual names as no translations are needed[3]&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource management [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release[1](Visible means that when revocation happens the exokernel tell the LibOS that resource is being revoked)&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achieved threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allows the separation of protection and resource use [1]&lt;br /&gt;
* only checks authorization during bind time [1]&lt;br /&gt;
** Application&#039;s with complex needs for resources only authorized during bind.[1]&lt;br /&gt;
* access checking is done during access time and there is no need to understand complex resources needs during access[1]&lt;br /&gt;
** (this means that the exokernel checks once to make sure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** allows the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve performance[1]&lt;br /&gt;
** eliminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be scheduled [2]&lt;br /&gt;
==== Visible Resource Revocation ====&lt;br /&gt;
* Used for most resources [1]&lt;br /&gt;
** allows for LibOS to help with deallocation [1]&lt;br /&gt;
** LibOS are able to garner what resources are scare [1]&lt;br /&gt;
* Slower than Invisible as application involvement is required [1]&lt;br /&gt;
** ex of when invisible is used is Processor addressing-context identifiers [1]&lt;br /&gt;
==== Abort Protocol ====&lt;br /&gt;
* allows the exokernel to take resources away from the LibOS [1]&lt;br /&gt;
* used when the LibOS fails to respond to the revocation request [1]&lt;br /&gt;
* Exokernel must be careful not to delete as the LibOS might need to write some system critical data to the resource [1]&lt;br /&gt;
&lt;br /&gt;
== Comparisons  ==&lt;br /&gt;
====Exokernel/Microkernel====&lt;br /&gt;
&#039;&#039;&#039;Similarities&#039;&#039;&#039;&lt;br /&gt;
* Limited functionality in kernel&lt;br /&gt;
** functionality in kernel to handle sharing of resources and security&lt;br /&gt;
** avoids programming directly to hardware which creates a dependency&lt;br /&gt;
* Additional functionality provided in user space as processes&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* Minimal abstractions provided by the kernel&lt;br /&gt;
** Applications given more power in exokernel&lt;br /&gt;
&lt;br /&gt;
====Exokernel/VM====&lt;br /&gt;
&#039;&#039;&#039;Similarities&#039;&#039;&#039;&lt;br /&gt;
* Idea of partitioning resources between applications/OSs&lt;br /&gt;
* &amp;quot;Control&amp;quot; of resource given&lt;br /&gt;
* Isolation from other applications/OSs&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* Exokernel runs applications, VM runs OS&lt;br /&gt;
* VM uses a hostOS and guestOSs run on top&lt;br /&gt;
* Virtualization on VMs, Exokernel deals with real resources&lt;br /&gt;
* VM hides a lot of information because it emulates. Exokernel does not.&lt;br /&gt;
&lt;br /&gt;
====Microkernel/VM====&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* With a virtual machine, you are not virtualizing apps like with a microkernel but virtualizing an entire Operating System.&lt;br /&gt;
* This can be costly but the benefits are that it&#039;s easier and all the standard OS features are available.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., Kaashoek, M. F., and O&#039;Toole, J. 1995. Exokernel: an operating system architecture for application-level resource management. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 251-266. DOI= http://doi.acm.org/10.1145/224056.224076 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3]&amp;lt;nowiki&amp;gt;Kaashoek, M. F., Engler, D. R., Ganger, G. R., Briceño, H. M., Hunt, R., Mazières, D., Pinckney, T., Grimm, R., Jannotti, J., and Mackenzie, K. 1997. Application performance and flexibility on exokernel systems. In Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles  (Saint Malo, France, October 05 - 08, 1997). W. M. Waite, Ed. SOSP &#039;97. ACM, New York, NY, 52-65. DOI= http://doi.acm.org/10.1145/268998.266644 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4]&amp;lt;nowiki&amp;gt;Vallee, G.; Naughton, T.; Engelmann, C.; Hong Ong; Scott, S.L.; , &amp;quot;System-Level Virtualization for High Performance Computing,&amp;quot; Parallel, Distributed and Network-Based Processing, 2008. PDP 2008. 16th Euromicro Conference on , vol., no., pp.636-643, 13-15 Feb. 2008&lt;br /&gt;
DOI= http://doi.acm.org/10.1109/PDP.2008.85 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5]&amp;lt;nowiki&amp;gt;Goldberg, R. P. 1973. Architecture of virtual machines. In Proceedings of the Workshop on Virtual Computer Systems  (Cambridge, Massachusetts, United States, March 26 - 27, 1973). ACM, New York, NY, 74-112. DOI= http://doi.acm.org/10.1145/800122.803950 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6]&amp;lt;nowiki&amp;gt;Vallee, G., Naughton, T., and Scott, S. L. 2007. System management software for virtual environments. In Proceedings of the 4th international Conference on Computing Frontiers (Ischia, Italy, May 07 - 09, 2007). CF &#039;07. ACM, New York, NY, 153-160. DOI= http://doi.acm.org/10.1145/1242531.1242555 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7]&amp;lt;nowiki&amp;gt;Liedtke, J. 1995. On micro-kernel construction. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 237-250. DOI= http://doi.acm.org/10.1145/224056.224075 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
An overview of exokernels,virtual machines, microkernels *[http://www2.supchurch.org:10999/files/school/classes/CSCI4730/Lectures/grad-structures.ppt Overview](Power Point)&amp;lt;br&amp;gt;&lt;br /&gt;
Should not be used as a source but an overview.&lt;br /&gt;
&lt;br /&gt;
The original paper on [http://portal.acm.org/citation.cfm?id=224076 Exokernels] --[[User:Gautam|Gautam]] 22:39, 6 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I&#039;m just going to post my answer for question 1 on the individuel assignment and hope it helps. --[[User:Aellebla|Aellebla]] 15:06, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
The design of the micro kernel was to take everything they could out of the Kernel and put it into a process. For ex, networking would be put into a process instead of staying in the kernel. The micro kernel dev&#039;s tried to keep lots of things in user space for efficiency. But one major problem with this is there would be a large amount of moving from a process to the kernel to user space and back again and this is a costly, non efficient process.It was an application specific OS, there was no multiplexing. With a virtual machine you are not virtualizing apps like with a microkernel but virtualizing an entire Operating System. This is very heavy however but the benefits are that it‟s easy and all the standard OS features are there whereas in a microkernel setup they would not all be there and this can be seen as a compromise.&lt;br /&gt;
&lt;br /&gt;
Exokernels can be seen as a compromise to virtual machines and microkernels because virtual machines emulate and exokernels do not. When you emulate something you hide a lot of the actual information because you wouldn‟t be able to see the „real‟ hardware. If we look at a virtual box setup running Linux, and we go look at all the hardware, it will be displayed as fake hardware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;br /&gt;
&lt;br /&gt;
I think we should divide up the paragraphs and proofread each others instead. (Are there only 4 of us?) I don&#039;t have much time to work on this today though but I&#039;ll try to work on it tomorrow morning. - Slay&lt;br /&gt;
&lt;br /&gt;
Sure guy.  That sounds good.  There should be 5 or 6 of us though.. . Oh well. Their loss.  I will do some before or after work today. Ill start with Microkernel since there is not a large amount of info here, and so we don&#039;t overlap each other - JSlonosky&lt;br /&gt;
&lt;br /&gt;
yeah i think there was more like 7 of us btw if any one has any more information feel free to add it would be nice if you add the references so that way citing is really easy on  acm.org it will auto give you the citation info (where it says Display Formats click on ACM Ref  and new window with the citation info auto pop&#039;s up) --[[User:Asoknack|Asoknack]] 02:28, 11 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I added an outline of the similarities and differences. Add any more that I missed. These are from observations so I don&#039;t have any resources. -Slay&lt;br /&gt;
That&#039;s probably fine.  Our textbook probably outlines some of them, so I am sure we can find a few there - JSlonosky&lt;br /&gt;
&lt;br /&gt;
Talked to the teacher today and for VM he said we should focus on the implementation such as Xen and VMware , he also said to talk about para virtualization --[[User:Asoknack|Asoknack]] 18:42, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== The Essay ==&lt;br /&gt;
&lt;br /&gt;
Let&#039;s actually breakdown the essay into components then write it here.&lt;br /&gt;
&lt;br /&gt;
We have our intro/thesis statement&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...to the extent that exokernels be seen as a compromise between virtual machines and microkernels. &lt;br /&gt;
-I&#039;ll work on the initial intro, should have it ready by tonight. -Slade&lt;br /&gt;
&lt;br /&gt;
3 paragraphs that prove it&lt;br /&gt;
Explain how the key design characteristics of these three system architectures compare with each other. &lt;br /&gt;
&lt;br /&gt;
and conclusion&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3101</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3101"/>
		<updated>2010-10-12T19:31:17Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* Thread&amp;#039;s IPC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
* Large amount of moving from a process to Kernel to user space and back again, this is a costly operation.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Microkernel &#039;&#039;&#039;&lt;br /&gt;
* try&#039;s to minimize the amount of software that is mandatory or required [7]&lt;br /&gt;
advantages of Microkernel&lt;br /&gt;
* favors a modular system structure [7]&lt;br /&gt;
* one failure of a program does not impact any other programs [7]&lt;br /&gt;
* can support more than one api or strategies since all programs are separated [7]&lt;br /&gt;
==== Microkernel Concepts ==== &lt;br /&gt;
* piece of code is allowed in the kernel only if moving it outside the kernel would adversely affect the system. [7]&lt;br /&gt;
* any subsystem program created must be independent of all other subsystem&#039;s, any subsystem that is used can guarantee this from all other subsystems [7]&lt;br /&gt;
===== Address Space =====&lt;br /&gt;
* a mapping that relates the physical page to the virtual page. [7]&lt;br /&gt;
* hide&#039;s the hardware&#039;s concept of address space [7]&lt;br /&gt;
* based off the idea of recursion each subsystem has it&#039;s own address space [7]&lt;br /&gt;
* the micro kernel provides 3 operations [7]&lt;br /&gt;
** Grant [7]&lt;br /&gt;
*** allows the owner to give a page to a recipient, provided the recipient want&#039;s it the page is removed from the owner&#039;s address space and but in the recipients. [7]&lt;br /&gt;
*** must be available to the owner. [7]&lt;br /&gt;
** Map [7]&lt;br /&gt;
*** allows the user to share a page with a recipient [7]&lt;br /&gt;
*** page is not removed from the owner&#039;s address space. [7]&lt;br /&gt;
** Flush [7]&lt;br /&gt;
*** remove&#039;s the page from all recipients address space [7]&lt;br /&gt;
*** how does this work with Grant --[[User:Asoknack|Asoknack]] 19:10, 12 October 2010 (UTC)&lt;br /&gt;
* allows memory management and paging out side the kernel&lt;br /&gt;
* Map and flush is required for memory manger&#039;s and pagers [7]&lt;br /&gt;
* can be used to implement access right&#039;s [7]&lt;br /&gt;
* controlling I/O Right&#039;s and driver&#039;s are not done at kernel level [7]&lt;br /&gt;
&lt;br /&gt;
===== Thread&#039;s IPC =====&lt;br /&gt;
* Threads&lt;br /&gt;
** kernel [7]&lt;br /&gt;
*** Since a thread has an address space , all changes to the thread need to be done by the kernel [7]&lt;br /&gt;
* IPC&lt;br /&gt;
** IPC [7]&lt;br /&gt;
** grant and map also need IPC  (So buye the priciple above this has to be in the kernel)[7]&lt;br /&gt;
** basic way for sub process to communicate. [7]&lt;br /&gt;
* Interupts&lt;br /&gt;
**&lt;br /&gt;
&lt;br /&gt;
===== Unique Identifiers =====&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
System Level Virtualization&lt;br /&gt;
&lt;br /&gt;
=== VMM ===&lt;br /&gt;
* stands for Virtual Machine Monitor, also known as the hyper-visor[4]&lt;br /&gt;
* responsible for virtualization of hardware(mapping physical to virtual) and the VM that run on top of the virtuallized hardware [4]&lt;br /&gt;
* usually a small os with no drivers , so it is coupled with a linux distro that provides device / hardware access [4]&lt;br /&gt;
** the os that the VMM is using for driver&#039;s is called the hostOS [6]&lt;br /&gt;
*the hostOS provides login and physical access to the hardware as well as management for the VMM [6]&lt;br /&gt;
=== VM ===&lt;br /&gt;
* the OS that the vm is running is called the guestOS [6]&lt;br /&gt;
* the guestOS only sees resources that have been allocated to the VM [6]&lt;br /&gt;
==== three approaches ====&lt;br /&gt;
*Type I virtualization [5]&lt;br /&gt;
** runs off the physical hardware [4]&lt;br /&gt;
** Isolation of the guestOs from the hardware is done threw processe level protection meachnism[6]&lt;br /&gt;
*** ring 0 = VMM [6]&lt;br /&gt;
*** ring 1 = VM [6]&lt;br /&gt;
*** this means all instructions from the VM must go threw the VMM [6]&lt;br /&gt;
** since there can be multiple VM&#039;s on a computer the scheduling is done by the VMM [6]&lt;br /&gt;
** on boot the VMM creates a hardware platform for the VM [6]&lt;br /&gt;
** load&#039;s the VM kernel into virtual memory and then boot&#039;s it like a regular computer [6]&lt;br /&gt;
** ex. Xen [4]&lt;br /&gt;
*Type II virtualization [5]&lt;br /&gt;
** run off the host Os [4]&lt;br /&gt;
** ex. VMware , QEMU [4]&lt;br /&gt;
* Para-virtualization [6]&lt;br /&gt;
** Similar to Type but use the HostOs for Device driver access [6]&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Micro-kernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* multiplex resources securely providing protection to mutual distrustful application threw the use of secure binding&#039;s[1]&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel separates protection from management in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking access to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the number of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad parameter passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is designed to interact with a low-level machine independent level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to create low level primitives that the hardware resources can be accessed from, this also includes interrupts,exceptions [1]&lt;br /&gt;
** the exokernel also export privileged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource management except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource management is the best way to build flexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
** Use physical name&#039;s when ever possible[3] (not to sure what physical names are, I think it is as simple as what the hardware is called)--[[User:Asoknack|Asoknack]] 20:27, 9 October 2010 (UTC)&lt;br /&gt;
** Physical names capture useful information [3]&lt;br /&gt;
*** safer than and less resource intensive than virtual names as no translations are needed[3]&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource management [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release[1](Visible means that when revocation happens the exokernel tell the LibOS that resource is being revoked)&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achieved threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allows the separation of protection and resource use [1]&lt;br /&gt;
* only checks authorization during bind time [1]&lt;br /&gt;
** Application&#039;s with complex needs for resources only authorized during bind.[1]&lt;br /&gt;
* access checking is done during access time and there is no need to understand complex resources needs during access[1]&lt;br /&gt;
** (this means that the exokernel checks once to make sure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** allows the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve performance[1]&lt;br /&gt;
** eliminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be scheduled [2]&lt;br /&gt;
==== Visible Resource Revocation ====&lt;br /&gt;
* Used for most resources [1]&lt;br /&gt;
** allows for LibOS to help with deallocation [1]&lt;br /&gt;
** LibOS are able to garner what resources are scare [1]&lt;br /&gt;
* Slower than Invisible as application involvement is required [1]&lt;br /&gt;
** ex of when invisible is used is Processor addressing-context identifiers [1]&lt;br /&gt;
==== Abort Protocol ====&lt;br /&gt;
* allows the exokernel to take resources away from the LibOS [1]&lt;br /&gt;
* used when the LibOS fails to respond to the revocation request [1]&lt;br /&gt;
* Exokernel must be careful not to delete as the LibOS might need to write some system critical data to the resource [1]&lt;br /&gt;
&lt;br /&gt;
== Comparisons  ==&lt;br /&gt;
====Exokernel/Microkernel====&lt;br /&gt;
&#039;&#039;&#039;Similarities&#039;&#039;&#039;&lt;br /&gt;
* Limited functionality in kernel&lt;br /&gt;
** functionality in kernel to handle sharing of resources and security&lt;br /&gt;
** avoids programming directly to hardware which creates a dependency&lt;br /&gt;
* Additional functionality provided in user space as processes&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* Minimal abstractions provided by the kernel&lt;br /&gt;
** Applications given more power in exokernel&lt;br /&gt;
&lt;br /&gt;
====Exokernel/VM====&lt;br /&gt;
&#039;&#039;&#039;Similarities&#039;&#039;&#039;&lt;br /&gt;
* Idea of partitioning resources between applications/OSs&lt;br /&gt;
* &amp;quot;Control&amp;quot; of resource given&lt;br /&gt;
* Isolation from other applications/OSs&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* Exokernel runs applications, VM runs OS&lt;br /&gt;
* VM uses a hostOS and guestOSs run on top&lt;br /&gt;
* Virtualization on VMs, Exokernel deals with real resources&lt;br /&gt;
* VM hides a lot of information because it emulates. Exokernel does not.&lt;br /&gt;
&lt;br /&gt;
====Microkernel/VM====&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* With a virtual machine, you are not virtualizing apps like with a microkernel but virtualizing an entire Operating System.&lt;br /&gt;
* This can be costly but the benefits are that it&#039;s easier and all the standard OS features are available.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., Kaashoek, M. F., and O&#039;Toole, J. 1995. Exokernel: an operating system architecture for application-level resource management. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 251-266. DOI= http://doi.acm.org/10.1145/224056.224076 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3]&amp;lt;nowiki&amp;gt;Kaashoek, M. F., Engler, D. R., Ganger, G. R., Briceño, H. M., Hunt, R., Mazières, D., Pinckney, T., Grimm, R., Jannotti, J., and Mackenzie, K. 1997. Application performance and flexibility on exokernel systems. In Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles  (Saint Malo, France, October 05 - 08, 1997). W. M. Waite, Ed. SOSP &#039;97. ACM, New York, NY, 52-65. DOI= http://doi.acm.org/10.1145/268998.266644 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4]&amp;lt;nowiki&amp;gt;Vallee, G.; Naughton, T.; Engelmann, C.; Hong Ong; Scott, S.L.; , &amp;quot;System-Level Virtualization for High Performance Computing,&amp;quot; Parallel, Distributed and Network-Based Processing, 2008. PDP 2008. 16th Euromicro Conference on , vol., no., pp.636-643, 13-15 Feb. 2008&lt;br /&gt;
DOI= http://doi.acm.org/10.1109/PDP.2008.85 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5]&amp;lt;nowiki&amp;gt;Goldberg, R. P. 1973. Architecture of virtual machines. In Proceedings of the Workshop on Virtual Computer Systems  (Cambridge, Massachusetts, United States, March 26 - 27, 1973). ACM, New York, NY, 74-112. DOI= http://doi.acm.org/10.1145/800122.803950 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6]&amp;lt;nowiki&amp;gt;Vallee, G., Naughton, T., and Scott, S. L. 2007. System management software for virtual environments. In Proceedings of the 4th international Conference on Computing Frontiers (Ischia, Italy, May 07 - 09, 2007). CF &#039;07. ACM, New York, NY, 153-160. DOI= http://doi.acm.org/10.1145/1242531.1242555 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7]&amp;lt;nowiki&amp;gt;Liedtke, J. 1995. On micro-kernel construction. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 237-250. DOI= http://doi.acm.org/10.1145/224056.224075 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
An overview of exokernels,virtual machines, microkernels *[http://www2.supchurch.org:10999/files/school/classes/CSCI4730/Lectures/grad-structures.ppt Overview](Power Point)&amp;lt;br&amp;gt;&lt;br /&gt;
Should not be used as a source but an overview.&lt;br /&gt;
&lt;br /&gt;
The original paper on [http://portal.acm.org/citation.cfm?id=224076 Exokernels] --[[User:Gautam|Gautam]] 22:39, 6 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I&#039;m just going to post my answer for question 1 on the individuel assignment and hope it helps. --[[User:Aellebla|Aellebla]] 15:06, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
The design of the micro kernel was to take everything they could out of the Kernel and put it into a process. For ex, networking would be put into a process instead of staying in the kernel. The micro kernel dev&#039;s tried to keep lots of things in user space for efficiency. But one major problem with this is there would be a large amount of moving from a process to the kernel to user space and back again and this is a costly, non efficient process.It was an application specific OS, there was no multiplexing. With a virtual machine you are not virtualizing apps like with a microkernel but virtualizing an entire Operating System. This is very heavy however but the benefits are that it‟s easy and all the standard OS features are there whereas in a microkernel setup they would not all be there and this can be seen as a compromise.&lt;br /&gt;
&lt;br /&gt;
Exokernels can be seen as a compromise to virtual machines and microkernels because virtual machines emulate and exokernels do not. When you emulate something you hide a lot of the actual information because you wouldn‟t be able to see the „real‟ hardware. If we look at a virtual box setup running Linux, and we go look at all the hardware, it will be displayed as fake hardware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;br /&gt;
&lt;br /&gt;
I think we should divide up the paragraphs and proofread each others instead. (Are there only 4 of us?) I don&#039;t have much time to work on this today though but I&#039;ll try to work on it tomorrow morning. - Slay&lt;br /&gt;
&lt;br /&gt;
Sure guy.  That sounds good.  There should be 5 or 6 of us though.. . Oh well. Their loss.  I will do some before or after work today. Ill start with Microkernel since there is not a large amount of info here, and so we don&#039;t overlap each other - JSlonosky&lt;br /&gt;
&lt;br /&gt;
yeah i think there was more like 7 of us btw if any one has any more information feel free to add it would be nice if you add the references so that way citing is really easy on  acm.org it will auto give you the citation info (where it says Display Formats click on ACM Ref  and new window with the citation info auto pop&#039;s up) --[[User:Asoknack|Asoknack]] 02:28, 11 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I added an outline of the similarities and differences. Add any more that I missed. These are from observations so I don&#039;t have any resources. -Slay&lt;br /&gt;
That&#039;s probably fine.  Our textbook probably outlines some of them, so I am sure we can find a few there - JSlonosky&lt;br /&gt;
&lt;br /&gt;
Talked to the teacher today and for VM he said we should focus on the implementation such as Xen and VMware , he also said to talk about para virtualization --[[User:Asoknack|Asoknack]] 18:42, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== The Essay ==&lt;br /&gt;
&lt;br /&gt;
Let&#039;s actually breakdown the essay into components then write it here.&lt;br /&gt;
&lt;br /&gt;
We have our intro/thesis statement&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...to the extent that exokernels be seen as a compromise between virtual machines and microkernels. &lt;br /&gt;
-I&#039;ll work on the initial intro, should have it ready by tonight. -Slade&lt;br /&gt;
&lt;br /&gt;
3 paragraphs that prove it&lt;br /&gt;
Explain how the key design characteristics of these three system architectures compare with each other. &lt;br /&gt;
&lt;br /&gt;
and conclusion&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3100</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3100"/>
		<updated>2010-10-12T19:20:55Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* Address Space */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
* Large amount of moving from a process to Kernel to user space and back again, this is a costly operation.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Microkernel &#039;&#039;&#039;&lt;br /&gt;
* try&#039;s to minimize the amount of software that is mandatory or required [7]&lt;br /&gt;
advantages of Microkernel&lt;br /&gt;
* favors a modular system structure [7]&lt;br /&gt;
* one failure of a program does not impact any other programs [7]&lt;br /&gt;
* can support more than one api or strategies since all programs are separated [7]&lt;br /&gt;
==== Microkernel Concepts ==== &lt;br /&gt;
* piece of code is allowed in the kernel only if moving it outside the kernel would adversely affect the system. [7]&lt;br /&gt;
* any subsystem program created must be independent of all other subsystem&#039;s, any subsystem that is used can guarantee this from all other subsystems [7]&lt;br /&gt;
===== Address Space =====&lt;br /&gt;
* a mapping that relates the physical page to the virtual page. [7]&lt;br /&gt;
* hide&#039;s the hardware&#039;s concept of address space [7]&lt;br /&gt;
* based off the idea of recursion each subsystem has it&#039;s own address space [7]&lt;br /&gt;
* the micro kernel provides 3 operations [7]&lt;br /&gt;
** Grant [7]&lt;br /&gt;
*** allows the owner to give a page to a recipient, provided the recipient want&#039;s it the page is removed from the owner&#039;s address space and but in the recipients. [7]&lt;br /&gt;
*** must be available to the owner. [7]&lt;br /&gt;
** Map [7]&lt;br /&gt;
*** allows the user to share a page with a recipient [7]&lt;br /&gt;
*** page is not removed from the owner&#039;s address space. [7]&lt;br /&gt;
** Flush [7]&lt;br /&gt;
*** remove&#039;s the page from all recipients address space [7]&lt;br /&gt;
*** how does this work with Grant --[[User:Asoknack|Asoknack]] 19:10, 12 October 2010 (UTC)&lt;br /&gt;
* allows memory management and paging out side the kernel&lt;br /&gt;
* Map and flush is required for memory manger&#039;s and pagers [7]&lt;br /&gt;
* can be used to implement access right&#039;s [7]&lt;br /&gt;
* controlling I/O Right&#039;s and driver&#039;s are not done at kernel level [7]&lt;br /&gt;
&lt;br /&gt;
===== Thread&#039;s IPC =====&lt;br /&gt;
===== Unique Identifiers =====&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
System Level Virtualization&lt;br /&gt;
&lt;br /&gt;
=== VMM ===&lt;br /&gt;
* stands for Virtual Machine Monitor, also known as the hyper-visor[4]&lt;br /&gt;
* responsible for virtualization of hardware(mapping physical to virtual) and the VM that run on top of the virtuallized hardware [4]&lt;br /&gt;
* usually a small os with no drivers , so it is coupled with a linux distro that provides device / hardware access [4]&lt;br /&gt;
** the os that the VMM is using for driver&#039;s is called the hostOS [6]&lt;br /&gt;
*the hostOS provides login and physical access to the hardware as well as management for the VMM [6]&lt;br /&gt;
=== VM ===&lt;br /&gt;
* the OS that the vm is running is called the guestOS [6]&lt;br /&gt;
* the guestOS only sees resources that have been allocated to the VM [6]&lt;br /&gt;
==== three approaches ====&lt;br /&gt;
*Type I virtualization [5]&lt;br /&gt;
** runs off the physical hardware [4]&lt;br /&gt;
** Isolation of the guestOs from the hardware is done threw processe level protection meachnism[6]&lt;br /&gt;
*** ring 0 = VMM [6]&lt;br /&gt;
*** ring 1 = VM [6]&lt;br /&gt;
*** this means all instructions from the VM must go threw the VMM [6]&lt;br /&gt;
** since there can be multiple VM&#039;s on a computer the scheduling is done by the VMM [6]&lt;br /&gt;
** on boot the VMM creates a hardware platform for the VM [6]&lt;br /&gt;
** load&#039;s the VM kernel into virtual memory and then boot&#039;s it like a regular computer [6]&lt;br /&gt;
** ex. Xen [4]&lt;br /&gt;
*Type II virtualization [5]&lt;br /&gt;
** run off the host Os [4]&lt;br /&gt;
** ex. VMware , QEMU [4]&lt;br /&gt;
* Para-virtualization [6]&lt;br /&gt;
** Similar to Type but use the HostOs for Device driver access [6]&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Micro-kernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* multiplex resources securely providing protection to mutual distrustful application threw the use of secure binding&#039;s[1]&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel separates protection from management in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking access to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the number of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad parameter passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is designed to interact with a low-level machine independent level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to create low level primitives that the hardware resources can be accessed from, this also includes interrupts,exceptions [1]&lt;br /&gt;
** the exokernel also export privileged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource management except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource management is the best way to build flexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
** Use physical name&#039;s when ever possible[3] (not to sure what physical names are, I think it is as simple as what the hardware is called)--[[User:Asoknack|Asoknack]] 20:27, 9 October 2010 (UTC)&lt;br /&gt;
** Physical names capture useful information [3]&lt;br /&gt;
*** safer than and less resource intensive than virtual names as no translations are needed[3]&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource management [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release[1](Visible means that when revocation happens the exokernel tell the LibOS that resource is being revoked)&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achieved threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allows the separation of protection and resource use [1]&lt;br /&gt;
* only checks authorization during bind time [1]&lt;br /&gt;
** Application&#039;s with complex needs for resources only authorized during bind.[1]&lt;br /&gt;
* access checking is done during access time and there is no need to understand complex resources needs during access[1]&lt;br /&gt;
** (this means that the exokernel checks once to make sure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** allows the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve performance[1]&lt;br /&gt;
** eliminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be scheduled [2]&lt;br /&gt;
==== Visible Resource Revocation ====&lt;br /&gt;
* Used for most resources [1]&lt;br /&gt;
** allows for LibOS to help with deallocation [1]&lt;br /&gt;
** LibOS are able to garner what resources are scare [1]&lt;br /&gt;
* Slower than Invisible as application involvement is required [1]&lt;br /&gt;
** ex of when invisible is used is Processor addressing-context identifiers [1]&lt;br /&gt;
==== Abort Protocol ====&lt;br /&gt;
* allows the exokernel to take resources away from the LibOS [1]&lt;br /&gt;
* used when the LibOS fails to respond to the revocation request [1]&lt;br /&gt;
* Exokernel must be careful not to delete as the LibOS might need to write some system critical data to the resource [1]&lt;br /&gt;
&lt;br /&gt;
== Comparisons  ==&lt;br /&gt;
====Exokernel/Microkernel====&lt;br /&gt;
&#039;&#039;&#039;Similarities&#039;&#039;&#039;&lt;br /&gt;
* Limited functionality in kernel&lt;br /&gt;
** functionality in kernel to handle sharing of resources and security&lt;br /&gt;
** avoids programming directly to hardware which creates a dependency&lt;br /&gt;
* Additional functionality provided in user space as processes&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* Minimal abstractions provided by the kernel&lt;br /&gt;
** Applications given more power in exokernel&lt;br /&gt;
&lt;br /&gt;
====Exokernel/VM====&lt;br /&gt;
&#039;&#039;&#039;Similarities&#039;&#039;&#039;&lt;br /&gt;
* Idea of partitioning resources between applications/OSs&lt;br /&gt;
* &amp;quot;Control&amp;quot; of resource given&lt;br /&gt;
* Isolation from other applications/OSs&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* Exokernel runs applications, VM runs OS&lt;br /&gt;
* VM uses a hostOS and guestOSs run on top&lt;br /&gt;
* Virtualization on VMs, Exokernel deals with real resources&lt;br /&gt;
* VM hides a lot of information because it emulates. Exokernel does not.&lt;br /&gt;
&lt;br /&gt;
====Microkernel/VM====&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* With a virtual machine, you are not virtualizing apps like with a microkernel but virtualizing an entire Operating System.&lt;br /&gt;
* This can be costly but the benefits are that it&#039;s easier and all the standard OS features are available.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., Kaashoek, M. F., and O&#039;Toole, J. 1995. Exokernel: an operating system architecture for application-level resource management. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 251-266. DOI= http://doi.acm.org/10.1145/224056.224076 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3]&amp;lt;nowiki&amp;gt;Kaashoek, M. F., Engler, D. R., Ganger, G. R., Briceño, H. M., Hunt, R., Mazières, D., Pinckney, T., Grimm, R., Jannotti, J., and Mackenzie, K. 1997. Application performance and flexibility on exokernel systems. In Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles  (Saint Malo, France, October 05 - 08, 1997). W. M. Waite, Ed. SOSP &#039;97. ACM, New York, NY, 52-65. DOI= http://doi.acm.org/10.1145/268998.266644 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4]&amp;lt;nowiki&amp;gt;Vallee, G.; Naughton, T.; Engelmann, C.; Hong Ong; Scott, S.L.; , &amp;quot;System-Level Virtualization for High Performance Computing,&amp;quot; Parallel, Distributed and Network-Based Processing, 2008. PDP 2008. 16th Euromicro Conference on , vol., no., pp.636-643, 13-15 Feb. 2008&lt;br /&gt;
DOI= http://doi.acm.org/10.1109/PDP.2008.85 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5]&amp;lt;nowiki&amp;gt;Goldberg, R. P. 1973. Architecture of virtual machines. In Proceedings of the Workshop on Virtual Computer Systems  (Cambridge, Massachusetts, United States, March 26 - 27, 1973). ACM, New York, NY, 74-112. DOI= http://doi.acm.org/10.1145/800122.803950 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6]&amp;lt;nowiki&amp;gt;Vallee, G., Naughton, T., and Scott, S. L. 2007. System management software for virtual environments. In Proceedings of the 4th international Conference on Computing Frontiers (Ischia, Italy, May 07 - 09, 2007). CF &#039;07. ACM, New York, NY, 153-160. DOI= http://doi.acm.org/10.1145/1242531.1242555 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7]&amp;lt;nowiki&amp;gt;Liedtke, J. 1995. On micro-kernel construction. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 237-250. DOI= http://doi.acm.org/10.1145/224056.224075 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
An overview of exokernels,virtual machines, microkernels *[http://www2.supchurch.org:10999/files/school/classes/CSCI4730/Lectures/grad-structures.ppt Overview](Power Point)&amp;lt;br&amp;gt;&lt;br /&gt;
Should not be used as a source but an overview.&lt;br /&gt;
&lt;br /&gt;
The original paper on [http://portal.acm.org/citation.cfm?id=224076 Exokernels] --[[User:Gautam|Gautam]] 22:39, 6 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I&#039;m just going to post my answer for question 1 on the individuel assignment and hope it helps. --[[User:Aellebla|Aellebla]] 15:06, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
The design of the micro kernel was to take everything they could out of the Kernel and put it into a process. For ex, networking would be put into a process instead of staying in the kernel. The micro kernel dev&#039;s tried to keep lots of things in user space for efficiency. But one major problem with this is there would be a large amount of moving from a process to the kernel to user space and back again and this is a costly, non efficient process.It was an application specific OS, there was no multiplexing. With a virtual machine you are not virtualizing apps like with a microkernel but virtualizing an entire Operating System. This is very heavy however but the benefits are that it‟s easy and all the standard OS features are there whereas in a microkernel setup they would not all be there and this can be seen as a compromise.&lt;br /&gt;
&lt;br /&gt;
Exokernels can be seen as a compromise to virtual machines and microkernels because virtual machines emulate and exokernels do not. When you emulate something you hide a lot of the actual information because you wouldn‟t be able to see the „real‟ hardware. If we look at a virtual box setup running Linux, and we go look at all the hardware, it will be displayed as fake hardware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;br /&gt;
&lt;br /&gt;
I think we should divide up the paragraphs and proofread each others instead. (Are there only 4 of us?) I don&#039;t have much time to work on this today though but I&#039;ll try to work on it tomorrow morning. - Slay&lt;br /&gt;
&lt;br /&gt;
Sure guy.  That sounds good.  There should be 5 or 6 of us though.. . Oh well. Their loss.  I will do some before or after work today. Ill start with Microkernel since there is not a large amount of info here, and so we don&#039;t overlap each other - JSlonosky&lt;br /&gt;
&lt;br /&gt;
yeah i think there was more like 7 of us btw if any one has any more information feel free to add it would be nice if you add the references so that way citing is really easy on  acm.org it will auto give you the citation info (where it says Display Formats click on ACM Ref  and new window with the citation info auto pop&#039;s up) --[[User:Asoknack|Asoknack]] 02:28, 11 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I added an outline of the similarities and differences. Add any more that I missed. These are from observations so I don&#039;t have any resources. -Slay&lt;br /&gt;
That&#039;s probably fine.  Our textbook probably outlines some of them, so I am sure we can find a few there - JSlonosky&lt;br /&gt;
&lt;br /&gt;
Talked to the teacher today and for VM he said we should focus on the implementation such as Xen and VMware , he also said to talk about para virtualization --[[User:Asoknack|Asoknack]] 18:42, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== The Essay ==&lt;br /&gt;
&lt;br /&gt;
Let&#039;s actually breakdown the essay into components then write it here.&lt;br /&gt;
&lt;br /&gt;
We have our intro/thesis statement&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...to the extent that exokernels be seen as a compromise between virtual machines and microkernels. &lt;br /&gt;
-I&#039;ll work on the initial intro, should have it ready by tonight. -Slade&lt;br /&gt;
&lt;br /&gt;
3 paragraphs that prove it&lt;br /&gt;
Explain how the key design characteristics of these three system architectures compare with each other. &lt;br /&gt;
&lt;br /&gt;
and conclusion&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3099</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3099"/>
		<updated>2010-10-12T19:20:32Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* Address Space */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
* Large amount of moving from a process to Kernel to user space and back again, this is a costly operation.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Microkernel &#039;&#039;&#039;&lt;br /&gt;
* try&#039;s to minimize the amount of software that is mandatory or required [7]&lt;br /&gt;
advantages of Microkernel&lt;br /&gt;
* favors a modular system structure [7]&lt;br /&gt;
* one failure of a program does not impact any other programs [7]&lt;br /&gt;
* can support more than one api or strategies since all programs are separated [7]&lt;br /&gt;
==== Microkernel Concepts ==== &lt;br /&gt;
* piece of code is allowed in the kernel only if moving it outside the kernel would adversely affect the system. [7]&lt;br /&gt;
* any subsystem program created must be independent of all other subsystem&#039;s, any subsystem that is used can guarantee this from all other subsystems [7]&lt;br /&gt;
===== Address Space =====&lt;br /&gt;
* a mapping that relates the physical page to the virtual page. [7]&lt;br /&gt;
* hide&#039;s the hardware&#039;s concept of address space [7]&lt;br /&gt;
* based off the idea of recursion each subsystem has it&#039;s own address space [7]&lt;br /&gt;
* the micro kernel provides 3 operations [7]&lt;br /&gt;
** Grant [7]&lt;br /&gt;
*** allows the owner to give a page to a recipient, provided the recipient want&#039;s it the page is removed from the owner&#039;s address space and but in the recipients. [7]&lt;br /&gt;
*** must be available to the owner. [7]&lt;br /&gt;
** Map [7]&lt;br /&gt;
*** allows the user to share a page with a recipient [7]&lt;br /&gt;
*** page is not removed from the owner&#039;s address space. [7]&lt;br /&gt;
** Flush [7]&lt;br /&gt;
*** remove&#039;s the page from all recipients address space&lt;br /&gt;
*** how does this work with Grant --[[User:Asoknack|Asoknack]] 19:10, 12 October 2010 (UTC)&lt;br /&gt;
* allows memory management and paging out side the kernel&lt;br /&gt;
* Map and flush is required for memory manger&#039;s and pagers [7]&lt;br /&gt;
* can be used to implement acces right&#039;s&lt;br /&gt;
* controlling I/O Right&#039;s and driver&#039;s are not done at kernel level&lt;br /&gt;
&lt;br /&gt;
===== Thread&#039;s IPC =====&lt;br /&gt;
===== Unique Identifiers =====&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
System Level Virtualization&lt;br /&gt;
&lt;br /&gt;
=== VMM ===&lt;br /&gt;
* stands for Virtual Machine Monitor, also known as the hyper-visor[4]&lt;br /&gt;
* responsible for virtualization of hardware(mapping physical to virtual) and the VM that run on top of the virtuallized hardware [4]&lt;br /&gt;
* usually a small os with no drivers , so it is coupled with a linux distro that provides device / hardware access [4]&lt;br /&gt;
** the os that the VMM is using for driver&#039;s is called the hostOS [6]&lt;br /&gt;
*the hostOS provides login and physical access to the hardware as well as management for the VMM [6]&lt;br /&gt;
=== VM ===&lt;br /&gt;
* the OS that the vm is running is called the guestOS [6]&lt;br /&gt;
* the guestOS only sees resources that have been allocated to the VM [6]&lt;br /&gt;
==== three approaches ====&lt;br /&gt;
*Type I virtualization [5]&lt;br /&gt;
** runs off the physical hardware [4]&lt;br /&gt;
** Isolation of the guestOs from the hardware is done threw processe level protection meachnism[6]&lt;br /&gt;
*** ring 0 = VMM [6]&lt;br /&gt;
*** ring 1 = VM [6]&lt;br /&gt;
*** this means all instructions from the VM must go threw the VMM [6]&lt;br /&gt;
** since there can be multiple VM&#039;s on a computer the scheduling is done by the VMM [6]&lt;br /&gt;
** on boot the VMM creates a hardware platform for the VM [6]&lt;br /&gt;
** load&#039;s the VM kernel into virtual memory and then boot&#039;s it like a regular computer [6]&lt;br /&gt;
** ex. Xen [4]&lt;br /&gt;
*Type II virtualization [5]&lt;br /&gt;
** run off the host Os [4]&lt;br /&gt;
** ex. VMware , QEMU [4]&lt;br /&gt;
* Para-virtualization [6]&lt;br /&gt;
** Similar to Type but use the HostOs for Device driver access [6]&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Micro-kernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* multiplex resources securely providing protection to mutual distrustful application threw the use of secure binding&#039;s[1]&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel separates protection from management in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking access to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the number of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad parameter passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is designed to interact with a low-level machine independent level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to create low level primitives that the hardware resources can be accessed from, this also includes interrupts,exceptions [1]&lt;br /&gt;
** the exokernel also export privileged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource management except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource management is the best way to build flexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
** Use physical name&#039;s when ever possible[3] (not to sure what physical names are, I think it is as simple as what the hardware is called)--[[User:Asoknack|Asoknack]] 20:27, 9 October 2010 (UTC)&lt;br /&gt;
** Physical names capture useful information [3]&lt;br /&gt;
*** safer than and less resource intensive than virtual names as no translations are needed[3]&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource management [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release[1](Visible means that when revocation happens the exokernel tell the LibOS that resource is being revoked)&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achieved threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allows the separation of protection and resource use [1]&lt;br /&gt;
* only checks authorization during bind time [1]&lt;br /&gt;
** Application&#039;s with complex needs for resources only authorized during bind.[1]&lt;br /&gt;
* access checking is done during access time and there is no need to understand complex resources needs during access[1]&lt;br /&gt;
** (this means that the exokernel checks once to make sure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** allows the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve performance[1]&lt;br /&gt;
** eliminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be scheduled [2]&lt;br /&gt;
==== Visible Resource Revocation ====&lt;br /&gt;
* Used for most resources [1]&lt;br /&gt;
** allows for LibOS to help with deallocation [1]&lt;br /&gt;
** LibOS are able to garner what resources are scare [1]&lt;br /&gt;
* Slower than Invisible as application involvement is required [1]&lt;br /&gt;
** ex of when invisible is used is Processor addressing-context identifiers [1]&lt;br /&gt;
==== Abort Protocol ====&lt;br /&gt;
* allows the exokernel to take resources away from the LibOS [1]&lt;br /&gt;
* used when the LibOS fails to respond to the revocation request [1]&lt;br /&gt;
* Exokernel must be careful not to delete as the LibOS might need to write some system critical data to the resource [1]&lt;br /&gt;
&lt;br /&gt;
== Comparisons  ==&lt;br /&gt;
====Exokernel/Microkernel====&lt;br /&gt;
&#039;&#039;&#039;Similarities&#039;&#039;&#039;&lt;br /&gt;
* Limited functionality in kernel&lt;br /&gt;
** functionality in kernel to handle sharing of resources and security&lt;br /&gt;
** avoids programming directly to hardware which creates a dependency&lt;br /&gt;
* Additional functionality provided in user space as processes&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* Minimal abstractions provided by the kernel&lt;br /&gt;
** Applications given more power in exokernel&lt;br /&gt;
&lt;br /&gt;
====Exokernel/VM====&lt;br /&gt;
&#039;&#039;&#039;Similarities&#039;&#039;&#039;&lt;br /&gt;
* Idea of partitioning resources between applications/OSs&lt;br /&gt;
* &amp;quot;Control&amp;quot; of resource given&lt;br /&gt;
* Isolation from other applications/OSs&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* Exokernel runs applications, VM runs OS&lt;br /&gt;
* VM uses a hostOS and guestOSs run on top&lt;br /&gt;
* Virtualization on VMs, Exokernel deals with real resources&lt;br /&gt;
* VM hides a lot of information because it emulates. Exokernel does not.&lt;br /&gt;
&lt;br /&gt;
====Microkernel/VM====&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* With a virtual machine, you are not virtualizing apps like with a microkernel but virtualizing an entire Operating System.&lt;br /&gt;
* This can be costly but the benefits are that it&#039;s easier and all the standard OS features are available.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., Kaashoek, M. F., and O&#039;Toole, J. 1995. Exokernel: an operating system architecture for application-level resource management. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 251-266. DOI= http://doi.acm.org/10.1145/224056.224076 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3]&amp;lt;nowiki&amp;gt;Kaashoek, M. F., Engler, D. R., Ganger, G. R., Briceño, H. M., Hunt, R., Mazières, D., Pinckney, T., Grimm, R., Jannotti, J., and Mackenzie, K. 1997. Application performance and flexibility on exokernel systems. In Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles  (Saint Malo, France, October 05 - 08, 1997). W. M. Waite, Ed. SOSP &#039;97. ACM, New York, NY, 52-65. DOI= http://doi.acm.org/10.1145/268998.266644 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4]&amp;lt;nowiki&amp;gt;Vallee, G.; Naughton, T.; Engelmann, C.; Hong Ong; Scott, S.L.; , &amp;quot;System-Level Virtualization for High Performance Computing,&amp;quot; Parallel, Distributed and Network-Based Processing, 2008. PDP 2008. 16th Euromicro Conference on , vol., no., pp.636-643, 13-15 Feb. 2008&lt;br /&gt;
DOI= http://doi.acm.org/10.1109/PDP.2008.85 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5]&amp;lt;nowiki&amp;gt;Goldberg, R. P. 1973. Architecture of virtual machines. In Proceedings of the Workshop on Virtual Computer Systems  (Cambridge, Massachusetts, United States, March 26 - 27, 1973). ACM, New York, NY, 74-112. DOI= http://doi.acm.org/10.1145/800122.803950 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6]&amp;lt;nowiki&amp;gt;Vallee, G., Naughton, T., and Scott, S. L. 2007. System management software for virtual environments. In Proceedings of the 4th international Conference on Computing Frontiers (Ischia, Italy, May 07 - 09, 2007). CF &#039;07. ACM, New York, NY, 153-160. DOI= http://doi.acm.org/10.1145/1242531.1242555 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7]&amp;lt;nowiki&amp;gt;Liedtke, J. 1995. On micro-kernel construction. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 237-250. DOI= http://doi.acm.org/10.1145/224056.224075 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
An overview of exokernels,virtual machines, microkernels *[http://www2.supchurch.org:10999/files/school/classes/CSCI4730/Lectures/grad-structures.ppt Overview](Power Point)&amp;lt;br&amp;gt;&lt;br /&gt;
Should not be used as a source but an overview.&lt;br /&gt;
&lt;br /&gt;
The original paper on [http://portal.acm.org/citation.cfm?id=224076 Exokernels] --[[User:Gautam|Gautam]] 22:39, 6 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I&#039;m just going to post my answer for question 1 on the individuel assignment and hope it helps. --[[User:Aellebla|Aellebla]] 15:06, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
The design of the micro kernel was to take everything they could out of the Kernel and put it into a process. For ex, networking would be put into a process instead of staying in the kernel. The micro kernel dev&#039;s tried to keep lots of things in user space for efficiency. But one major problem with this is there would be a large amount of moving from a process to the kernel to user space and back again and this is a costly, non efficient process.It was an application specific OS, there was no multiplexing. With a virtual machine you are not virtualizing apps like with a microkernel but virtualizing an entire Operating System. This is very heavy however but the benefits are that it‟s easy and all the standard OS features are there whereas in a microkernel setup they would not all be there and this can be seen as a compromise.&lt;br /&gt;
&lt;br /&gt;
Exokernels can be seen as a compromise to virtual machines and microkernels because virtual machines emulate and exokernels do not. When you emulate something you hide a lot of the actual information because you wouldn‟t be able to see the „real‟ hardware. If we look at a virtual box setup running Linux, and we go look at all the hardware, it will be displayed as fake hardware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;br /&gt;
&lt;br /&gt;
I think we should divide up the paragraphs and proofread each others instead. (Are there only 4 of us?) I don&#039;t have much time to work on this today though but I&#039;ll try to work on it tomorrow morning. - Slay&lt;br /&gt;
&lt;br /&gt;
Sure guy.  That sounds good.  There should be 5 or 6 of us though.. . Oh well. Their loss.  I will do some before or after work today. Ill start with Microkernel since there is not a large amount of info here, and so we don&#039;t overlap each other - JSlonosky&lt;br /&gt;
&lt;br /&gt;
yeah i think there was more like 7 of us btw if any one has any more information feel free to add it would be nice if you add the references so that way citing is really easy on  acm.org it will auto give you the citation info (where it says Display Formats click on ACM Ref  and new window with the citation info auto pop&#039;s up) --[[User:Asoknack|Asoknack]] 02:28, 11 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I added an outline of the similarities and differences. Add any more that I missed. These are from observations so I don&#039;t have any resources. -Slay&lt;br /&gt;
That&#039;s probably fine.  Our textbook probably outlines some of them, so I am sure we can find a few there - JSlonosky&lt;br /&gt;
&lt;br /&gt;
Talked to the teacher today and for VM he said we should focus on the implementation such as Xen and VMware , he also said to talk about para virtualization --[[User:Asoknack|Asoknack]] 18:42, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== The Essay ==&lt;br /&gt;
&lt;br /&gt;
Let&#039;s actually breakdown the essay into components then write it here.&lt;br /&gt;
&lt;br /&gt;
We have our intro/thesis statement&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...to the extent that exokernels be seen as a compromise between virtual machines and microkernels. &lt;br /&gt;
-I&#039;ll work on the initial intro, should have it ready by tonight. -Slade&lt;br /&gt;
&lt;br /&gt;
3 paragraphs that prove it&lt;br /&gt;
Explain how the key design characteristics of these three system architectures compare with each other. &lt;br /&gt;
&lt;br /&gt;
and conclusion&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3096</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3096"/>
		<updated>2010-10-12T19:14:01Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* Unsorted */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
* Large amount of moving from a process to Kernel to user space and back again, this is a costly operation.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Microkernel &#039;&#039;&#039;&lt;br /&gt;
* try&#039;s to minimize the amount of software that is mandatory or required [7]&lt;br /&gt;
advantages of Microkernel&lt;br /&gt;
* favors a modular system structure [7]&lt;br /&gt;
* one failure of a program does not impact any other programs [7]&lt;br /&gt;
* can support more than one api or strategies since all programs are separated [7]&lt;br /&gt;
==== Microkernel Concepts ==== &lt;br /&gt;
* piece of code is allowed in the kernel only if moving it outside the kernel would adversely affect the system. [7]&lt;br /&gt;
* any subsystem program created must be independent of all other subsystem&#039;s, any subsystem that is used can guarantee this from all other subsystems [7]&lt;br /&gt;
===== Address Space =====&lt;br /&gt;
* a mapping that relates the physical page to the virtual page. [7]&lt;br /&gt;
* hide&#039;s the hardware&#039;s concept of address space [7]&lt;br /&gt;
* based off the idea of recursion each subsystem has it&#039;s own address space [7]&lt;br /&gt;
* the micro kernel provides 3 operations [7]&lt;br /&gt;
** Grant [7]&lt;br /&gt;
*** allows the owner to give a page to a recipient, provided the recipient want&#039;s it the page is removed from the owner&#039;s address space and but in the recipients. [7]&lt;br /&gt;
*** must be available to the owner. [7]&lt;br /&gt;
** Map [7]&lt;br /&gt;
*** allows the user to share a page with a recipient [7]&lt;br /&gt;
*** page is not removed from the owner&#039;s address space. [7]&lt;br /&gt;
** Flush [7]&lt;br /&gt;
*** remove&#039;s the page from all recipients address space&lt;br /&gt;
*** how does this work with Grant --[[User:Asoknack|Asoknack]] 19:10, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
===== Thread&#039;s IPC =====&lt;br /&gt;
===== Unique Identifiers =====&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
System Level Virtualization&lt;br /&gt;
&lt;br /&gt;
=== VMM ===&lt;br /&gt;
* stands for Virtual Machine Monitor, also known as the hyper-visor[4]&lt;br /&gt;
* responsible for virtualization of hardware(mapping physical to virtual) and the VM that run on top of the virtuallized hardware [4]&lt;br /&gt;
* usually a small os with no drivers , so it is coupled with a linux distro that provides device / hardware access [4]&lt;br /&gt;
** the os that the VMM is using for driver&#039;s is called the hostOS [6]&lt;br /&gt;
*the hostOS provides login and physical access to the hardware as well as management for the VMM [6]&lt;br /&gt;
=== VM ===&lt;br /&gt;
* the OS that the vm is running is called the guestOS [6]&lt;br /&gt;
* the guestOS only sees resources that have been allocated to the VM [6]&lt;br /&gt;
==== three approaches ====&lt;br /&gt;
*Type I virtualization [5]&lt;br /&gt;
** runs off the physical hardware [4]&lt;br /&gt;
** Isolation of the guestOs from the hardware is done threw processe level protection meachnism[6]&lt;br /&gt;
*** ring 0 = VMM [6]&lt;br /&gt;
*** ring 1 = VM [6]&lt;br /&gt;
*** this means all instructions from the VM must go threw the VMM [6]&lt;br /&gt;
** since there can be multiple VM&#039;s on a computer the scheduling is done by the VMM [6]&lt;br /&gt;
** on boot the VMM creates a hardware platform for the VM [6]&lt;br /&gt;
** load&#039;s the VM kernel into virtual memory and then boot&#039;s it like a regular computer [6]&lt;br /&gt;
** ex. Xen [4]&lt;br /&gt;
*Type II virtualization [5]&lt;br /&gt;
** run off the host Os [4]&lt;br /&gt;
** ex. VMware , QEMU [4]&lt;br /&gt;
* Para-virtualization [6]&lt;br /&gt;
** Similar to Type but use the HostOs for Device driver access [6]&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Micro-kernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* multiplex resources securely providing protection to mutual distrustful application threw the use of secure binding&#039;s[1]&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel separates protection from management in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking access to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the number of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad parameter passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is designed to interact with a low-level machine independent level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to create low level primitives that the hardware resources can be accessed from, this also includes interrupts,exceptions [1]&lt;br /&gt;
** the exokernel also export privileged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource management except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource management is the best way to build flexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
** Use physical name&#039;s when ever possible[3] (not to sure what physical names are, I think it is as simple as what the hardware is called)--[[User:Asoknack|Asoknack]] 20:27, 9 October 2010 (UTC)&lt;br /&gt;
** Physical names capture useful information [3]&lt;br /&gt;
*** safer than and less resource intensive than virtual names as no translations are needed[3]&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource management [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release[1](Visible means that when revocation happens the exokernel tell the LibOS that resource is being revoked)&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achieved threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allows the separation of protection and resource use [1]&lt;br /&gt;
* only checks authorization during bind time [1]&lt;br /&gt;
** Application&#039;s with complex needs for resources only authorized during bind.[1]&lt;br /&gt;
* access checking is done during access time and there is no need to understand complex resources needs during access[1]&lt;br /&gt;
** (this means that the exokernel checks once to make sure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** allows the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve performance[1]&lt;br /&gt;
** eliminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be scheduled [2]&lt;br /&gt;
==== Visible Resource Revocation ====&lt;br /&gt;
* Used for most resources [1]&lt;br /&gt;
** allows for LibOS to help with deallocation [1]&lt;br /&gt;
** LibOS are able to garner what resources are scare [1]&lt;br /&gt;
* Slower than Invisible as application involvement is required [1]&lt;br /&gt;
** ex of when invisible is used is Processor addressing-context identifiers [1]&lt;br /&gt;
==== Abort Protocol ====&lt;br /&gt;
* allows the exokernel to take resources away from the LibOS [1]&lt;br /&gt;
* used when the LibOS fails to respond to the revocation request [1]&lt;br /&gt;
* Exokernel must be careful not to delete as the LibOS might need to write some system critical data to the resource [1]&lt;br /&gt;
&lt;br /&gt;
== Comparisons  ==&lt;br /&gt;
====Exokernel/Microkernel====&lt;br /&gt;
&#039;&#039;&#039;Similarities&#039;&#039;&#039;&lt;br /&gt;
* Limited functionality in kernel&lt;br /&gt;
** functionality in kernel to handle sharing of resources and security&lt;br /&gt;
** avoids programming directly to hardware which creates a dependency&lt;br /&gt;
* Additional functionality provided in user space as processes&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* Minimal abstractions provided by the kernel&lt;br /&gt;
** Applications given more power in exokernel&lt;br /&gt;
&lt;br /&gt;
====Exokernel/VM====&lt;br /&gt;
&#039;&#039;&#039;Similarities&#039;&#039;&#039;&lt;br /&gt;
* Idea of partitioning resources between applications/OSs&lt;br /&gt;
* &amp;quot;Control&amp;quot; of resource given&lt;br /&gt;
* Isolation from other applications/OSs&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* Exokernel runs applications, VM runs OS&lt;br /&gt;
* VM uses a hostOS and guestOSs run on top&lt;br /&gt;
* Virtualization on VMs, Exokernel deals with real resources&lt;br /&gt;
* VM hides a lot of information because it emulates. Exokernel does not.&lt;br /&gt;
&lt;br /&gt;
====Microkernel/VM====&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* With a virtual machine, you are not virtualizing apps like with a microkernel but virtualizing an entire Operating System.&lt;br /&gt;
* This can be costly but the benefits are that it&#039;s easier and all the standard OS features are available.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., Kaashoek, M. F., and O&#039;Toole, J. 1995. Exokernel: an operating system architecture for application-level resource management. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 251-266. DOI= http://doi.acm.org/10.1145/224056.224076 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3]&amp;lt;nowiki&amp;gt;Kaashoek, M. F., Engler, D. R., Ganger, G. R., Briceño, H. M., Hunt, R., Mazières, D., Pinckney, T., Grimm, R., Jannotti, J., and Mackenzie, K. 1997. Application performance and flexibility on exokernel systems. In Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles  (Saint Malo, France, October 05 - 08, 1997). W. M. Waite, Ed. SOSP &#039;97. ACM, New York, NY, 52-65. DOI= http://doi.acm.org/10.1145/268998.266644 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4]&amp;lt;nowiki&amp;gt;Vallee, G.; Naughton, T.; Engelmann, C.; Hong Ong; Scott, S.L.; , &amp;quot;System-Level Virtualization for High Performance Computing,&amp;quot; Parallel, Distributed and Network-Based Processing, 2008. PDP 2008. 16th Euromicro Conference on , vol., no., pp.636-643, 13-15 Feb. 2008&lt;br /&gt;
DOI= http://doi.acm.org/10.1109/PDP.2008.85 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5]&amp;lt;nowiki&amp;gt;Goldberg, R. P. 1973. Architecture of virtual machines. In Proceedings of the Workshop on Virtual Computer Systems  (Cambridge, Massachusetts, United States, March 26 - 27, 1973). ACM, New York, NY, 74-112. DOI= http://doi.acm.org/10.1145/800122.803950 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6]&amp;lt;nowiki&amp;gt;Vallee, G., Naughton, T., and Scott, S. L. 2007. System management software for virtual environments. In Proceedings of the 4th international Conference on Computing Frontiers (Ischia, Italy, May 07 - 09, 2007). CF &#039;07. ACM, New York, NY, 153-160. DOI= http://doi.acm.org/10.1145/1242531.1242555 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7]&amp;lt;nowiki&amp;gt;Liedtke, J. 1995. On micro-kernel construction. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 237-250. DOI= http://doi.acm.org/10.1145/224056.224075 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
An overview of exokernels,virtual machines, microkernels *[http://www2.supchurch.org:10999/files/school/classes/CSCI4730/Lectures/grad-structures.ppt Overview](Power Point)&amp;lt;br&amp;gt;&lt;br /&gt;
Should not be used as a source but an overview.&lt;br /&gt;
&lt;br /&gt;
The original paper on [http://portal.acm.org/citation.cfm?id=224076 Exokernels] --[[User:Gautam|Gautam]] 22:39, 6 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I&#039;m just going to post my answer for question 1 on the individuel assignment and hope it helps. --[[User:Aellebla|Aellebla]] 15:06, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
The design of the micro kernel was to take everything they could out of the Kernel and put it into a process. For ex, networking would be put into a process instead of staying in the kernel. The micro kernel dev&#039;s tried to keep lots of things in user space for efficiency. But one major problem with this is there would be a large amount of moving from a process to the kernel to user space and back again and this is a costly, non efficient process.It was an application specific OS, there was no multiplexing. With a virtual machine you are not virtualizing apps like with a microkernel but virtualizing an entire Operating System. This is very heavy however but the benefits are that it‟s easy and all the standard OS features are there whereas in a microkernel setup they would not all be there and this can be seen as a compromise.&lt;br /&gt;
&lt;br /&gt;
Exokernels can be seen as a compromise to virtual machines and microkernels because virtual machines emulate and exokernels do not. When you emulate something you hide a lot of the actual information because you wouldn‟t be able to see the „real‟ hardware. If we look at a virtual box setup running Linux, and we go look at all the hardware, it will be displayed as fake hardware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;br /&gt;
&lt;br /&gt;
I think we should divide up the paragraphs and proofread each others instead. (Are there only 4 of us?) I don&#039;t have much time to work on this today though but I&#039;ll try to work on it tomorrow morning. - Slay&lt;br /&gt;
&lt;br /&gt;
Sure guy.  That sounds good.  There should be 5 or 6 of us though.. . Oh well. Their loss.  I will do some before or after work today. Ill start with Microkernel since there is not a large amount of info here, and so we don&#039;t overlap each other - JSlonosky&lt;br /&gt;
&lt;br /&gt;
yeah i think there was more like 7 of us btw if any one has any more information feel free to add it would be nice if you add the references so that way citing is really easy on  acm.org it will auto give you the citation info (where it says Display Formats click on ACM Ref  and new window with the citation info auto pop&#039;s up) --[[User:Asoknack|Asoknack]] 02:28, 11 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I added an outline of the similarities and differences. Add any more that I missed. These are from observations so I don&#039;t have any resources. -Slay&lt;br /&gt;
That&#039;s probably fine.  Our textbook probably outlines some of them, so I am sure we can find a few there - JSlonosky&lt;br /&gt;
&lt;br /&gt;
Talked to the teacher today and for VM he said we should focus on the implementation such as Xen and VMware , he also said to talk about para virtualization --[[User:Asoknack|Asoknack]] 18:42, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== The Essay ==&lt;br /&gt;
&lt;br /&gt;
Let&#039;s actually breakdown the essay into components then write it here.&lt;br /&gt;
&lt;br /&gt;
We have our intro/thesis statement&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...to the extent that exokernels be seen as a compromise between virtual machines and microkernels. &lt;br /&gt;
-I&#039;ll work on the initial intro, should have it ready by tonight. -Slade&lt;br /&gt;
&lt;br /&gt;
3 paragraphs that prove it&lt;br /&gt;
Explain how the key design characteristics of these three system architectures compare with each other. &lt;br /&gt;
&lt;br /&gt;
and conclusion&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=COMP_3000_Essay_1_2010_Question_1&amp;diff=3095</id>
		<title>COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=COMP_3000_Essay_1_2010_Question_1&amp;diff=3095"/>
		<updated>2010-10-12T19:13:48Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* Resources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Question=&lt;br /&gt;
To what extent can exokernels be seen as a compromise between virtual machines and microkernels? Explain how the key design characteristics of these three system architectures compare with each other.&lt;br /&gt;
&lt;br /&gt;
=Answer=&lt;br /&gt;
&lt;br /&gt;
=Misc=&lt;br /&gt;
* every thing is moved to discussion page&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3094</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3094"/>
		<updated>2010-10-12T19:10:34Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* Address Space */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
* Large amount of moving from a process to Kernel to user space and back again, this is a costly operation.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Microkernel &#039;&#039;&#039;&lt;br /&gt;
* try&#039;s to minimize the amount of software that is mandatory or required [7]&lt;br /&gt;
advantages of Microkernel&lt;br /&gt;
* favors a modular system structure [7]&lt;br /&gt;
* one failure of a program does not impact any other programs [7]&lt;br /&gt;
* can support more than one api or strategies since all programs are separated [7]&lt;br /&gt;
==== Microkernel Concepts ==== &lt;br /&gt;
* piece of code is allowed in the kernel only if moving it outside the kernel would adversely affect the system. [7]&lt;br /&gt;
* any subsystem program created must be independent of all other subsystem&#039;s, any subsystem that is used can guarantee this from all other subsystems [7]&lt;br /&gt;
===== Address Space =====&lt;br /&gt;
* a mapping that relates the physical page to the virtual page. [7]&lt;br /&gt;
* hide&#039;s the hardware&#039;s concept of address space [7]&lt;br /&gt;
* based off the idea of recursion each subsystem has it&#039;s own address space [7]&lt;br /&gt;
* the micro kernel provides 3 operations [7]&lt;br /&gt;
** Grant [7]&lt;br /&gt;
*** allows the owner to give a page to a recipient, provided the recipient want&#039;s it the page is removed from the owner&#039;s address space and but in the recipients. [7]&lt;br /&gt;
*** must be available to the owner. [7]&lt;br /&gt;
** Map [7]&lt;br /&gt;
*** allows the user to share a page with a recipient [7]&lt;br /&gt;
*** page is not removed from the owner&#039;s address space. [7]&lt;br /&gt;
** Flush [7]&lt;br /&gt;
*** remove&#039;s the page from all recipients address space&lt;br /&gt;
*** how does this work with Grant --[[User:Asoknack|Asoknack]] 19:10, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
===== Thread&#039;s IPC =====&lt;br /&gt;
===== Unique Identifiers =====&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
System Level Virtualization&lt;br /&gt;
&lt;br /&gt;
=== VMM ===&lt;br /&gt;
* stands for Virtual Machine Monitor, also known as the hyper-visor[4]&lt;br /&gt;
* responsible for virtualization of hardware(mapping physical to virtual) and the VM that run on top of the virtuallized hardware [4]&lt;br /&gt;
* usually a small os with no drivers , so it is coupled with a linux distro that provides device / hardware access [4]&lt;br /&gt;
** the os that the VMM is using for driver&#039;s is called the hostOS [6]&lt;br /&gt;
*the hostOS provides login and physical access to the hardware as well as management for the VMM [6]&lt;br /&gt;
=== VM ===&lt;br /&gt;
* the OS that the vm is running is called the guestOS [6]&lt;br /&gt;
* the guestOS only sees resources that have been allocated to the VM [6]&lt;br /&gt;
==== three approaches ====&lt;br /&gt;
*Type I virtualization [5]&lt;br /&gt;
** runs off the physical hardware [4]&lt;br /&gt;
** Isolation of the guestOs from the hardware is done threw processe level protection meachnism[6]&lt;br /&gt;
*** ring 0 = VMM [6]&lt;br /&gt;
*** ring 1 = VM [6]&lt;br /&gt;
*** this means all instructions from the VM must go threw the VMM [6]&lt;br /&gt;
** since there can be multiple VM&#039;s on a computer the scheduling is done by the VMM [6]&lt;br /&gt;
** on boot the VMM creates a hardware platform for the VM [6]&lt;br /&gt;
** load&#039;s the VM kernel into virtual memory and then boot&#039;s it like a regular computer [6]&lt;br /&gt;
** ex. Xen [4]&lt;br /&gt;
*Type II virtualization [5]&lt;br /&gt;
** run off the host Os [4]&lt;br /&gt;
** ex. VMware , QEMU [4]&lt;br /&gt;
* Para-virtualization [6]&lt;br /&gt;
** Similar to Type but use the HostOs for Device driver access [6]&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Micro-kernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* multiplex resources securely providing protection to mutual distrustful application threw the use of secure binding&#039;s[1]&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel separates protection from management in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking access to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the number of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad parameter passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is designed to interact with a low-level machine independent level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to create low level primitives that the hardware resources can be accessed from, this also includes interrupts,exceptions [1]&lt;br /&gt;
** the exokernel also export privileged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource management except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource management is the best way to build flexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
** Use physical name&#039;s when ever possible[3] (not to sure what physical names are, I think it is as simple as what the hardware is called)--[[User:Asoknack|Asoknack]] 20:27, 9 October 2010 (UTC)&lt;br /&gt;
** Physical names capture useful information [3]&lt;br /&gt;
*** safer than and less resource intensive than virtual names as no translations are needed[3]&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource management [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release[1](Visible means that when revocation happens the exokernel tell the LibOS that resource is being revoked)&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achieved threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allows the separation of protection and resource use [1]&lt;br /&gt;
* only checks authorization during bind time [1]&lt;br /&gt;
** Application&#039;s with complex needs for resources only authorized during bind.[1]&lt;br /&gt;
* access checking is done during access time and there is no need to understand complex resources needs during access[1]&lt;br /&gt;
** (this means that the exokernel checks once to make sure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** allows the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve performance[1]&lt;br /&gt;
** eliminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be scheduled [2]&lt;br /&gt;
==== Visible Resource Revocation ====&lt;br /&gt;
* Used for most resources [1]&lt;br /&gt;
** allows for LibOS to help with deallocation [1]&lt;br /&gt;
** LibOS are able to garner what resources are scare [1]&lt;br /&gt;
* Slower than Invisible as application involvement is required [1]&lt;br /&gt;
** ex of when invisible is used is Processor addressing-context identifiers [1]&lt;br /&gt;
==== Abort Protocol ====&lt;br /&gt;
* allows the exokernel to take resources away from the LibOS [1]&lt;br /&gt;
* used when the LibOS fails to respond to the revocation request [1]&lt;br /&gt;
* Exokernel must be careful not to delete as the LibOS might need to write some system critical data to the resource [1]&lt;br /&gt;
&lt;br /&gt;
== Comparisons  ==&lt;br /&gt;
====Exokernel/Microkernel====&lt;br /&gt;
&#039;&#039;&#039;Similarities&#039;&#039;&#039;&lt;br /&gt;
* Limited functionality in kernel&lt;br /&gt;
** functionality in kernel to handle sharing of resources and security&lt;br /&gt;
** avoids programming directly to hardware which creates a dependency&lt;br /&gt;
* Additional functionality provided in user space as processes&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* Minimal abstractions provided by the kernel&lt;br /&gt;
** Applications given more power in exokernel&lt;br /&gt;
&lt;br /&gt;
====Exokernel/VM====&lt;br /&gt;
&#039;&#039;&#039;Similarities&#039;&#039;&#039;&lt;br /&gt;
* Idea of partitioning resources between applications/OSs&lt;br /&gt;
* &amp;quot;Control&amp;quot; of resource given&lt;br /&gt;
* Isolation from other applications/OSs&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* Exokernel runs applications, VM runs OS&lt;br /&gt;
* VM uses a hostOS and guestOSs run on top&lt;br /&gt;
* Virtualization on VMs, Exokernel deals with real resources&lt;br /&gt;
* VM hides a lot of information because it emulates. Exokernel does not.&lt;br /&gt;
&lt;br /&gt;
====Microkernel/VM====&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* With a virtual machine, you are not virtualizing apps like with a microkernel but virtualizing an entire Operating System.&lt;br /&gt;
* This can be costly but the benefits are that it&#039;s easier and all the standard OS features are available.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., Kaashoek, M. F., and O&#039;Toole, J. 1995. Exokernel: an operating system architecture for application-level resource management. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 251-266. DOI= http://doi.acm.org/10.1145/224056.224076 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3]&amp;lt;nowiki&amp;gt;Kaashoek, M. F., Engler, D. R., Ganger, G. R., Briceño, H. M., Hunt, R., Mazières, D., Pinckney, T., Grimm, R., Jannotti, J., and Mackenzie, K. 1997. Application performance and flexibility on exokernel systems. In Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles  (Saint Malo, France, October 05 - 08, 1997). W. M. Waite, Ed. SOSP &#039;97. ACM, New York, NY, 52-65. DOI= http://doi.acm.org/10.1145/268998.266644 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4]&amp;lt;nowiki&amp;gt;Vallee, G.; Naughton, T.; Engelmann, C.; Hong Ong; Scott, S.L.; , &amp;quot;System-Level Virtualization for High Performance Computing,&amp;quot; Parallel, Distributed and Network-Based Processing, 2008. PDP 2008. 16th Euromicro Conference on , vol., no., pp.636-643, 13-15 Feb. 2008&lt;br /&gt;
DOI= http://doi.acm.org/10.1109/PDP.2008.85 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5]&amp;lt;nowiki&amp;gt;Goldberg, R. P. 1973. Architecture of virtual machines. In Proceedings of the Workshop on Virtual Computer Systems  (Cambridge, Massachusetts, United States, March 26 - 27, 1973). ACM, New York, NY, 74-112. DOI= http://doi.acm.org/10.1145/800122.803950 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6]&amp;lt;nowiki&amp;gt;Vallee, G., Naughton, T., and Scott, S. L. 2007. System management software for virtual environments. In Proceedings of the 4th international Conference on Computing Frontiers (Ischia, Italy, May 07 - 09, 2007). CF &#039;07. ACM, New York, NY, 153-160. DOI= http://doi.acm.org/10.1145/1242531.1242555 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7]&amp;lt;nowiki&amp;gt;Liedtke, J. 1995. On micro-kernel construction. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 237-250. DOI= http://doi.acm.org/10.1145/224056.224075 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I&#039;m just going to post my answer for question 1 on the individuel assignment and hope it helps. --[[User:Aellebla|Aellebla]] 15:06, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
The design of the micro kernel was to take everything they could out of the Kernel and put it into a process. For ex, networking would be put into a process instead of staying in the kernel. The micro kernel dev&#039;s tried to keep lots of things in user space for efficiency. But one major problem with this is there would be a large amount of moving from a process to the kernel to user space and back again and this is a costly, non efficient process.It was an application specific OS, there was no multiplexing. With a virtual machine you are not virtualizing apps like with a microkernel but virtualizing an entire Operating System. This is very heavy however but the benefits are that it‟s easy and all the standard OS features are there whereas in a microkernel setup they would not all be there and this can be seen as a compromise.&lt;br /&gt;
&lt;br /&gt;
Exokernels can be seen as a compromise to virtual machines and microkernels because virtual machines emulate and exokernels do not. When you emulate something you hide a lot of the actual information because you wouldn‟t be able to see the „real‟ hardware. If we look at a virtual box setup running Linux, and we go look at all the hardware, it will be displayed as fake hardware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;br /&gt;
&lt;br /&gt;
I think we should divide up the paragraphs and proofread each others instead. (Are there only 4 of us?) I don&#039;t have much time to work on this today though but I&#039;ll try to work on it tomorrow morning. - Slay&lt;br /&gt;
&lt;br /&gt;
Sure guy.  That sounds good.  There should be 5 or 6 of us though.. . Oh well. Their loss.  I will do some before or after work today. Ill start with Microkernel since there is not a large amount of info here, and so we don&#039;t overlap each other - JSlonosky&lt;br /&gt;
&lt;br /&gt;
yeah i think there was more like 7 of us btw if any one has any more information feel free to add it would be nice if you add the references so that way citing is really easy on  acm.org it will auto give you the citation info (where it says Display Formats click on ACM Ref  and new window with the citation info auto pop&#039;s up) --[[User:Asoknack|Asoknack]] 02:28, 11 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I added an outline of the similarities and differences. Add any more that I missed. These are from observations so I don&#039;t have any resources. -Slay&lt;br /&gt;
That&#039;s probably fine.  Our textbook probably outlines some of them, so I am sure we can find a few there - JSlonosky&lt;br /&gt;
&lt;br /&gt;
Talked to the teacher today and for VM he said we should focus on the implementation such as Xen and VMware , he also said to talk about para virtualization --[[User:Asoknack|Asoknack]] 18:42, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== The Essay ==&lt;br /&gt;
&lt;br /&gt;
Let&#039;s actually breakdown the essay into components then write it here.&lt;br /&gt;
&lt;br /&gt;
We have our intro/thesis statement&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...to the extent that exokernels be seen as a compromise between virtual machines and microkernels. &lt;br /&gt;
-I&#039;ll work on the initial intro, should have it ready by tonight. -Slade&lt;br /&gt;
&lt;br /&gt;
3 paragraphs that prove it&lt;br /&gt;
Explain how the key design characteristics of these three system architectures compare with each other. &lt;br /&gt;
&lt;br /&gt;
and conclusion&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3087</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3087"/>
		<updated>2010-10-12T18:57:25Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* Microkernel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
* Large amount of moving from a process to Kernel to user space and back again, this is a costly operation.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Microkernel &#039;&#039;&#039;&lt;br /&gt;
* try&#039;s to minimize the amount of software that is mandatory or required [7]&lt;br /&gt;
advantages of Microkernel&lt;br /&gt;
* favors a modular system structure [7]&lt;br /&gt;
* one failure of a program does not impact any other programs [7]&lt;br /&gt;
* can support more than one api or strategies since all programs are separated [7]&lt;br /&gt;
==== Microkernel Concepts ==== &lt;br /&gt;
* piece of code is allowed in the kernel only if moving it outside the kernel would adversely affect the system. [7]&lt;br /&gt;
* any subsystem program created must be independent of all other subsystem&#039;s, any subsystem that is used can guarantee this from all other subsystems [7]&lt;br /&gt;
===== Address Space =====&lt;br /&gt;
* a mapping that relates the physical page to the virtual page. [7]&lt;br /&gt;
* hide&#039;s the hardware&#039;s concept of address space [7]&lt;br /&gt;
* the micro kernel provides 3 operations [7]&lt;br /&gt;
** Grant [7]&lt;br /&gt;
** Map [7]&lt;br /&gt;
** Flush [7]&lt;br /&gt;
===== Thread&#039;s IPC =====&lt;br /&gt;
===== Unique Identifiers =====&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
System Level Virtualization&lt;br /&gt;
&lt;br /&gt;
=== VMM ===&lt;br /&gt;
* stands for Virtual Machine Monitor, also known as the hyper-visor[4]&lt;br /&gt;
* responsible for virtualization of hardware(mapping physical to virtual) and the VM that run on top of the virtuallized hardware [4]&lt;br /&gt;
* usually a small os with no drivers , so it is coupled with a linux distro that provides device / hardware access [4]&lt;br /&gt;
** the os that the VMM is using for driver&#039;s is called the hostOS [6]&lt;br /&gt;
*the hostOS provides login and physical access to the hardware as well as management for the VMM [6]&lt;br /&gt;
=== VM ===&lt;br /&gt;
* the OS that the vm is running is called the guestOS [6]&lt;br /&gt;
* the guestOS only sees resources that have been allocated to the VM [6]&lt;br /&gt;
==== three approaches ====&lt;br /&gt;
*Type I virtualization [5]&lt;br /&gt;
** runs off the physical hardware [4]&lt;br /&gt;
** Isolation of the guestOs from the hardware is done threw processe level protection meachnism[6]&lt;br /&gt;
*** ring 0 = VMM [6]&lt;br /&gt;
*** ring 1 = VM [6]&lt;br /&gt;
*** this means all instructions from the VM must go threw the VMM [6]&lt;br /&gt;
** since there can be multiple VM&#039;s on a computer the scheduling is done by the VMM [6]&lt;br /&gt;
** on boot the VMM creates a hardware platform for the VM [6]&lt;br /&gt;
** load&#039;s the VM kernel into virtual memory and then boot&#039;s it like a regular computer [6]&lt;br /&gt;
** ex. Xen [4]&lt;br /&gt;
*Type II virtualization [5]&lt;br /&gt;
** run off the host Os [4]&lt;br /&gt;
** ex. VMware , QEMU [4]&lt;br /&gt;
* Para-virtualization [6]&lt;br /&gt;
** Similar to Type but use the HostOs for Device driver access [6]&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Micro-kernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* multiplex resources securely providing protection to mutual distrustful application threw the use of secure binding&#039;s[1]&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel separates protection from management in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking access to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the number of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad parameter passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is designed to interact with a low-level machine independent level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to create low level primitives that the hardware resources can be accessed from, this also includes interrupts,exceptions [1]&lt;br /&gt;
** the exokernel also export privileged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource management except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource management is the best way to build flexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
** Use physical name&#039;s when ever possible[3] (not to sure what physical names are, I think it is as simple as what the hardware is called)--[[User:Asoknack|Asoknack]] 20:27, 9 October 2010 (UTC)&lt;br /&gt;
** Physical names capture useful information [3]&lt;br /&gt;
*** safer than and less resource intensive than virtual names as no translations are needed[3]&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource management [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release[1](Visible means that when revocation happens the exokernel tell the LibOS that resource is being revoked)&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achieved threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allows the separation of protection and resource use [1]&lt;br /&gt;
* only checks authorization during bind time [1]&lt;br /&gt;
** Application&#039;s with complex needs for resources only authorized during bind.[1]&lt;br /&gt;
* access checking is done during access time and there is no need to understand complex resources needs during access[1]&lt;br /&gt;
** (this means that the exokernel checks once to make sure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** allows the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve performance[1]&lt;br /&gt;
** eliminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be scheduled [2]&lt;br /&gt;
==== Visible Resource Revocation ====&lt;br /&gt;
* Used for most resources [1]&lt;br /&gt;
** allows for LibOS to help with deallocation [1]&lt;br /&gt;
** LibOS are able to garner what resources are scare [1]&lt;br /&gt;
* Slower than Invisible as application involvement is required [1]&lt;br /&gt;
** ex of when invisible is used is Processor addressing-context identifiers [1]&lt;br /&gt;
==== Abort Protocol ====&lt;br /&gt;
* allows the exokernel to take resources away from the LibOS [1]&lt;br /&gt;
* used when the LibOS fails to respond to the revocation request [1]&lt;br /&gt;
* Exokernel must be careful not to delete as the LibOS might need to write some system critical data to the resource [1]&lt;br /&gt;
&lt;br /&gt;
== Comparisons  ==&lt;br /&gt;
====Exokernel/Microkernel====&lt;br /&gt;
&#039;&#039;&#039;Similarities&#039;&#039;&#039;&lt;br /&gt;
* Limited functionality in kernel&lt;br /&gt;
** functionality in kernel to handle sharing of resources and security&lt;br /&gt;
** avoids programming directly to hardware which creates a dependency&lt;br /&gt;
* Additional functionality provided in user space as processes&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* Minimal abstractions provided by the kernel&lt;br /&gt;
** Applications given more power in exokernel&lt;br /&gt;
&lt;br /&gt;
====Exokernel/VM====&lt;br /&gt;
&#039;&#039;&#039;Similarities&#039;&#039;&#039;&lt;br /&gt;
* Idea of partitioning resources between applications/OSs&lt;br /&gt;
* &amp;quot;Control&amp;quot; of resource given&lt;br /&gt;
* Isolation from other applications/OSs&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* Exokernel runs applications, VM runs OS&lt;br /&gt;
* VM uses a hostOS and guestOSs run on top&lt;br /&gt;
* Virtualization on VMs, Exokernel deals with real resources&lt;br /&gt;
* VM hides a lot of information because it emulates. Exokernel does not.&lt;br /&gt;
&lt;br /&gt;
====Microkernel/VM====&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* With a virtual machine, you are not virtualizing apps like with a microkernel but virtualizing an entire Operating System.&lt;br /&gt;
* This can be costly but the benefits are that it&#039;s easier and all the standard OS features are available.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., Kaashoek, M. F., and O&#039;Toole, J. 1995. Exokernel: an operating system architecture for application-level resource management. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 251-266. DOI= http://doi.acm.org/10.1145/224056.224076 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3]&amp;lt;nowiki&amp;gt;Kaashoek, M. F., Engler, D. R., Ganger, G. R., Briceño, H. M., Hunt, R., Mazières, D., Pinckney, T., Grimm, R., Jannotti, J., and Mackenzie, K. 1997. Application performance and flexibility on exokernel systems. In Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles  (Saint Malo, France, October 05 - 08, 1997). W. M. Waite, Ed. SOSP &#039;97. ACM, New York, NY, 52-65. DOI= http://doi.acm.org/10.1145/268998.266644 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4]&amp;lt;nowiki&amp;gt;Vallee, G.; Naughton, T.; Engelmann, C.; Hong Ong; Scott, S.L.; , &amp;quot;System-Level Virtualization for High Performance Computing,&amp;quot; Parallel, Distributed and Network-Based Processing, 2008. PDP 2008. 16th Euromicro Conference on , vol., no., pp.636-643, 13-15 Feb. 2008&lt;br /&gt;
DOI= http://doi.acm.org/10.1109/PDP.2008.85 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5]&amp;lt;nowiki&amp;gt;Goldberg, R. P. 1973. Architecture of virtual machines. In Proceedings of the Workshop on Virtual Computer Systems  (Cambridge, Massachusetts, United States, March 26 - 27, 1973). ACM, New York, NY, 74-112. DOI= http://doi.acm.org/10.1145/800122.803950 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6]&amp;lt;nowiki&amp;gt;Vallee, G., Naughton, T., and Scott, S. L. 2007. System management software for virtual environments. In Proceedings of the 4th international Conference on Computing Frontiers (Ischia, Italy, May 07 - 09, 2007). CF &#039;07. ACM, New York, NY, 153-160. DOI= http://doi.acm.org/10.1145/1242531.1242555 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7]&amp;lt;nowiki&amp;gt;Liedtke, J. 1995. On micro-kernel construction. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 237-250. DOI= http://doi.acm.org/10.1145/224056.224075 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I&#039;m just going to post my answer for question 1 on the individuel assignment and hope it helps. --[[User:Aellebla|Aellebla]] 15:06, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
The design of the micro kernel was to take everything they could out of the Kernel and put it into a process. For ex, networking would be put into a process instead of staying in the kernel. The micro kernel dev&#039;s tried to keep lots of things in user space for efficiency. But one major problem with this is there would be a large amount of moving from a process to the kernel to user space and back again and this is a costly, non efficient process.It was an application specific OS, there was no multiplexing. With a virtual machine you are not virtualizing apps like with a microkernel but virtualizing an entire Operating System. This is very heavy however but the benefits are that it‟s easy and all the standard OS features are there whereas in a microkernel setup they would not all be there and this can be seen as a compromise.&lt;br /&gt;
&lt;br /&gt;
Exokernels can be seen as a compromise to virtual machines and microkernels because virtual machines emulate and exokernels do not. When you emulate something you hide a lot of the actual information because you wouldn‟t be able to see the „real‟ hardware. If we look at a virtual box setup running Linux, and we go look at all the hardware, it will be displayed as fake hardware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;br /&gt;
&lt;br /&gt;
I think we should divide up the paragraphs and proofread each others instead. (Are there only 4 of us?) I don&#039;t have much time to work on this today though but I&#039;ll try to work on it tomorrow morning. - Slay&lt;br /&gt;
&lt;br /&gt;
Sure guy.  That sounds good.  There should be 5 or 6 of us though.. . Oh well. Their loss.  I will do some before or after work today. Ill start with Microkernel since there is not a large amount of info here, and so we don&#039;t overlap each other - JSlonosky&lt;br /&gt;
&lt;br /&gt;
yeah i think there was more like 7 of us btw if any one has any more information feel free to add it would be nice if you add the references so that way citing is really easy on  acm.org it will auto give you the citation info (where it says Display Formats click on ACM Ref  and new window with the citation info auto pop&#039;s up) --[[User:Asoknack|Asoknack]] 02:28, 11 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I added an outline of the similarities and differences. Add any more that I missed. These are from observations so I don&#039;t have any resources. -Slay&lt;br /&gt;
That&#039;s probably fine.  Our textbook probably outlines some of them, so I am sure we can find a few there - JSlonosky&lt;br /&gt;
&lt;br /&gt;
Talked to the teacher today and for VM he said we should focus on the implementation such as Xen and VMware , he also said to talk about para virtualization --[[User:Asoknack|Asoknack]] 18:42, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== The Essay ==&lt;br /&gt;
&lt;br /&gt;
Let&#039;s actually breakdown the essay into components then write it here.&lt;br /&gt;
&lt;br /&gt;
We have our intro/thesis statement&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...to the extent that exokernels be seen as a compromise between virtual machines and microkernels. &lt;br /&gt;
-I&#039;ll work on the initial intro, should have it ready by tonight. -Slade&lt;br /&gt;
&lt;br /&gt;
3 paragraphs that prove it&lt;br /&gt;
Explain how the key design characteristics of these three system architectures compare with each other. &lt;br /&gt;
&lt;br /&gt;
and conclusion&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3086</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3086"/>
		<updated>2010-10-12T18:48:38Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* Microkernel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
* Large amount of moving from a process to Kernel to user space and back again, this is a costly operation.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Microkernel &#039;&#039;&#039;&lt;br /&gt;
* try&#039;s to minimize the amount of software that is mandatory or required [7]&lt;br /&gt;
advantages of Microkernel&lt;br /&gt;
* favors a modular system structure [7]&lt;br /&gt;
* one failure of a program does not impact any other programs [7]&lt;br /&gt;
* can support more than one api or strategies since all programs are separated [7]&lt;br /&gt;
* peice of code is allowed in the kernel only if moving it outside the kernel would adversely affect the system. [7]&lt;br /&gt;
==== Microkernel Concepts ==== &lt;br /&gt;
===== Address Space =====&lt;br /&gt;
===== Thread&#039;s IPC =====&lt;br /&gt;
===== Unique Identifiers =====&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
System Level Virtualization&lt;br /&gt;
&lt;br /&gt;
=== VMM ===&lt;br /&gt;
* stands for Virtual Machine Monitor, also known as the hyper-visor[4]&lt;br /&gt;
* responsible for virtualization of hardware(mapping physical to virtual) and the VM that run on top of the virtuallized hardware [4]&lt;br /&gt;
* usually a small os with no drivers , so it is coupled with a linux distro that provides device / hardware access [4]&lt;br /&gt;
** the os that the VMM is using for driver&#039;s is called the hostOS [6]&lt;br /&gt;
*the hostOS provides login and physical access to the hardware as well as management for the VMM [6]&lt;br /&gt;
=== VM ===&lt;br /&gt;
* the OS that the vm is running is called the guestOS [6]&lt;br /&gt;
* the guestOS only sees resources that have been allocated to the VM [6]&lt;br /&gt;
==== three approaches ====&lt;br /&gt;
*Type I virtualization [5]&lt;br /&gt;
** runs off the physical hardware [4]&lt;br /&gt;
** Isolation of the guestOs from the hardware is done threw processe level protection meachnism[6]&lt;br /&gt;
*** ring 0 = VMM [6]&lt;br /&gt;
*** ring 1 = VM [6]&lt;br /&gt;
*** this means all instructions from the VM must go threw the VMM [6]&lt;br /&gt;
** since there can be multiple VM&#039;s on a computer the scheduling is done by the VMM [6]&lt;br /&gt;
** on boot the VMM creates a hardware platform for the VM [6]&lt;br /&gt;
** load&#039;s the VM kernel into virtual memory and then boot&#039;s it like a regular computer [6]&lt;br /&gt;
** ex. Xen [4]&lt;br /&gt;
*Type II virtualization [5]&lt;br /&gt;
** run off the host Os [4]&lt;br /&gt;
** ex. VMware , QEMU [4]&lt;br /&gt;
* Para-virtualization [6]&lt;br /&gt;
** Similar to Type but use the HostOs for Device driver access [6]&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Micro-kernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* multiplex resources securely providing protection to mutual distrustful application threw the use of secure binding&#039;s[1]&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel separates protection from management in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking access to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the number of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad parameter passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is designed to interact with a low-level machine independent level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to create low level primitives that the hardware resources can be accessed from, this also includes interrupts,exceptions [1]&lt;br /&gt;
** the exokernel also export privileged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource management except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource management is the best way to build flexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
** Use physical name&#039;s when ever possible[3] (not to sure what physical names are, I think it is as simple as what the hardware is called)--[[User:Asoknack|Asoknack]] 20:27, 9 October 2010 (UTC)&lt;br /&gt;
** Physical names capture useful information [3]&lt;br /&gt;
*** safer than and less resource intensive than virtual names as no translations are needed[3]&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource management [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release[1](Visible means that when revocation happens the exokernel tell the LibOS that resource is being revoked)&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achieved threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allows the separation of protection and resource use [1]&lt;br /&gt;
* only checks authorization during bind time [1]&lt;br /&gt;
** Application&#039;s with complex needs for resources only authorized during bind.[1]&lt;br /&gt;
* access checking is done during access time and there is no need to understand complex resources needs during access[1]&lt;br /&gt;
** (this means that the exokernel checks once to make sure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** allows the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve performance[1]&lt;br /&gt;
** eliminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be scheduled [2]&lt;br /&gt;
==== Visible Resource Revocation ====&lt;br /&gt;
* Used for most resources [1]&lt;br /&gt;
** allows for LibOS to help with deallocation [1]&lt;br /&gt;
** LibOS are able to garner what resources are scare [1]&lt;br /&gt;
* Slower than Invisible as application involvement is required [1]&lt;br /&gt;
** ex of when invisible is used is Processor addressing-context identifiers [1]&lt;br /&gt;
==== Abort Protocol ====&lt;br /&gt;
* allows the exokernel to take resources away from the LibOS [1]&lt;br /&gt;
* used when the LibOS fails to respond to the revocation request [1]&lt;br /&gt;
* Exokernel must be careful not to delete as the LibOS might need to write some system critical data to the resource [1]&lt;br /&gt;
&lt;br /&gt;
== Comparisons  ==&lt;br /&gt;
====Exokernel/Microkernel====&lt;br /&gt;
&#039;&#039;&#039;Similarities&#039;&#039;&#039;&lt;br /&gt;
* Limited functionality in kernel&lt;br /&gt;
** functionality in kernel to handle sharing of resources and security&lt;br /&gt;
** avoids programming directly to hardware which creates a dependency&lt;br /&gt;
* Additional functionality provided in user space as processes&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* Minimal abstractions provided by the kernel&lt;br /&gt;
** Applications given more power in exokernel&lt;br /&gt;
&lt;br /&gt;
====Exokernel/VM====&lt;br /&gt;
&#039;&#039;&#039;Similarities&#039;&#039;&#039;&lt;br /&gt;
* Idea of partitioning resources between applications/OSs&lt;br /&gt;
* &amp;quot;Control&amp;quot; of resource given&lt;br /&gt;
* Isolation from other applications/OSs&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* Exokernel runs applications, VM runs OS&lt;br /&gt;
* VM uses a hostOS and guestOSs run on top&lt;br /&gt;
* Virtualization on VMs, Exokernel deals with real resources&lt;br /&gt;
* VM hides a lot of information because it emulates. Exokernel does not.&lt;br /&gt;
&lt;br /&gt;
====Microkernel/VM====&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* With a virtual machine, you are not virtualizing apps like with a microkernel but virtualizing an entire Operating System.&lt;br /&gt;
* This can be costly but the benefits are that it&#039;s easier and all the standard OS features are available.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., Kaashoek, M. F., and O&#039;Toole, J. 1995. Exokernel: an operating system architecture for application-level resource management. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 251-266. DOI= http://doi.acm.org/10.1145/224056.224076 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3]&amp;lt;nowiki&amp;gt;Kaashoek, M. F., Engler, D. R., Ganger, G. R., Briceño, H. M., Hunt, R., Mazières, D., Pinckney, T., Grimm, R., Jannotti, J., and Mackenzie, K. 1997. Application performance and flexibility on exokernel systems. In Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles  (Saint Malo, France, October 05 - 08, 1997). W. M. Waite, Ed. SOSP &#039;97. ACM, New York, NY, 52-65. DOI= http://doi.acm.org/10.1145/268998.266644 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4]&amp;lt;nowiki&amp;gt;Vallee, G.; Naughton, T.; Engelmann, C.; Hong Ong; Scott, S.L.; , &amp;quot;System-Level Virtualization for High Performance Computing,&amp;quot; Parallel, Distributed and Network-Based Processing, 2008. PDP 2008. 16th Euromicro Conference on , vol., no., pp.636-643, 13-15 Feb. 2008&lt;br /&gt;
DOI= http://doi.acm.org/10.1109/PDP.2008.85 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5]&amp;lt;nowiki&amp;gt;Goldberg, R. P. 1973. Architecture of virtual machines. In Proceedings of the Workshop on Virtual Computer Systems  (Cambridge, Massachusetts, United States, March 26 - 27, 1973). ACM, New York, NY, 74-112. DOI= http://doi.acm.org/10.1145/800122.803950 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6]&amp;lt;nowiki&amp;gt;Vallee, G., Naughton, T., and Scott, S. L. 2007. System management software for virtual environments. In Proceedings of the 4th international Conference on Computing Frontiers (Ischia, Italy, May 07 - 09, 2007). CF &#039;07. ACM, New York, NY, 153-160. DOI= http://doi.acm.org/10.1145/1242531.1242555 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7]&amp;lt;nowiki&amp;gt;Liedtke, J. 1995. On micro-kernel construction. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 237-250. DOI= http://doi.acm.org/10.1145/224056.224075 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I&#039;m just going to post my answer for question 1 on the individuel assignment and hope it helps. --[[User:Aellebla|Aellebla]] 15:06, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
The design of the micro kernel was to take everything they could out of the Kernel and put it into a process. For ex, networking would be put into a process instead of staying in the kernel. The micro kernel dev&#039;s tried to keep lots of things in user space for efficiency. But one major problem with this is there would be a large amount of moving from a process to the kernel to user space and back again and this is a costly, non efficient process.It was an application specific OS, there was no multiplexing. With a virtual machine you are not virtualizing apps like with a microkernel but virtualizing an entire Operating System. This is very heavy however but the benefits are that it‟s easy and all the standard OS features are there whereas in a microkernel setup they would not all be there and this can be seen as a compromise.&lt;br /&gt;
&lt;br /&gt;
Exokernels can be seen as a compromise to virtual machines and microkernels because virtual machines emulate and exokernels do not. When you emulate something you hide a lot of the actual information because you wouldn‟t be able to see the „real‟ hardware. If we look at a virtual box setup running Linux, and we go look at all the hardware, it will be displayed as fake hardware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;br /&gt;
&lt;br /&gt;
I think we should divide up the paragraphs and proofread each others instead. (Are there only 4 of us?) I don&#039;t have much time to work on this today though but I&#039;ll try to work on it tomorrow morning. - Slay&lt;br /&gt;
&lt;br /&gt;
Sure guy.  That sounds good.  There should be 5 or 6 of us though.. . Oh well. Their loss.  I will do some before or after work today. Ill start with Microkernel since there is not a large amount of info here, and so we don&#039;t overlap each other - JSlonosky&lt;br /&gt;
&lt;br /&gt;
yeah i think there was more like 7 of us btw if any one has any more information feel free to add it would be nice if you add the references so that way citing is really easy on  acm.org it will auto give you the citation info (where it says Display Formats click on ACM Ref  and new window with the citation info auto pop&#039;s up) --[[User:Asoknack|Asoknack]] 02:28, 11 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I added an outline of the similarities and differences. Add any more that I missed. These are from observations so I don&#039;t have any resources. -Slay&lt;br /&gt;
That&#039;s probably fine.  Our textbook probably outlines some of them, so I am sure we can find a few there - JSlonosky&lt;br /&gt;
&lt;br /&gt;
Talked to the teacher today and for VM he said we should focus on the implementation such as Xen and VMware , he also said to talk about para virtualization --[[User:Asoknack|Asoknack]] 18:42, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== The Essay ==&lt;br /&gt;
&lt;br /&gt;
Let&#039;s actually breakdown the essay into components then write it here.&lt;br /&gt;
&lt;br /&gt;
We have our intro/thesis statement&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...to the extent that exokernels be seen as a compromise between virtual machines and microkernels. &lt;br /&gt;
-I&#039;ll work on the initial intro, should have it ready by tonight. -Slade&lt;br /&gt;
&lt;br /&gt;
3 paragraphs that prove it&lt;br /&gt;
Explain how the key design characteristics of these three system architectures compare with each other. &lt;br /&gt;
&lt;br /&gt;
and conclusion&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3082</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3082"/>
		<updated>2010-10-12T18:43:04Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* Microkernel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
* Large amount of moving from a process to Kernel to user space and back again, this is a costly operation.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Microkernel &#039;&#039;&#039;&lt;br /&gt;
* try&#039;s to minimize the amount of software that is mandatory or required [7]&lt;br /&gt;
advantages of Microkernel&lt;br /&gt;
* favors a modular system structure [7]&lt;br /&gt;
* one failure of a program does not impact any other programs [7]&lt;br /&gt;
* can support more than one api or strategies since all programs are separated [7]&lt;br /&gt;
==== Microkernel Concepts ==== &lt;br /&gt;
===== Address Space =====&lt;br /&gt;
===== Thread&#039;s IPC =====&lt;br /&gt;
===== Unique Identifiers =====&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
System Level Virtualization&lt;br /&gt;
&lt;br /&gt;
=== VMM ===&lt;br /&gt;
* stands for Virtual Machine Monitor, also known as the hyper-visor[4]&lt;br /&gt;
* responsible for virtualization of hardware(mapping physical to virtual) and the VM that run on top of the virtuallized hardware [4]&lt;br /&gt;
* usually a small os with no drivers , so it is coupled with a linux distro that provides device / hardware access [4]&lt;br /&gt;
** the os that the VMM is using for driver&#039;s is called the hostOS [6]&lt;br /&gt;
*the hostOS provides login and physical access to the hardware as well as management for the VMM [6]&lt;br /&gt;
=== VM ===&lt;br /&gt;
* the OS that the vm is running is called the guestOS [6]&lt;br /&gt;
* the guestOS only sees resources that have been allocated to the VM [6]&lt;br /&gt;
==== three approaches ====&lt;br /&gt;
*Type I virtualization [5]&lt;br /&gt;
** runs off the physical hardware [4]&lt;br /&gt;
** Isolation of the guestOs from the hardware is done threw processe level protection meachnism[6]&lt;br /&gt;
*** ring 0 = VMM [6]&lt;br /&gt;
*** ring 1 = VM [6]&lt;br /&gt;
*** this means all instructions from the VM must go threw the VMM [6]&lt;br /&gt;
** since there can be multiple VM&#039;s on a computer the scheduling is done by the VMM [6]&lt;br /&gt;
** on boot the VMM creates a hardware platform for the VM [6]&lt;br /&gt;
** load&#039;s the VM kernel into virtual memory and then boot&#039;s it like a regular computer [6]&lt;br /&gt;
** ex. Xen [4]&lt;br /&gt;
*Type II virtualization [5]&lt;br /&gt;
** run off the host Os [4]&lt;br /&gt;
** ex. VMware , QEMU [4]&lt;br /&gt;
* Para-virtualization [6]&lt;br /&gt;
** Similar to Type but use the HostOs for Device driver access [6]&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Micro-kernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* multiplex resources securely providing protection to mutual distrustful application threw the use of secure binding&#039;s[1]&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel separates protection from management in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking access to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the number of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad parameter passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is designed to interact with a low-level machine independent level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to create low level primitives that the hardware resources can be accessed from, this also includes interrupts,exceptions [1]&lt;br /&gt;
** the exokernel also export privileged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource management except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource management is the best way to build flexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
** Use physical name&#039;s when ever possible[3] (not to sure what physical names are, I think it is as simple as what the hardware is called)--[[User:Asoknack|Asoknack]] 20:27, 9 October 2010 (UTC)&lt;br /&gt;
** Physical names capture useful information [3]&lt;br /&gt;
*** safer than and less resource intensive than virtual names as no translations are needed[3]&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource management [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release[1](Visible means that when revocation happens the exokernel tell the LibOS that resource is being revoked)&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achieved threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allows the separation of protection and resource use [1]&lt;br /&gt;
* only checks authorization during bind time [1]&lt;br /&gt;
** Application&#039;s with complex needs for resources only authorized during bind.[1]&lt;br /&gt;
* access checking is done during access time and there is no need to understand complex resources needs during access[1]&lt;br /&gt;
** (this means that the exokernel checks once to make sure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** allows the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve performance[1]&lt;br /&gt;
** eliminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be scheduled [2]&lt;br /&gt;
==== Visible Resource Revocation ====&lt;br /&gt;
* Used for most resources [1]&lt;br /&gt;
** allows for LibOS to help with deallocation [1]&lt;br /&gt;
** LibOS are able to garner what resources are scare [1]&lt;br /&gt;
* Slower than Invisible as application involvement is required [1]&lt;br /&gt;
** ex of when invisible is used is Processor addressing-context identifiers [1]&lt;br /&gt;
==== Abort Protocol ====&lt;br /&gt;
* allows the exokernel to take resources away from the LibOS [1]&lt;br /&gt;
* used when the LibOS fails to respond to the revocation request [1]&lt;br /&gt;
* Exokernel must be careful not to delete as the LibOS might need to write some system critical data to the resource [1]&lt;br /&gt;
&lt;br /&gt;
== Comparisons  ==&lt;br /&gt;
====Exokernel/Microkernel====&lt;br /&gt;
&#039;&#039;&#039;Similarities&#039;&#039;&#039;&lt;br /&gt;
* Limited functionality in kernel&lt;br /&gt;
** functionality in kernel to handle sharing of resources and security&lt;br /&gt;
** avoids programming directly to hardware which creates a dependency&lt;br /&gt;
* Additional functionality provided in user space as processes&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* Minimal abstractions provided by the kernel&lt;br /&gt;
** Applications given more power in exokernel&lt;br /&gt;
&lt;br /&gt;
====Exokernel/VM====&lt;br /&gt;
&#039;&#039;&#039;Similarities&#039;&#039;&#039;&lt;br /&gt;
* Idea of partitioning resources between applications/OSs&lt;br /&gt;
* &amp;quot;Control&amp;quot; of resource given&lt;br /&gt;
* Isolation from other applications/OSs&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* Exokernel runs applications, VM runs OS&lt;br /&gt;
* VM uses a hostOS and guestOSs run on top&lt;br /&gt;
* Virtualization on VMs, Exokernel deals with real resources&lt;br /&gt;
* VM hides a lot of information because it emulates. Exokernel does not.&lt;br /&gt;
&lt;br /&gt;
====Microkernel/VM====&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* With a virtual machine, you are not virtualizing apps like with a microkernel but virtualizing an entire Operating System.&lt;br /&gt;
* This can be costly but the benefits are that it&#039;s easier and all the standard OS features are available.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., Kaashoek, M. F., and O&#039;Toole, J. 1995. Exokernel: an operating system architecture for application-level resource management. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 251-266. DOI= http://doi.acm.org/10.1145/224056.224076 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3]&amp;lt;nowiki&amp;gt;Kaashoek, M. F., Engler, D. R., Ganger, G. R., Briceño, H. M., Hunt, R., Mazières, D., Pinckney, T., Grimm, R., Jannotti, J., and Mackenzie, K. 1997. Application performance and flexibility on exokernel systems. In Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles  (Saint Malo, France, October 05 - 08, 1997). W. M. Waite, Ed. SOSP &#039;97. ACM, New York, NY, 52-65. DOI= http://doi.acm.org/10.1145/268998.266644 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4]&amp;lt;nowiki&amp;gt;Vallee, G.; Naughton, T.; Engelmann, C.; Hong Ong; Scott, S.L.; , &amp;quot;System-Level Virtualization for High Performance Computing,&amp;quot; Parallel, Distributed and Network-Based Processing, 2008. PDP 2008. 16th Euromicro Conference on , vol., no., pp.636-643, 13-15 Feb. 2008&lt;br /&gt;
DOI= http://doi.acm.org/10.1109/PDP.2008.85 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5]&amp;lt;nowiki&amp;gt;Goldberg, R. P. 1973. Architecture of virtual machines. In Proceedings of the Workshop on Virtual Computer Systems  (Cambridge, Massachusetts, United States, March 26 - 27, 1973). ACM, New York, NY, 74-112. DOI= http://doi.acm.org/10.1145/800122.803950 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6]&amp;lt;nowiki&amp;gt;Vallee, G., Naughton, T., and Scott, S. L. 2007. System management software for virtual environments. In Proceedings of the 4th international Conference on Computing Frontiers (Ischia, Italy, May 07 - 09, 2007). CF &#039;07. ACM, New York, NY, 153-160. DOI= http://doi.acm.org/10.1145/1242531.1242555 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7]&amp;lt;nowiki&amp;gt;Liedtke, J. 1995. On micro-kernel construction. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 237-250. DOI= http://doi.acm.org/10.1145/224056.224075 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I&#039;m just going to post my answer for question 1 on the individuel assignment and hope it helps. --[[User:Aellebla|Aellebla]] 15:06, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
The design of the micro kernel was to take everything they could out of the Kernel and put it into a process. For ex, networking would be put into a process instead of staying in the kernel. The micro kernel dev&#039;s tried to keep lots of things in user space for efficiency. But one major problem with this is there would be a large amount of moving from a process to the kernel to user space and back again and this is a costly, non efficient process.It was an application specific OS, there was no multiplexing. With a virtual machine you are not virtualizing apps like with a microkernel but virtualizing an entire Operating System. This is very heavy however but the benefits are that it‟s easy and all the standard OS features are there whereas in a microkernel setup they would not all be there and this can be seen as a compromise.&lt;br /&gt;
&lt;br /&gt;
Exokernels can be seen as a compromise to virtual machines and microkernels because virtual machines emulate and exokernels do not. When you emulate something you hide a lot of the actual information because you wouldn‟t be able to see the „real‟ hardware. If we look at a virtual box setup running Linux, and we go look at all the hardware, it will be displayed as fake hardware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;br /&gt;
&lt;br /&gt;
I think we should divide up the paragraphs and proofread each others instead. (Are there only 4 of us?) I don&#039;t have much time to work on this today though but I&#039;ll try to work on it tomorrow morning. - Slay&lt;br /&gt;
&lt;br /&gt;
Sure guy.  That sounds good.  There should be 5 or 6 of us though.. . Oh well. Their loss.  I will do some before or after work today. Ill start with Microkernel since there is not a large amount of info here, and so we don&#039;t overlap each other - JSlonosky&lt;br /&gt;
&lt;br /&gt;
yeah i think there was more like 7 of us btw if any one has any more information feel free to add it would be nice if you add the references so that way citing is really easy on  acm.org it will auto give you the citation info (where it says Display Formats click on ACM Ref  and new window with the citation info auto pop&#039;s up) --[[User:Asoknack|Asoknack]] 02:28, 11 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I added an outline of the similarities and differences. Add any more that I missed. These are from observations so I don&#039;t have any resources. -Slay&lt;br /&gt;
That&#039;s probably fine.  Our textbook probably outlines some of them, so I am sure we can find a few there - JSlonosky&lt;br /&gt;
&lt;br /&gt;
Talked to the teacher today and for VM he said we should focus on the implementation such as Xen and VMware , he also said to talk about para virtualization --[[User:Asoknack|Asoknack]] 18:42, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== The Essay ==&lt;br /&gt;
&lt;br /&gt;
Let&#039;s actually breakdown the essay into components then write it here.&lt;br /&gt;
&lt;br /&gt;
We have our intro/thesis statement&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...to the extent that exokernels be seen as a compromise between virtual machines and microkernels. &lt;br /&gt;
-I&#039;ll work on the initial intro, should have it ready by tonight. -Slade&lt;br /&gt;
&lt;br /&gt;
3 paragraphs that prove it&lt;br /&gt;
Explain how the key design characteristics of these three system architectures compare with each other. &lt;br /&gt;
&lt;br /&gt;
and conclusion&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3081</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3081"/>
		<updated>2010-10-12T18:42:10Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* Unsorted */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
* Large amount of moving from a process to Kernel to user space and back again, this is a costly operation.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Microkernel &#039;&#039;&#039;&lt;br /&gt;
* try&#039;s to minimize the amount of software that is mandatory or required&lt;br /&gt;
advantages of Microkernel&lt;br /&gt;
* favors a modular system structure&lt;br /&gt;
* one failure of a program does not impact any other programs&lt;br /&gt;
* can support more than one api or strategies since all programs are seperated&lt;br /&gt;
=== Microkernel Concepts === &lt;br /&gt;
==== Address Space ====&lt;br /&gt;
==== Thread&#039;s IPC ====&lt;br /&gt;
==== Unique Identifiers ====&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
System Level Virtualization&lt;br /&gt;
&lt;br /&gt;
=== VMM ===&lt;br /&gt;
* stands for Virtual Machine Monitor, also known as the hyper-visor[4]&lt;br /&gt;
* responsible for virtualization of hardware(mapping physical to virtual) and the VM that run on top of the virtuallized hardware [4]&lt;br /&gt;
* usually a small os with no drivers , so it is coupled with a linux distro that provides device / hardware access [4]&lt;br /&gt;
** the os that the VMM is using for driver&#039;s is called the hostOS [6]&lt;br /&gt;
*the hostOS provides login and physical access to the hardware as well as management for the VMM [6]&lt;br /&gt;
=== VM ===&lt;br /&gt;
* the OS that the vm is running is called the guestOS [6]&lt;br /&gt;
* the guestOS only sees resources that have been allocated to the VM [6]&lt;br /&gt;
==== three approaches ====&lt;br /&gt;
*Type I virtualization [5]&lt;br /&gt;
** runs off the physical hardware [4]&lt;br /&gt;
** Isolation of the guestOs from the hardware is done threw processe level protection meachnism[6]&lt;br /&gt;
*** ring 0 = VMM [6]&lt;br /&gt;
*** ring 1 = VM [6]&lt;br /&gt;
*** this means all instructions from the VM must go threw the VMM [6]&lt;br /&gt;
** since there can be multiple VM&#039;s on a computer the scheduling is done by the VMM [6]&lt;br /&gt;
** on boot the VMM creates a hardware platform for the VM [6]&lt;br /&gt;
** load&#039;s the VM kernel into virtual memory and then boot&#039;s it like a regular computer [6]&lt;br /&gt;
** ex. Xen [4]&lt;br /&gt;
*Type II virtualization [5]&lt;br /&gt;
** run off the host Os [4]&lt;br /&gt;
** ex. VMware , QEMU [4]&lt;br /&gt;
* Para-virtualization [6]&lt;br /&gt;
** Similar to Type but use the HostOs for Device driver access [6]&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Micro-kernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* multiplex resources securely providing protection to mutual distrustful application threw the use of secure binding&#039;s[1]&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel separates protection from management in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking access to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the number of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad parameter passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is designed to interact with a low-level machine independent level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to create low level primitives that the hardware resources can be accessed from, this also includes interrupts,exceptions [1]&lt;br /&gt;
** the exokernel also export privileged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource management except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource management is the best way to build flexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
** Use physical name&#039;s when ever possible[3] (not to sure what physical names are, I think it is as simple as what the hardware is called)--[[User:Asoknack|Asoknack]] 20:27, 9 October 2010 (UTC)&lt;br /&gt;
** Physical names capture useful information [3]&lt;br /&gt;
*** safer than and less resource intensive than virtual names as no translations are needed[3]&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource management [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release[1](Visible means that when revocation happens the exokernel tell the LibOS that resource is being revoked)&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achieved threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allows the separation of protection and resource use [1]&lt;br /&gt;
* only checks authorization during bind time [1]&lt;br /&gt;
** Application&#039;s with complex needs for resources only authorized during bind.[1]&lt;br /&gt;
* access checking is done during access time and there is no need to understand complex resources needs during access[1]&lt;br /&gt;
** (this means that the exokernel checks once to make sure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** allows the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve performance[1]&lt;br /&gt;
** eliminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be scheduled [2]&lt;br /&gt;
==== Visible Resource Revocation ====&lt;br /&gt;
* Used for most resources [1]&lt;br /&gt;
** allows for LibOS to help with deallocation [1]&lt;br /&gt;
** LibOS are able to garner what resources are scare [1]&lt;br /&gt;
* Slower than Invisible as application involvement is required [1]&lt;br /&gt;
** ex of when invisible is used is Processor addressing-context identifiers [1]&lt;br /&gt;
==== Abort Protocol ====&lt;br /&gt;
* allows the exokernel to take resources away from the LibOS [1]&lt;br /&gt;
* used when the LibOS fails to respond to the revocation request [1]&lt;br /&gt;
* Exokernel must be careful not to delete as the LibOS might need to write some system critical data to the resource [1]&lt;br /&gt;
&lt;br /&gt;
== Comparisons  ==&lt;br /&gt;
====Exokernel/Microkernel====&lt;br /&gt;
&#039;&#039;&#039;Similarities&#039;&#039;&#039;&lt;br /&gt;
* Limited functionality in kernel&lt;br /&gt;
** functionality in kernel to handle sharing of resources and security&lt;br /&gt;
** avoids programming directly to hardware which creates a dependency&lt;br /&gt;
* Additional functionality provided in user space as processes&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* Minimal abstractions provided by the kernel&lt;br /&gt;
** Applications given more power in exokernel&lt;br /&gt;
&lt;br /&gt;
====Exokernel/VM====&lt;br /&gt;
&#039;&#039;&#039;Similarities&#039;&#039;&#039;&lt;br /&gt;
* Idea of partitioning resources between applications/OSs&lt;br /&gt;
* &amp;quot;Control&amp;quot; of resource given&lt;br /&gt;
* Isolation from other applications/OSs&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* Exokernel runs applications, VM runs OS&lt;br /&gt;
* VM uses a hostOS and guestOSs run on top&lt;br /&gt;
* Virtualization on VMs, Exokernel deals with real resources&lt;br /&gt;
* VM hides a lot of information because it emulates. Exokernel does not.&lt;br /&gt;
&lt;br /&gt;
====Microkernel/VM====&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* With a virtual machine, you are not virtualizing apps like with a microkernel but virtualizing an entire Operating System.&lt;br /&gt;
* This can be costly but the benefits are that it&#039;s easier and all the standard OS features are available.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., Kaashoek, M. F., and O&#039;Toole, J. 1995. Exokernel: an operating system architecture for application-level resource management. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 251-266. DOI= http://doi.acm.org/10.1145/224056.224076 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3]&amp;lt;nowiki&amp;gt;Kaashoek, M. F., Engler, D. R., Ganger, G. R., Briceño, H. M., Hunt, R., Mazières, D., Pinckney, T., Grimm, R., Jannotti, J., and Mackenzie, K. 1997. Application performance and flexibility on exokernel systems. In Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles  (Saint Malo, France, October 05 - 08, 1997). W. M. Waite, Ed. SOSP &#039;97. ACM, New York, NY, 52-65. DOI= http://doi.acm.org/10.1145/268998.266644 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4]&amp;lt;nowiki&amp;gt;Vallee, G.; Naughton, T.; Engelmann, C.; Hong Ong; Scott, S.L.; , &amp;quot;System-Level Virtualization for High Performance Computing,&amp;quot; Parallel, Distributed and Network-Based Processing, 2008. PDP 2008. 16th Euromicro Conference on , vol., no., pp.636-643, 13-15 Feb. 2008&lt;br /&gt;
DOI= http://doi.acm.org/10.1109/PDP.2008.85 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5]&amp;lt;nowiki&amp;gt;Goldberg, R. P. 1973. Architecture of virtual machines. In Proceedings of the Workshop on Virtual Computer Systems  (Cambridge, Massachusetts, United States, March 26 - 27, 1973). ACM, New York, NY, 74-112. DOI= http://doi.acm.org/10.1145/800122.803950 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6]&amp;lt;nowiki&amp;gt;Vallee, G., Naughton, T., and Scott, S. L. 2007. System management software for virtual environments. In Proceedings of the 4th international Conference on Computing Frontiers (Ischia, Italy, May 07 - 09, 2007). CF &#039;07. ACM, New York, NY, 153-160. DOI= http://doi.acm.org/10.1145/1242531.1242555 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7]&amp;lt;nowiki&amp;gt;Liedtke, J. 1995. On micro-kernel construction. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 237-250. DOI= http://doi.acm.org/10.1145/224056.224075 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I&#039;m just going to post my answer for question 1 on the individuel assignment and hope it helps. --[[User:Aellebla|Aellebla]] 15:06, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
The design of the micro kernel was to take everything they could out of the Kernel and put it into a process. For ex, networking would be put into a process instead of staying in the kernel. The micro kernel dev&#039;s tried to keep lots of things in user space for efficiency. But one major problem with this is there would be a large amount of moving from a process to the kernel to user space and back again and this is a costly, non efficient process.It was an application specific OS, there was no multiplexing. With a virtual machine you are not virtualizing apps like with a microkernel but virtualizing an entire Operating System. This is very heavy however but the benefits are that it‟s easy and all the standard OS features are there whereas in a microkernel setup they would not all be there and this can be seen as a compromise.&lt;br /&gt;
&lt;br /&gt;
Exokernels can be seen as a compromise to virtual machines and microkernels because virtual machines emulate and exokernels do not. When you emulate something you hide a lot of the actual information because you wouldn‟t be able to see the „real‟ hardware. If we look at a virtual box setup running Linux, and we go look at all the hardware, it will be displayed as fake hardware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;br /&gt;
&lt;br /&gt;
I think we should divide up the paragraphs and proofread each others instead. (Are there only 4 of us?) I don&#039;t have much time to work on this today though but I&#039;ll try to work on it tomorrow morning. - Slay&lt;br /&gt;
&lt;br /&gt;
Sure guy.  That sounds good.  There should be 5 or 6 of us though.. . Oh well. Their loss.  I will do some before or after work today. Ill start with Microkernel since there is not a large amount of info here, and so we don&#039;t overlap each other - JSlonosky&lt;br /&gt;
&lt;br /&gt;
yeah i think there was more like 7 of us btw if any one has any more information feel free to add it would be nice if you add the references so that way citing is really easy on  acm.org it will auto give you the citation info (where it says Display Formats click on ACM Ref  and new window with the citation info auto pop&#039;s up) --[[User:Asoknack|Asoknack]] 02:28, 11 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I added an outline of the similarities and differences. Add any more that I missed. These are from observations so I don&#039;t have any resources. -Slay&lt;br /&gt;
That&#039;s probably fine.  Our textbook probably outlines some of them, so I am sure we can find a few there - JSlonosky&lt;br /&gt;
&lt;br /&gt;
Talked to the teacher today and for VM he said we should focus on the implementation such as Xen and VMware , he also said to talk about para virtualization --[[User:Asoknack|Asoknack]] 18:42, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== The Essay ==&lt;br /&gt;
&lt;br /&gt;
Let&#039;s actually breakdown the essay into components then write it here.&lt;br /&gt;
&lt;br /&gt;
We have our intro/thesis statement&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...to the extent that exokernels be seen as a compromise between virtual machines and microkernels. &lt;br /&gt;
-I&#039;ll work on the initial intro, should have it ready by tonight. -Slade&lt;br /&gt;
&lt;br /&gt;
3 paragraphs that prove it&lt;br /&gt;
Explain how the key design characteristics of these three system architectures compare with each other. &lt;br /&gt;
&lt;br /&gt;
and conclusion&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3080</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3080"/>
		<updated>2010-10-12T18:40:56Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* Microkernel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
* Large amount of moving from a process to Kernel to user space and back again, this is a costly operation.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Microkernel &#039;&#039;&#039;&lt;br /&gt;
* try&#039;s to minimize the amount of software that is mandatory or required&lt;br /&gt;
advantages of Microkernel&lt;br /&gt;
* favors a modular system structure&lt;br /&gt;
* one failure of a program does not impact any other programs&lt;br /&gt;
* can support more than one api or strategies since all programs are seperated&lt;br /&gt;
=== Microkernel Concepts === &lt;br /&gt;
==== Address Space ====&lt;br /&gt;
==== Thread&#039;s IPC ====&lt;br /&gt;
==== Unique Identifiers ====&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
System Level Virtualization&lt;br /&gt;
&lt;br /&gt;
=== VMM ===&lt;br /&gt;
* stands for Virtual Machine Monitor, also known as the hyper-visor[4]&lt;br /&gt;
* responsible for virtualization of hardware(mapping physical to virtual) and the VM that run on top of the virtuallized hardware [4]&lt;br /&gt;
* usually a small os with no drivers , so it is coupled with a linux distro that provides device / hardware access [4]&lt;br /&gt;
** the os that the VMM is using for driver&#039;s is called the hostOS [6]&lt;br /&gt;
*the hostOS provides login and physical access to the hardware as well as management for the VMM [6]&lt;br /&gt;
=== VM ===&lt;br /&gt;
* the OS that the vm is running is called the guestOS [6]&lt;br /&gt;
* the guestOS only sees resources that have been allocated to the VM [6]&lt;br /&gt;
==== three approaches ====&lt;br /&gt;
*Type I virtualization [5]&lt;br /&gt;
** runs off the physical hardware [4]&lt;br /&gt;
** Isolation of the guestOs from the hardware is done threw processe level protection meachnism[6]&lt;br /&gt;
*** ring 0 = VMM [6]&lt;br /&gt;
*** ring 1 = VM [6]&lt;br /&gt;
*** this means all instructions from the VM must go threw the VMM [6]&lt;br /&gt;
** since there can be multiple VM&#039;s on a computer the scheduling is done by the VMM [6]&lt;br /&gt;
** on boot the VMM creates a hardware platform for the VM [6]&lt;br /&gt;
** load&#039;s the VM kernel into virtual memory and then boot&#039;s it like a regular computer [6]&lt;br /&gt;
** ex. Xen [4]&lt;br /&gt;
*Type II virtualization [5]&lt;br /&gt;
** run off the host Os [4]&lt;br /&gt;
** ex. VMware , QEMU [4]&lt;br /&gt;
* Para-virtualization [6]&lt;br /&gt;
** Similar to Type but use the HostOs for Device driver access [6]&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Micro-kernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* multiplex resources securely providing protection to mutual distrustful application threw the use of secure binding&#039;s[1]&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel separates protection from management in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking access to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the number of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad parameter passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is designed to interact with a low-level machine independent level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to create low level primitives that the hardware resources can be accessed from, this also includes interrupts,exceptions [1]&lt;br /&gt;
** the exokernel also export privileged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource management except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource management is the best way to build flexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
** Use physical name&#039;s when ever possible[3] (not to sure what physical names are, I think it is as simple as what the hardware is called)--[[User:Asoknack|Asoknack]] 20:27, 9 October 2010 (UTC)&lt;br /&gt;
** Physical names capture useful information [3]&lt;br /&gt;
*** safer than and less resource intensive than virtual names as no translations are needed[3]&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource management [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release[1](Visible means that when revocation happens the exokernel tell the LibOS that resource is being revoked)&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achieved threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allows the separation of protection and resource use [1]&lt;br /&gt;
* only checks authorization during bind time [1]&lt;br /&gt;
** Application&#039;s with complex needs for resources only authorized during bind.[1]&lt;br /&gt;
* access checking is done during access time and there is no need to understand complex resources needs during access[1]&lt;br /&gt;
** (this means that the exokernel checks once to make sure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** allows the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve performance[1]&lt;br /&gt;
** eliminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be scheduled [2]&lt;br /&gt;
==== Visible Resource Revocation ====&lt;br /&gt;
* Used for most resources [1]&lt;br /&gt;
** allows for LibOS to help with deallocation [1]&lt;br /&gt;
** LibOS are able to garner what resources are scare [1]&lt;br /&gt;
* Slower than Invisible as application involvement is required [1]&lt;br /&gt;
** ex of when invisible is used is Processor addressing-context identifiers [1]&lt;br /&gt;
==== Abort Protocol ====&lt;br /&gt;
* allows the exokernel to take resources away from the LibOS [1]&lt;br /&gt;
* used when the LibOS fails to respond to the revocation request [1]&lt;br /&gt;
* Exokernel must be careful not to delete as the LibOS might need to write some system critical data to the resource [1]&lt;br /&gt;
&lt;br /&gt;
== Comparisons  ==&lt;br /&gt;
====Exokernel/Microkernel====&lt;br /&gt;
&#039;&#039;&#039;Similarities&#039;&#039;&#039;&lt;br /&gt;
* Limited functionality in kernel&lt;br /&gt;
** functionality in kernel to handle sharing of resources and security&lt;br /&gt;
** avoids programming directly to hardware which creates a dependency&lt;br /&gt;
* Additional functionality provided in user space as processes&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* Minimal abstractions provided by the kernel&lt;br /&gt;
** Applications given more power in exokernel&lt;br /&gt;
&lt;br /&gt;
====Exokernel/VM====&lt;br /&gt;
&#039;&#039;&#039;Similarities&#039;&#039;&#039;&lt;br /&gt;
* Idea of partitioning resources between applications/OSs&lt;br /&gt;
* &amp;quot;Control&amp;quot; of resource given&lt;br /&gt;
* Isolation from other applications/OSs&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* Exokernel runs applications, VM runs OS&lt;br /&gt;
* VM uses a hostOS and guestOSs run on top&lt;br /&gt;
* Virtualization on VMs, Exokernel deals with real resources&lt;br /&gt;
* VM hides a lot of information because it emulates. Exokernel does not.&lt;br /&gt;
&lt;br /&gt;
====Microkernel/VM====&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* With a virtual machine, you are not virtualizing apps like with a microkernel but virtualizing an entire Operating System.&lt;br /&gt;
* This can be costly but the benefits are that it&#039;s easier and all the standard OS features are available.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., Kaashoek, M. F., and O&#039;Toole, J. 1995. Exokernel: an operating system architecture for application-level resource management. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 251-266. DOI= http://doi.acm.org/10.1145/224056.224076 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3]&amp;lt;nowiki&amp;gt;Kaashoek, M. F., Engler, D. R., Ganger, G. R., Briceño, H. M., Hunt, R., Mazières, D., Pinckney, T., Grimm, R., Jannotti, J., and Mackenzie, K. 1997. Application performance and flexibility on exokernel systems. In Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles  (Saint Malo, France, October 05 - 08, 1997). W. M. Waite, Ed. SOSP &#039;97. ACM, New York, NY, 52-65. DOI= http://doi.acm.org/10.1145/268998.266644 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4]&amp;lt;nowiki&amp;gt;Vallee, G.; Naughton, T.; Engelmann, C.; Hong Ong; Scott, S.L.; , &amp;quot;System-Level Virtualization for High Performance Computing,&amp;quot; Parallel, Distributed and Network-Based Processing, 2008. PDP 2008. 16th Euromicro Conference on , vol., no., pp.636-643, 13-15 Feb. 2008&lt;br /&gt;
DOI= http://doi.acm.org/10.1109/PDP.2008.85 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5]&amp;lt;nowiki&amp;gt;Goldberg, R. P. 1973. Architecture of virtual machines. In Proceedings of the Workshop on Virtual Computer Systems  (Cambridge, Massachusetts, United States, March 26 - 27, 1973). ACM, New York, NY, 74-112. DOI= http://doi.acm.org/10.1145/800122.803950 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6]&amp;lt;nowiki&amp;gt;Vallee, G., Naughton, T., and Scott, S. L. 2007. System management software for virtual environments. In Proceedings of the 4th international Conference on Computing Frontiers (Ischia, Italy, May 07 - 09, 2007). CF &#039;07. ACM, New York, NY, 153-160. DOI= http://doi.acm.org/10.1145/1242531.1242555 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7]&amp;lt;nowiki&amp;gt;Liedtke, J. 1995. On micro-kernel construction. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 237-250. DOI= http://doi.acm.org/10.1145/224056.224075 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I&#039;m just going to post my answer for question 1 on the individuel assignment and hope it helps. --[[User:Aellebla|Aellebla]] 15:06, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
The design of the micro kernel was to take everything they could out of the Kernel and put it into a process. For ex, networking would be put into a process instead of staying in the kernel. The micro kernel dev&#039;s tried to keep lots of things in user space for efficiency. But one major problem with this is there would be a large amount of moving from a process to the kernel to user space and back again and this is a costly, non efficient process.It was an application specific OS, there was no multiplexing. With a virtual machine you are not virtualizing apps like with a microkernel but virtualizing an entire Operating System. This is very heavy however but the benefits are that it‟s easy and all the standard OS features are there whereas in a microkernel setup they would not all be there and this can be seen as a compromise.&lt;br /&gt;
&lt;br /&gt;
Exokernels can be seen as a compromise to virtual machines and microkernels because virtual machines emulate and exokernels do not. When you emulate something you hide a lot of the actual information because you wouldn‟t be able to see the „real‟ hardware. If we look at a virtual box setup running Linux, and we go look at all the hardware, it will be displayed as fake hardware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;br /&gt;
&lt;br /&gt;
I think we should divide up the paragraphs and proofread each others instead. (Are there only 4 of us?) I don&#039;t have much time to work on this today though but I&#039;ll try to work on it tomorrow morning. - Slay&lt;br /&gt;
&lt;br /&gt;
Sure guy.  That sounds good.  There should be 5 or 6 of us though.. . Oh well. Their loss.  I will do some before or after work today. Ill start with Microkernel since there is not a large amount of info here, and so we don&#039;t overlap each other - JSlonosky&lt;br /&gt;
&lt;br /&gt;
yeah i think there was more like 7 of us btw if any one has any more information feel free to add it would be nice if you add the references so that way citing is really easy on  acm.org it will auto give you the citation info (where it says Display Formats click on ACM Ref  and new window with the citation info auto pop&#039;s up) --[[User:Asoknack|Asoknack]] 02:28, 11 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I added an outline of the similarities and differences. Add any more that I missed. These are from observations so I don&#039;t have any resources. -Slay&lt;br /&gt;
That&#039;s probably fine.  Our textbook probably outlines some of them, so I am sure we can find a few there - JSlonosky&lt;br /&gt;
&lt;br /&gt;
== The Essay ==&lt;br /&gt;
&lt;br /&gt;
Let&#039;s actually breakdown the essay into components then write it here.&lt;br /&gt;
&lt;br /&gt;
We have our intro/thesis statement&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...to the extent that exokernels be seen as a compromise between virtual machines and microkernels. &lt;br /&gt;
-I&#039;ll work on the initial intro, should have it ready by tonight. -Slade&lt;br /&gt;
&lt;br /&gt;
3 paragraphs that prove it&lt;br /&gt;
Explain how the key design characteristics of these three system architectures compare with each other. &lt;br /&gt;
&lt;br /&gt;
and conclusion&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3076</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3076"/>
		<updated>2010-10-12T18:30:33Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* Virtual Machine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
* Large amount of moving from a process to Kernel to user space and back again, this is a costly operation.&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
System Level Virtualization&lt;br /&gt;
&lt;br /&gt;
=== VMM ===&lt;br /&gt;
* stands for Virtual Machine Monitor, also known as the hyper-visor[4]&lt;br /&gt;
* responsible for virtualization of hardware(mapping physical to virtual) and the VM that run on top of the virtuallized hardware [4]&lt;br /&gt;
* usually a small os with no drivers , so it is coupled with a linux distro that provides device / hardware access [4]&lt;br /&gt;
** the os that the VMM is using for driver&#039;s is called the hostOS [6]&lt;br /&gt;
*the hostOS provides login and physical access to the hardware as well as management for the VMM [6]&lt;br /&gt;
=== VM ===&lt;br /&gt;
* the OS that the vm is running is called the guestOS [6]&lt;br /&gt;
* the guestOS only sees resources that have been allocated to the VM [6]&lt;br /&gt;
==== three approaches ====&lt;br /&gt;
*Type I virtualization [5]&lt;br /&gt;
** runs off the physical hardware [4]&lt;br /&gt;
** Isolation of the guestOs from the hardware is done threw processe level protection meachnism[6]&lt;br /&gt;
*** ring 0 = VMM [6]&lt;br /&gt;
*** ring 1 = VM [6]&lt;br /&gt;
*** this means all instructions from the VM must go threw the VMM [6]&lt;br /&gt;
** since there can be multiple VM&#039;s on a computer the scheduling is done by the VMM [6]&lt;br /&gt;
** on boot the VMM creates a hardware platform for the VM [6]&lt;br /&gt;
** load&#039;s the VM kernel into virtual memory and then boot&#039;s it like a regular computer [6]&lt;br /&gt;
** ex. Xen [4]&lt;br /&gt;
*Type II virtualization [5]&lt;br /&gt;
** run off the host Os [4]&lt;br /&gt;
** ex. VMware , QEMU [4]&lt;br /&gt;
* Para-virtualization [6]&lt;br /&gt;
** Similar to Type but use the HostOs for Device driver access [6]&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Micro-kernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* multiplex resources securely providing protection to mutual distrustful application threw the use of secure binding&#039;s[1]&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel separates protection from management in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking access to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the number of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad parameter passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is designed to interact with a low-level machine independent level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to create low level primitives that the hardware resources can be accessed from, this also includes interrupts,exceptions [1]&lt;br /&gt;
** the exokernel also export privileged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource management except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource management is the best way to build flexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
** Use physical name&#039;s when ever possible[3] (not to sure what physical names are, I think it is as simple as what the hardware is called)--[[User:Asoknack|Asoknack]] 20:27, 9 October 2010 (UTC)&lt;br /&gt;
** Physical names capture useful information [3]&lt;br /&gt;
*** safer than and less resource intensive than virtual names as no translations are needed[3]&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource management [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release[1](Visible means that when revocation happens the exokernel tell the LibOS that resource is being revoked)&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achieved threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allows the separation of protection and resource use [1]&lt;br /&gt;
* only checks authorization during bind time [1]&lt;br /&gt;
** Application&#039;s with complex needs for resources only authorized during bind.[1]&lt;br /&gt;
* access checking is done during access time and there is no need to understand complex resources needs during access[1]&lt;br /&gt;
** (this means that the exokernel checks once to make sure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** allows the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve performance[1]&lt;br /&gt;
** eliminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be scheduled [2]&lt;br /&gt;
==== Visible Resource Revocation ====&lt;br /&gt;
* Used for most resources [1]&lt;br /&gt;
** allows for LibOS to help with deallocation [1]&lt;br /&gt;
** LibOS are able to garner what resources are scare [1]&lt;br /&gt;
* Slower than Invisible as application involvement is required [1]&lt;br /&gt;
** ex of when invisible is used is Processor addressing-context identifiers [1]&lt;br /&gt;
==== Abort Protocol ====&lt;br /&gt;
* allows the exokernel to take resources away from the LibOS [1]&lt;br /&gt;
* used when the LibOS fails to respond to the revocation request [1]&lt;br /&gt;
* Exokernel must be careful not to delete as the LibOS might need to write some system critical data to the resource [1]&lt;br /&gt;
&lt;br /&gt;
== Comparisons  ==&lt;br /&gt;
====Exokernel/Microkernel====&lt;br /&gt;
&#039;&#039;&#039;Similarities&#039;&#039;&#039;&lt;br /&gt;
* Limited functionality in kernel&lt;br /&gt;
** functionality in kernel to handle sharing of resources and security&lt;br /&gt;
** avoids programming directly to hardware which creates a dependency&lt;br /&gt;
* Additional functionality provided in user space as processes&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* Minimal abstractions provided by the kernel&lt;br /&gt;
** Applications given more power in exokernel&lt;br /&gt;
&lt;br /&gt;
====Exokernel/VM====&lt;br /&gt;
&#039;&#039;&#039;Similarities&#039;&#039;&#039;&lt;br /&gt;
* Idea of partitioning resources between applications/OSs&lt;br /&gt;
* &amp;quot;Control&amp;quot; of resource given&lt;br /&gt;
* Isolation from other applications/OSs&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* Exokernel runs applications, VM runs OS&lt;br /&gt;
* VM uses a hostOS and guestOSs run on top&lt;br /&gt;
* Virtualization on VMs, Exokernel deals with real resources&lt;br /&gt;
* VM hides a lot of information because it emulates. Exokernel does not.&lt;br /&gt;
&lt;br /&gt;
====Microkernel/VM====&lt;br /&gt;
&#039;&#039;&#039;Differences&#039;&#039;&#039;&lt;br /&gt;
* With a virtual machine, you are not virtualizing apps like with a microkernel but virtualizing an entire Operating System.&lt;br /&gt;
* This can be costly but the benefits are that it&#039;s easier and all the standard OS features are available.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., Kaashoek, M. F., and O&#039;Toole, J. 1995. Exokernel: an operating system architecture for application-level resource management. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 251-266. DOI= http://doi.acm.org/10.1145/224056.224076 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3]&amp;lt;nowiki&amp;gt;Kaashoek, M. F., Engler, D. R., Ganger, G. R., Briceño, H. M., Hunt, R., Mazières, D., Pinckney, T., Grimm, R., Jannotti, J., and Mackenzie, K. 1997. Application performance and flexibility on exokernel systems. In Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles  (Saint Malo, France, October 05 - 08, 1997). W. M. Waite, Ed. SOSP &#039;97. ACM, New York, NY, 52-65. DOI= http://doi.acm.org/10.1145/268998.266644 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4]&amp;lt;nowiki&amp;gt;Vallee, G.; Naughton, T.; Engelmann, C.; Hong Ong; Scott, S.L.; , &amp;quot;System-Level Virtualization for High Performance Computing,&amp;quot; Parallel, Distributed and Network-Based Processing, 2008. PDP 2008. 16th Euromicro Conference on , vol., no., pp.636-643, 13-15 Feb. 2008&lt;br /&gt;
DOI= http://doi.acm.org/10.1109/PDP.2008.85 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5]&amp;lt;nowiki&amp;gt;Goldberg, R. P. 1973. Architecture of virtual machines. In Proceedings of the Workshop on Virtual Computer Systems  (Cambridge, Massachusetts, United States, March 26 - 27, 1973). ACM, New York, NY, 74-112. DOI= http://doi.acm.org/10.1145/800122.803950 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6]&amp;lt;nowiki&amp;gt;Vallee, G., Naughton, T., and Scott, S. L. 2007. System management software for virtual environments. In Proceedings of the 4th international Conference on Computing Frontiers (Ischia, Italy, May 07 - 09, 2007). CF &#039;07. ACM, New York, NY, 153-160. DOI= http://doi.acm.org/10.1145/1242531.1242555 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7]&amp;lt;nowiki&amp;gt;Liedtke, J. 1995. On micro-kernel construction. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 237-250. DOI= http://doi.acm.org/10.1145/224056.224075 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I&#039;m just going to post my answer for question 1 on the individuel assignment and hope it helps. --[[User:Aellebla|Aellebla]] 15:06, 12 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
The design of the micro kernel was to take everything they could out of the Kernel and put it into a process. For ex, networking would be put into a process instead of staying in the kernel. The micro kernel dev&#039;s tried to keep lots of things in user space for efficiency. But one major problem with this is there would be a large amount of moving from a process to the kernel to user space and back again and this is a costly, non efficient process.It was an application specific OS, there was no multiplexing. With a virtual machine you are not virtualizing apps like with a microkernel but virtualizing an entire Operating System. This is very heavy however but the benefits are that it‟s easy and all the standard OS features are there whereas in a microkernel setup they would not all be there and this can be seen as a compromise.&lt;br /&gt;
&lt;br /&gt;
Exokernels can be seen as a compromise to virtual machines and microkernels because virtual machines emulate and exokernels do not. When you emulate something you hide a lot of the actual information because you wouldn‟t be able to see the „real‟ hardware. If we look at a virtual box setup running Linux, and we go look at all the hardware, it will be displayed as fake hardware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;br /&gt;
&lt;br /&gt;
I think we should divide up the paragraphs and proofread each others instead. (Are there only 4 of us?) I don&#039;t have much time to work on this today though but I&#039;ll try to work on it tomorrow morning. - Slay&lt;br /&gt;
&lt;br /&gt;
Sure guy.  That sounds good.  There should be 5 or 6 of us though.. . Oh well. Their loss.  I will do some before or after work today. Ill start with Microkernel since there is not a large amount of info here, and so we don&#039;t overlap each other - JSlonosky&lt;br /&gt;
&lt;br /&gt;
yeah i think there was more like 7 of us btw if any one has any more information feel free to add it would be nice if you add the references so that way citing is really easy on  acm.org it will auto give you the citation info (where it says Display Formats click on ACM Ref  and new window with the citation info auto pop&#039;s up) --[[User:Asoknack|Asoknack]] 02:28, 11 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
I added an outline of the similarities and differences. Add any more that I missed. These are from observations so I don&#039;t have any resources. -Slay&lt;br /&gt;
That&#039;s probably fine.  Our textbook probably outlines some of them, so I am sure we can find a few there - JSlonosky&lt;br /&gt;
&lt;br /&gt;
== The Essay ==&lt;br /&gt;
&lt;br /&gt;
Let&#039;s actually breakdown the essay into components then write it here.&lt;br /&gt;
&lt;br /&gt;
We have our intro/thesis statement&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...to the extent that exokernels be seen as a compromise between virtual machines and microkernels. &lt;br /&gt;
-I&#039;ll work on the initial intro, should have it ready by tonight. -Slade&lt;br /&gt;
&lt;br /&gt;
3 paragraphs that prove it&lt;br /&gt;
Explain how the key design characteristics of these three system architectures compare with each other. &lt;br /&gt;
&lt;br /&gt;
and conclusion&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2892</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2892"/>
		<updated>2010-10-11T02:30:17Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* Unsorted */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
System Level Virtualization&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; VMM &#039;&#039;&#039;&lt;br /&gt;
* stands for Virtual Machine Monitor, also known as the hyper-visor[4]&lt;br /&gt;
* responsible for virtualization of hardware(mapping physical to virtual) and the VM that run on top of the virtuallized hardware [4]&lt;br /&gt;
* usually a small os with no drivers , so it is coupled with a linux distro that provides device / hardware access [4]&lt;br /&gt;
** the os that the VMM is using for driver&#039;s is called the hostOS [6]&lt;br /&gt;
*the hostOS provides login and physical access to the hardware as well as management for the VMM [6]&lt;br /&gt;
&#039;&#039;&#039; VM &#039;&#039;&#039;&lt;br /&gt;
* the OS that the vm is running is called the guestOS [6]&lt;br /&gt;
* the guestOS only sees resources that have been allocated to the VM [6]&lt;br /&gt;
&#039;&#039;&#039; three approaches &#039;&#039;&#039;&lt;br /&gt;
*Type I virtualization [5]&lt;br /&gt;
** runs off the physical hardware [4]&lt;br /&gt;
** Isolation of the guestOs from the hardware is done threw processe level protection meachnism[6]&lt;br /&gt;
*** ring 0 = VMM [6]&lt;br /&gt;
*** ring 1 = VM [6]&lt;br /&gt;
*** this means all instructions from the VM must go threw the VMM [6]&lt;br /&gt;
** since there can be multiple VM&#039;s on a computer the scheduling is done by the VMM [6]&lt;br /&gt;
** on boot the VMM creates a hardware platform for the VM [6]&lt;br /&gt;
** load&#039;s the VM kernel into virtual memory and then boot&#039;s it like a regular computer [6]&lt;br /&gt;
** ex. Xen [4]&lt;br /&gt;
*Type II virtualization [5]&lt;br /&gt;
** run off the host Os [4]&lt;br /&gt;
** ex. VMware , QEMU [4]&lt;br /&gt;
* Para-virtualization [6]&lt;br /&gt;
** Similar to Type but use the HostOs for Device driver access [6]&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Micro-kernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* multiplex resources securely providing protection to mutual distrustful application threw the use of secure binding&#039;s[1]&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel separates protection from management in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking access to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the number of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad parameter passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is designed to interact with a low-level machine independent level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to create low level primitives that the hardware resources can be accessed from, this also includes interrupts,exceptions [1]&lt;br /&gt;
** the exokernel also export privileged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource management except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource management is the best way to build flexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
** Use physical name&#039;s when ever possible[3] (not to sure what physical names are, I think it is as simple as what the hardware is called)--[[User:Asoknack|Asoknack]] 20:27, 9 October 2010 (UTC)&lt;br /&gt;
** Physical names capture useful information [3]&lt;br /&gt;
*** safer than and less resource intensive than virtual names as no translations are needed[3]&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource management [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release[1](Visible means that when revocation happens the exokernel tell the LibOS that resource is being revoked)&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achieved threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allows the separation of protection and resource use [1]&lt;br /&gt;
* only checks authorization during bind time [1]&lt;br /&gt;
** Application&#039;s with complex needs for resources only authorized during bind.[1]&lt;br /&gt;
* access checking is done during access time and there is no need to understand complex resources needs during access[1]&lt;br /&gt;
** (this means that the exokernel checks once to make sure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** allows the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve performance[1]&lt;br /&gt;
** eliminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be scheduled [2]&lt;br /&gt;
==== Visible Resource Revocation ====&lt;br /&gt;
* Used for most resources [1]&lt;br /&gt;
** allows for LibOS to help with deallocation [1]&lt;br /&gt;
** LibOS are able to garner what resources are scare [1]&lt;br /&gt;
* Slower than Invisible as application involvement is required [1]&lt;br /&gt;
** ex of when invisible is used is Processor addressing-context identifiers [1]&lt;br /&gt;
==== Abort Protocol ====&lt;br /&gt;
* allows the exokernel to take resources away from the LibOS [1]&lt;br /&gt;
* used when the LibOS fails to respond to the revocation request [1]&lt;br /&gt;
* Exokernel must be careful not to delete as the LibOS might need to write some system critical data to the resource [1]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., Kaashoek, M. F., and O&#039;Toole, J. 1995. Exokernel: an operating system architecture for application-level resource management. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 251-266. DOI= http://doi.acm.org/10.1145/224056.224076 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3]&amp;lt;nowiki&amp;gt;Kaashoek, M. F., Engler, D. R., Ganger, G. R., Briceño, H. M., Hunt, R., Mazières, D., Pinckney, T., Grimm, R., Jannotti, J., and Mackenzie, K. 1997. Application performance and flexibility on exokernel systems. In Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles  (Saint Malo, France, October 05 - 08, 1997). W. M. Waite, Ed. SOSP &#039;97. ACM, New York, NY, 52-65. DOI= http://doi.acm.org/10.1145/268998.266644 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4]&amp;lt;nowiki&amp;gt;Vallee, G.; Naughton, T.; Engelmann, C.; Hong Ong; Scott, S.L.; , &amp;quot;System-Level Virtualization for High Performance Computing,&amp;quot; Parallel, Distributed and Network-Based Processing, 2008. PDP 2008. 16th Euromicro Conference on , vol., no., pp.636-643, 13-15 Feb. 2008&lt;br /&gt;
DOI= http://doi.acm.org/10.1109/PDP.2008.85 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5]&amp;lt;nowiki&amp;gt;Goldberg, R. P. 1973. Architecture of virtual machines. In Proceedings of the Workshop on Virtual Computer Systems  (Cambridge, Massachusetts, United States, March 26 - 27, 1973). ACM, New York, NY, 74-112. DOI= http://doi.acm.org/10.1145/800122.803950 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6]&amp;lt;nowiki&amp;gt;Vallee, G., Naughton, T., and Scott, S. L. 2007. System management software for virtual environments. In Proceedings of the 4th international Conference on Computing Frontiers (Ischia, Italy, May 07 - 09, 2007). CF &#039;07. ACM, New York, NY, 153-160. DOI= http://doi.acm.org/10.1145/1242531.1242555 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7]&amp;lt;nowiki&amp;gt;Liedtke, J. 1995. On micro-kernel construction. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 237-250. DOI= http://doi.acm.org/10.1145/224056.224075 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;br /&gt;
&lt;br /&gt;
I think we should divide up the paragraphs and proofread each others instead. (Are there only 4 of us?) I don&#039;t have much time to work on this today though but I&#039;ll try to work on it tomorrow morning. - Slay&lt;br /&gt;
&lt;br /&gt;
Sure guy.  That sounds good.  There should be 5 or 6 of us though.. . Oh well. Their loss.  I will do some before or after work today. Ill start with Microkernel since there is not a large amount of info here, and so we don&#039;t overlap each other - JSlonosky&lt;br /&gt;
&lt;br /&gt;
yeah i think there was more like 7 of us btw if any one has any more information feel free to add it would be nice if you add the references so that way citing is really easy on  acm.org it will auto give you the citation info (where it says Display Formats click on ACM Ref  and new window with the citation info auto pop&#039;s up) --[[User:Asoknack|Asoknack]] 02:28, 11 October 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2891</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2891"/>
		<updated>2010-10-11T02:28:44Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* Unsorted */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
System Level Virtualization&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; VMM &#039;&#039;&#039;&lt;br /&gt;
* stands for Virtual Machine Monitor, also known as the hyper-visor[4]&lt;br /&gt;
* responsible for virtualization of hardware(mapping physical to virtual) and the VM that run on top of the virtuallized hardware [4]&lt;br /&gt;
* usually a small os with no drivers , so it is coupled with a linux distro that provides device / hardware access [4]&lt;br /&gt;
** the os that the VMM is using for driver&#039;s is called the hostOS [6]&lt;br /&gt;
*the hostOS provides login and physical access to the hardware as well as management for the VMM [6]&lt;br /&gt;
&#039;&#039;&#039; VM &#039;&#039;&#039;&lt;br /&gt;
* the OS that the vm is running is called the guestOS [6]&lt;br /&gt;
* the guestOS only sees resources that have been allocated to the VM [6]&lt;br /&gt;
&#039;&#039;&#039; three approaches &#039;&#039;&#039;&lt;br /&gt;
*Type I virtualization [5]&lt;br /&gt;
** runs off the physical hardware [4]&lt;br /&gt;
** Isolation of the guestOs from the hardware is done threw processe level protection meachnism[6]&lt;br /&gt;
*** ring 0 = VMM [6]&lt;br /&gt;
*** ring 1 = VM [6]&lt;br /&gt;
*** this means all instructions from the VM must go threw the VMM [6]&lt;br /&gt;
** since there can be multiple VM&#039;s on a computer the scheduling is done by the VMM [6]&lt;br /&gt;
** on boot the VMM creates a hardware platform for the VM [6]&lt;br /&gt;
** load&#039;s the VM kernel into virtual memory and then boot&#039;s it like a regular computer [6]&lt;br /&gt;
** ex. Xen [4]&lt;br /&gt;
*Type II virtualization [5]&lt;br /&gt;
** run off the host Os [4]&lt;br /&gt;
** ex. VMware , QEMU [4]&lt;br /&gt;
* Para-virtualization [6]&lt;br /&gt;
** Similar to Type but use the HostOs for Device driver access [6]&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Micro-kernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* multiplex resources securely providing protection to mutual distrustful application threw the use of secure binding&#039;s[1]&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel separates protection from management in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking access to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the number of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad parameter passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is designed to interact with a low-level machine independent level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to create low level primitives that the hardware resources can be accessed from, this also includes interrupts,exceptions [1]&lt;br /&gt;
** the exokernel also export privileged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource management except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource management is the best way to build flexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
** Use physical name&#039;s when ever possible[3] (not to sure what physical names are, I think it is as simple as what the hardware is called)--[[User:Asoknack|Asoknack]] 20:27, 9 October 2010 (UTC)&lt;br /&gt;
** Physical names capture useful information [3]&lt;br /&gt;
*** safer than and less resource intensive than virtual names as no translations are needed[3]&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource management [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release[1](Visible means that when revocation happens the exokernel tell the LibOS that resource is being revoked)&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achieved threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allows the separation of protection and resource use [1]&lt;br /&gt;
* only checks authorization during bind time [1]&lt;br /&gt;
** Application&#039;s with complex needs for resources only authorized during bind.[1]&lt;br /&gt;
* access checking is done during access time and there is no need to understand complex resources needs during access[1]&lt;br /&gt;
** (this means that the exokernel checks once to make sure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** allows the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve performance[1]&lt;br /&gt;
** eliminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be scheduled [2]&lt;br /&gt;
==== Visible Resource Revocation ====&lt;br /&gt;
* Used for most resources [1]&lt;br /&gt;
** allows for LibOS to help with deallocation [1]&lt;br /&gt;
** LibOS are able to garner what resources are scare [1]&lt;br /&gt;
* Slower than Invisible as application involvement is required [1]&lt;br /&gt;
** ex of when invisible is used is Processor addressing-context identifiers [1]&lt;br /&gt;
==== Abort Protocol ====&lt;br /&gt;
* allows the exokernel to take resources away from the LibOS [1]&lt;br /&gt;
* used when the LibOS fails to respond to the revocation request [1]&lt;br /&gt;
* Exokernel must be careful not to delete as the LibOS might need to write some system critical data to the resource [1]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., Kaashoek, M. F., and O&#039;Toole, J. 1995. Exokernel: an operating system architecture for application-level resource management. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 251-266. DOI= http://doi.acm.org/10.1145/224056.224076 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3]&amp;lt;nowiki&amp;gt;Kaashoek, M. F., Engler, D. R., Ganger, G. R., Briceño, H. M., Hunt, R., Mazières, D., Pinckney, T., Grimm, R., Jannotti, J., and Mackenzie, K. 1997. Application performance and flexibility on exokernel systems. In Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles  (Saint Malo, France, October 05 - 08, 1997). W. M. Waite, Ed. SOSP &#039;97. ACM, New York, NY, 52-65. DOI= http://doi.acm.org/10.1145/268998.266644 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4]&amp;lt;nowiki&amp;gt;Vallee, G.; Naughton, T.; Engelmann, C.; Hong Ong; Scott, S.L.; , &amp;quot;System-Level Virtualization for High Performance Computing,&amp;quot; Parallel, Distributed and Network-Based Processing, 2008. PDP 2008. 16th Euromicro Conference on , vol., no., pp.636-643, 13-15 Feb. 2008&lt;br /&gt;
DOI= http://doi.acm.org/10.1109/PDP.2008.85 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5]&amp;lt;nowiki&amp;gt;Goldberg, R. P. 1973. Architecture of virtual machines. In Proceedings of the Workshop on Virtual Computer Systems  (Cambridge, Massachusetts, United States, March 26 - 27, 1973). ACM, New York, NY, 74-112. DOI= http://doi.acm.org/10.1145/800122.803950 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6]&amp;lt;nowiki&amp;gt;Vallee, G., Naughton, T., and Scott, S. L. 2007. System management software for virtual environments. In Proceedings of the 4th international Conference on Computing Frontiers (Ischia, Italy, May 07 - 09, 2007). CF &#039;07. ACM, New York, NY, 153-160. DOI= http://doi.acm.org/10.1145/1242531.1242555 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7]&amp;lt;nowiki&amp;gt;Liedtke, J. 1995. On micro-kernel construction. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 237-250. DOI= http://doi.acm.org/10.1145/224056.224075 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;br /&gt;
&lt;br /&gt;
I think we should divide up the paragraphs and proofread each others instead. (Are there only 4 of us?) I don&#039;t have much time to work on this today though but I&#039;ll try to work on it tomorrow morning. - Slay&lt;br /&gt;
&lt;br /&gt;
Sure guy.  That sounds good.  There should be 5 or 6 of us though.. . Oh well. Their loss.  I will do some before or after work today. Ill start with Microkernel since there is not a large amount of info here, and so we don&#039;t overlap each other - JSlonosky&lt;br /&gt;
&lt;br /&gt;
yeah i think there was more like 7 of us btw if any one has any more information feel free to add it would be nice if you add the references so that way citing is really easy on  acm.org it will auto give you the citation info --02:28, 11 October 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Template:Reflist&amp;diff=2718</id>
		<title>Template:Reflist</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Template:Reflist&amp;diff=2718"/>
		<updated>2010-10-09T22:51:49Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: Created page with &amp;#039;&amp;lt;div class=&amp;quot;references-small {{#if: {{{colwidth|}}} | references-column-width | {{#iferror: {{#ifexpr: {{{1|1}}}&amp;gt;1 | references-column-count references-column-count-{{{1}}} }} }}…&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;references-small {{#if: {{{colwidth|}}} | references-column-width | {{#iferror: {{#ifexpr: {{{1|1}}}&amp;gt;1 | references-column-count references-column-count-{{{1}}} }} }} }}&amp;quot; {{#if: {{{colwidth|}}}| style=&amp;quot;-moz-column-width:{{{colwidth}}}; column-width:{{{colwidth}}};&amp;quot; | {{#if: {{{1|}}}| style=&amp;quot;-moz-column-count:{{{1}}}; column-count:{{{1}}};&amp;quot; }} }}&amp;gt;&lt;br /&gt;
{{#tag:references||group={{{group|}}}}}&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;[[Category:Citation templates|{{PAGENAME}}]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2717</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2717"/>
		<updated>2010-10-09T22:30:45Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: Spell check&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
System Level Virtualization&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; VMM &#039;&#039;&#039;&lt;br /&gt;
* stands for Virtual Machine Monitor, also known as the hyper-visor[4]&lt;br /&gt;
* responsible for virtualization of hardware(mapping physical to virtual) and the VM that run on top of the virtuallized hardware [4]&lt;br /&gt;
* usually a small os with no drivers , so it is coupled with a linux distro that provides device / hardware access [4]&lt;br /&gt;
** the os that the VMM is using for driver&#039;s is called the hostOS [6]&lt;br /&gt;
*the hostOS provides login and physical access to the hardware as well as management for the VMM [6]&lt;br /&gt;
&#039;&#039;&#039; VM &#039;&#039;&#039;&lt;br /&gt;
* the OS that the vm is running is called the guestOS [6]&lt;br /&gt;
* the guestOS only sees resources that have been allocated to the VM [6]&lt;br /&gt;
&#039;&#039;&#039; three approaches &#039;&#039;&#039;&lt;br /&gt;
*Type I virtualization [5]&lt;br /&gt;
** runs off the physical hardware [4]&lt;br /&gt;
** Isolation of the guestOs from the hardware is done threw processe level protection meachnism[6]&lt;br /&gt;
*** ring 0 = VMM [6]&lt;br /&gt;
*** ring 1 = VM [6]&lt;br /&gt;
*** this means all instructions from the VM must go threw the VMM [6]&lt;br /&gt;
** since there can be multiple VM&#039;s on a computer the scheduling is done by the VMM [6]&lt;br /&gt;
** on boot the VMM creates a hardware platform for the VM [6]&lt;br /&gt;
** load&#039;s the VM kernel into virtual memory and then boot&#039;s it like a regular computer [6]&lt;br /&gt;
** ex. Xen [4]&lt;br /&gt;
*Type II virtualization [5]&lt;br /&gt;
** run off the host Os [4]&lt;br /&gt;
** ex. VMware , QEMU [4]&lt;br /&gt;
* Para-virtualization [6]&lt;br /&gt;
** Similar to Type but use the HostOs for Device driver access [6]&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Micro-kernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
* multiplex resources securely providing protection to mutual distrustful application threw the use of secure binding&#039;s[1]&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel separates protection from management in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking access to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the number of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad parameter passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is designed to interact with a low-level machine independent level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to create low level primitives that the hardware resources can be accessed from, this also includes interrupts,exceptions [1]&lt;br /&gt;
** the exokernel also export privileged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource management except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource management is the best way to build flexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
** Use physical name&#039;s when ever possible[3] (not to sure what physical names are, I think it is as simple as what the hardware is called)--[[User:Asoknack|Asoknack]] 20:27, 9 October 2010 (UTC)&lt;br /&gt;
** Physical names capture useful information [3]&lt;br /&gt;
*** safer than and less resource intensive than virtual names as no translations are needed[3]&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource management [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release[1](Visible means that when revocation happens the exokernel tell the LibOS that resource is being revoked)&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achieved threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allows the separation of protection and resource use [1]&lt;br /&gt;
* only checks authorization during bind time [1]&lt;br /&gt;
** Application&#039;s with complex needs for resources only authorized during bind.[1]&lt;br /&gt;
* access checking is done during access time and there is no need to understand complex resources needs during access[1]&lt;br /&gt;
** (this means that the exokernel checks once to make sure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** allows the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve performance[1]&lt;br /&gt;
** eliminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be scheduled [2]&lt;br /&gt;
==== Visible Resource Revocation ====&lt;br /&gt;
* Used for most resources [1]&lt;br /&gt;
** allows for LibOS to help with deallocation [1]&lt;br /&gt;
** LibOS are able to garner what resources are scare [1]&lt;br /&gt;
* Slower than Invisible as application involvement is required [1]&lt;br /&gt;
** ex of when invisible is used is Processor addressing-context identifiers [1]&lt;br /&gt;
==== Abort Protocol ====&lt;br /&gt;
* allows the exokernel to take resources away from the LibOS [1]&lt;br /&gt;
* used when the LibOS fails to respond to the revocation request [1]&lt;br /&gt;
* Exokernel must be careful not to delete as the LibOS might need to write some system critical data to the resource [1]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., Kaashoek, M. F., and O&#039;Toole, J. 1995. Exokernel: an operating system architecture for application-level resource management. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 251-266. DOI= http://doi.acm.org/10.1145/224056.224076 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3]&amp;lt;nowiki&amp;gt;Kaashoek, M. F., Engler, D. R., Ganger, G. R., Briceño, H. M., Hunt, R., Mazières, D., Pinckney, T., Grimm, R., Jannotti, J., and Mackenzie, K. 1997. Application performance and flexibility on exokernel systems. In Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles  (Saint Malo, France, October 05 - 08, 1997). W. M. Waite, Ed. SOSP &#039;97. ACM, New York, NY, 52-65. DOI= http://doi.acm.org/10.1145/268998.266644 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4]&amp;lt;nowiki&amp;gt;Vallee, G.; Naughton, T.; Engelmann, C.; Hong Ong; Scott, S.L.; , &amp;quot;System-Level Virtualization for High Performance Computing,&amp;quot; Parallel, Distributed and Network-Based Processing, 2008. PDP 2008. 16th Euromicro Conference on , vol., no., pp.636-643, 13-15 Feb. 2008&lt;br /&gt;
DOI= http://doi.acm.org/10.1109/PDP.2008.85 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5]&amp;lt;nowiki&amp;gt;Goldberg, R. P. 1973. Architecture of virtual machines. In Proceedings of the Workshop on Virtual Computer Systems  (Cambridge, Massachusetts, United States, March 26 - 27, 1973). ACM, New York, NY, 74-112. DOI= http://doi.acm.org/10.1145/800122.803950 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6]&amp;lt;nowiki&amp;gt;Vallee, G., Naughton, T., and Scott, S. L. 2007. System management software for virtual environments. In Proceedings of the 4th international Conference on Computing Frontiers (Ischia, Italy, May 07 - 09, 2007). CF &#039;07. ACM, New York, NY, 153-160. DOI= http://doi.acm.org/10.1145/1242531.1242555 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7]&amp;lt;nowiki&amp;gt;Liedtke, J. 1995. On micro-kernel construction. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 237-250. DOI= http://doi.acm.org/10.1145/224056.224075 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2716</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2716"/>
		<updated>2010-10-09T22:17:29Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
System Level Virtualization&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; VMM &#039;&#039;&#039;&lt;br /&gt;
* stands for Virtual Machine Monitor, also known as the hypervisor[4]&lt;br /&gt;
* responsible for virtualization of hardware(mapping physical to virtual) and the VM that run on top of the virtualized hardware [4]&lt;br /&gt;
* usualy a small os with no drivers , so it is coupled with a linux distro that provides device / hardware acces [4]&lt;br /&gt;
** the os that the VMM is using for driver&#039;s is called the hostOS [6]&lt;br /&gt;
*the hostOS provide&#039;s login and physical acces to the hardware as well as managment for the VMM [6]&lt;br /&gt;
&#039;&#039;&#039; VM &#039;&#039;&#039;&lt;br /&gt;
* the OS that the vm is running is called the guestOS [6]&lt;br /&gt;
* the guestOS only see&#039;s resources that have been allocated to the VM [6]&lt;br /&gt;
&#039;&#039;&#039; three approaches &#039;&#039;&#039;&lt;br /&gt;
*Type I virtualization [5]&lt;br /&gt;
** run&#039;s off the physical hardware [4]&lt;br /&gt;
** Isolation of the guestOs from the hardware is done threw processe level protection meachnism[6]&lt;br /&gt;
*** ring 0 = VMM [6]&lt;br /&gt;
*** ring 1 = VM [6]&lt;br /&gt;
*** this mean&#039;s all instructions from the VM must go threw the VMM [6]&lt;br /&gt;
** since there can be multiple VM&#039;s on a computer the schedualing is done by the VMM [6]&lt;br /&gt;
** on boot the VMM create&#039;s a hardware platform for the VM [6]&lt;br /&gt;
** load&#039;s the VM kernel into virtual memory and then boot&#039;s it like a regular computer [6]&lt;br /&gt;
** ex. Xen [4]&lt;br /&gt;
*Type II virtualization [5]&lt;br /&gt;
** run off the host Os [4]&lt;br /&gt;
** ex. VMware , QEMU [4]&lt;br /&gt;
* Para-virtualization [6]&lt;br /&gt;
** Similar to Type but use the HostOs for Device driver acces [6]&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Microkernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
* multiplex resources securly providing protection to mutualy distrustfull application threw the use of secure binding&#039;s&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel seperates protection from managment in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking acces to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the numbrt of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad pramater passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is desgined to interact with a low-level machine independant level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to creat low level primatives that the hardware resources can be accesse from, this allso includes interrupt&#039;s,exceptions [1]&lt;br /&gt;
** the exokernel also export priviledged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource managment except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource managment is the best way to build fexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
** Use physical name&#039;s when ever possible[3] (not to shure what physical names are, i think it is as simple as what the hardware is called)--[[User:Asoknack|Asoknack]] 20:27, 9 October 2010 (UTC)&lt;br /&gt;
** Physical names capture usefull information [3]&lt;br /&gt;
*** safer than and less resource intesive than vitual names as no translations are needed[3]&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource managment [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release[1](Visible means that when revocation happen&#039;s the exokernel tell the LibOS that resource is being revoked)&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competeing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achived threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allow&#039;s the seperation of protection and resource use [1]&lt;br /&gt;
* only checks authorization durning bind time [1]&lt;br /&gt;
** Application&#039;s with complex need&#039;s for resources only authorized durining bind.[1]&lt;br /&gt;
* acces checking is done during acces time and there is no need to understand complex accese need&#039;s during acces[1]&lt;br /&gt;
** (this mean&#039;s that the exokernel check&#039;s once to make shure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** alow&#039;s the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve preformance[1]&lt;br /&gt;
** eleminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be schedualed [2]&lt;br /&gt;
==== Visible Resource Revocation ====&lt;br /&gt;
* Used for most resources [1]&lt;br /&gt;
** allow&#039;s for LibOS to help with deallocation [1]&lt;br /&gt;
** LibOS are able to garnner what resources are scare [1]&lt;br /&gt;
* Slower than Invisible as application involment is required [1]&lt;br /&gt;
** ex of when invisible is used is Processor addressing-context identifiers [1]&lt;br /&gt;
==== Abort Protocol ====&lt;br /&gt;
* allow&#039;s the exokernel to take resources away from the LibOS [1]&lt;br /&gt;
* used when the LibOS fail&#039;s to respond to the revocation request [1]&lt;br /&gt;
* Exokernel must be careful not to delete as the LibOS might need to write some system critical data to the resource [1]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., Kaashoek, M. F., and O&#039;Toole, J. 1995. Exokernel: an operating system architecture for application-level resource management. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 251-266. DOI= http://doi.acm.org/10.1145/224056.224076 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3]&amp;lt;nowiki&amp;gt;Kaashoek, M. F., Engler, D. R., Ganger, G. R., Briceño, H. M., Hunt, R., Mazières, D., Pinckney, T., Grimm, R., Jannotti, J., and Mackenzie, K. 1997. Application performance and flexibility on exokernel systems. In Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles  (Saint Malo, France, October 05 - 08, 1997). W. M. Waite, Ed. SOSP &#039;97. ACM, New York, NY, 52-65. DOI= http://doi.acm.org/10.1145/268998.266644 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4]&amp;lt;nowiki&amp;gt;Vallee, G.; Naughton, T.; Engelmann, C.; Hong Ong; Scott, S.L.; , &amp;quot;System-Level Virtualization for High Performance Computing,&amp;quot; Parallel, Distributed and Network-Based Processing, 2008. PDP 2008. 16th Euromicro Conference on , vol., no., pp.636-643, 13-15 Feb. 2008&lt;br /&gt;
DOI= http://doi.acm.org/10.1109/PDP.2008.85 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5]&amp;lt;nowiki&amp;gt;Goldberg, R. P. 1973. Architecture of virtual machines. In Proceedings of the Workshop on Virtual Computer Systems  (Cambridge, Massachusetts, United States, March 26 - 27, 1973). ACM, New York, NY, 74-112. DOI= http://doi.acm.org/10.1145/800122.803950 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6]&amp;lt;nowiki&amp;gt;Vallee, G., Naughton, T., and Scott, S. L. 2007. System management software for virtual environments. In Proceedings of the 4th international Conference on Computing Frontiers (Ischia, Italy, May 07 - 09, 2007). CF &#039;07. ACM, New York, NY, 153-160. DOI= http://doi.acm.org/10.1145/1242531.1242555 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[7]&amp;lt;nowiki&amp;gt;Liedtke, J. 1995. On micro-kernel construction. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 237-250. DOI= http://doi.acm.org/10.1145/224056.224075 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2715</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2715"/>
		<updated>2010-10-09T21:35:36Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* Virtual Machine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
System Level Virtualization&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; VMM &#039;&#039;&#039;&lt;br /&gt;
* stands for Virtual Machine Monitor, also known as the hypervisor[4]&lt;br /&gt;
* responsible for virtualization of hardware(mapping physical to virtual) and the VM that run on top of the virtualized hardware [4]&lt;br /&gt;
* usualy a small os with no drivers , so it is coupled with a linux distro that provides device / hardware acces [4]&lt;br /&gt;
** the os that the VMM is using for driver&#039;s is called the hostOS [6]&lt;br /&gt;
*the hostOS provide&#039;s login and physical acces to the hardware as well as managment for the VMM [6]&lt;br /&gt;
&#039;&#039;&#039; VM &#039;&#039;&#039;&lt;br /&gt;
* the OS that the vm is running is called the guestOS [6]&lt;br /&gt;
* the guestOS only see&#039;s resources that have been allocated to the VM [6]&lt;br /&gt;
&#039;&#039;&#039; three approaches &#039;&#039;&#039;&lt;br /&gt;
*Type I virtualization [5]&lt;br /&gt;
** run&#039;s off the physical hardware [4]&lt;br /&gt;
** Isolation of the guestOs from the hardware is done threw processe level protection meachnism[6]&lt;br /&gt;
*** ring 0 = VMM [6]&lt;br /&gt;
*** ring 1 = VM [6]&lt;br /&gt;
*** this mean&#039;s all instructions from the VM must go threw the VMM [6]&lt;br /&gt;
** since there can be multiple VM&#039;s on a computer the schedualing is done by the VMM [6]&lt;br /&gt;
** on boot the VMM create&#039;s a hardware platform for the VM [6]&lt;br /&gt;
** load&#039;s the VM kernel into virtual memory and then boot&#039;s it like a regular computer [6]&lt;br /&gt;
** ex. Xen [4]&lt;br /&gt;
*Type II virtualization [5]&lt;br /&gt;
** run off the host Os [4]&lt;br /&gt;
** ex. VMware , QEMU [4]&lt;br /&gt;
* Para-virtualization [6]&lt;br /&gt;
** Similar to Type but use the HostOs for Device driver acces [6]&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Microkernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
* multiplex resources securly providing protection to mutualy distrustfull application threw the use of secure binding&#039;s&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel seperates protection from managment in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking acces to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the numbrt of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad pramater passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is desgined to interact with a low-level machine independant level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to creat low level primatives that the hardware resources can be accesse from, this allso includes interrupt&#039;s,exceptions [1]&lt;br /&gt;
** the exokernel also export priviledged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource managment except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource managment is the best way to build fexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
** Use physical name&#039;s when ever possible[3] (not to shure what physical names are, i think it is as simple as what the hardware is called)--[[User:Asoknack|Asoknack]] 20:27, 9 October 2010 (UTC)&lt;br /&gt;
** Physical names capture usefull information [3]&lt;br /&gt;
*** safer than and less resource intesive than vitual names as no translations are needed[3]&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource managment [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release[1](Visible means that when revocation happen&#039;s the exokernel tell the LibOS that resource is being revoked)&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competeing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achived threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allow&#039;s the seperation of protection and resource use [1]&lt;br /&gt;
* only checks authorization durning bind time [1]&lt;br /&gt;
** Application&#039;s with complex need&#039;s for resources only authorized durining bind.[1]&lt;br /&gt;
* acces checking is done during acces time and there is no need to understand complex accese need&#039;s during acces[1]&lt;br /&gt;
** (this mean&#039;s that the exokernel check&#039;s once to make shure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** alow&#039;s the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve preformance[1]&lt;br /&gt;
** eleminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be schedualed [2]&lt;br /&gt;
==== Visible Resource Revocation ====&lt;br /&gt;
* Used for most resources [1]&lt;br /&gt;
** allow&#039;s for LibOS to help with deallocation [1]&lt;br /&gt;
** LibOS are able to garnner what resources are scare [1]&lt;br /&gt;
* Slower than Invisible as application involment is required [1]&lt;br /&gt;
** ex of when invisible is used is Processor addressing-context identifiers [1]&lt;br /&gt;
==== Abort Protocol ====&lt;br /&gt;
* allow&#039;s the exokernel to take resources away from the LibOS [1]&lt;br /&gt;
* used when the LibOS fail&#039;s to respond to the revocation request [1]&lt;br /&gt;
* Exokernel must be careful not to delete as the LibOS might need to write some system critical data to the resource [1]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., Kaashoek, M. F., and O&#039;Toole, J. 1995. Exokernel: an operating system architecture for application-level resource management. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 251-266. DOI= http://doi.acm.org/10.1145/224056.224076 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3]&amp;lt;nowiki&amp;gt;Kaashoek, M. F., Engler, D. R., Ganger, G. R., Briceño, H. M., Hunt, R., Mazières, D., Pinckney, T., Grimm, R., Jannotti, J., and Mackenzie, K. 1997. Application performance and flexibility on exokernel systems. In Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles  (Saint Malo, France, October 05 - 08, 1997). W. M. Waite, Ed. SOSP &#039;97. ACM, New York, NY, 52-65. DOI= http://doi.acm.org/10.1145/268998.266644 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4]&amp;lt;nowiki&amp;gt;Vallee, G.; Naughton, T.; Engelmann, C.; Hong Ong; Scott, S.L.; , &amp;quot;System-Level Virtualization for High Performance Computing,&amp;quot; Parallel, Distributed and Network-Based Processing, 2008. PDP 2008. 16th Euromicro Conference on , vol., no., pp.636-643, 13-15 Feb. 2008&lt;br /&gt;
DOI= http://doi.acm.org/10.1109/PDP.2008.85 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5]&amp;lt;nowiki&amp;gt;Goldberg, R. P. 1973. Architecture of virtual machines. In Proceedings of the Workshop on Virtual Computer Systems  (Cambridge, Massachusetts, United States, March 26 - 27, 1973). ACM, New York, NY, 74-112. DOI= http://doi.acm.org/10.1145/800122.803950 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6]&amp;lt;nowiki&amp;gt;Vallee, G., Naughton, T., and Scott, S. L. 2007. System management software for virtual environments. In Proceedings of the 4th international Conference on Computing Frontiers (Ischia, Italy, May 07 - 09, 2007). CF &#039;07. ACM, New York, NY, 153-160. DOI= http://doi.acm.org/10.1145/1242531.1242555 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2713</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2713"/>
		<updated>2010-10-09T21:28:03Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* Virtual Machine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
System Level Virtualization&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; VMM &#039;&#039;&#039;&lt;br /&gt;
* stands for Virtual Machine Monitor, also known as the hypervisor[4]&lt;br /&gt;
* responsible for virtualization of hardware(mapping physical to virtual) and the VM that run on top of the virtualized hardware [4]&lt;br /&gt;
* usualy a small os with no drivers , so it is coupled with a linux distro that provides device / hardware acces [4]&lt;br /&gt;
** the os that the VMM is using for driver&#039;s is called the hostOS [6]&lt;br /&gt;
*the hostOS provide&#039;s login and physical acces to the hardware as well as managment for the VMM [6]&lt;br /&gt;
&#039;&#039;&#039; VM &#039;&#039;&#039;&lt;br /&gt;
* the OS that the vm is running is called the guestOS [6]&lt;br /&gt;
* the guestOS only see&#039;s resources that have been allocated to the VM [6]&lt;br /&gt;
&#039;&#039;&#039; three approaches &#039;&#039;&#039;&lt;br /&gt;
*Type I virtualization [5]&lt;br /&gt;
** run&#039;s off the physical hardware [4]&lt;br /&gt;
** Isolation of the guestOs from the hardware is done threw processe level protection meachnism[6]&lt;br /&gt;
*** ring 0 = VMM [6]&lt;br /&gt;
*** ring 1 = VM [6]&lt;br /&gt;
*** this mean&#039;s all instructions from the VM must go threw the VMM [6]&lt;br /&gt;
** ex. Xen [4]&lt;br /&gt;
*Type II virtualization [5]&lt;br /&gt;
** run off the host Os [4]&lt;br /&gt;
** ex. VMware , QEMU [4]&lt;br /&gt;
* Para-virtualization [6]&lt;br /&gt;
** Similar to Type but use the HostOs for Device driver acces [6]&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Microkernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
* multiplex resources securly providing protection to mutualy distrustfull application threw the use of secure binding&#039;s&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel seperates protection from managment in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking acces to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the numbrt of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad pramater passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is desgined to interact with a low-level machine independant level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to creat low level primatives that the hardware resources can be accesse from, this allso includes interrupt&#039;s,exceptions [1]&lt;br /&gt;
** the exokernel also export priviledged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource managment except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource managment is the best way to build fexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
** Use physical name&#039;s when ever possible[3] (not to shure what physical names are, i think it is as simple as what the hardware is called)--[[User:Asoknack|Asoknack]] 20:27, 9 October 2010 (UTC)&lt;br /&gt;
** Physical names capture usefull information [3]&lt;br /&gt;
*** safer than and less resource intesive than vitual names as no translations are needed[3]&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource managment [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release[1](Visible means that when revocation happen&#039;s the exokernel tell the LibOS that resource is being revoked)&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competeing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achived threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allow&#039;s the seperation of protection and resource use [1]&lt;br /&gt;
* only checks authorization durning bind time [1]&lt;br /&gt;
** Application&#039;s with complex need&#039;s for resources only authorized durining bind.[1]&lt;br /&gt;
* acces checking is done during acces time and there is no need to understand complex accese need&#039;s during acces[1]&lt;br /&gt;
** (this mean&#039;s that the exokernel check&#039;s once to make shure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** alow&#039;s the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve preformance[1]&lt;br /&gt;
** eleminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be schedualed [2]&lt;br /&gt;
==== Visible Resource Revocation ====&lt;br /&gt;
* Used for most resources [1]&lt;br /&gt;
** allow&#039;s for LibOS to help with deallocation [1]&lt;br /&gt;
** LibOS are able to garnner what resources are scare [1]&lt;br /&gt;
* Slower than Invisible as application involment is required [1]&lt;br /&gt;
** ex of when invisible is used is Processor addressing-context identifiers [1]&lt;br /&gt;
==== Abort Protocol ====&lt;br /&gt;
* allow&#039;s the exokernel to take resources away from the LibOS [1]&lt;br /&gt;
* used when the LibOS fail&#039;s to respond to the revocation request [1]&lt;br /&gt;
* Exokernel must be careful not to delete as the LibOS might need to write some system critical data to the resource [1]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., Kaashoek, M. F., and O&#039;Toole, J. 1995. Exokernel: an operating system architecture for application-level resource management. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 251-266. DOI= http://doi.acm.org/10.1145/224056.224076 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3]&amp;lt;nowiki&amp;gt;Kaashoek, M. F., Engler, D. R., Ganger, G. R., Briceño, H. M., Hunt, R., Mazières, D., Pinckney, T., Grimm, R., Jannotti, J., and Mackenzie, K. 1997. Application performance and flexibility on exokernel systems. In Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles  (Saint Malo, France, October 05 - 08, 1997). W. M. Waite, Ed. SOSP &#039;97. ACM, New York, NY, 52-65. DOI= http://doi.acm.org/10.1145/268998.266644 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4]&amp;lt;nowiki&amp;gt;Vallee, G.; Naughton, T.; Engelmann, C.; Hong Ong; Scott, S.L.; , &amp;quot;System-Level Virtualization for High Performance Computing,&amp;quot; Parallel, Distributed and Network-Based Processing, 2008. PDP 2008. 16th Euromicro Conference on , vol., no., pp.636-643, 13-15 Feb. 2008&lt;br /&gt;
DOI= http://doi.acm.org/10.1109/PDP.2008.85 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5]&amp;lt;nowiki&amp;gt;Goldberg, R. P. 1973. Architecture of virtual machines. In Proceedings of the Workshop on Virtual Computer Systems  (Cambridge, Massachusetts, United States, March 26 - 27, 1973). ACM, New York, NY, 74-112. DOI= http://doi.acm.org/10.1145/800122.803950 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6]&amp;lt;nowiki&amp;gt;Vallee, G., Naughton, T., and Scott, S. L. 2007. System management software for virtual environments. In Proceedings of the 4th international Conference on Computing Frontiers (Ischia, Italy, May 07 - 09, 2007). CF &#039;07. ACM, New York, NY, 153-160. DOI= http://doi.acm.org/10.1145/1242531.1242555 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2712</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2712"/>
		<updated>2010-10-09T21:07:42Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
System Level Virtualization&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; VMM &#039;&#039;&#039;&lt;br /&gt;
* stands for Virtual Machine Monitor, also known as the hypervisor[4]&lt;br /&gt;
* responsible for virtualization of hardware(mapping physical to virtual) and the VM that run on top of the virtualized hardware [4]&lt;br /&gt;
* usualy a small os with no drivers , so it is coupled with a linux distro that provides device / hardware acces [4]&lt;br /&gt;
&#039;&#039;&#039; VM &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*two approaches&lt;br /&gt;
*Type I virtualization&lt;br /&gt;
** run&#039;s off the physical hardware [4]&lt;br /&gt;
** Xen [4]&lt;br /&gt;
*Type II virtualization&lt;br /&gt;
** run off the host Os [4]&lt;br /&gt;
** VMware , QEMU [4]&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Microkernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
* multiplex resources securly providing protection to mutualy distrustfull application threw the use of secure binding&#039;s&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel seperates protection from managment in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking acces to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the numbrt of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad pramater passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is desgined to interact with a low-level machine independant level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to creat low level primatives that the hardware resources can be accesse from, this allso includes interrupt&#039;s,exceptions [1]&lt;br /&gt;
** the exokernel also export priviledged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource managment except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource managment is the best way to build fexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
** Use physical name&#039;s when ever possible[3] (not to shure what physical names are, i think it is as simple as what the hardware is called)--[[User:Asoknack|Asoknack]] 20:27, 9 October 2010 (UTC)&lt;br /&gt;
** Physical names capture usefull information [3]&lt;br /&gt;
*** safer than and less resource intesive than vitual names as no translations are needed[3]&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource managment [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release[1](Visible means that when revocation happen&#039;s the exokernel tell the LibOS that resource is being revoked)&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competeing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achived threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allow&#039;s the seperation of protection and resource use [1]&lt;br /&gt;
* only checks authorization durning bind time [1]&lt;br /&gt;
** Application&#039;s with complex need&#039;s for resources only authorized durining bind.[1]&lt;br /&gt;
* acces checking is done during acces time and there is no need to understand complex accese need&#039;s during acces[1]&lt;br /&gt;
** (this mean&#039;s that the exokernel check&#039;s once to make shure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** alow&#039;s the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve preformance[1]&lt;br /&gt;
** eleminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be schedualed [2]&lt;br /&gt;
==== Visible Resource Revocation ====&lt;br /&gt;
* Used for most resources [1]&lt;br /&gt;
** allow&#039;s for LibOS to help with deallocation [1]&lt;br /&gt;
** LibOS are able to garnner what resources are scare [1]&lt;br /&gt;
* Slower than Invisible as application involment is required [1]&lt;br /&gt;
** ex of when invisible is used is Processor addressing-context identifiers [1]&lt;br /&gt;
==== Abort Protocol ====&lt;br /&gt;
* allow&#039;s the exokernel to take resources away from the LibOS [1]&lt;br /&gt;
* used when the LibOS fail&#039;s to respond to the revocation request [1]&lt;br /&gt;
* Exokernel must be careful not to delete as the LibOS might need to write some system critical data to the resource [1]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., Kaashoek, M. F., and O&#039;Toole, J. 1995. Exokernel: an operating system architecture for application-level resource management. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 251-266. DOI= http://doi.acm.org/10.1145/224056.224076 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3]&amp;lt;nowiki&amp;gt;Kaashoek, M. F., Engler, D. R., Ganger, G. R., Briceño, H. M., Hunt, R., Mazières, D., Pinckney, T., Grimm, R., Jannotti, J., and Mackenzie, K. 1997. Application performance and flexibility on exokernel systems. In Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles  (Saint Malo, France, October 05 - 08, 1997). W. M. Waite, Ed. SOSP &#039;97. ACM, New York, NY, 52-65. DOI= http://doi.acm.org/10.1145/268998.266644 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4]&amp;lt;nowiki&amp;gt;Vallee, G.; Naughton, T.; Engelmann, C.; Hong Ong; Scott, S.L.; , &amp;quot;System-Level Virtualization for High Performance Computing,&amp;quot; Parallel, Distributed and Network-Based Processing, 2008. PDP 2008. 16th Euromicro Conference on , vol., no., pp.636-643, 13-15 Feb. 2008&lt;br /&gt;
DOI= http://doi.acm.org/10.1109/PDP.2008.85 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5]&amp;lt;nowiki&amp;gt;Goldberg, R. P. 1973. Architecture of virtual machines. In Proceedings of the Workshop on Virtual Computer Systems  (Cambridge, Massachusetts, United States, March 26 - 27, 1973). ACM, New York, NY, 74-112. DOI= http://doi.acm.org/10.1145/800122.803950 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[6]&amp;lt;nowiki&amp;gt;Vallee, G., Naughton, T., and Scott, S. L. 2007. System management software for virtual environments. In Proceedings of the 4th international Conference on Computing Frontiers (Ischia, Italy, May 07 - 09, 2007). CF &#039;07. ACM, New York, NY, 153-160. DOI= http://doi.acm.org/10.1145/1242531.1242555 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2710</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2710"/>
		<updated>2010-10-09T21:06:38Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* Virtual Machine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
System Level Virtualization&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; VMM &#039;&#039;&#039;&lt;br /&gt;
* stands for Virtual Machine Monitor, also known as the hypervisor[4]&lt;br /&gt;
* responsible for virtualization of hardware(mapping physical to virtual) and the VM that run on top of the virtualized hardware [4]&lt;br /&gt;
* usualy a small os with no drivers , so it is coupled with a linux distro that provides device / hardware acces [4]&lt;br /&gt;
&#039;&#039;&#039; VM &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*two approaches&lt;br /&gt;
*Type I virtualization&lt;br /&gt;
** run&#039;s off the physical hardware [4]&lt;br /&gt;
** Xen [4]&lt;br /&gt;
*Type II virtualization&lt;br /&gt;
** run off the host Os [4]&lt;br /&gt;
** VMware , QEMU [4]&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Microkernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
* multiplex resources securly providing protection to mutualy distrustfull application threw the use of secure binding&#039;s&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel seperates protection from managment in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking acces to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the numbrt of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad pramater passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is desgined to interact with a low-level machine independant level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to creat low level primatives that the hardware resources can be accesse from, this allso includes interrupt&#039;s,exceptions [1]&lt;br /&gt;
** the exokernel also export priviledged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource managment except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource managment is the best way to build fexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
** Use physical name&#039;s when ever possible[3] (not to shure what physical names are, i think it is as simple as what the hardware is called)--[[User:Asoknack|Asoknack]] 20:27, 9 October 2010 (UTC)&lt;br /&gt;
** Physical names capture usefull information [3]&lt;br /&gt;
*** safer than and less resource intesive than vitual names as no translations are needed[3]&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource managment [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release[1](Visible means that when revocation happen&#039;s the exokernel tell the LibOS that resource is being revoked)&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competeing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achived threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allow&#039;s the seperation of protection and resource use [1]&lt;br /&gt;
* only checks authorization durning bind time [1]&lt;br /&gt;
** Application&#039;s with complex need&#039;s for resources only authorized durining bind.[1]&lt;br /&gt;
* acces checking is done during acces time and there is no need to understand complex accese need&#039;s during acces[1]&lt;br /&gt;
** (this mean&#039;s that the exokernel check&#039;s once to make shure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** alow&#039;s the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve preformance[1]&lt;br /&gt;
** eleminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be schedualed [2]&lt;br /&gt;
==== Visible Resource Revocation ====&lt;br /&gt;
* Used for most resources [1]&lt;br /&gt;
** allow&#039;s for LibOS to help with deallocation [1]&lt;br /&gt;
** LibOS are able to garnner what resources are scare [1]&lt;br /&gt;
* Slower than Invisible as application involment is required [1]&lt;br /&gt;
** ex of when invisible is used is Processor addressing-context identifiers [1]&lt;br /&gt;
==== Abort Protocol ====&lt;br /&gt;
* allow&#039;s the exokernel to take resources away from the LibOS [1]&lt;br /&gt;
* used when the LibOS fail&#039;s to respond to the revocation request [1]&lt;br /&gt;
* Exokernel must be careful not to delete as the LibOS might need to write some system critical data to the resource [1]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., Kaashoek, M. F., and O&#039;Toole, J. 1995. Exokernel: an operating system architecture for application-level resource management. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 251-266. DOI= http://doi.acm.org/10.1145/224056.224076 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3]&amp;lt;nowiki&amp;gt;Kaashoek, M. F., Engler, D. R., Ganger, G. R., Briceño, H. M., Hunt, R., Mazières, D., Pinckney, T., Grimm, R., Jannotti, J., and Mackenzie, K. 1997. Application performance and flexibility on exokernel systems. In Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles  (Saint Malo, France, October 05 - 08, 1997). W. M. Waite, Ed. SOSP &#039;97. ACM, New York, NY, 52-65. DOI= http://doi.acm.org/10.1145/268998.266644 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4]&amp;lt;nowiki&amp;gt;Vallee, G.; Naughton, T.; Engelmann, C.; Hong Ong; Scott, S.L.; , &amp;quot;System-Level Virtualization for High Performance Computing,&amp;quot; Parallel, Distributed and Network-Based Processing, 2008. PDP 2008. 16th Euromicro Conference on , vol., no., pp.636-643, 13-15 Feb. 2008&lt;br /&gt;
DOI= http://doi.acm.org/10.1109/PDP.2008.85 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5]&amp;lt;nowiki&amp;gt;Goldberg, R. P. 1973. Architecture of virtual machines. In Proceedings of the Workshop on Virtual Computer Systems  (Cambridge, Massachusetts, United States, March 26 - 27, 1973). ACM, New York, NY, 74-112. DOI= http://doi.acm.org/10.1145/800122.803950 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2707</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2707"/>
		<updated>2010-10-09T20:56:53Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
System Level Virtualization&lt;br /&gt;
&#039;&#039;&#039; VMM &#039;&#039;&#039;&lt;br /&gt;
* stands for Virtual Machine Monitor, also known as the hypervisor[4]&lt;br /&gt;
* responsible for virtualization of hardware and the VM that run on top of the virtualized hardware [4]&lt;br /&gt;
* usualy a small os with no drivers , so it is coupled with a linux distro that provides device / hardware acces [4]&lt;br /&gt;
&#039;&#039;&#039; VM &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*two approaches&lt;br /&gt;
*Type I virtualization&lt;br /&gt;
** run&#039;s off the physical hardware [4]&lt;br /&gt;
** Xen [4]&lt;br /&gt;
*Type II virtualization&lt;br /&gt;
** run off the host Os [4]&lt;br /&gt;
** VMware , QEMU [4]&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Microkernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
* multiplex resources securly providing protection to mutualy distrustfull application threw the use of secure binding&#039;s&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel seperates protection from managment in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking acces to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the numbrt of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad pramater passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is desgined to interact with a low-level machine independant level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to creat low level primatives that the hardware resources can be accesse from, this allso includes interrupt&#039;s,exceptions [1]&lt;br /&gt;
** the exokernel also export priviledged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource managment except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource managment is the best way to build fexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
** Use physical name&#039;s when ever possible[3] (not to shure what physical names are, i think it is as simple as what the hardware is called)--[[User:Asoknack|Asoknack]] 20:27, 9 October 2010 (UTC)&lt;br /&gt;
** Physical names capture usefull information [3]&lt;br /&gt;
*** safer than and less resource intesive than vitual names as no translations are needed[3]&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource managment [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release[1](Visible means that when revocation happen&#039;s the exokernel tell the LibOS that resource is being revoked)&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competeing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achived threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allow&#039;s the seperation of protection and resource use [1]&lt;br /&gt;
* only checks authorization durning bind time [1]&lt;br /&gt;
** Application&#039;s with complex need&#039;s for resources only authorized durining bind.[1]&lt;br /&gt;
* acces checking is done during acces time and there is no need to understand complex accese need&#039;s during acces[1]&lt;br /&gt;
** (this mean&#039;s that the exokernel check&#039;s once to make shure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** alow&#039;s the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve preformance[1]&lt;br /&gt;
** eleminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be schedualed [2]&lt;br /&gt;
==== Visible Resource Revocation ====&lt;br /&gt;
* Used for most resources [1]&lt;br /&gt;
** allow&#039;s for LibOS to help with deallocation [1]&lt;br /&gt;
** LibOS are able to garnner what resources are scare [1]&lt;br /&gt;
* Slower than Invisible as application involment is required [1]&lt;br /&gt;
** ex of when invisible is used is Processor addressing-context identifiers [1]&lt;br /&gt;
==== Abort Protocol ====&lt;br /&gt;
* allow&#039;s the exokernel to take resources away from the LibOS [1]&lt;br /&gt;
* used when the LibOS fail&#039;s to respond to the revocation request [1]&lt;br /&gt;
* Exokernel must be careful not to delete as the LibOS might need to write some system critical data to the resource [1]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., Kaashoek, M. F., and O&#039;Toole, J. 1995. Exokernel: an operating system architecture for application-level resource management. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 251-266. DOI= http://doi.acm.org/10.1145/224056.224076 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3]&amp;lt;nowiki&amp;gt;Kaashoek, M. F., Engler, D. R., Ganger, G. R., Briceño, H. M., Hunt, R., Mazières, D., Pinckney, T., Grimm, R., Jannotti, J., and Mackenzie, K. 1997. Application performance and flexibility on exokernel systems. In Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles  (Saint Malo, France, October 05 - 08, 1997). W. M. Waite, Ed. SOSP &#039;97. ACM, New York, NY, 52-65. DOI= http://doi.acm.org/10.1145/268998.266644 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4]&amp;lt;nowiki&amp;gt;Vallee, G.; Naughton, T.; Engelmann, C.; Hong Ong; Scott, S.L.; , &amp;quot;System-Level Virtualization for High Performance Computing,&amp;quot; Parallel, Distributed and Network-Based Processing, 2008. PDP 2008. 16th Euromicro Conference on , vol., no., pp.636-643, 13-15 Feb. 2008&lt;br /&gt;
DOI= http://doi.acm.org/10.1109/PDP.2008.85 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[5]&amp;lt;nowiki&amp;gt;Goldberg, R. P. 1973. Architecture of virtual machines. In Proceedings of the Workshop on Virtual Computer Systems  (Cambridge, Massachusetts, United States, March 26 - 27, 1973). ACM, New York, NY, 74-112. DOI= http://doi.acm.org/10.1145/800122.803950 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2706</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2706"/>
		<updated>2010-10-09T20:56:18Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* Virtual Machine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
System Level Virtualization&lt;br /&gt;
&#039;&#039;&#039; VMM &#039;&#039;&#039;&lt;br /&gt;
* stands for Virtual Machine Monitor, also known as the hypervisor[4]&lt;br /&gt;
* responsible for virtualization of hardware and the VM that run on top of the virtualized hardware [4]&lt;br /&gt;
* usualy a small os with no drivers , so it is coupled with a linux distro that provides device / hardware acces [4]&lt;br /&gt;
&#039;&#039;&#039; VM &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*two approaches&lt;br /&gt;
*Type I virtualization&lt;br /&gt;
** run&#039;s off the physical hardware [4]&lt;br /&gt;
** Xen [4]&lt;br /&gt;
*Type II virtualization&lt;br /&gt;
** run off the host Os [4]&lt;br /&gt;
** VMware , QEMU [4]&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Microkernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
* multiplex resources securly providing protection to mutualy distrustfull application threw the use of secure binding&#039;s&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel seperates protection from managment in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking acces to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the numbrt of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad pramater passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is desgined to interact with a low-level machine independant level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to creat low level primatives that the hardware resources can be accesse from, this allso includes interrupt&#039;s,exceptions [1]&lt;br /&gt;
** the exokernel also export priviledged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource managment except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource managment is the best way to build fexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
** Use physical name&#039;s when ever possible[3] (not to shure what physical names are, i think it is as simple as what the hardware is called)--[[User:Asoknack|Asoknack]] 20:27, 9 October 2010 (UTC)&lt;br /&gt;
** Physical names capture usefull information [3]&lt;br /&gt;
*** safer than and less resource intesive than vitual names as no translations are needed[3]&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource managment [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release[1](Visible means that when revocation happen&#039;s the exokernel tell the LibOS that resource is being revoked)&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competeing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achived threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allow&#039;s the seperation of protection and resource use [1]&lt;br /&gt;
* only checks authorization durning bind time [1]&lt;br /&gt;
** Application&#039;s with complex need&#039;s for resources only authorized durining bind.[1]&lt;br /&gt;
* acces checking is done during acces time and there is no need to understand complex accese need&#039;s during acces[1]&lt;br /&gt;
** (this mean&#039;s that the exokernel check&#039;s once to make shure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** alow&#039;s the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve preformance[1]&lt;br /&gt;
** eleminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be schedualed [2]&lt;br /&gt;
==== Visible Resource Revocation ====&lt;br /&gt;
* Used for most resources [1]&lt;br /&gt;
** allow&#039;s for LibOS to help with deallocation [1]&lt;br /&gt;
** LibOS are able to garnner what resources are scare [1]&lt;br /&gt;
* Slower than Invisible as application involment is required [1]&lt;br /&gt;
** ex of when invisible is used is Processor addressing-context identifiers [1]&lt;br /&gt;
==== Abort Protocol ====&lt;br /&gt;
* allow&#039;s the exokernel to take resources away from the LibOS [1]&lt;br /&gt;
* used when the LibOS fail&#039;s to respond to the revocation request [1]&lt;br /&gt;
* Exokernel must be careful not to delete as the LibOS might need to write some system critical data to the resource [1]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., Kaashoek, M. F., and O&#039;Toole, J. 1995. Exokernel: an operating system architecture for application-level resource management. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 251-266. DOI= http://doi.acm.org/10.1145/224056.224076 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3]&amp;lt;nowiki&amp;gt;Kaashoek, M. F., Engler, D. R., Ganger, G. R., Briceño, H. M., Hunt, R., Mazières, D., Pinckney, T., Grimm, R., Jannotti, J., and Mackenzie, K. 1997. Application performance and flexibility on exokernel systems. In Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles  (Saint Malo, France, October 05 - 08, 1997). W. M. Waite, Ed. SOSP &#039;97. ACM, New York, NY, 52-65. DOI= http://doi.acm.org/10.1145/268998.266644 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4]&amp;lt;nowiki&amp;gt;Vallee, G.; Naughton, T.; Engelmann, C.; Hong Ong; Scott, S.L.; , &amp;quot;System-Level Virtualization for High Performance Computing,&amp;quot; Parallel, Distributed and Network-Based Processing, 2008. PDP 2008. 16th Euromicro Conference on , vol., no., pp.636-643, 13-15 Feb. 2008&lt;br /&gt;
DOI= http://doi.acm.org/10.1109/PDP.2008.85 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2705</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2705"/>
		<updated>2010-10-09T20:38:13Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* Exokernel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Microkernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
* multiplex resources securly providing protection to mutualy distrustfull application threw the use of secure binding&#039;s&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel seperates protection from managment in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking acces to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the numbrt of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad pramater passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is desgined to interact with a low-level machine independant level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to creat low level primatives that the hardware resources can be accesse from, this allso includes interrupt&#039;s,exceptions [1]&lt;br /&gt;
** the exokernel also export priviledged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource managment except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource managment is the best way to build fexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
** Use physical name&#039;s when ever possible[3] (not to shure what physical names are, i think it is as simple as what the hardware is called)--[[User:Asoknack|Asoknack]] 20:27, 9 October 2010 (UTC)&lt;br /&gt;
** Physical names capture usefull information [3]&lt;br /&gt;
*** safer than and less resource intesive than vitual names as no translations are needed[3]&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource managment [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release[1](Visible means that when revocation happen&#039;s the exokernel tell the LibOS that resource is being revoked)&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competeing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achived threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allow&#039;s the seperation of protection and resource use [1]&lt;br /&gt;
* only checks authorization durning bind time [1]&lt;br /&gt;
** Application&#039;s with complex need&#039;s for resources only authorized durining bind.[1]&lt;br /&gt;
* acces checking is done during acces time and there is no need to understand complex accese need&#039;s during acces[1]&lt;br /&gt;
** (this mean&#039;s that the exokernel check&#039;s once to make shure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** alow&#039;s the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve preformance[1]&lt;br /&gt;
** eleminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be schedualed [2]&lt;br /&gt;
==== Visible Resource Revocation ====&lt;br /&gt;
* Used for most resources [1]&lt;br /&gt;
** allow&#039;s for LibOS to help with deallocation [1]&lt;br /&gt;
** LibOS are able to garnner what resources are scare [1]&lt;br /&gt;
* Slower than Invisible as application involment is required [1]&lt;br /&gt;
** ex of when invisible is used is Processor addressing-context identifiers [1]&lt;br /&gt;
==== Abort Protocol ====&lt;br /&gt;
* allow&#039;s the exokernel to take resources away from the LibOS [1]&lt;br /&gt;
* used when the LibOS fail&#039;s to respond to the revocation request [1]&lt;br /&gt;
* Exokernel must be careful not to delete as the LibOS might need to write some system critical data to the resource [1]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., Kaashoek, M. F., and O&#039;Toole, J. 1995. Exokernel: an operating system architecture for application-level resource management. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 251-266. DOI= http://doi.acm.org/10.1145/224056.224076 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3]&amp;lt;nowiki&amp;gt;Kaashoek, M. F., Engler, D. R., Ganger, G. R., Briceño, H. M., Hunt, R., Mazières, D., Pinckney, T., Grimm, R., Jannotti, J., and Mackenzie, K. 1997. Application performance and flexibility on exokernel systems. In Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles  (Saint Malo, France, October 05 - 08, 1997). W. M. Waite, Ed. SOSP &#039;97. ACM, New York, NY, 52-65. DOI= http://doi.acm.org/10.1145/268998.266644 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4]&amp;lt;nowiki&amp;gt;Vallee, G.; Naughton, T.; Engelmann, C.; Hong Ong; Scott, S.L.; , &amp;quot;System-Level Virtualization for High Performance Computing,&amp;quot; Parallel, Distributed and Network-Based Processing, 2008. PDP 2008. 16th Euromicro Conference on , vol., no., pp.636-643, 13-15 Feb. 2008&lt;br /&gt;
DOI= http://doi.acm.org/10.1109/PDP.2008.85 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2704</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2704"/>
		<updated>2010-10-09T20:36:29Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Microkernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
* multiplex resources securly providing protection to mutualy distrustfull application threw the use of secure binding&#039;s&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel seperates protection from managment in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking acces to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the numbrt of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad pramater passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is desgined to interact with a low-level machine independant level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to creat low level primatives that the hardware resources can be accesse from, this allso includes interrupt&#039;s,exceptions [1]&lt;br /&gt;
** the exokernel also export priviledged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource managment except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource managment is the best way to build fexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
** Use physical name&#039;s when ever possible[3] (not to shure what physical names are, i think it is as simple as what the hardware is called)--[[User:Asoknack|Asoknack]] 20:27, 9 October 2010 (UTC)&lt;br /&gt;
** Physical names capture usefull information [3]&lt;br /&gt;
*** safer than and less resource intesive than vitual names as no translations are needed[3]&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource managment [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release[1](Visible means that when revocation happen&#039;s the exokernel tell the LibOS that resource is being revoked)&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competeing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achived threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allow&#039;s the seperation of protection and resource use [1]&lt;br /&gt;
* only checks authorization durning bind time [1]&lt;br /&gt;
** Application&#039;s with complex need&#039;s for resources only authorized durining bind.[1]&lt;br /&gt;
* acces checking is done during acces time and there is no need to understand complex accese need&#039;s during acces[1]&lt;br /&gt;
** (this mean&#039;s that the exokernel check&#039;s once to make shure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** alow&#039;s the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve preformance[1]&lt;br /&gt;
** eleminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be schedualed [2]&lt;br /&gt;
==== Visible Resource Revocation ====&lt;br /&gt;
* Used for most resources [1]&lt;br /&gt;
** allow&#039;s for LibOS to help with deallocation [1]&lt;br /&gt;
** LibOS are able to garnner what resources are scare [1]&lt;br /&gt;
* Slower than Invisible as application involment is required [1]&lt;br /&gt;
** ex of when invisible is used is Processor addressing-context identifiers [1]&lt;br /&gt;
==== Abort Protocol ====&lt;br /&gt;
* allow&#039;s the exokernel to take resources away from the LibOS [1]&lt;br /&gt;
* used when the LibOS fail&#039;s to respond to the revocation request [1]&lt;br /&gt;
* Exokernel must be careful not to delete as the LibOS might need to write some system critical data to the resource [1]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., Kaashoek, M. F., and O&#039;Toole, J. 1995. Exokernel: an operating system architecture for application-level resource management. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 251-266. DOI= http://doi.acm.org/10.1145/224056.224076 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3]&amp;lt;nowiki&amp;gt;Kaashoek, M. F., Engler, D. R., Ganger, G. R., Briceño, H. M., Hunt, R., Mazières, D., Pinckney, T., Grimm, R., Jannotti, J., and Mackenzie, K. 1997. Application performance and flexibility on exokernel systems. In Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles  (Saint Malo, France, October 05 - 08, 1997). W. M. Waite, Ed. SOSP &#039;97. ACM, New York, NY, 52-65. DOI= http://doi.acm.org/10.1145/268998.266644 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[4]&amp;lt;nowiki&amp;gt;Vallee, G.; Naughton, T.; Engelmann, C.; Hong Ong; Scott, S.L.; , &amp;quot;System-Level Virtualization for High Performance Computing,&amp;quot; Parallel, Distributed and Network-Based Processing, 2008. PDP 2008. 16th Euromicro Conference on , vol., no., pp.636-643, 13-15 Feb. 2008&lt;br /&gt;
DOI= http://doi.acm.org/10.1109/PDP.2008.85 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2703</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2703"/>
		<updated>2010-10-09T20:27:39Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* Exokernel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Microkernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
* multiplex resources securly providing protection to mutualy distrustfull application threw the use of secure binding&#039;s&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel seperates protection from managment in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking acces to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the numbrt of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad pramater passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is desgined to interact with a low-level machine independant level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to creat low level primatives that the hardware resources can be accesse from, this allso includes interrupt&#039;s,exceptions [1]&lt;br /&gt;
** the exokernel also export priviledged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource managment except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource managment is the best way to build fexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
** Use physical name&#039;s when ever possible[3] (not to shure what physical names are, i think it is as simple as what the hardware is called)--[[User:Asoknack|Asoknack]] 20:27, 9 October 2010 (UTC)&lt;br /&gt;
** Physical names capture usefull information [3]&lt;br /&gt;
*** safer than and less resource intesive than vitual names as no translations are needed[3]&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource managment [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release[1](Visible means that when revocation happen&#039;s the exokernel tell the LibOS that resource is being revoked)&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competeing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achived threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allow&#039;s the seperation of protection and resource use [1]&lt;br /&gt;
* only checks authorization durning bind time [1]&lt;br /&gt;
** Application&#039;s with complex need&#039;s for resources only authorized durining bind.[1]&lt;br /&gt;
* acces checking is done during acces time and there is no need to understand complex accese need&#039;s during acces[1]&lt;br /&gt;
** (this mean&#039;s that the exokernel check&#039;s once to make shure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** alow&#039;s the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve preformance[1]&lt;br /&gt;
** eleminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be schedualed [2]&lt;br /&gt;
==== Visible Resource Revocation ====&lt;br /&gt;
* Used for most resources [1]&lt;br /&gt;
** allow&#039;s for LibOS to help with deallocation [1]&lt;br /&gt;
** LibOS are able to garnner what resources are scare [1]&lt;br /&gt;
* Slower than Invisible as application involment is required [1]&lt;br /&gt;
** ex of when invisible is used is Processor addressing-context identifiers [1]&lt;br /&gt;
==== Abort Protocol ====&lt;br /&gt;
* allow&#039;s the exokernel to take resources away from the LibOS [1]&lt;br /&gt;
* used when the LibOS fail&#039;s to respond to the revocation request [1]&lt;br /&gt;
* Exokernel must be careful not to delete as the LibOS might need to write some system critical data to the resource [1]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., Kaashoek, M. F., and O&#039;Toole, J. 1995. Exokernel: an operating system architecture for application-level resource management. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 251-266. DOI= http://doi.acm.org/10.1145/224056.224076 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3]&amp;lt;nowiki&amp;gt;Kaashoek, M. F., Engler, D. R., Ganger, G. R., Briceño, H. M., Hunt, R., Mazières, D., Pinckney, T., Grimm, R., Jannotti, J., and Mackenzie, K. 1997. Application performance and flexibility on exokernel systems. In Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles  (Saint Malo, France, October 05 - 08, 1997). W. M. Waite, Ed. SOSP &#039;97. ACM, New York, NY, 52-65. DOI= http://doi.acm.org/10.1145/268998.266644 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2702</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2702"/>
		<updated>2010-10-09T20:18:03Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Microkernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
* multiplex resources securly providing protection to mutualy distrustfull application threw the use of secure binding&#039;s&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel seperates protection from managment in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking acces to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the numbrt of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad pramater passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is desgined to interact with a low-level machine independant level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to creat low level primatives that the hardware resources can be accesse from, this allso includes interrupt&#039;s,exceptions [1]&lt;br /&gt;
** the exokernel also export priviledged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource managment except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource managment is the best way to build fexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
An exokernel should export physical names.&lt;br /&gt;
Physical names are efficient, since they remove a level of indirection&lt;br /&gt;
otherwise required to translate between virtual and physical names.&lt;br /&gt;
Physical names also encode useful resource attributes. For example,&lt;br /&gt;
in a system with physically-indexed direct-mapped caches, the name&lt;br /&gt;
of a physical page (i. e., its page number) determines which pages&lt;br /&gt;
it conflicts with. Additionally, an exokemel should export bookkeeping&lt;br /&gt;
data structures such as freelists, disk arm positions, and&lt;br /&gt;
cached TLB entries so that applications can tailor their allocation&lt;br /&gt;
requests to available resources,&lt;br /&gt;
&amp;lt;/pre&amp;gt; (copy and pasted from [1]) any one under stand what this mean&#039;s ? --[[User:Asoknack|Asoknack]] 03:35, 9 October 2010 (UTC)&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource managment [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release[1](Visible means that when revocation happen&#039;s the exokernel tell the LibOS that resource is being revoked)&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competeing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achived threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allow&#039;s the seperation of protection and resource use [1]&lt;br /&gt;
* only checks authorization durning bind time [1]&lt;br /&gt;
** Application&#039;s with complex need&#039;s for resources only authorized durining bind.[1]&lt;br /&gt;
* acces checking is done during acces time and there is no need to understand complex accese need&#039;s during acces[1]&lt;br /&gt;
** (this mean&#039;s that the exokernel check&#039;s once to make shure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** alow&#039;s the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve preformance[1]&lt;br /&gt;
** eleminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be schedualed [2]&lt;br /&gt;
==== Visible Resource Revocation ====&lt;br /&gt;
* Used for most resources [1]&lt;br /&gt;
** allow&#039;s for LibOS to help with deallocation [1]&lt;br /&gt;
** LibOS are able to garnner what resources are scare [1]&lt;br /&gt;
* Slower than Invisible as application involment is required [1]&lt;br /&gt;
** ex of when invisible is used is Processor addressing-context identifiers [1]&lt;br /&gt;
==== Abort Protocol ====&lt;br /&gt;
* allow&#039;s the exokernel to take resources away from the LibOS [1]&lt;br /&gt;
* used when the LibOS fail&#039;s to respond to the revocation request [1]&lt;br /&gt;
* Exokernel must be careful not to delete as the LibOS might need to write some system critical data to the resource [1]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., Kaashoek, M. F., and O&#039;Toole, J. 1995. Exokernel: an operating system architecture for application-level resource management. In Proceedings of the Fifteenth ACM Symposium on Operating Systems Principles  (Copper Mountain, Colorado, United States, December 03 - 06, 1995). M. B. Jones, Ed. SOSP &#039;95. ACM, New York, NY, 251-266. DOI= http://doi.acm.org/10.1145/224056.224076 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3]&amp;lt;nowiki&amp;gt;Kaashoek, M. F., Engler, D. R., Ganger, G. R., Briceño, H. M., Hunt, R., Mazières, D., Pinckney, T., Grimm, R., Jannotti, J., and Mackenzie, K. 1997. Application performance and flexibility on exokernel systems. In Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles  (Saint Malo, France, October 05 - 08, 1997). W. M. Waite, Ed. SOSP &#039;97. ACM, New York, NY, 52-65. DOI= http://doi.acm.org/10.1145/268998.266644 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=User:Asoknack&amp;diff=2701</id>
		<title>User:Asoknack</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=User:Asoknack&amp;diff=2701"/>
		<updated>2010-10-09T20:09:51Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.120.4319&amp;amp;rep=rep1&amp;amp;type=pdf &amp;lt;br&amp;gt;&lt;br /&gt;
http://portal.acm.org/citation.cfm?id=219284 &amp;lt;br&amp;gt;&lt;br /&gt;
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf &amp;lt;br&amp;gt;&lt;br /&gt;
http://portal.acm.org/citation.cfm?id=224076 &amp;lt;br&amp;gt;&lt;br /&gt;
http://portal.acm.org/citation.cfm?id=268998.266644&amp;amp;coll=GUIDE&amp;amp;dl=GUIDE&amp;amp;CFID=104701711&amp;amp;CFTOKEN=65527198 &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2700</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2700"/>
		<updated>2010-10-09T20:08:21Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* Exokernel Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Microkernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
* multiplex resources securly providing protection to mutualy distrustfull application threw the use of secure binding&#039;s&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel seperates protection from managment in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking acces to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the numbrt of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad pramater passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is desgined to interact with a low-level machine independant level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to creat low level primatives that the hardware resources can be accesse from, this allso includes interrupt&#039;s,exceptions [1]&lt;br /&gt;
** the exokernel also export priviledged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource managment except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource managment is the best way to build fexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
An exokernel should export physical names.&lt;br /&gt;
Physical names are efficient, since they remove a level of indirection&lt;br /&gt;
otherwise required to translate between virtual and physical names.&lt;br /&gt;
Physical names also encode useful resource attributes. For example,&lt;br /&gt;
in a system with physically-indexed direct-mapped caches, the name&lt;br /&gt;
of a physical page (i. e., its page number) determines which pages&lt;br /&gt;
it conflicts with. Additionally, an exokemel should export bookkeeping&lt;br /&gt;
data structures such as freelists, disk arm positions, and&lt;br /&gt;
cached TLB entries so that applications can tailor their allocation&lt;br /&gt;
requests to available resources,&lt;br /&gt;
&amp;lt;/pre&amp;gt; (copy and pasted from [1]) any one under stand what this mean&#039;s ? --[[User:Asoknack|Asoknack]] 03:35, 9 October 2010 (UTC)&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource managment [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release[1](Visible means that when revocation happen&#039;s the exokernel tell the LibOS that resource is being revoked)&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competeing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achived threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allow&#039;s the seperation of protection and resource use [1]&lt;br /&gt;
* only checks authorization durning bind time [1]&lt;br /&gt;
** Application&#039;s with complex need&#039;s for resources only authorized durining bind.[1]&lt;br /&gt;
* acces checking is done during acces time and there is no need to understand complex accese need&#039;s during acces[1]&lt;br /&gt;
** (this mean&#039;s that the exokernel check&#039;s once to make shure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** alow&#039;s the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve preformance[1]&lt;br /&gt;
** eleminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be schedualed [2]&lt;br /&gt;
==== Visible Resource Revocation ====&lt;br /&gt;
* Used for most resources [1]&lt;br /&gt;
** allow&#039;s for LibOS to help with deallocation [1]&lt;br /&gt;
** LibOS are able to garnner what resources are scare [1]&lt;br /&gt;
* Slower than Invisible as application involment is required [1]&lt;br /&gt;
** ex of when invisible is used is Processor addressing-context identifiers [1]&lt;br /&gt;
==== Abort Protocol ====&lt;br /&gt;
* allow&#039;s the exokernel to take resources away from the LibOS [1]&lt;br /&gt;
* used when the LibOS fail&#039;s to respond to the revocation request [1]&lt;br /&gt;
* Exokernel must be careful not to delete as the LibOS might need to write some system critical data to the resource [1]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., M. F. Kaashoek, and J. O&#039;Toole. &amp;quot;Exokernel.&amp;quot; ACM SIGOPS Operating Systems Review 29.5 (1995): 251-66. Association for Computing Machinery. Web. 8 Oct. 2010. &amp;lt;http://portal.acm.org/citation.cfm?id=224076&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2694</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2694"/>
		<updated>2010-10-09T19:36:26Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* Design Principles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Microkernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
* multiplex resources securly providing protection to mutualy distrustfull application threw the use of secure binding&#039;s&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel seperates protection from managment in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking acces to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the numbrt of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad pramater passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is desgined to interact with a low-level machine independant level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to creat low level primatives that the hardware resources can be accesse from, this allso includes interrupt&#039;s,exceptions [1]&lt;br /&gt;
** the exokernel also export priviledged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource managment except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource managment is the best way to build fexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
An exokernel should export physical names.&lt;br /&gt;
Physical names are efficient, since they remove a level of indirection&lt;br /&gt;
otherwise required to translate between virtual and physical names.&lt;br /&gt;
Physical names also encode useful resource attributes. For example,&lt;br /&gt;
in a system with physically-indexed direct-mapped caches, the name&lt;br /&gt;
of a physical page (i. e., its page number) determines which pages&lt;br /&gt;
it conflicts with. Additionally, an exokemel should export bookkeeping&lt;br /&gt;
data structures such as freelists, disk arm positions, and&lt;br /&gt;
cached TLB entries so that applications can tailor their allocation&lt;br /&gt;
requests to available resources,&lt;br /&gt;
&amp;lt;/pre&amp;gt; (copy and pasted from [1]) any one under stand what this mean&#039;s ? --[[User:Asoknack|Asoknack]] 03:35, 9 October 2010 (UTC)&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource managment [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release   (what makes thing &amp;quot;Visible&amp;quot; does it just mean every LibOS can see it ) --[[User:Asoknack|Asoknack]] 03:43, 9 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competeing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achived threw this even what block to write and such)&lt;br /&gt;
&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allow&#039;s the seperation of protection and resource use [1]&lt;br /&gt;
* only checks authorization durning bind time [1]&lt;br /&gt;
** Application&#039;s with complex need&#039;s for resources only authorized durining bind.[1]&lt;br /&gt;
* acces checking is done during acces time and there is no need to understand complex accese need&#039;s during acces[1]&lt;br /&gt;
** (this mean&#039;s that the exokernel check&#039;s once to make shure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** alow&#039;s the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve preformance[1]&lt;br /&gt;
** eleminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be schedualed [2]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., M. F. Kaashoek, and J. O&#039;Toole. &amp;quot;Exokernel.&amp;quot; ACM SIGOPS Operating Systems Review 29.5 (1995): 251-66. Association for Computing Machinery. Web. 8 Oct. 2010. &amp;lt;http://portal.acm.org/citation.cfm?id=224076&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2693</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2693"/>
		<updated>2010-10-09T19:35:17Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Microkernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
* multiplex resources securly providing protection to mutualy distrustfull application threw the use of secure binding&#039;s&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel seperates protection from managment in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking acces to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the numbrt of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad pramater passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is desgined to interact with a low-level machine independant level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to creat low level primatives that the hardware resources can be accesse from, this allso includes interrupt&#039;s,exceptions [1]&lt;br /&gt;
** the exokernel also export priviledged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource managment except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource managment is the best way to build fexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
An exokernel should export physical names.&lt;br /&gt;
Physical names are efficient, since they remove a level of indirection&lt;br /&gt;
otherwise required to translate between virtual and physical names.&lt;br /&gt;
Physical names also encode useful resource attributes. For example,&lt;br /&gt;
in a system with physically-indexed direct-mapped caches, the name&lt;br /&gt;
of a physical page (i. e., its page number) determines which pages&lt;br /&gt;
it conflicts with. Additionally, an exokemel should export bookkeeping&lt;br /&gt;
data structures such as freelists, disk arm positions, and&lt;br /&gt;
cached TLB entries so that applications can tailor their allocation&lt;br /&gt;
requests to available resources,&lt;br /&gt;
&amp;lt;/pre&amp;gt; (copy and pasted from [1]) and one under stand what this mean&#039;s --[[User:Asoknack|Asoknack]] 03:35, 9 October 2010 (UTC)&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource managment [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release   (what makes thing &amp;quot;Visible&amp;quot; does it just mean every LibOS can see it ) --[[User:Asoknack|Asoknack]] 03:43, 9 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competeing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achived threw this even what block to write and such)&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allow&#039;s the seperation of protection and resource use [1]&lt;br /&gt;
* only checks authorization durning bind time [1]&lt;br /&gt;
** Application&#039;s with complex need&#039;s for resources only authorized durining bind.[1]&lt;br /&gt;
* acces checking is done during acces time and there is no need to understand complex accese need&#039;s during acces[1]&lt;br /&gt;
** (this mean&#039;s that the exokernel check&#039;s once to make shure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** alow&#039;s the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve preformance[1]&lt;br /&gt;
** eleminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be schedualed [2]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., M. F. Kaashoek, and J. O&#039;Toole. &amp;quot;Exokernel.&amp;quot; ACM SIGOPS Operating Systems Review 29.5 (1995): 251-66. Association for Computing Machinery. Web. 8 Oct. 2010. &amp;lt;http://portal.acm.org/citation.cfm?id=224076&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2692</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2692"/>
		<updated>2010-10-09T19:34:47Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Microkernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
* multiplex resources securly providing protection to mutualy distrustfull application threw the use of secure binding&#039;s&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel seperates protection from managment in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking acces to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the numbrt of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad pramater passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is desgined to interact with a low-level machine independant level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to creat low level primatives that the hardware resources can be accesse from, this allso includes interrupt&#039;s,exceptions [1]&lt;br /&gt;
** the exokernel also export priviledged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource managment except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource managment is the best way to build fexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
An exokernel should export physical names.&lt;br /&gt;
Physical names are efficient, since they remove a level of indirection&lt;br /&gt;
otherwise required to translate between virtual and physical names.&lt;br /&gt;
Physical names also encode useful resource attributes. For example,&lt;br /&gt;
in a system with physically-indexed direct-mapped caches, the name&lt;br /&gt;
of a physical page (i. e., its page number) determines which pages&lt;br /&gt;
it conflicts with. Additionally, an exokemel should export bookkeeping&lt;br /&gt;
data structures such as freelists, disk arm positions, and&lt;br /&gt;
cached TLB entries so that applications can tailor their allocation&lt;br /&gt;
requests to available resources,&lt;br /&gt;
&amp;lt;/pre&amp;gt; (copy and pasted from [1]) and one under stand what this mean&#039;s --[[User:Asoknack|Asoknack]] 03:35, 9 October 2010 (UTC)&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource managment [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release   (what makes thing &amp;quot;Visible&amp;quot; does it just mean every LibOS can see it ) --[[User:Asoknack|Asoknack]] 03:43, 9 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competeing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achived threw this even what block to write and such)&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allow&#039;s the seperation of protection and resource use [1]&lt;br /&gt;
* only checks authorization durning bind time [1]&lt;br /&gt;
** Application&#039;s with complex need&#039;s for resources only authorized durining bind.[1]&lt;br /&gt;
* acces checking is done during acces time and there is no need to understand complex accese need&#039;s during acces[1]&lt;br /&gt;
** (this mean&#039;s that the exokernel check&#039;s once to make shure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** alow&#039;s the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve preformance[1]&lt;br /&gt;
** eleminate the number of kernel crossings [1]&lt;br /&gt;
** downloaded code can be run with out the application to be schedualed [2]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., M. F. Kaashoek, and J. O&#039;Toole. &amp;quot;Exokernel.&amp;quot; ACM SIGOPS Operating Systems Review 29.5 (1995): 251-66. Association for Computing Machinery. Web. 8 Oct. 2010. &amp;lt;http://portal.acm.org/citation.cfm?id=224076&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
[2]&amp;lt;nowiki&amp;gt;Engler, Dawson R. &amp;quot;The Exokernel Operating System Architecture.&amp;quot; Diss. Massachusetts Institute of Technology, Dept. of Electrical Engineering and Computer Science, 1998. Web. 9 Oct. 2010. &amp;lt;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.61.5054&amp;amp;rep=rep1&amp;amp;type=pdf&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2689</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2689"/>
		<updated>2010-10-09T19:26:43Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* Exokernel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Microkernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
* multiplex resources securly providing protection to mutualy distrustfull application threw the use of secure binding&#039;s&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel seperates protection from managment in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking acces to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the numbrt of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad pramater passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is desgined to interact with a low-level machine independant level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to creat low level primatives that the hardware resources can be accesse from, this allso includes interrupt&#039;s,exceptions [1]&lt;br /&gt;
** the exokernel also export priviledged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource managment except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource managment is the best way to build fexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
An exokernel should export physical names.&lt;br /&gt;
Physical names are efficient, since they remove a level of indirection&lt;br /&gt;
otherwise required to translate between virtual and physical names.&lt;br /&gt;
Physical names also encode useful resource attributes. For example,&lt;br /&gt;
in a system with physically-indexed direct-mapped caches, the name&lt;br /&gt;
of a physical page (i. e., its page number) determines which pages&lt;br /&gt;
it conflicts with. Additionally, an exokemel should export bookkeeping&lt;br /&gt;
data structures such as freelists, disk arm positions, and&lt;br /&gt;
cached TLB entries so that applications can tailor their allocation&lt;br /&gt;
requests to available resources,&lt;br /&gt;
&amp;lt;/pre&amp;gt; (copy and pasted from [1]) and one under stand what this mean&#039;s --[[User:Asoknack|Asoknack]] 03:35, 9 October 2010 (UTC)&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource managment [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release   (what makes thing &amp;quot;Visible&amp;quot; does it just mean every LibOS can see it ) --[[User:Asoknack|Asoknack]] 03:43, 9 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competeing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achived threw this even what block to write and such)&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allow&#039;s the seperation of protection and resource use [1]&lt;br /&gt;
* only checks authorization durning bind time [1]&lt;br /&gt;
** Application&#039;s with complex need&#039;s for resources only authorized durining bind.[1]&lt;br /&gt;
* acces checking is done during acces time and there is no need to understand complex accese need&#039;s during acces[1]&lt;br /&gt;
** (this mean&#039;s that the exokernel check&#039;s once to make shure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** alow&#039;s the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
* used to implement secure bindings , and improve preformance[1]&lt;br /&gt;
** eleminate the number of kernel crossings [1]&lt;br /&gt;
** &amp;lt;pre&amp;gt;&lt;br /&gt;
The second is more subtle: the execution&lt;br /&gt;
time of downloaded code can be readily bounded [18].&lt;br /&gt;
[18]P. Deutsch and C. A. Grant. A flexible measurement tool for&lt;br /&gt;
software systems. Information Processing 71, 1971.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., M. F. Kaashoek, and J. O&#039;Toole. &amp;quot;Exokernel.&amp;quot; ACM SIGOPS Operating Systems Review 29.5 (1995): 251-66. Association for Computing Machinery. Web. 8 Oct. 2010. &amp;lt;http://portal.acm.org/citation.cfm?id=224076&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2673</id>
		<title>Talk:COMP 3000 Essay 1 2010 Question 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=2673"/>
		<updated>2010-10-09T18:29:22Z</updated>

		<summary type="html">&lt;p&gt;Asoknack: /* Exokernel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Microkernel == &lt;br /&gt;
* Moving kernel functionality into processes contained in user space, e.g. file systems, drivers&lt;br /&gt;
* Keep basic functionality in kernel to handle sharing of resources&lt;br /&gt;
* Separation allows for manageability and security, corruption in one does not necessarily cause failure in system&lt;br /&gt;
&lt;br /&gt;
== Virtual Machine ==&lt;br /&gt;
* Partitioning or virtualizing resources among OS virtualization running on top of host OS&lt;br /&gt;
* Virtualized OS believe running on full machine on its own&lt;br /&gt;
&lt;br /&gt;
== Exokernel ==&lt;br /&gt;
* Microkernel architecture with limited abstractions, ask for resource, get resource not resource abstraction&lt;br /&gt;
* Less functionality provided by kernel, security and handling of resource sharing&lt;br /&gt;
* Once application receives resource, it can use it as it wishes/in control&lt;br /&gt;
* Keep the basic kernel to handle allocating resources and sharing rather than developing straight to the hardware&lt;br /&gt;
* multiplex resources securly providing protection to mutualy distrustfull application threw the use of secure binding&#039;s&lt;br /&gt;
* Goal of the exokernel is to give LibOS maximum freedom with out allowing them to interfere with each other. to do this the exokernel seperates protection from managment in doing this it provide 3 important tasks[1]&lt;br /&gt;
** tracking ownership of resources [1]&lt;br /&gt;
** ensuring protection by guarding all resource usage and binding points (not to shure what binding points are)[1]&lt;br /&gt;
** revoking acces to the resources [1]&lt;br /&gt;
* LibrayOS (LibOs)&lt;br /&gt;
** Reduces the numbrt of kernel crossings[1]&lt;br /&gt;
** Not trusted by the exokernel so can be trusted by the application , Example given is a bad pramater passed to the LibOs only the application is affected.[1] (So LibOs cant interact with kernel ???)&lt;br /&gt;
** Any application running on the Exokernel can change the LibrayOs freely [1]&lt;br /&gt;
** Application that use LibOS that implement standard interfaces (POSIX) will be portable on any system with the same interface [1]&lt;br /&gt;
** LibOs can be made portable if it is desgined to interact with a low-level machine independant level to hide hardware details [1]&lt;br /&gt;
&lt;br /&gt;
=== Exokernel Design ===&lt;br /&gt;
==== Design Principles ====&lt;br /&gt;
*Securely Expose Hardware [1]&lt;br /&gt;
** an Exokernel tries to creat low level primatives that the hardware resources can be accesse from, this allso includes interrupt&#039;s,exceptions [1]&lt;br /&gt;
** the exokernel also export priviledged instructions to the LibOS so that traditional OS abstractions can be implemented (eg Process , address pace)[1]&lt;br /&gt;
** Exokernels should avoid resource managment except when required protection ( allocation , revocation , ownership)[1]&lt;br /&gt;
** application based resource managment is the best way to build fexible efficient flexible systems [1]&lt;br /&gt;
*Expose allocation[1]&lt;br /&gt;
** allow LibOs to request physical resources [1]&lt;br /&gt;
** resource allocation should not be automatic, the LibOS should participate in every single allocation decision [1]&lt;br /&gt;
*Expose Names[1]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
An exokernel should export physical names.&lt;br /&gt;
Physical names are efficient, since they remove a level of indirection&lt;br /&gt;
otherwise required to translate between virtual and physical names.&lt;br /&gt;
Physical names also encode useful resource attributes. For example,&lt;br /&gt;
in a system with physically-indexed direct-mapped caches, the name&lt;br /&gt;
of a physical page (i. e., its page number) determines which pages&lt;br /&gt;
it conflicts with. Additionally, an exokemel should export bookkeeping&lt;br /&gt;
data structures such as freelists, disk arm positions, and&lt;br /&gt;
cached TLB entries so that applications can tailor their allocation&lt;br /&gt;
requests to available resources,&lt;br /&gt;
&amp;lt;/pre&amp;gt; (copy and pasted from [1]) and one under stand what this mean&#039;s --[[User:Asoknack|Asoknack]] 03:35, 9 October 2010 (UTC)&lt;br /&gt;
*Expose Revocation [1]&lt;br /&gt;
** use visible revocation protocol [1]&lt;br /&gt;
** allows well behaved LibOS to preform application level resource managment [1]&lt;br /&gt;
** Visible revocation allows the LibOS to choose what instance of the resource to release   (what makes thing &amp;quot;Visible&amp;quot; does it just mean every LibOS can see it ) --[[User:Asoknack|Asoknack]] 03:43, 9 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Policy &#039;&#039;&#039;&lt;br /&gt;
* LibOS handle resource policy decisions&lt;br /&gt;
* Exokernels have a policy to decided between competeing LibOS (Priority , share of resources)&lt;br /&gt;
** it enforces this threw allocation and deallocation (every thing can achived threw this even what block to write and such)&lt;br /&gt;
==== Secure Bindings ====&lt;br /&gt;
* Used by the exokernel to allow the LibOS to bind to resources [1]&lt;br /&gt;
* Allow&#039;s the seperation of protection and resource use [1]&lt;br /&gt;
* only checks authorization durning bind time [1]&lt;br /&gt;
** Application&#039;s with complex need&#039;s for resources only authorized durining bind.[1]&lt;br /&gt;
* acces checking is done during acces time and there is no need to understand complex accese need&#039;s during acces[1]&lt;br /&gt;
** (this mean&#039;s that the exokernel check&#039;s once to make shure an application has authorization once approved, when the application tries to use the resource the exokernel is only concerned about policy conflict&#039;s)--[[User:Asoknack|Asoknack]] 18:20, 9 October 2010 (UTC)&lt;br /&gt;
** alow&#039;s the kernel to protect the resources with out understanding what the resource is [1]&lt;br /&gt;
*three way&#039;s to implement&lt;br /&gt;
* Hardware Mechanisms [1]&lt;br /&gt;
* Software caching [1]&lt;br /&gt;
* Downloading application code [1]&lt;br /&gt;
&#039;&#039;&#039; Downloading Code to the Kernel &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[1]&amp;lt;nowiki&amp;gt; Engler, D. R., M. F. Kaashoek, and J. O&#039;Toole. &amp;quot;Exokernel.&amp;quot; ACM SIGOPS Operating Systems Review 29.5 (1995): 251-66. Association for Computing Machinery. Web. 8 Oct. 2010. &amp;lt;http://portal.acm.org/citation.cfm?id=224076&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Unsorted ==&lt;br /&gt;
Exokernel-&lt;br /&gt;
Minimalistic abstractions for developers&lt;br /&gt;
Exokernels can be seen as a good compromise between virtual machines and microkernels in the sense that exokernels can give that low level access to developers similar to direct access through a protected layer and at the same time can contain enough hardware abstraction to allow similar benefit of hiding the hardware resources to application programs.&lt;br /&gt;
Exokernel – fewest hardware abstractions to developer&lt;br /&gt;
Microkernel - is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system&lt;br /&gt;
Virtual machine is a simulation of any or devices requested by an application program&lt;br /&gt;
Exokenel – I’ve got a sound card&lt;br /&gt;
Virtual Machine – I’ve got the sound card you’re looking for, perfect virtual match&lt;br /&gt;
Microkernel – I’ve got sound card that plays Khazikstan sound format only&lt;br /&gt;
MicroKernel - Very small, very predictable, good for schedualing (QNX is a microkernel - POSIX compatable, benefits of running linux software like modern browsers) &lt;br /&gt;
&lt;br /&gt;
This is some ideas I&#039;ve got on this question, please contribute below&lt;br /&gt;
-Rovic&lt;br /&gt;
&lt;br /&gt;
Outlining some main features here as I see them.&lt;br /&gt;
&lt;br /&gt;
I found that the exokernel was an even lower-level design than the microkernel, closer to the hardware without abstraction. They have the same architecture with the basic functionality contained in the kernel to manage everyone. As the exokernel &amp;quot;gives&amp;quot; the resource to the application it can use the resource in isolation of other applications (until forced to shared) much like VMs receive their resources, either partitioned or virtualized, and execute as if its running on its own machine. There is this similar notion of partitioning the resources among applications/OS and allowing them to take control of what they have. &lt;br /&gt;
&lt;br /&gt;
I&#039;ll locate some references later on. --[[User:Slay|Slay]] 15:00, 7 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe we can have an introduction - paragraph or so on each type - then similarities - differences - and the compromise.  I am going to do some research and writing this weekend and I will put some up  -- Jslonosky&lt;br /&gt;
&lt;br /&gt;
btw in my page (i guess you can call it that) i have some resources i have found  --[[User:Asoknack|Asoknack]] 15:50, 8 October 2010 (UTC)&lt;br /&gt;
- Wow, nice man. I will go ahead and write up the descriptive paragraphs on each kernel and virtual machine if no one minds. --Jslonosky&lt;/div&gt;</summary>
		<author><name>Asoknack</name></author>
	</entry>
</feed>