<?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=Cling</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=Cling"/>
	<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php/Special:Contributions/Cling"/>
	<updated>2026-04-11T06:56:44Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_2_2010_Question_8&amp;diff=5995</id>
		<title>Talk:COMP 3000 Essay 2 2010 Question 8</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_2_2010_Question_8&amp;diff=5995"/>
		<updated>2010-12-01T21:48:29Z</updated>

		<summary type="html">&lt;p&gt;Cling: Modesty Fix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Group Members&lt;br /&gt;
&lt;br /&gt;
Trevor Bonesaw Malone - tmalone@connect.carleton.ca //FIRST POST!&lt;br /&gt;
&lt;br /&gt;
Qi Zhang   - qzhang13@connect.carleton.ca&lt;br /&gt;
&lt;br /&gt;
Gregory Bint - gbint@connect.carleton.ca&lt;br /&gt;
&lt;br /&gt;
Gautam Akiwate - gakiwate@connect.carleton.ca&lt;br /&gt;
&lt;br /&gt;
Corey Ling - cling@connect.carleton.ca&lt;br /&gt;
&lt;br /&gt;
Sarah Liske&lt;br /&gt;
&lt;br /&gt;
==Relevant Sources==&lt;br /&gt;
*NEWSOME,J.,AND SONG,D.Dynamic Taint Analysis for Automatic Detection, Analysis, and Signature Generation of Exploits on Commodity Software.      [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.83.2141&amp;amp;rep=rep1&amp;amp;type=pdf Dynamic Taint Analysis for Automatic Detection]&lt;br /&gt;
&amp;lt;u&amp;gt;Seems to be THE Dynamic Taint Analysis Paper.Talks about implementation on TaintCheck. Could be also useful for critique section&amp;lt;/u&amp;gt; -[Gautam]&lt;br /&gt;
&lt;br /&gt;
== Work Plan ==&lt;br /&gt;
&lt;br /&gt;
As Trevor intimated, we should have clear division of work going forward.  This is sort of the break down as I see it.  Please edit as you think of new ideas!&lt;br /&gt;
&lt;br /&gt;
* Background Concepts&lt;br /&gt;
** Information Flow Theory. (Implicit and Explicit Flows.) --Done[--[[User:Gautam|Gautam]] 03:54, 28 November 2010 (UTC)]&lt;br /&gt;
** What is dynamic taint analysis --Done[--[[User:Gautam|Gautam]] 05:07, 28 November 2010 (UTC)]&lt;br /&gt;
** What is the difference between dynamic and static analysis - it&#039;s there, who added it?&lt;br /&gt;
* Research Problem&lt;br /&gt;
** How do we build a DTA engine for a phone? - done, but by who?&lt;br /&gt;
** Why do we want to?  (information misuse) - done, but by who?&lt;br /&gt;
* Contribution&lt;br /&gt;
** How did they implement their DTA engine (Done: --[[User:Cling|Cling]] 04:50, 26 November 2010 (UTC))&lt;br /&gt;
** What did they find about information misuse (Done: --[[User:Cling|Cling]] 04:50, 26 November 2010 (UTC))&lt;br /&gt;
** Compared to the existing taint tracking approaches. [[User:Zhangqi|Zhangqi]] 07:11, 27 November 2010 (UTC) (Added something. Still looking for other examples,in progress)&lt;br /&gt;
** (What else should be in the contributions? Anything need fleshing out?) (Working on that now :) ) sliske&lt;br /&gt;
* Critique&lt;br /&gt;
**Added two paragraphs at the end of the present critique. Please incorporate it into your content as you deem fit.--[[User:Gautam|Gautam]] 09:07, 30 November 2010 (UTC) &lt;br /&gt;
**^ done. fleshed out critique, and added a bit about how taintdroid doesn&#039;t track implicit flow. Also reworded (the entire essay) for clarity where necessary/checked spelling. It would be a good idea for everyone to read it over once for spelling/clarity before thursday, just in case something doesn&#039;t make sense - sliske&lt;br /&gt;
* References&lt;br /&gt;
** The article has 61 references!  We can probably use some of them&lt;br /&gt;
**whee! reading papers and sticking in information as need be. Also working out how to cite properly, as there are two citations used currently&lt;br /&gt;
references added and citations taken care of. will go over fill in a few places where information may be lacking after class sliske&lt;br /&gt;
&lt;br /&gt;
List of information we need to find external sources for:&lt;br /&gt;
* History of taint analysis&lt;br /&gt;
* History of privacy research relating to smart phones&lt;br /&gt;
&lt;br /&gt;
== Work In Progress ==&lt;br /&gt;
&lt;br /&gt;
Log what you are working on *right now* so that other people don&#039;t try to do the same thing.  Make sure to clear your name from here when you are done.&lt;br /&gt;
&lt;br /&gt;
* Gregory Bint:  Research Problem&lt;br /&gt;
** Need to find some history on smart phone security research for the second part.&lt;br /&gt;
&lt;br /&gt;
* Gautam Akiwate:  Background Concepts&lt;br /&gt;
** Any resources on Dynamic taint Analysis would be appreciated!&lt;br /&gt;
&lt;br /&gt;
* Qi Zhang, Corey Ling: Contributions&lt;br /&gt;
&lt;br /&gt;
* Trevor Malone: Critique&lt;br /&gt;
&lt;br /&gt;
* Sarah Liske: References and Questions, Clarity/Spelling.&lt;br /&gt;
&lt;br /&gt;
== Some Notes from the Video ==&lt;br /&gt;
&lt;br /&gt;
Tracking of privacy sensitive data through Dynamic Taint Analysis (aka. Taint Tracking).  The trick is to mark private data as it sourced, and then follow those marks until (unless) they leave the phone.&lt;br /&gt;
	&lt;br /&gt;
Android phones run Java apps, which are compiled into DEX, and then run on top of the Dalvik VM.  It is this VM that we modify so that we can support the storage and tracking of taint tags.&lt;br /&gt;
&lt;br /&gt;
Taint sources&lt;br /&gt;
* low -bandwidth sensors&lt;br /&gt;
** Location&lt;br /&gt;
** Accelerometer&lt;br /&gt;
* High-bandwidth sensors&lt;br /&gt;
** Mic&lt;br /&gt;
** Camera&lt;br /&gt;
* Information DB&lt;br /&gt;
** Address book&lt;br /&gt;
** SMS storage&lt;br /&gt;
* Device ID&lt;br /&gt;
** IMEI&lt;br /&gt;
** IMSI   (don&#039;t actually track this one because of false positives)&lt;br /&gt;
** ICC_ID&lt;br /&gt;
** Phone Number&lt;br /&gt;
&lt;br /&gt;
Taint sink  (where marked data can leave the phone)&lt;br /&gt;
* Network Taint Sink&lt;br /&gt;
&lt;br /&gt;
Taint propagation&lt;br /&gt;
* ???&lt;br /&gt;
&lt;br /&gt;
Taint tags are stored in memory interleaved with the variables they are tracking&lt;br /&gt;
&lt;br /&gt;
Some standard Data Flow technique is used to propagate these tags, especially as one variable that is marked may be assigned to another, so now that variable needs to be tracked as well.&lt;br /&gt;
&lt;br /&gt;
Tracks explicit flows of data, not implicit&lt;br /&gt;
	To fully capture implicit flows, you need to do static analysis, which is hard with closed-source apps, and cannot be done real-time&lt;br /&gt;
	&lt;br /&gt;
Implicit flows are not tracked&lt;br /&gt;
* Implicit flows can involve &amp;quot;taint-scope&amp;quot;, tracking based on conditionals in code&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
=== Performance ===&lt;br /&gt;
&lt;br /&gt;
The goal is to create a real time tracking system, so the TaintDroid&#039;s performance impact is of some importance&lt;br /&gt;
&lt;br /&gt;
14% CPU overhead&lt;br /&gt;
4.4% memory overhead&lt;br /&gt;
&lt;br /&gt;
Macro benchmarks  (to get a feel for what the phone&#039;s usability is like with TD running)&lt;br /&gt;
* App load:  3%  (2ms) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Findings ===&lt;br /&gt;
&lt;br /&gt;
20 out of 30 tested applications share data in a way that is not expected.&lt;br /&gt;
&lt;br /&gt;
67 of 105 flagged pieces of data leaving the device had no obviously legitimate purpose (verified by the authors).&lt;br /&gt;
&lt;br /&gt;
Many apps sent location data and other unique identifiers to advertising servers.&lt;br /&gt;
&lt;br /&gt;
Most apps do not mention anything to the user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Limitations ===&lt;br /&gt;
&lt;br /&gt;
Tracks only explicit data flows.&lt;br /&gt;
&lt;br /&gt;
An application *could* launder the tags off of the data, if they really wanted to hide this sort of thing from TaintDroid.&lt;br /&gt;
&lt;br /&gt;
There are methods that could be used to protect against this, but they go against the goal of a light-weight, real-time tracking system.  TD is not necessarily about catching truly malicious programs, but rather just those that leak information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why do apps take this information?&lt;br /&gt;
* Lazy;  in the demo video, the wallpaper app seems to use the IMEI just as a ready made unique ID&lt;br /&gt;
* Overzealous;  the developer might thing they *need* the data for something, but actually &lt;br /&gt;
* Ads;  advertises do seem a little presumptuous in their data collection&lt;br /&gt;
* Spying;  bosses or spouses&lt;br /&gt;
* Malicious;  &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
=== QA Period ===&lt;br /&gt;
&lt;br /&gt;
Q:  how do we prevent a malicious app from removing a taint attribute on a file&lt;br /&gt;
&lt;br /&gt;
A:  TD operates a too low a level for this to be a problem;  TD assumes that the native code is trusted&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q:  It seems like you had a lot of false positives&lt;br /&gt;
&lt;br /&gt;
A:  The point of this tool was to identify privacy sensitive information as having left the phone, not whether or not a privacy violation has taken place.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q: Now that TD is released; couldn&#039;t malicious apps use some of the methods described in the paper to get around it?    &lt;br /&gt;
&lt;br /&gt;
A: Well, yes, but it is not just about maliciousness, it could just laziness or over-zealous ad stuff.&lt;br /&gt;
&lt;br /&gt;
==Other Information==&lt;br /&gt;
&lt;br /&gt;
Hey guys, thought I would just post a generalized paragraph about our essay.&lt;br /&gt;
&lt;br /&gt;
In today’s society, Smartphones are the new big thing. To me that’s what makes this paper so interesting. This paper focuses on private information in android phones and the misuse of this information. The misuse of information includes the SIM card, the ID of the device, or the phone number. TaintDroid is used on smart phones with an efficient taint tracking and analysis system. It has the ability to track sensitive data from multiple sources and examines the misuse of such data. In their study, out of 80 popular third-party applications, TaintDroid monitored that 68 applications had potential misuse of user’s private data. This tool is great for knowing with applications are safe and which are not, so your private data can remained private.&lt;br /&gt;
&lt;br /&gt;
Also, we should really think of splitting up the work in some way. If some people have specific sections they would like to do lets figure that out now so we can divide the workload and get it done over the next couple of days. I don&#039;t personally care what part I&#039;m going to have to do, so lets get this going. Any other information people wanna post feel free the more the better, even if we don&#039;t end up using it.&lt;br /&gt;
&lt;br /&gt;
[[user:Tmalone|Trevor Malone]]&lt;br /&gt;
&lt;br /&gt;
Hey guys! Anything else we need to get done? Let me know and I can help in anyway possible.&lt;br /&gt;
&lt;br /&gt;
[[user:Tmalone|Trevor Malone]]&lt;/div&gt;</summary>
		<author><name>Cling</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_2_2010_Question_8&amp;diff=5597</id>
		<title>Talk:COMP 3000 Essay 2 2010 Question 8</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_2_2010_Question_8&amp;diff=5597"/>
		<updated>2010-11-26T04:53:46Z</updated>

		<summary type="html">&lt;p&gt;Cling: Feedback Request&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Group Members&lt;br /&gt;
&lt;br /&gt;
Trevor Bonesaw Malone - tmalone@connect.carleton.ca //FIRST POST!&lt;br /&gt;
&lt;br /&gt;
Qi Zhang   - qzhang13@connect.carleton.ca&lt;br /&gt;
&lt;br /&gt;
Gregory Bint - gbint@connect.carleton.ca&lt;br /&gt;
&lt;br /&gt;
Gautam Akiwate - gakiwate@connect.carleton.ca&lt;br /&gt;
&lt;br /&gt;
Corey Ling - cling@connect.carleton.ca&lt;br /&gt;
&lt;br /&gt;
==Relevant Sources==&lt;br /&gt;
*NEWSOME,J.,AND SONG,D.Dynamic Taint Analysis for Automatic Detection, Analysis, and Signature Generation of Exploits on Commodity Software.      [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.83.2141&amp;amp;rep=rep1&amp;amp;type=pdf Dynamic Taint Analysis for Automatic Detection]&lt;br /&gt;
&amp;lt;u&amp;gt;Seems to be THE Dynamic Taint Analysis Paper.Talks about implementation on TaintCheck. Could be also useful for critique section&amp;lt;/u&amp;gt; -[Gautam]&lt;br /&gt;
&lt;br /&gt;
== Work Plan ==&lt;br /&gt;
&lt;br /&gt;
As Trevor intimated, we should have clear division of work going forward.  This is sort of the break down as I see it.  Please edit as you think of new ideas!&lt;br /&gt;
&lt;br /&gt;
* Background Concepts&lt;br /&gt;
** Information Flow Theory. (Implicit and Explicit Flows.)&lt;br /&gt;
** What is dynamic taint analysis&lt;br /&gt;
** What is the difference between dynamic and static analysis&lt;br /&gt;
* Research Problem&lt;br /&gt;
** How do we build a DTA engine for a phone?&lt;br /&gt;
** Why do we want to?  (information misuse)&lt;br /&gt;
* Contribution&lt;br /&gt;
** How did they implement their DTA engine (Done: --[[User:Cling|Cling]] 04:50, 26 November 2010 (UTC))&lt;br /&gt;
** What did they find about information misuse (Done: --[[User:Cling|Cling]] 04:50, 26 November 2010 (UTC))&lt;br /&gt;
** (What else should be in the contributions? Anything need fleshing out?)&lt;br /&gt;
* Critique&lt;br /&gt;
* References&lt;br /&gt;
** The article has 61 references!  We can probably use some of them&lt;br /&gt;
&lt;br /&gt;
List of information we need to find external sources for:&lt;br /&gt;
* History of taint analysis&lt;br /&gt;
* History of privacy research relating to smart phones&lt;br /&gt;
&lt;br /&gt;
== Work In Progress ==&lt;br /&gt;
&lt;br /&gt;
Log what you are working on *right now* so that other people don&#039;t try to do the same thing.  Make sure to clear your name from here when you are done.&lt;br /&gt;
&lt;br /&gt;
* Gregory Bint:  Research Problem&lt;br /&gt;
** I&#039;ve got what you will hopefully find to be a reasonable introduction to the problem.  I&#039;ve tried to ask mostly questions here, expecting the details to be covered in Background Concepts and in Contributions.&lt;br /&gt;
** I&#039;m going to try to find some history on smart phone security research for the second part.&lt;br /&gt;
** Should we move the Research Problem *above* Background Concepts?  It might serve as a better lead in that way.&lt;br /&gt;
&lt;br /&gt;
* Gautam Akiwate:  Background Concepts&lt;br /&gt;
** Any resources on Dynamic taint Analysis would be appreciated!&lt;br /&gt;
&lt;br /&gt;
* Corey Ling: Contributions (Qi Zhang: Original Signed Up)&lt;br /&gt;
&lt;br /&gt;
* Trevor Malone: Critique&lt;br /&gt;
&lt;br /&gt;
== Some Notes from the Video ==&lt;br /&gt;
&lt;br /&gt;
Tracking of privacy sensitive data through Dynamic Taint Analysis (aka. Taint Tracking).  The trick is to mark private data as it sourced, and then follow those marks until (unless) they leave the phone.&lt;br /&gt;
	&lt;br /&gt;
Android phones run Java apps, which are compiled into DEX, and then run on top of the Dalvik VM.  It is this VM that we modify so that we can support the storage and tracking of taint tags.&lt;br /&gt;
&lt;br /&gt;
Taint sources&lt;br /&gt;
* low -bandwidth sensors&lt;br /&gt;
** Location&lt;br /&gt;
** Accelerometer&lt;br /&gt;
* High-bandwidth sensors&lt;br /&gt;
** Mic&lt;br /&gt;
** Camera&lt;br /&gt;
* Information DB&lt;br /&gt;
** Address book&lt;br /&gt;
** SMS storage&lt;br /&gt;
* Device ID&lt;br /&gt;
** IMEI&lt;br /&gt;
** IMSI   (don&#039;t actually track this one because of false positives)&lt;br /&gt;
** ICC_ID&lt;br /&gt;
** Phone Number&lt;br /&gt;
&lt;br /&gt;
Taint sink  (where marked data can leave the phone)&lt;br /&gt;
* Network Taint Sink&lt;br /&gt;
&lt;br /&gt;
Taint propagation&lt;br /&gt;
* ???&lt;br /&gt;
&lt;br /&gt;
Taint tags are stored in memory interleaved with the variables they are tracking&lt;br /&gt;
&lt;br /&gt;
Some standard Data Flow technique is used to propagate these tags, especially as one variable that is marked may be assigned to another, so now that variable needs to be tracked as well.&lt;br /&gt;
&lt;br /&gt;
Tracks explicit flows of data, not implicit&lt;br /&gt;
	To fully capture implicit flows, you need to do static analysis, which is hard with closed-source apps, and cannot be done real-time&lt;br /&gt;
	&lt;br /&gt;
Implicit flows are not tracked&lt;br /&gt;
* Implicit flows can involve &amp;quot;taint-scope&amp;quot;, tracking based on conditionals in code&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
=== Performance ===&lt;br /&gt;
&lt;br /&gt;
The goal is to create a real time tracking system, so the TaintDroid&#039;s performance impact is of some importance&lt;br /&gt;
&lt;br /&gt;
14% CPU overhead&lt;br /&gt;
4.4% memory overhead&lt;br /&gt;
&lt;br /&gt;
Macro benchmarks  (to get a feel for what the phone&#039;s usability is like with TD running)&lt;br /&gt;
* App load:  3%  (2ms) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Findings ===&lt;br /&gt;
&lt;br /&gt;
20 out of 30 tested applications share data in a way that is not expected.&lt;br /&gt;
&lt;br /&gt;
67 of 105 flagged pieces of data leaving the device had no obviously legitimate purpose (verified by the authors).&lt;br /&gt;
&lt;br /&gt;
Many apps sent location data and other unique identifiers to advertising servers.&lt;br /&gt;
&lt;br /&gt;
Most apps do not mention anything to the user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Limitations ===&lt;br /&gt;
&lt;br /&gt;
Tracks only explicit data flows.&lt;br /&gt;
&lt;br /&gt;
An application *could* launder the tags off of the data, if they really wanted to hide this sort of thing from TaintDroid.&lt;br /&gt;
&lt;br /&gt;
There are methods that could be used to protect against this, but they go against the goal of a light-weight, real-time tracking system.  TD is not necessarily about catching truly malicious programs, but rather just those that leak information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why do apps take this information?&lt;br /&gt;
* Lazy;  in the demo video, the wallpaper app seems to use the IMEI just as a ready made unique ID&lt;br /&gt;
* Overzealous;  the developer might thing they *need* the data for something, but actually &lt;br /&gt;
* Ads;  advertises do seem a little presumptuous in their data collection&lt;br /&gt;
* Spying;  bosses or spouses&lt;br /&gt;
* Malicious;  &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
=== QA Period ===&lt;br /&gt;
&lt;br /&gt;
Q:  how do we prevent a malicious app from removing a taint attribute on a file&lt;br /&gt;
&lt;br /&gt;
A:  TD operates a too low a level for this to be a problem;  TD assumes that the native code is trusted&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q:  It seems like you had a lot of false positives&lt;br /&gt;
&lt;br /&gt;
A:  The point of this tool was to identify privacy sensitive information as having left the phone, not whether or not a privacy violation has taken place.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q: Now that TD is released; couldn&#039;t malicious apps use some of the methods described in the paper to get around it?    &lt;br /&gt;
&lt;br /&gt;
A: Well, yes, but it is not just about maliciousness, it could just laziness or over-zealous ad stuff.&lt;br /&gt;
&lt;br /&gt;
==Other Information==&lt;br /&gt;
&lt;br /&gt;
Hey guys, thought I would just post a generalized paragraph about our essay.&lt;br /&gt;
&lt;br /&gt;
In today’s society, Smartphones are the new big thing. To me that’s what makes this paper so interesting. This paper focuses on private information in android phones and the misuse of this information. The misuse of information includes the SIM card, the ID of the device, or the phone number. TaintDroid is used on smart phones with an efficient taint tracking and analysis system. It has the ability to track sensitive data from multiple sources and examines the misuse of such data. In their study, out of 80 popular third-party applications, TaintDroid monitored that 68 applications had potential misuse of user’s private data. This tool is great for knowing with applications are safe and which are not, so your private data can remained private.&lt;br /&gt;
&lt;br /&gt;
Also, we should really think of splitting up the work in some way. If some people have specific sections they would like to do lets figure that out now so we can divide the workload and get it done over the next couple of days. I don&#039;t personally care what part I&#039;m going to have to do, so lets get this going. Any other information people wanna post feel free the more the better, even if we don&#039;t end up using it.&lt;br /&gt;
&lt;br /&gt;
[[user:Tmalone|Trevor Malone]]&lt;/div&gt;</summary>
		<author><name>Cling</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_2_2010_Question_8&amp;diff=5596</id>
		<title>Talk:COMP 3000 Essay 2 2010 Question 8</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_2_2010_Question_8&amp;diff=5596"/>
		<updated>2010-11-26T04:50:50Z</updated>

		<summary type="html">&lt;p&gt;Cling: Checklist update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Group Members&lt;br /&gt;
&lt;br /&gt;
Trevor Bonesaw Malone - tmalone@connect.carleton.ca //FIRST POST!&lt;br /&gt;
&lt;br /&gt;
Qi Zhang   - qzhang13@connect.carleton.ca&lt;br /&gt;
&lt;br /&gt;
Gregory Bint - gbint@connect.carleton.ca&lt;br /&gt;
&lt;br /&gt;
Gautam Akiwate - gakiwate@connect.carleton.ca&lt;br /&gt;
&lt;br /&gt;
Corey Ling - cling@connect.carleton.ca&lt;br /&gt;
&lt;br /&gt;
==Relevant Sources==&lt;br /&gt;
*NEWSOME,J.,AND SONG,D.Dynamic Taint Analysis for Automatic Detection, Analysis, and Signature Generation of Exploits on Commodity Software.      [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.83.2141&amp;amp;rep=rep1&amp;amp;type=pdf Dynamic Taint Analysis for Automatic Detection]&lt;br /&gt;
&amp;lt;u&amp;gt;Seems to be THE Dynamic Taint Analysis Paper.Talks about implementation on TaintCheck. Could be also useful for critique section&amp;lt;/u&amp;gt; -[Gautam]&lt;br /&gt;
&lt;br /&gt;
== Work Plan ==&lt;br /&gt;
&lt;br /&gt;
As Trevor intimated, we should have clear division of work going forward.  This is sort of the break down as I see it.  Please edit as you think of new ideas!&lt;br /&gt;
&lt;br /&gt;
* Background Concepts&lt;br /&gt;
** Information Flow Theory. (Implicit and Explicit Flows.)&lt;br /&gt;
** What is dynamic taint analysis&lt;br /&gt;
** What is the difference between dynamic and static analysis&lt;br /&gt;
* Research Problem&lt;br /&gt;
** How do we build a DTA engine for a phone?&lt;br /&gt;
** Why do we want to?  (information misuse)&lt;br /&gt;
* Contribution&lt;br /&gt;
** How did they implement their DTA engine (Done: --[[User:Cling|Cling]] 04:50, 26 November 2010 (UTC))&lt;br /&gt;
** What did they find about information misuse (Done: --[[User:Cling|Cling]] 04:50, 26 November 2010 (UTC))&lt;br /&gt;
* Critique&lt;br /&gt;
* References&lt;br /&gt;
** The article has 61 references!  We can probably use some of them&lt;br /&gt;
&lt;br /&gt;
List of information we need to find external sources for:&lt;br /&gt;
* History of taint analysis&lt;br /&gt;
* History of privacy research relating to smart phones&lt;br /&gt;
&lt;br /&gt;
== Work In Progress ==&lt;br /&gt;
&lt;br /&gt;
Log what you are working on *right now* so that other people don&#039;t try to do the same thing.  Make sure to clear your name from here when you are done.&lt;br /&gt;
&lt;br /&gt;
* Gregory Bint:  Research Problem&lt;br /&gt;
** I&#039;ve got what you will hopefully find to be a reasonable introduction to the problem.  I&#039;ve tried to ask mostly questions here, expecting the details to be covered in Background Concepts and in Contributions.&lt;br /&gt;
** I&#039;m going to try to find some history on smart phone security research for the second part.&lt;br /&gt;
** Should we move the Research Problem *above* Background Concepts?  It might serve as a better lead in that way.&lt;br /&gt;
&lt;br /&gt;
* Gautam Akiwate:  Background Concepts&lt;br /&gt;
** Any resources on Dynamic taint Analysis would be appreciated!&lt;br /&gt;
&lt;br /&gt;
* Corey Ling: Contributions (Qi Zhang: Original Signed Up)&lt;br /&gt;
&lt;br /&gt;
* Trevor Malone: Critique&lt;br /&gt;
&lt;br /&gt;
== Some Notes from the Video ==&lt;br /&gt;
&lt;br /&gt;
Tracking of privacy sensitive data through Dynamic Taint Analysis (aka. Taint Tracking).  The trick is to mark private data as it sourced, and then follow those marks until (unless) they leave the phone.&lt;br /&gt;
	&lt;br /&gt;
Android phones run Java apps, which are compiled into DEX, and then run on top of the Dalvik VM.  It is this VM that we modify so that we can support the storage and tracking of taint tags.&lt;br /&gt;
&lt;br /&gt;
Taint sources&lt;br /&gt;
* low -bandwidth sensors&lt;br /&gt;
** Location&lt;br /&gt;
** Accelerometer&lt;br /&gt;
* High-bandwidth sensors&lt;br /&gt;
** Mic&lt;br /&gt;
** Camera&lt;br /&gt;
* Information DB&lt;br /&gt;
** Address book&lt;br /&gt;
** SMS storage&lt;br /&gt;
* Device ID&lt;br /&gt;
** IMEI&lt;br /&gt;
** IMSI   (don&#039;t actually track this one because of false positives)&lt;br /&gt;
** ICC_ID&lt;br /&gt;
** Phone Number&lt;br /&gt;
&lt;br /&gt;
Taint sink  (where marked data can leave the phone)&lt;br /&gt;
* Network Taint Sink&lt;br /&gt;
&lt;br /&gt;
Taint propagation&lt;br /&gt;
* ???&lt;br /&gt;
&lt;br /&gt;
Taint tags are stored in memory interleaved with the variables they are tracking&lt;br /&gt;
&lt;br /&gt;
Some standard Data Flow technique is used to propagate these tags, especially as one variable that is marked may be assigned to another, so now that variable needs to be tracked as well.&lt;br /&gt;
&lt;br /&gt;
Tracks explicit flows of data, not implicit&lt;br /&gt;
	To fully capture implicit flows, you need to do static analysis, which is hard with closed-source apps, and cannot be done real-time&lt;br /&gt;
	&lt;br /&gt;
Implicit flows are not tracked&lt;br /&gt;
* Implicit flows can involve &amp;quot;taint-scope&amp;quot;, tracking based on conditionals in code&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
=== Performance ===&lt;br /&gt;
&lt;br /&gt;
The goal is to create a real time tracking system, so the TaintDroid&#039;s performance impact is of some importance&lt;br /&gt;
&lt;br /&gt;
14% CPU overhead&lt;br /&gt;
4.4% memory overhead&lt;br /&gt;
&lt;br /&gt;
Macro benchmarks  (to get a feel for what the phone&#039;s usability is like with TD running)&lt;br /&gt;
* App load:  3%  (2ms) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Findings ===&lt;br /&gt;
&lt;br /&gt;
20 out of 30 tested applications share data in a way that is not expected.&lt;br /&gt;
&lt;br /&gt;
67 of 105 flagged pieces of data leaving the device had no obviously legitimate purpose (verified by the authors).&lt;br /&gt;
&lt;br /&gt;
Many apps sent location data and other unique identifiers to advertising servers.&lt;br /&gt;
&lt;br /&gt;
Most apps do not mention anything to the user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Limitations ===&lt;br /&gt;
&lt;br /&gt;
Tracks only explicit data flows.&lt;br /&gt;
&lt;br /&gt;
An application *could* launder the tags off of the data, if they really wanted to hide this sort of thing from TaintDroid.&lt;br /&gt;
&lt;br /&gt;
There are methods that could be used to protect against this, but they go against the goal of a light-weight, real-time tracking system.  TD is not necessarily about catching truly malicious programs, but rather just those that leak information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why do apps take this information?&lt;br /&gt;
* Lazy;  in the demo video, the wallpaper app seems to use the IMEI just as a ready made unique ID&lt;br /&gt;
* Overzealous;  the developer might thing they *need* the data for something, but actually &lt;br /&gt;
* Ads;  advertises do seem a little presumptuous in their data collection&lt;br /&gt;
* Spying;  bosses or spouses&lt;br /&gt;
* Malicious;  &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
=== QA Period ===&lt;br /&gt;
&lt;br /&gt;
Q:  how do we prevent a malicious app from removing a taint attribute on a file&lt;br /&gt;
&lt;br /&gt;
A:  TD operates a too low a level for this to be a problem;  TD assumes that the native code is trusted&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q:  It seems like you had a lot of false positives&lt;br /&gt;
&lt;br /&gt;
A:  The point of this tool was to identify privacy sensitive information as having left the phone, not whether or not a privacy violation has taken place.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q: Now that TD is released; couldn&#039;t malicious apps use some of the methods described in the paper to get around it?    &lt;br /&gt;
&lt;br /&gt;
A: Well, yes, but it is not just about maliciousness, it could just laziness or over-zealous ad stuff.&lt;br /&gt;
&lt;br /&gt;
==Other Information==&lt;br /&gt;
&lt;br /&gt;
Hey guys, thought I would just post a generalized paragraph about our essay.&lt;br /&gt;
&lt;br /&gt;
In today’s society, Smartphones are the new big thing. To me that’s what makes this paper so interesting. This paper focuses on private information in android phones and the misuse of this information. The misuse of information includes the SIM card, the ID of the device, or the phone number. TaintDroid is used on smart phones with an efficient taint tracking and analysis system. It has the ability to track sensitive data from multiple sources and examines the misuse of such data. In their study, out of 80 popular third-party applications, TaintDroid monitored that 68 applications had potential misuse of user’s private data. This tool is great for knowing with applications are safe and which are not, so your private data can remained private.&lt;br /&gt;
&lt;br /&gt;
Also, we should really think of splitting up the work in some way. If some people have specific sections they would like to do lets figure that out now so we can divide the workload and get it done over the next couple of days. I don&#039;t personally care what part I&#039;m going to have to do, so lets get this going. Any other information people wanna post feel free the more the better, even if we don&#039;t end up using it.&lt;br /&gt;
&lt;br /&gt;
[[user:Tmalone|Trevor Malone]]&lt;/div&gt;</summary>
		<author><name>Cling</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_2_2010_Question_8&amp;diff=5595</id>
		<title>Talk:COMP 3000 Essay 2 2010 Question 8</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_2_2010_Question_8&amp;diff=5595"/>
		<updated>2010-11-26T04:49:01Z</updated>

		<summary type="html">&lt;p&gt;Cling: Added myself to contacts&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Group Members&lt;br /&gt;
&lt;br /&gt;
Trevor Bonesaw Malone - tmalone@connect.carleton.ca //FIRST POST!&lt;br /&gt;
&lt;br /&gt;
Qi Zhang   - qzhang13@connect.carleton.ca&lt;br /&gt;
&lt;br /&gt;
Gregory Bint - gbint@connect.carleton.ca&lt;br /&gt;
&lt;br /&gt;
Gautam Akiwate - gakiwate@connect.carleton.ca&lt;br /&gt;
&lt;br /&gt;
Corey Ling - cling@connect.carleton.ca&lt;br /&gt;
&lt;br /&gt;
==Relevant Sources==&lt;br /&gt;
*NEWSOME,J.,AND SONG,D.Dynamic Taint Analysis for Automatic Detection, Analysis, and Signature Generation of Exploits on Commodity Software.      [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.83.2141&amp;amp;rep=rep1&amp;amp;type=pdf Dynamic Taint Analysis for Automatic Detection]&lt;br /&gt;
&amp;lt;u&amp;gt;Seems to be THE Dynamic Taint Analysis Paper.Talks about implementation on TaintCheck. Could be also useful for critique section&amp;lt;/u&amp;gt; -[Gautam]&lt;br /&gt;
&lt;br /&gt;
== Work Plan ==&lt;br /&gt;
&lt;br /&gt;
As Trevor intimated, we should have clear division of work going forward.  This is sort of the break down as I see it.  Please edit as you think of new ideas!&lt;br /&gt;
&lt;br /&gt;
* Background Concepts&lt;br /&gt;
** Information Flow Theory. (Implicit and Explicit Flows.)&lt;br /&gt;
** What is dynamic taint analysis&lt;br /&gt;
** What is the difference between dynamic and static analysis&lt;br /&gt;
* Research Problem&lt;br /&gt;
** How do we build a DTA engine for a phone?&lt;br /&gt;
** Why do we want to?  (information misuse)&lt;br /&gt;
* Contribution&lt;br /&gt;
** How did they implement their DTA engine&lt;br /&gt;
** What did they find about information misuse&lt;br /&gt;
* Critique&lt;br /&gt;
* References&lt;br /&gt;
** The article has 61 references!  We can probably use some of them&lt;br /&gt;
&lt;br /&gt;
List of information we need to find external sources for:&lt;br /&gt;
* History of taint analysis&lt;br /&gt;
* History of privacy research relating to smart phones&lt;br /&gt;
&lt;br /&gt;
== Work In Progress ==&lt;br /&gt;
&lt;br /&gt;
Log what you are working on *right now* so that other people don&#039;t try to do the same thing.  Make sure to clear your name from here when you are done.&lt;br /&gt;
&lt;br /&gt;
* Gregory Bint:  Research Problem&lt;br /&gt;
** I&#039;ve got what you will hopefully find to be a reasonable introduction to the problem.  I&#039;ve tried to ask mostly questions here, expecting the details to be covered in Background Concepts and in Contributions.&lt;br /&gt;
** I&#039;m going to try to find some history on smart phone security research for the second part.&lt;br /&gt;
** Should we move the Research Problem *above* Background Concepts?  It might serve as a better lead in that way.&lt;br /&gt;
&lt;br /&gt;
* Gautam Akiwate:  Background Concepts&lt;br /&gt;
** Any resources on Dynamic taint Analysis would be appreciated!&lt;br /&gt;
&lt;br /&gt;
* Corey Ling: Contributions (Qi Zhang: Original Signed Up)&lt;br /&gt;
&lt;br /&gt;
* Trevor Malone: Critique&lt;br /&gt;
&lt;br /&gt;
== Some Notes from the Video ==&lt;br /&gt;
&lt;br /&gt;
Tracking of privacy sensitive data through Dynamic Taint Analysis (aka. Taint Tracking).  The trick is to mark private data as it sourced, and then follow those marks until (unless) they leave the phone.&lt;br /&gt;
	&lt;br /&gt;
Android phones run Java apps, which are compiled into DEX, and then run on top of the Dalvik VM.  It is this VM that we modify so that we can support the storage and tracking of taint tags.&lt;br /&gt;
&lt;br /&gt;
Taint sources&lt;br /&gt;
* low -bandwidth sensors&lt;br /&gt;
** Location&lt;br /&gt;
** Accelerometer&lt;br /&gt;
* High-bandwidth sensors&lt;br /&gt;
** Mic&lt;br /&gt;
** Camera&lt;br /&gt;
* Information DB&lt;br /&gt;
** Address book&lt;br /&gt;
** SMS storage&lt;br /&gt;
* Device ID&lt;br /&gt;
** IMEI&lt;br /&gt;
** IMSI   (don&#039;t actually track this one because of false positives)&lt;br /&gt;
** ICC_ID&lt;br /&gt;
** Phone Number&lt;br /&gt;
&lt;br /&gt;
Taint sink  (where marked data can leave the phone)&lt;br /&gt;
* Network Taint Sink&lt;br /&gt;
&lt;br /&gt;
Taint propagation&lt;br /&gt;
* ???&lt;br /&gt;
&lt;br /&gt;
Taint tags are stored in memory interleaved with the variables they are tracking&lt;br /&gt;
&lt;br /&gt;
Some standard Data Flow technique is used to propagate these tags, especially as one variable that is marked may be assigned to another, so now that variable needs to be tracked as well.&lt;br /&gt;
&lt;br /&gt;
Tracks explicit flows of data, not implicit&lt;br /&gt;
	To fully capture implicit flows, you need to do static analysis, which is hard with closed-source apps, and cannot be done real-time&lt;br /&gt;
	&lt;br /&gt;
Implicit flows are not tracked&lt;br /&gt;
* Implicit flows can involve &amp;quot;taint-scope&amp;quot;, tracking based on conditionals in code&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
=== Performance ===&lt;br /&gt;
&lt;br /&gt;
The goal is to create a real time tracking system, so the TaintDroid&#039;s performance impact is of some importance&lt;br /&gt;
&lt;br /&gt;
14% CPU overhead&lt;br /&gt;
4.4% memory overhead&lt;br /&gt;
&lt;br /&gt;
Macro benchmarks  (to get a feel for what the phone&#039;s usability is like with TD running)&lt;br /&gt;
* App load:  3%  (2ms) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Findings ===&lt;br /&gt;
&lt;br /&gt;
20 out of 30 tested applications share data in a way that is not expected.&lt;br /&gt;
&lt;br /&gt;
67 of 105 flagged pieces of data leaving the device had no obviously legitimate purpose (verified by the authors).&lt;br /&gt;
&lt;br /&gt;
Many apps sent location data and other unique identifiers to advertising servers.&lt;br /&gt;
&lt;br /&gt;
Most apps do not mention anything to the user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Limitations ===&lt;br /&gt;
&lt;br /&gt;
Tracks only explicit data flows.&lt;br /&gt;
&lt;br /&gt;
An application *could* launder the tags off of the data, if they really wanted to hide this sort of thing from TaintDroid.&lt;br /&gt;
&lt;br /&gt;
There are methods that could be used to protect against this, but they go against the goal of a light-weight, real-time tracking system.  TD is not necessarily about catching truly malicious programs, but rather just those that leak information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why do apps take this information?&lt;br /&gt;
* Lazy;  in the demo video, the wallpaper app seems to use the IMEI just as a ready made unique ID&lt;br /&gt;
* Overzealous;  the developer might thing they *need* the data for something, but actually &lt;br /&gt;
* Ads;  advertises do seem a little presumptuous in their data collection&lt;br /&gt;
* Spying;  bosses or spouses&lt;br /&gt;
* Malicious;  &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
=== QA Period ===&lt;br /&gt;
&lt;br /&gt;
Q:  how do we prevent a malicious app from removing a taint attribute on a file&lt;br /&gt;
&lt;br /&gt;
A:  TD operates a too low a level for this to be a problem;  TD assumes that the native code is trusted&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q:  It seems like you had a lot of false positives&lt;br /&gt;
&lt;br /&gt;
A:  The point of this tool was to identify privacy sensitive information as having left the phone, not whether or not a privacy violation has taken place.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q: Now that TD is released; couldn&#039;t malicious apps use some of the methods described in the paper to get around it?    &lt;br /&gt;
&lt;br /&gt;
A: Well, yes, but it is not just about maliciousness, it could just laziness or over-zealous ad stuff.&lt;br /&gt;
&lt;br /&gt;
==Other Information==&lt;br /&gt;
&lt;br /&gt;
Hey guys, thought I would just post a generalized paragraph about our essay.&lt;br /&gt;
&lt;br /&gt;
In today’s society, Smartphones are the new big thing. To me that’s what makes this paper so interesting. This paper focuses on private information in android phones and the misuse of this information. The misuse of information includes the SIM card, the ID of the device, or the phone number. TaintDroid is used on smart phones with an efficient taint tracking and analysis system. It has the ability to track sensitive data from multiple sources and examines the misuse of such data. In their study, out of 80 popular third-party applications, TaintDroid monitored that 68 applications had potential misuse of user’s private data. This tool is great for knowing with applications are safe and which are not, so your private data can remained private.&lt;br /&gt;
&lt;br /&gt;
Also, we should really think of splitting up the work in some way. If some people have specific sections they would like to do lets figure that out now so we can divide the workload and get it done over the next couple of days. I don&#039;t personally care what part I&#039;m going to have to do, so lets get this going. Any other information people wanna post feel free the more the better, even if we don&#039;t end up using it.&lt;br /&gt;
&lt;br /&gt;
[[user:Tmalone|Trevor Malone]]&lt;/div&gt;</summary>
		<author><name>Cling</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_2_2010_Question_8&amp;diff=5594</id>
		<title>Talk:COMP 3000 Essay 2 2010 Question 8</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_2_2010_Question_8&amp;diff=5594"/>
		<updated>2010-11-26T04:48:18Z</updated>

		<summary type="html">&lt;p&gt;Cling: Taking my credit till he posts his work&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Group Members&lt;br /&gt;
&lt;br /&gt;
Trevor Bonesaw Malone - tmalone@connect.carleton.ca //FIRST POST!&lt;br /&gt;
&lt;br /&gt;
Qi Zhang   - qzhang13@connect.carleton.ca&lt;br /&gt;
&lt;br /&gt;
Gregory Bint - gbint@connect.carleton.ca&lt;br /&gt;
&lt;br /&gt;
Gautam Akiwate - gakiwate@connect.carleton.ca&lt;br /&gt;
&lt;br /&gt;
==Relevant Sources==&lt;br /&gt;
*NEWSOME,J.,AND SONG,D.Dynamic Taint Analysis for Automatic Detection, Analysis, and Signature Generation of Exploits on Commodity Software.      [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.83.2141&amp;amp;rep=rep1&amp;amp;type=pdf Dynamic Taint Analysis for Automatic Detection]&lt;br /&gt;
&amp;lt;u&amp;gt;Seems to be THE Dynamic Taint Analysis Paper.Talks about implementation on TaintCheck. Could be also useful for critique section&amp;lt;/u&amp;gt; -[Gautam]&lt;br /&gt;
&lt;br /&gt;
== Work Plan ==&lt;br /&gt;
&lt;br /&gt;
As Trevor intimated, we should have clear division of work going forward.  This is sort of the break down as I see it.  Please edit as you think of new ideas!&lt;br /&gt;
&lt;br /&gt;
* Background Concepts&lt;br /&gt;
** Information Flow Theory. (Implicit and Explicit Flows.)&lt;br /&gt;
** What is dynamic taint analysis&lt;br /&gt;
** What is the difference between dynamic and static analysis&lt;br /&gt;
* Research Problem&lt;br /&gt;
** How do we build a DTA engine for a phone?&lt;br /&gt;
** Why do we want to?  (information misuse)&lt;br /&gt;
* Contribution&lt;br /&gt;
** How did they implement their DTA engine&lt;br /&gt;
** What did they find about information misuse&lt;br /&gt;
* Critique&lt;br /&gt;
* References&lt;br /&gt;
** The article has 61 references!  We can probably use some of them&lt;br /&gt;
&lt;br /&gt;
List of information we need to find external sources for:&lt;br /&gt;
* History of taint analysis&lt;br /&gt;
* History of privacy research relating to smart phones&lt;br /&gt;
&lt;br /&gt;
== Work In Progress ==&lt;br /&gt;
&lt;br /&gt;
Log what you are working on *right now* so that other people don&#039;t try to do the same thing.  Make sure to clear your name from here when you are done.&lt;br /&gt;
&lt;br /&gt;
* Gregory Bint:  Research Problem&lt;br /&gt;
** I&#039;ve got what you will hopefully find to be a reasonable introduction to the problem.  I&#039;ve tried to ask mostly questions here, expecting the details to be covered in Background Concepts and in Contributions.&lt;br /&gt;
** I&#039;m going to try to find some history on smart phone security research for the second part.&lt;br /&gt;
** Should we move the Research Problem *above* Background Concepts?  It might serve as a better lead in that way.&lt;br /&gt;
&lt;br /&gt;
* Gautam Akiwate:  Background Concepts&lt;br /&gt;
** Any resources on Dynamic taint Analysis would be appreciated!&lt;br /&gt;
&lt;br /&gt;
* Corey Ling: Contributions (Qi Zhang: Original Signed Up)&lt;br /&gt;
&lt;br /&gt;
* Trevor Malone: Critique&lt;br /&gt;
&lt;br /&gt;
== Some Notes from the Video ==&lt;br /&gt;
&lt;br /&gt;
Tracking of privacy sensitive data through Dynamic Taint Analysis (aka. Taint Tracking).  The trick is to mark private data as it sourced, and then follow those marks until (unless) they leave the phone.&lt;br /&gt;
	&lt;br /&gt;
Android phones run Java apps, which are compiled into DEX, and then run on top of the Dalvik VM.  It is this VM that we modify so that we can support the storage and tracking of taint tags.&lt;br /&gt;
&lt;br /&gt;
Taint sources&lt;br /&gt;
* low -bandwidth sensors&lt;br /&gt;
** Location&lt;br /&gt;
** Accelerometer&lt;br /&gt;
* High-bandwidth sensors&lt;br /&gt;
** Mic&lt;br /&gt;
** Camera&lt;br /&gt;
* Information DB&lt;br /&gt;
** Address book&lt;br /&gt;
** SMS storage&lt;br /&gt;
* Device ID&lt;br /&gt;
** IMEI&lt;br /&gt;
** IMSI   (don&#039;t actually track this one because of false positives)&lt;br /&gt;
** ICC_ID&lt;br /&gt;
** Phone Number&lt;br /&gt;
&lt;br /&gt;
Taint sink  (where marked data can leave the phone)&lt;br /&gt;
* Network Taint Sink&lt;br /&gt;
&lt;br /&gt;
Taint propagation&lt;br /&gt;
* ???&lt;br /&gt;
&lt;br /&gt;
Taint tags are stored in memory interleaved with the variables they are tracking&lt;br /&gt;
&lt;br /&gt;
Some standard Data Flow technique is used to propagate these tags, especially as one variable that is marked may be assigned to another, so now that variable needs to be tracked as well.&lt;br /&gt;
&lt;br /&gt;
Tracks explicit flows of data, not implicit&lt;br /&gt;
	To fully capture implicit flows, you need to do static analysis, which is hard with closed-source apps, and cannot be done real-time&lt;br /&gt;
	&lt;br /&gt;
Implicit flows are not tracked&lt;br /&gt;
* Implicit flows can involve &amp;quot;taint-scope&amp;quot;, tracking based on conditionals in code&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
=== Performance ===&lt;br /&gt;
&lt;br /&gt;
The goal is to create a real time tracking system, so the TaintDroid&#039;s performance impact is of some importance&lt;br /&gt;
&lt;br /&gt;
14% CPU overhead&lt;br /&gt;
4.4% memory overhead&lt;br /&gt;
&lt;br /&gt;
Macro benchmarks  (to get a feel for what the phone&#039;s usability is like with TD running)&lt;br /&gt;
* App load:  3%  (2ms) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Findings ===&lt;br /&gt;
&lt;br /&gt;
20 out of 30 tested applications share data in a way that is not expected.&lt;br /&gt;
&lt;br /&gt;
67 of 105 flagged pieces of data leaving the device had no obviously legitimate purpose (verified by the authors).&lt;br /&gt;
&lt;br /&gt;
Many apps sent location data and other unique identifiers to advertising servers.&lt;br /&gt;
&lt;br /&gt;
Most apps do not mention anything to the user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Limitations ===&lt;br /&gt;
&lt;br /&gt;
Tracks only explicit data flows.&lt;br /&gt;
&lt;br /&gt;
An application *could* launder the tags off of the data, if they really wanted to hide this sort of thing from TaintDroid.&lt;br /&gt;
&lt;br /&gt;
There are methods that could be used to protect against this, but they go against the goal of a light-weight, real-time tracking system.  TD is not necessarily about catching truly malicious programs, but rather just those that leak information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why do apps take this information?&lt;br /&gt;
* Lazy;  in the demo video, the wallpaper app seems to use the IMEI just as a ready made unique ID&lt;br /&gt;
* Overzealous;  the developer might thing they *need* the data for something, but actually &lt;br /&gt;
* Ads;  advertises do seem a little presumptuous in their data collection&lt;br /&gt;
* Spying;  bosses or spouses&lt;br /&gt;
* Malicious;  &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
=== QA Period ===&lt;br /&gt;
&lt;br /&gt;
Q:  how do we prevent a malicious app from removing a taint attribute on a file&lt;br /&gt;
&lt;br /&gt;
A:  TD operates a too low a level for this to be a problem;  TD assumes that the native code is trusted&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q:  It seems like you had a lot of false positives&lt;br /&gt;
&lt;br /&gt;
A:  The point of this tool was to identify privacy sensitive information as having left the phone, not whether or not a privacy violation has taken place.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q: Now that TD is released; couldn&#039;t malicious apps use some of the methods described in the paper to get around it?    &lt;br /&gt;
&lt;br /&gt;
A: Well, yes, but it is not just about maliciousness, it could just laziness or over-zealous ad stuff.&lt;br /&gt;
&lt;br /&gt;
==Other Information==&lt;br /&gt;
&lt;br /&gt;
Hey guys, thought I would just post a generalized paragraph about our essay.&lt;br /&gt;
&lt;br /&gt;
In today’s society, Smartphones are the new big thing. To me that’s what makes this paper so interesting. This paper focuses on private information in android phones and the misuse of this information. The misuse of information includes the SIM card, the ID of the device, or the phone number. TaintDroid is used on smart phones with an efficient taint tracking and analysis system. It has the ability to track sensitive data from multiple sources and examines the misuse of such data. In their study, out of 80 popular third-party applications, TaintDroid monitored that 68 applications had potential misuse of user’s private data. This tool is great for knowing with applications are safe and which are not, so your private data can remained private.&lt;br /&gt;
&lt;br /&gt;
Also, we should really think of splitting up the work in some way. If some people have specific sections they would like to do lets figure that out now so we can divide the workload and get it done over the next couple of days. I don&#039;t personally care what part I&#039;m going to have to do, so lets get this going. Any other information people wanna post feel free the more the better, even if we don&#039;t end up using it.&lt;br /&gt;
&lt;br /&gt;
[[user:Tmalone|Trevor Malone]]&lt;/div&gt;</summary>
		<author><name>Cling</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=COMP_3000_Essay_2_2010_Question_8&amp;diff=5593</id>
		<title>COMP 3000 Essay 2 2010 Question 8</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=COMP_3000_Essay_2_2010_Question_8&amp;diff=5593"/>
		<updated>2010-11-26T04:46:06Z</updated>

		<summary type="html">&lt;p&gt;Cling: Added a Contribution Section to the Essay&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Paper=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;TaintDroid: An Information-Flow Tracking System for Realtime Privacy Monitoring on Smartphones&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Authors:&lt;br /&gt;
* William Enck, &#039;&#039;The Pennsylvania State University&#039;&#039;&lt;br /&gt;
* Peter Gilbert, &#039;&#039;Duke University&#039;&#039;&lt;br /&gt;
* Byung-Gon Chun, &#039;&#039;Intel Labs&#039;&#039;&lt;br /&gt;
* Landon P. Cox, &#039;&#039;Duke University&#039;&#039;&lt;br /&gt;
* Jaeyeon Jung, &#039;&#039;Intel Labs&#039;&#039;&lt;br /&gt;
* Patrick McDaniel, &#039;&#039;The Pennsylvania State University&#039;&#039;&lt;br /&gt;
* Anmol N. Sheth, &#039;&#039;Intel Labs&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Official Website: http://www.appanalysis.org/&lt;br /&gt;
&lt;br /&gt;
Direct Link to Paper: http://appanalysis.org/tdroid10.pdf&lt;br /&gt;
&lt;br /&gt;
Video demonstration of TaintDroid in action: http://www.youtube.com/watch?v=qnLujX1Dw4Y&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Background Concepts=&lt;br /&gt;
As a brief glance through the paper might suggest the paper has much to do with &amp;quot;Information Flow Tracking&amp;quot; and &amp;quot;Dynamic Taint Analysis&amp;quot;.It is evident that two follow this paper ideas which form the basis of this theory have to be understood. All in all, the following two concepts can be said to be central to understanding this paper.&amp;lt;br&amp;gt;&lt;br /&gt;
*Information Flow&lt;br /&gt;
*Taint Analysis&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;Information Flow&amp;lt;/big&amp;gt;&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Information flow as the name suggests is essentially transfer of information. This transfer of information can be between two processes or withing a given process from let&#039;s say a variable x to a variable y. Information Flow Theory tries to quantify this &#039;&#039;&#039;flow&#039;&#039;&#039; of information into a mathematical model.&amp;lt;br&amp;gt; &lt;br /&gt;
In a security model the Information Flow can be categorized into:&amp;lt;br&amp;gt; &lt;br /&gt;
&#039;&#039;&#039;Explicit Flow&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Explicit Flow is when information subject to &#039;security classifications&#039; is transfered to a variable(or process) which is not subject to the same or higher level of &#039;security&#039; causing a security breach. To put simply explicit flow is when &#039;secure&#039; information is transferred so that it is publicly observable.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;A Pseudo Code Example:&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;PRIVATE VAR &amp;lt;big&amp;gt;secure&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
PUBLIC VAR &amp;lt;big&amp;gt;notsecure&amp;lt;br&amp;gt;&lt;br /&gt;
notsecure=secure&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
In the information in &amp;lt;i&amp;gt;&#039;secure&#039;&amp;lt;/i&amp;gt; which is PRIVATE is transferred to &amp;lt;i&amp;gt;&#039;notsecure&#039;&amp;lt;/i&amp;gt; which is PUBLIC which is an &#039;Information Leak&#039;. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Implicit Flow&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Implicit Flow is when the information subject to &#039;security classifications&#039; is deduced indirectly. In this the leakage of information is through the program control flow. Depending on the flow of the program the secure information is compromised.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;A Pseudo Code Example:&amp;lt;/i&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;PRIVATE VAR &amp;lt;big&amp;gt;secure&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
PUBLIC VAR &amp;lt;big&amp;gt;notsecure&amp;lt;br&amp;gt;&lt;br /&gt;
if secure=&amp;quot;blah blah&amp;quot; then:&amp;lt;br&amp;gt;&lt;br /&gt;
insecure=1&amp;lt;br&amp;gt;&lt;br /&gt;
else:&amp;lt;br&amp;gt;&lt;br /&gt;
insecure=0&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
We can deduce if information in &amp;lt;i&amp;gt;&#039;secure&#039;&amp;lt;/i&amp;gt; is &amp;lt;i&amp;gt;&amp;quot;blah blah&amp;quot;&amp;lt;/i&amp;gt; by checking the value of &#039;insecure&#039;. Information leakage due to implicit flows are much harder to detect and protect from.&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;i&amp;gt;For more on Information Flow and its Math Model refer &amp;quot;A Lattice Model of Secure Information Flow&amp;quot;&amp;lt;/i&amp;gt; [1]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&#039;&#039;&#039;&amp;lt;big&amp;gt;Taint Analysis&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Explain briefly the background concepts and ideas that your fellow classmates will need to know first in order to understand your assigned paper.&lt;br /&gt;
* Background on Information Flow Theory. Explicit and Implicit Flow.&lt;br /&gt;
* Background on the taint data tracking method, how it has been used in other systems (i.e. not phones)&lt;br /&gt;
* A reader&#039;s digest version of any new articles about this kind of security vulnerability on phones, on apps that collect more personal data than users would expect.&lt;br /&gt;
&lt;br /&gt;
=Research problem=&lt;br /&gt;
&lt;br /&gt;
In today’s society, smartphones are the new big thing.   Smartphones, by their nature, are linked into many private details of our lives, including not only classic data like our contact list, but new kinds of data unique to smartphones, such as location data.  Except for the odd tunnel or elevator, these phones are constantly connected to the internet.   Smartphones also have the ability to download and run third party applications;  indeed, this is why we call them &amp;quot;smart&amp;quot;.  When you combine third party applications with an internet connection, you suddenly find yourself unsure of how your data is being used, that is, what is to stop a third party application from disseminating our private information?   As it turns out, very little.&lt;br /&gt;
&lt;br /&gt;
A telling example of this is a wallpaper application that sends your phone number back to the developer.  Once the app is running on your phone, it can typically access any of the information on your phone, and it is not necessarily clear when it has done so, or what it is doing with it.&lt;br /&gt;
&lt;br /&gt;
The authors of this paper set out to try to understand what kind of information is being collected and where that information is being sent, and in order to do that, they first needed to build a means of tracking that information.&lt;br /&gt;
&lt;br /&gt;
The strategy they chose is called Dynamic Taint Analysis, sometimes called Taint Tracking.  The basic idea being to mark (&#039;&#039;taint&#039;&#039;) sensitive information at its source, and to then follow that mark as it moves through a system.  In the context of this paper, if ever we should see marked data leave the network interface of the phone, then we know that some sensitive information has been disseminated.&lt;br /&gt;
&lt;br /&gt;
There are many difficulties associated with implementing such a system on a smartphone.  Their design goals were to create a light-weight, minimal overhead, real-time tracking system that runs directly on a real phone, with real applications.  To be really useful, the tracking system must not impact the user experience too heavily.&lt;br /&gt;
&lt;br /&gt;
Some of the difficulties include&lt;br /&gt;
* Smart phones are resource constrained.   Processing power and memory are limited, and any processing that we do perform will consume battery power.  If the tracking system is to be real-time, and for the phone to be considered &amp;quot;usable&amp;quot; by the end user, the system must be truly light weight.&lt;br /&gt;
* Third party applications arrive in a compiled format;  we cannot analyze their source code.&lt;br /&gt;
* Applications may do complex things with the sensitive data.  It is unlikely that the application will simply read a location from the GPS and dump it straight out over the network.  More likely is that the application will use that data in someway, or combine it with other data, before it is sent.  We need to be able to track sensitive data throughout this entire process if we hope to perform any useful analysis.&lt;br /&gt;
* Applications can share information with other applications, meaning that our tracking has to work across multiple processes.&lt;br /&gt;
* The tracking must operate on a real phone, not a simulated one.  With a simulated system, where we control the virtual hardware and memory, we can be certain that we can see everything that an application might do.  On a real device, how can we get &amp;quot;low enough&amp;quot; to see everything the applications do?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;How does this problem relate to past related work?&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Contribution=&lt;br /&gt;
The contributions of the TaintDroid: An Information-Flow Tracking System for Realtime Privacy Monitoring on Smartphones paper is not that they achieved Information flow tracking but that they achieved it efficient enough to run in real time on real constrained hardware devices with minimal overheads. As stated &amp;quot;TaintDroid only incurs an approximate 14% CPU overhead and an approximate 4.4% memory overhead for simultaneously tracking 32 taint markings per data unit.&amp;quot; It should also be noted that the 14% CPU over-head is only in regards to a &amp;quot;CPU-bound micro-benchmark and imposes negligible overhead on interactive third-party applications.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This is achieved by modifying the code directly at the VM layer of the Android system to provide variable-level tracking. This allows direct control over how and what private information, such as location details from the GPS, are stored and accessed. Next they modify the JNI layer to provide message-level tracking which allows them to monitor inter-process a.k.a. inter-application communications. This also allows them to &amp;quot;patch the taint propagation on return.&amp;quot; so they can keep track of information transfer via native code. Finally modifying the network interface and secondary storage interfaces they are able to provide file-level taint tracking which enables them to ensure &amp;quot;persistent information conservatively retains its taint markings.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
By combining these three levels (variable, message and file) of taint tracking, TaintDroid was able to effectively track 30 randomly selected popular 3rd party android applications. In doing so it correctly flagged 105 instances of tainted information transmission. Of these 105, only 35 were legitimate transfers. It also determined that 50% off the applications submitted the users location to advertising servers and 5 of the applications transmitted the users device ID, phone number and SIM card serial number.&lt;br /&gt;
&lt;br /&gt;
From these outstanding numbers you can see that more effective higher granular permission systems are needed and TaintDroid is providing a step in the right direction, by providing a highly efficient real time tracking system.&lt;br /&gt;
&lt;br /&gt;
=Critique=&lt;br /&gt;
What is good and not-so-good about this paper? You may discuss both the style and content; be sure to ground your discussion with specific references. Simple assertions that something is good or bad is not enough - you must explain why.&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
[1] DENNING, D. E. [http://www.cs.georgetown.edu/~denning/infosec/lattice76.pdf A Lattice Model of Secure Information Flow].&lt;br /&gt;
Communications of the ACM 19, 5 (May 1976), 236–243.&lt;/div&gt;</summary>
		<author><name>Cling</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_2_2010_Question_8&amp;diff=5592</id>
		<title>Talk:COMP 3000 Essay 2 2010 Question 8</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_2_2010_Question_8&amp;diff=5592"/>
		<updated>2010-11-26T04:21:56Z</updated>

		<summary type="html">&lt;p&gt;Cling: /* Work In Progress */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Group Members&lt;br /&gt;
&lt;br /&gt;
Trevor Bonesaw Malone - tmalone@connect.carleton.ca //FIRST POST!&lt;br /&gt;
&lt;br /&gt;
Qi Zhang   - qzhang13@connect.carleton.ca&lt;br /&gt;
&lt;br /&gt;
Gregory Bint - gbint@connect.carleton.ca&lt;br /&gt;
&lt;br /&gt;
Gautam Akiwate - gakiwate@connect.carleton.ca&lt;br /&gt;
&lt;br /&gt;
==Relevant Sources==&lt;br /&gt;
*NEWSOME,J.,AND SONG,D.Dynamic Taint Analysis for Automatic Detection, Analysis, and Signature Generation of Exploits on Commodity Software.      [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.83.2141&amp;amp;rep=rep1&amp;amp;type=pdf Dynamic Taint Analysis for Automatic Detection]&lt;br /&gt;
&amp;lt;u&amp;gt;Seems to be THE Dynamic Taint Analysis Paper.Talks about implementation on TaintCheck. Could be also useful for critique section&amp;lt;/u&amp;gt; -[Gautam]&lt;br /&gt;
&lt;br /&gt;
== Work Plan ==&lt;br /&gt;
&lt;br /&gt;
As Trevor intimated, we should have clear division of work going forward.  This is sort of the break down as I see it.  Please edit as you think of new ideas!&lt;br /&gt;
&lt;br /&gt;
* Background Concepts&lt;br /&gt;
** Information Flow Theory. (Implicit and Explicit Flows.)&lt;br /&gt;
** What is dynamic taint analysis&lt;br /&gt;
** What is the difference between dynamic and static analysis&lt;br /&gt;
* Research Problem&lt;br /&gt;
** How do we build a DTA engine for a phone?&lt;br /&gt;
** Why do we want to?  (information misuse)&lt;br /&gt;
* Contribution&lt;br /&gt;
** How did they implement their DTA engine&lt;br /&gt;
** What did they find about information misuse&lt;br /&gt;
* Critique&lt;br /&gt;
* References&lt;br /&gt;
** The article has 61 references!  We can probably use some of them&lt;br /&gt;
&lt;br /&gt;
List of information we need to find external sources for:&lt;br /&gt;
* History of taint analysis&lt;br /&gt;
* History of privacy research relating to smart phones&lt;br /&gt;
&lt;br /&gt;
== Work In Progress ==&lt;br /&gt;
&lt;br /&gt;
Log what you are working on *right now* so that other people don&#039;t try to do the same thing.  Make sure to clear your name from here when you are done.&lt;br /&gt;
&lt;br /&gt;
* Gregory Bint:  Research Problem&lt;br /&gt;
** I&#039;ve got what you will hopefully find to be a reasonable introduction to the problem.  I&#039;ve tried to ask mostly questions here, expecting the details to be covered in Background Concepts and in Contributions.&lt;br /&gt;
** I&#039;m going to try to find some history on smart phone security research for the second part.&lt;br /&gt;
** Should we move the Research Problem *above* Background Concepts?  It might serve as a better lead in that way.&lt;br /&gt;
&lt;br /&gt;
* Gautam Akiwate:  Background Concepts&lt;br /&gt;
** Any resources on Dynamic taint Analysis would be appreciated!&lt;br /&gt;
&lt;br /&gt;
* Qi Zhang: Contributions (Corey Ling too apparently)&lt;br /&gt;
&lt;br /&gt;
* Trevor Malone: Critique&lt;br /&gt;
&lt;br /&gt;
== Some Notes from the Video ==&lt;br /&gt;
&lt;br /&gt;
Tracking of privacy sensitive data through Dynamic Taint Analysis (aka. Taint Tracking).  The trick is to mark private data as it sourced, and then follow those marks until (unless) they leave the phone.&lt;br /&gt;
	&lt;br /&gt;
Android phones run Java apps, which are compiled into DEX, and then run on top of the Dalvik VM.  It is this VM that we modify so that we can support the storage and tracking of taint tags.&lt;br /&gt;
&lt;br /&gt;
Taint sources&lt;br /&gt;
* low -bandwidth sensors&lt;br /&gt;
** Location&lt;br /&gt;
** Accelerometer&lt;br /&gt;
* High-bandwidth sensors&lt;br /&gt;
** Mic&lt;br /&gt;
** Camera&lt;br /&gt;
* Information DB&lt;br /&gt;
** Address book&lt;br /&gt;
** SMS storage&lt;br /&gt;
* Device ID&lt;br /&gt;
** IMEI&lt;br /&gt;
** IMSI   (don&#039;t actually track this one because of false positives)&lt;br /&gt;
** ICC_ID&lt;br /&gt;
** Phone Number&lt;br /&gt;
&lt;br /&gt;
Taint sink  (where marked data can leave the phone)&lt;br /&gt;
* Network Taint Sink&lt;br /&gt;
&lt;br /&gt;
Taint propagation&lt;br /&gt;
* ???&lt;br /&gt;
&lt;br /&gt;
Taint tags are stored in memory interleaved with the variables they are tracking&lt;br /&gt;
&lt;br /&gt;
Some standard Data Flow technique is used to propagate these tags, especially as one variable that is marked may be assigned to another, so now that variable needs to be tracked as well.&lt;br /&gt;
&lt;br /&gt;
Tracks explicit flows of data, not implicit&lt;br /&gt;
	To fully capture implicit flows, you need to do static analysis, which is hard with closed-source apps, and cannot be done real-time&lt;br /&gt;
	&lt;br /&gt;
Implicit flows are not tracked&lt;br /&gt;
* Implicit flows can involve &amp;quot;taint-scope&amp;quot;, tracking based on conditionals in code&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
=== Performance ===&lt;br /&gt;
&lt;br /&gt;
The goal is to create a real time tracking system, so the TaintDroid&#039;s performance impact is of some importance&lt;br /&gt;
&lt;br /&gt;
14% CPU overhead&lt;br /&gt;
4.4% memory overhead&lt;br /&gt;
&lt;br /&gt;
Macro benchmarks  (to get a feel for what the phone&#039;s usability is like with TD running)&lt;br /&gt;
* App load:  3%  (2ms) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Findings ===&lt;br /&gt;
&lt;br /&gt;
20 out of 30 tested applications share data in a way that is not expected.&lt;br /&gt;
&lt;br /&gt;
67 of 105 flagged pieces of data leaving the device had no obviously legitimate purpose (verified by the authors).&lt;br /&gt;
&lt;br /&gt;
Many apps sent location data and other unique identifiers to advertising servers.&lt;br /&gt;
&lt;br /&gt;
Most apps do not mention anything to the user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Limitations ===&lt;br /&gt;
&lt;br /&gt;
Tracks only explicit data flows.&lt;br /&gt;
&lt;br /&gt;
An application *could* launder the tags off of the data, if they really wanted to hide this sort of thing from TaintDroid.&lt;br /&gt;
&lt;br /&gt;
There are methods that could be used to protect against this, but they go against the goal of a light-weight, real-time tracking system.  TD is not necessarily about catching truly malicious programs, but rather just those that leak information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Why do apps take this information?&lt;br /&gt;
* Lazy;  in the demo video, the wallpaper app seems to use the IMEI just as a ready made unique ID&lt;br /&gt;
* Overzealous;  the developer might thing they *need* the data for something, but actually &lt;br /&gt;
* Ads;  advertises do seem a little presumptuous in their data collection&lt;br /&gt;
* Spying;  bosses or spouses&lt;br /&gt;
* Malicious;  &lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
=== QA Period ===&lt;br /&gt;
&lt;br /&gt;
Q:  how do we prevent a malicious app from removing a taint attribute on a file&lt;br /&gt;
&lt;br /&gt;
A:  TD operates a too low a level for this to be a problem;  TD assumes that the native code is trusted&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q:  It seems like you had a lot of false positives&lt;br /&gt;
&lt;br /&gt;
A:  The point of this tool was to identify privacy sensitive information as having left the phone, not whether or not a privacy violation has taken place.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Q: Now that TD is released; couldn&#039;t malicious apps use some of the methods described in the paper to get around it?    &lt;br /&gt;
&lt;br /&gt;
A: Well, yes, but it is not just about maliciousness, it could just laziness or over-zealous ad stuff.&lt;br /&gt;
&lt;br /&gt;
==Other Information==&lt;br /&gt;
&lt;br /&gt;
Hey guys, thought I would just post a generalized paragraph about our essay.&lt;br /&gt;
&lt;br /&gt;
In today’s society, Smartphones are the new big thing. To me that’s what makes this paper so interesting. This paper focuses on private information in android phones and the misuse of this information. The misuse of information includes the SIM card, the ID of the device, or the phone number. TaintDroid is used on smart phones with an efficient taint tracking and analysis system. It has the ability to track sensitive data from multiple sources and examines the misuse of such data. In their study, out of 80 popular third-party applications, TaintDroid monitored that 68 applications had potential misuse of user’s private data. This tool is great for knowing with applications are safe and which are not, so your private data can remained private.&lt;br /&gt;
&lt;br /&gt;
Also, we should really think of splitting up the work in some way. If some people have specific sections they would like to do lets figure that out now so we can divide the workload and get it done over the next couple of days. I don&#039;t personally care what part I&#039;m going to have to do, so lets get this going. Any other information people wanna post feel free the more the better, even if we don&#039;t end up using it.&lt;br /&gt;
&lt;br /&gt;
[[user:Tmalone|Trevor Malone]]&lt;/div&gt;</summary>
		<author><name>Cling</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=COMP_3000_Lab_4_2010&amp;diff=4847</id>
		<title>COMP 3000 Lab 4 2010</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=COMP_3000_Lab_4_2010&amp;diff=4847"/>
		<updated>2010-11-01T18:01:41Z</updated>

		<summary type="html">&lt;p&gt;Cling: /* Upstart/init */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All of the following should be done with an Ubuntu 10.04 distribution or equivalent.  We recommend experimenting in a virtual environment because some of the exercises could make your system unbootable.  (In fact, take a snapshot of your working system before starting these exercises so you can easily revert.)&lt;br /&gt;
&lt;br /&gt;
==Questions==&lt;br /&gt;
&lt;br /&gt;
# Change the grub command line at boot to limit the total available RAM to 256M.  You&#039;ll need to get to select an entry and edit it from within grub.&lt;br /&gt;
# Add a new grub menu item which limits the standard kernel to 256M.&lt;br /&gt;
# Add a second virtual disk and make it bootable: put the kernel and initial ram disk on it and then install grub.  Can you boot off of this disk?  What does it do?  &lt;br /&gt;
# Examine the standard kernel&#039;s initial ram disk (initrd).  What program is first run in this environment?  What does it do?&lt;br /&gt;
# Modify the standard initial RAM disk so it pauses for 10 seconds and prints a message to the console on boot.&lt;br /&gt;
# What programs does upstart start on boot?&lt;br /&gt;
&lt;br /&gt;
==Hints==&lt;br /&gt;
&lt;br /&gt;
Please add your hints below to help your fellow students!&lt;br /&gt;
&lt;br /&gt;
===Kernel command line options===&lt;br /&gt;
&lt;br /&gt;
===GRUB configuration===&lt;br /&gt;
&lt;br /&gt;
*On Ubuntu the user configuration is stored in /etc/default/grub.  The main grub files are stored in /boot/grub.  You can update grub&#039;s config with the update-grub command.&lt;br /&gt;
&lt;br /&gt;
===How GRUB works===&lt;br /&gt;
&lt;br /&gt;
===Making a disk bootable===&lt;br /&gt;
&lt;br /&gt;
===Examining RAM disks===&lt;br /&gt;
&lt;br /&gt;
*Ubuntu (Debian) store initial RAM disks in the cpio format.  &#039;zcat &amp;lt;file&amp;gt; | cpio -i&#039; will extract its contents.&lt;br /&gt;
&lt;br /&gt;
===Upstart/init===&lt;br /&gt;
&lt;br /&gt;
Upstart &amp;quot;jobs&amp;quot; are config (.conf) files in /etc/init that require one of two options an &amp;quot;exec&amp;quot; line or a &amp;quot;script&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The exec line allows the upstart to just simply execute a script elsewhere, while script allows you to shell script in the upstart job.&lt;br /&gt;
&lt;br /&gt;
A special upstart job is rc.conf which maintains the original runlevel init.d scripts. You will see that rc.conf simply executes all the /etc/init.d scripts.&lt;br /&gt;
&lt;br /&gt;
See more on upstart jobs at http://upstart.ubuntu.com/getting-started.html&lt;/div&gt;</summary>
		<author><name>Cling</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=4159</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=4159"/>
		<updated>2010-10-14T23:13:28Z</updated>

		<summary type="html">&lt;p&gt;Cling: /* 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;
----&lt;br /&gt;
==== ====&lt;br /&gt;
(Not complete but most of article 9)&lt;br /&gt;
Classical Virtualization&lt;br /&gt;
* VMMs allow programs in virtual environments to run natively other than resource usage&lt;br /&gt;
** Dominant instructions executed directly on cpu&lt;br /&gt;
** vmm completely controls system resources&lt;br /&gt;
** often need to emulate every native instruction which would severely effect the performance&lt;br /&gt;
** sensitive instruction that violate safety and encapsulation&lt;br /&gt;
** vmm handles them as priviledged instructions&lt;br /&gt;
&lt;br /&gt;
x86 Virtualization&lt;br /&gt;
* virtualization in personal work stations rather than mainframes&lt;br /&gt;
** rings that allow isolation between virtual machines&lt;br /&gt;
** most privileged in ring 0 and least in ring 3. The operating system runs in ring 0 and user apps in ring 3&lt;br /&gt;
*** vmm in ring 0 and vms in lesser privilege rings (1 or 3)&lt;br /&gt;
*** guestOS believes its in ring 0&lt;br /&gt;
* address space compression, where to run the VMM&lt;br /&gt;
** if run using guest address space, guest can find out its virtualized or compromise the isolation&lt;br /&gt;
* does not trap all sensitive instructions but can handle them, violates classical virtualization description&lt;br /&gt;
* some privileged access fail without faulting&lt;br /&gt;
* interrupt virtualization - VMM handles AND guestOS handles&lt;br /&gt;
* binary translation - improve performance&lt;br /&gt;
* rewriting instructions and trapping before problems arrise&lt;br /&gt;
&lt;br /&gt;
Paravirtualization&lt;br /&gt;
* guestOS become exposed to vm information so that the guest is aware that it is virtualized and can make decisions based on this&lt;br /&gt;
* allows to avoid problem instructions&lt;br /&gt;
* Xen&lt;br /&gt;
* guestOS must be modified and is not natively running&lt;br /&gt;
**works with the hostOS to run efficiently&lt;br /&gt;
&lt;br /&gt;
VMM types&lt;br /&gt;
* hostedVMM - executes in hostOS and uses the drivers and support of the OS&lt;br /&gt;
* Stand-aloneVMM - runs directly on hardware and uses it&#039;s own drivers and services&lt;br /&gt;
* hybridVMM - runs a serviceOS where requests to hardware go through (I/O)&lt;br /&gt;
&lt;br /&gt;
Device Emulation&lt;br /&gt;
* implement real hardware in software&lt;br /&gt;
* completely virtual device that the guest interacts with&lt;br /&gt;
* mapped to physical hardware that handles the interactions but the emulation allows conversion&lt;br /&gt;
* allows the vm to be easily migrated between machines as it does not rely on the physical hardware&lt;br /&gt;
* allows having multiple vms and simplifies sharing (multiplexing)&lt;br /&gt;
* poor performance as the vmm needs to do a lot to virtulize the machine&lt;br /&gt;
&lt;br /&gt;
Paravirtualization&lt;br /&gt;
* modified guestOS to cooperate with VMM &lt;br /&gt;
* VMM does not have to do everything to handle device drivers&lt;br /&gt;
* not everything can be paravirtualized&lt;br /&gt;
* proprietary os and device drivers can&#039;t be paravirtualized&lt;br /&gt;
* still allows an increase in performance&lt;br /&gt;
* eventing or callback mechanism&lt;br /&gt;
** guestOS modifies interrupt mechs&lt;br /&gt;
* modifications are not applicable to all guestOS&lt;br /&gt;
&lt;br /&gt;
Dedicated Devices&lt;br /&gt;
* does not virtualize device but assigns directly to guest vm&lt;br /&gt;
* uses guest&#039;s drivers instead of host&lt;br /&gt;
* simplifiest vmm by removing handing of i/o securily&lt;br /&gt;
* limited physical devices that can be dedicated&lt;br /&gt;
* dificult to migrate vm as it depends on the pairing with this resource&lt;br /&gt;
* elims over-head of virtualization and simplicity in vmm&lt;br /&gt;
* direct memory access not supported&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;
[8]&amp;lt;nowiki&amp;gt;Microkernel verses monolithic kernel&lt;br /&gt;
http://www.vmars.tuwien.ac.at/courses/akti12/journal/04ss/article_04ss_Roch.pdf  - Roch&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I will site it/reference it better later&lt;br /&gt;
&lt;br /&gt;
[9]Fisher-Ogden J. 2006. Hardware Support for Efficient Virtualization. University of California, San Diego. http://cseweb.ucsd.edu/~jfisherogden/hardwareVirt.pdf&lt;br /&gt;
&lt;br /&gt;
Not completely sure of the citation style used above.&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;
Aaron .L&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;
In Computer Science, the kernel is the component at the center of  the majority of operating systems. The kernel is a bridge for applications to access the hardware level. It is responsible for managing the system&#039;s resources such as memory, disk storage, task management and networking. We are comparing Exokernels to Microkernels and Virtual Machines by looking at how the kernel goes about such management and its connections. In the Exokernel conceptual model, we can see exokernels become much smaller than microkernels because as this design shows, they are tiny and strive to keep functionality limited to protection and multiplexing of resources. The Virtual Machine Implementation of virtualizing all devices on the system may provide compatibility, but it also adds a layer of complexity within the system. This is less efficient than a real machine as it accesses the hardware indirectly. It can be observed by examining how the exokernel provides low level hardware access and provides custom abstraction to those devices. This is done in order to improve program performance as opposed to a VM&#039;s implementation. The exokernel concept has a design that can take the better concepts of microkernels and virtual machines to the extent that exokernels can be seen as a compromise between a virtual machine and a microkernel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Paragraph 1 -Microkernel -Jon S.&lt;br /&gt;
&lt;br /&gt;
The kernel is the most important part of an operating system. An operating system could not function without the kernel.  &lt;br /&gt;
&lt;br /&gt;
A kernel is the lowest level section of an operating system.   Within a system, it has the most privileges.  It runs along side of the ‘user space’. It is in the ‘user space’ where a user has access. This is also where the user can run its applications and libraries.[8]  This leaves the kernel with the need to manage the other necessary processes. For example, the kernel could manage the File Systems and complete process scheduling.  The kernel is layered with the most authoritative process on its lowest level.[8]  A monolithic kernel, which is a kernel that contains all mandatory processes within itself, was the common kernel type of the earlier versions of today’s operating systems utilized.  However, this architecture had problems. [8]  If the kernel needed to be updated with more code, or a change in the system, the entire kernel would need to be compiled. Therefore, due to the amount of processes within it, it would take an inefficient amount of time.  Here, a microkernel becomes practical.&lt;br /&gt;
&lt;br /&gt;
The concept of a microkernel, is to reduce  the code within the kernel. The microkernel is only included in the kernel if it would impact the system. There are a variety of ways the system could be affected if a microkernel were to be implemented, for example, there would be increased performance and efficiency. [7] Furthermore, a microkernel is a kernel that has a reduced amount of mandatory software within itself.  This means that it contains less software to manage, and has a reduced size.  &lt;br /&gt;
&lt;br /&gt;
A microkernel that emerged at the end of the 1980’s to the early 1990’s has the structure that processes as if the File Systems and the Drivers are removed from it, leaving the kernel with process control and input/out control, and interrupts. [8] This new structure makes the system much more modular, and easier to provide solutions.  If a driver must be patched or upgraded, the kernel does not need to be recompiled. [7] The old driver can be removed, and during the time the device waits for the system to recognize it, the operating system replaces the driver.  This allows for real-time updating, that can be done while the computer is still functional.  This can reduce the complete crash of the system.  Therefore,if a device fails, the kernel will not crash itself, like a monolithic kernel would.  The microkernel can reload the driver of the device that failed and continue functioning.  [7]  &lt;br /&gt;
&lt;br /&gt;
Want more on the scheduling?  I can do that if wanted. -key note on exokernel&#039;s mutiplexing vs microkernel&#039;s messaging, exo more efficient so perhaps running with the idea that messaging b/w processes not necessarily the ideal way need to also start outlaying weaknesses in the design as well in order to play up the idea that an exokernel just does it better -Slade&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Paragraph 2 -Virtual Machine -Steph L.&lt;br /&gt;
&lt;br /&gt;
A Virtual Machine, or VM, is a software abstraction of a physical machine. This entails virtualization of the physical machines resources in order to share them among OS run in the VM. Virtualizing these resources allow the OS to run as if it were on a full machine when, in reality, it is actually running in a virtualized environment on top of a hostOS. The OS is actually running on the machine, sharing the resources.&lt;br /&gt;
&lt;br /&gt;
Virtual Machines generally contain two key components; both the Virtual Machine Monitor, or VMM and the VM.&lt;br /&gt;
&lt;br /&gt;
The VMM, also known as the hypervisor, manages the virtualization of the physical resources and the interactions with the VM running on top. [4] In other words, it mediates between the virtualized world and the physical world, keeping them separate and monitoring their interactions with each other. The hypervisor is what allows the VM to operate as if it were on its&#039; own machine. This is done by handling any requests to resources and maintaining these requests with what has actually been provided to the VM, by the hostOS.  The hostOS provides management for the VMM, as well as, allowing physical access to devices, hardware and drivers. [6]&lt;br /&gt;
&lt;br /&gt;
The VM, is what contains the OS, we are running through virtualization. [6] This OS is called the guestOS. It will only be able to access any resources that have been made available to the VM by the hostOS. [6] Otherwise, the guestOS will not know about any other resources and does not have direct access to physical hardware. This will be taken care of by the VMM. While, the guestOS will execute as its own machine, unaware of this mediator.&lt;br /&gt;
&lt;br /&gt;
There are various ways of implementing hardware virtualization in a system to allow VMs to run. This includes device emulation, paravirtualization and dedicated devices. [9]&lt;br /&gt;
&lt;br /&gt;
In device emulation the VMM provides a complete virtualization of a device for the guestOS to interact with, in the software. [9] The VMM will map this virtualized device to the physical resource and handle any interactions between them. This will usually include converting instructions from the guestOS into instructions that are compatible with the device. [9] Device emulation allows for the VM to be migrated easily to another machine as it is not dependent on the physical devices but rather, on the software emulations instead. [9] It also allows for simpler multiplexing between multiple virtual machines as it can handle sharing though these virtualized devices. [9] A drawback of emulation, however, is poor performance. This is because the VMM must handle every request and convert them to be compatible with the physical device. [9] Nonetheless, despite its poor performance, emulation is still the most common form of virtualization.&lt;br /&gt;
&lt;br /&gt;
Paravirtualization allows for a boost in performance by having the guestOS and the hostOS work together to improve performance. [9] In paravirtualization, the guestOS is not a native OS and must be modified so guestOS is aware that it is a virtualized system. [9] Since the guestOS is aware of this, it can now make better decisions about how it accesses devices. Seeing as the guestOS will be able to handle its decisions better, the VMM’s responsibility is reduced as it now does not have to translate between the guestOS and the physical devices. [9] Though the performance boost is a great advantage, there are many disadvantages to this. Some disadvantages are that you can only use paravirtualization if you can implement the modifications to the guestOS. As well, not everything can be paravirtualized and as such, this limits the cases in which this method can be used. [9] Also, every guestOS must be modified in order to be used in paravirtualization. The modifications will differ in various OS and so, there is also the task of implementing these changes to make a guestOS compatible. [9]&lt;br /&gt;
&lt;br /&gt;
Instead of virtualizing the hardware and mediating between the VMM, dedicated devices allow mapping directly to the guestOS. [9] In this method, the device will use the guestOS’s drivers instead of the hostOS’s. [9] Using this method allows the guestOS to use the hardware to its full extent, without having to deal with the VMM. This then, simplifies the VMM by eliminating the overhead by virtualizating the hardware and handling the requests to devices. [9] However, there are limited physical resources to be dedicated to a guestOS. This also makes migration difficult as the guestOS is dependent on the physical device. [9]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;notes&#039;&#039;&#039;&lt;br /&gt;
- it ended up being quite lengthy. I mainly focused on the device virtualization rather than the architecture of a VM (like x86 virtualization). I&#039;ll put up my notes for the paper I found for virtualization. I didn&#039;t talk about Xen or VMware though. If any of that is needed, I can try to continue working on it tonight but I have another priority.&lt;br /&gt;
&lt;br /&gt;
-try focusing on the emulation side of VM where emulation&#039;s weaknesses vs direct hardware access or custom abstraction that exokernels -Slade&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Paragraph 3 -Exokernel -Corey L&lt;br /&gt;
&lt;br /&gt;
Exokernels can be seen as a compromise between a microkernel and a VM. It can also be seen as simply dividing a monolithic kernel up into 2 parts. The management tasks of the kernel remain in the exokernel, these are the raw resource management tasks such as memory management. While the higher level abstractions such as file systems, address spaces, and interprocess communication is done at the application level[1]. These abstractions are usually provided by library OSs which allow applications to handle their own machine resources in ways not possible with the traditional kernel. Which in turn can cause large performance boosts in several areas which will be shown below. &lt;br /&gt;
&lt;br /&gt;
The exokernel walks this fine line between management and control by only providing three functions for accessing the machine&#039;s resources. It will only track ownership of resources, ensure protection by guarding all resource usage and bind points and revoke access to the resources. [1] By doing so the exokernel allows the library OSs maximum freedom over the machine&#039;s resources without allowing them to interfere with one another&#039;s resources as you would see in an unmanaged system.&lt;br /&gt;
&lt;br /&gt;
Through these three functions the exokernel can control and allow many different situations. By tracking the ownership of the resources the exokernel can export privileged instructions to the library OS so that traditional OS abstractions can be implemented as well as allowing application based resource management which is the best way to build flexible and efficient systems all while avoiding resource management except when inter-library conflict protection is required to maintain system integrity.[1] By exposing the allocation and the raw resources and their physical names to the application layer the exokernel is able to allow the library to request physical resources which removes the expensive overhead that is involved with translating the virtual names to their physical names [3] also the physical names capture more useful information and are safer and less resource intensive. [3] Finally by exposing revocation the exokernel allows well behaved library OSs to preform application level resource management [1] and allows the library OS to choose what instance of the resource to release[1].&lt;br /&gt;
&lt;br /&gt;
Not only does the exokernel benefit from it&#039;s decreased task load but the library OSs also experience several benefits compared to operating on a microkernel or VM. Library OSs running on an exokernel have a reduction in the number of kernel crossings compared to a microkernel[1] also since the library OS is not trusted by the exokernel it can then be trusted by the application. While a library OS may choose to handle low level management tasks it self, there is still a notion of portability for applications working with the library OSs such that applications that use a library OS that has implement standard interfaces, such as POSIX, will be portable on any system with the same interface [1] and a library OS 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;
Exokernels follow the same design pattern of removing unnecessary code from within the kernel but without the same kernel to user space communication issues that microkernels experience. They also provide through their library OSs a simple yet effective way to emulate several different types of physical resource handling methods similar to virtual machines.&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;br /&gt;
&lt;br /&gt;
Sweet.  Looks like we got it covered.  We should read each others parts and put suggestions and edits. One of us should try and change it to one style if there are contradictions. And to put it on the main page.  We can figure that out tomorrow.  - Jon S&lt;br /&gt;
&lt;br /&gt;
Once the other parts are up and you see anything you know of as a good reference to back it up, put the link so we can use it. -Slade&lt;br /&gt;
&lt;br /&gt;
I made some edits to the first two paragraphs. I just reworded some of the unclear sentences and some grammatical errors. I&#039;ll work on editing more of it after comp 3007. Also when all the parts are up i can go through it and link the paragraphs together so it can be read more like an essay  --[[User:Aellebla|Aellebla]] 15:18, 14 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
So far so good, if you find some sentences that are off, go ahead and correct them, just note to us in here that you&#039;ve made changes. Almost done guys! -Slade&lt;br /&gt;
&lt;br /&gt;
Awesome Steph!  Also, Awesome Corey, sounds sweet, looks good-JSlonosky&lt;br /&gt;
&lt;br /&gt;
==Potential Test Questions==&lt;br /&gt;
&lt;br /&gt;
Add potential test questions here:&lt;/div&gt;</summary>
		<author><name>Cling</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=4138</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=4138"/>
		<updated>2010-10-14T22:37:24Z</updated>

		<summary type="html">&lt;p&gt;Cling: /* 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;
----&lt;br /&gt;
==== ====&lt;br /&gt;
(Not complete but most of article 9)&lt;br /&gt;
Classical Virtualization&lt;br /&gt;
* VMMs allow programs in virtual environments to run natively other than resource usage&lt;br /&gt;
** Dominant instructions executed directly on cpu&lt;br /&gt;
** vmm completely controls system resources&lt;br /&gt;
** often need to emulate every native instruction which would severely effect the performance&lt;br /&gt;
** sensitive instruction that violate safety and encapsulation&lt;br /&gt;
** vmm handles them as priviledged instructions&lt;br /&gt;
&lt;br /&gt;
x86 Virtualization&lt;br /&gt;
* virtualization in personal work stations rather than mainframes&lt;br /&gt;
** rings that allow isolation between virtual machines&lt;br /&gt;
** most privileged in ring 0 and least in ring 3. The operating system runs in ring 0 and user apps in ring 3&lt;br /&gt;
*** vmm in ring 0 and vms in lesser privilege rings (1 or 3)&lt;br /&gt;
*** guestOS believes its in ring 0&lt;br /&gt;
* address space compression, where to run the VMM&lt;br /&gt;
** if run using guest address space, guest can find out its virtualized or compromise the isolation&lt;br /&gt;
* does not trap all sensitive instructions but can handle them, violates classical virtualization description&lt;br /&gt;
* some privileged access fail without faulting&lt;br /&gt;
* interrupt virtualization - VMM handles AND guestOS handles&lt;br /&gt;
* binary translation - improve performance&lt;br /&gt;
* rewriting instructions and trapping before problems arrise&lt;br /&gt;
&lt;br /&gt;
Paravirtualization&lt;br /&gt;
* guestOS become exposed to vm information so that the guest is aware that it is virtualized and can make decisions based on this&lt;br /&gt;
* allows to avoid problem instructions&lt;br /&gt;
* Xen&lt;br /&gt;
* guestOS must be modified and is not natively running&lt;br /&gt;
**works with the hostOS to run efficiently&lt;br /&gt;
&lt;br /&gt;
VMM types&lt;br /&gt;
* hostedVMM - executes in hostOS and uses the drivers and support of the OS&lt;br /&gt;
* Stand-aloneVMM - runs directly on hardware and uses it&#039;s own drivers and services&lt;br /&gt;
* hybridVMM - runs a serviceOS where requests to hardware go through (I/O)&lt;br /&gt;
&lt;br /&gt;
Device Emulation&lt;br /&gt;
* implement real hardware in software&lt;br /&gt;
* completely virtual device that the guest interacts with&lt;br /&gt;
* mapped to physical hardware that handles the interactions but the emulation allows conversion&lt;br /&gt;
* allows the vm to be easily migrated between machines as it does not rely on the physical hardware&lt;br /&gt;
* allows having multiple vms and simplifies sharing (multiplexing)&lt;br /&gt;
* poor performance as the vmm needs to do a lot to virtulize the machine&lt;br /&gt;
&lt;br /&gt;
Paravirtualization&lt;br /&gt;
* modified guestOS to cooperate with VMM &lt;br /&gt;
* VMM does not have to do everything to handle device drivers&lt;br /&gt;
* not everything can be paravirtualized&lt;br /&gt;
* proprietary os and device drivers can&#039;t be paravirtualized&lt;br /&gt;
* still allows an increase in performance&lt;br /&gt;
* eventing or callback mechanism&lt;br /&gt;
** guestOS modifies interrupt mechs&lt;br /&gt;
* modifications are not applicable to all guestOS&lt;br /&gt;
&lt;br /&gt;
Dedicated Devices&lt;br /&gt;
* does not virtualize device but assigns directly to guest vm&lt;br /&gt;
* uses guest&#039;s drivers instead of host&lt;br /&gt;
* simplifiest vmm by removing handing of i/o securily&lt;br /&gt;
* limited physical devices that can be dedicated&lt;br /&gt;
* dificult to migrate vm as it depends on the pairing with this resource&lt;br /&gt;
* elims over-head of virtualization and simplicity in vmm&lt;br /&gt;
* direct memory access not supported&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;
[8]&amp;lt;nowiki&amp;gt;Microkernel verses monolithic kernel&lt;br /&gt;
http://www.vmars.tuwien.ac.at/courses/akti12/journal/04ss/article_04ss_Roch.pdf  - Roch&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I will site it/reference it better later&lt;br /&gt;
&lt;br /&gt;
[9]Fisher-Ogden J. 2006. Hardware Support for Efficient Virtualization. University of California, San Diego. http://cseweb.ucsd.edu/~jfisherogden/hardwareVirt.pdf&lt;br /&gt;
&lt;br /&gt;
Not completely sure of the citation style used above.&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;
Aaron .L&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;
In Computer Science, the kernel is the component at the center of  the majority of operating systems. The kernel is a bridge for applications to access the hardware level. It is responsible for managing the system&#039;s resources such as memory, disk storage, task management and networking. We are comparing Exokernels to Microkernels and Virtual Machines by looking at how the kernel goes about such management and its connections. In the Exokernel conceptual model, we can see exokernels become much smaller than microkernels because as this design shows, they are tiny and strive to keep functionality limited to protection and multiplexing of resources. The Virtual Machine Implementation of virtualizing all devices on the system may provide compatibility, but it also adds a layer of complexity within the system. This is less efficient than a real machine as it accesses the hardware indirectly. It can be observed by examining how the exokernel provides low level hardware access and provides custom abstraction to those devices. This is done in order to improve program performance as opposed to a VM&#039;s implementation. The exokernel concept has a design that can take the better concepts of microkernels and virtual machines to the extent that exokernels can be seen as a compromise between a virtual machine and a microkernel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Paragraph 1 -Microkernel -Jon S.&lt;br /&gt;
&lt;br /&gt;
The kernel is the most important part of an operating system. An operating system could not function without the kernel.  &lt;br /&gt;
&lt;br /&gt;
A kernel is the lowest level section of an operating system.   Within a system, it has the most privileges.  It runs along side of the ‘user space’. It is in the ‘user space’ where a user has access. This is also where the user can run its applications and libraries.[8]  This leaves the kernel with the need to manage the other necessary processes. For example, the kernel could manage the File Systems and complete process scheduling.  The kernel is layered with the most authoritative process on its lowest level.[8]  A monolithic kernel, which is a kernel that contains all mandatory processes within itself, was the common kernel type of the earlier versions of today’s operating systems utilized.  However, this architecture had problems. [8]  If the kernel needed to be updated with more code, or a change in the system, the entire kernel would need to be compiled. Therefore, due to the amount of processes within it, it would take an inefficient amount of time.  Here, a microkernel becomes practical.&lt;br /&gt;
&lt;br /&gt;
The concept of a microkernel, is to reduce  the code within the kernel. The microkernel is only included in the kernel if it would impact the system. There are a variety of ways the system could be affected if a microkernel were to be implemented, for example, there would be increased performance and efficiency. [7] Furthermore, a microkernel is a kernel that has a reduced amount of mandatory software within itself.  This means that it contains less software to manage, and has a reduced size.  &lt;br /&gt;
&lt;br /&gt;
A microkernel that emerged at the end of the 1980’s to the early 1990’s has the structure that processes as if the File Systems and the Drivers are removed from it, leaving the kernel with process control and input/out control, and interrupts. [8] This new structure makes the system much more modular, and easier to provide solutions.  If a driver must be patched or upgraded, the kernel does not need to be recompiled. [7] The old driver can be removed, and during the time the device waits for the system to recognize it, the operating system replaces the driver.  This allows for real-time updating, that can be done while the computer is still functional.  This can reduce the complete crash of the system.  Therefore,if a device fails, the kernel will not crash itself, like a monolithic kernel would.  The microkernel can reload the driver of the device that failed and continue functioning.  [7]  &lt;br /&gt;
&lt;br /&gt;
Want more on the scheduling?  I can do that if wanted. -key note on exokernel&#039;s mutiplexing vs microkernel&#039;s messaging, exo more efficient so perhaps running with the idea that messaging b/w processes not necessarily the ideal way need to also start outlaying weaknesses in the design as well in order to play up the idea that an exokernel just does it better -Slade&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Paragraph 2 -Virtual Machine -Steph L.&lt;br /&gt;
&lt;br /&gt;
A Virtual Machine, or VM, is a software abstraction of a physical machine. This entails virtualization of the physical machines resources in order to share them among OS run in the VM. Virtualizing these resources allow the OS to run as if it were on a full machine when, in reality, it is actually running in a virtualized environment on top of a hostOS. The OS is actually running on the machine, sharing the resources.&lt;br /&gt;
&lt;br /&gt;
Virtual Machines generally contain two key components; both the Virtual Machine Monitor, or VMM and the VM.&lt;br /&gt;
&lt;br /&gt;
The VMM, also known as the hypervisor, manages the virtualization of the physical resources and the interactions with the VM running on top. [4] In other words, it mediates between the virtualized world and the physical world, keeping them separate and monitoring their interactions with each other. The hypervisor is what allows the VM to operate as if it were on its&#039; own machine. This is done by handling any requests to resources and maintaining these requests with what has actually been provided to the VM, by the hostOS.  The hostOS provides management for the VMM, as well as, allowing physical access to devices, hardware and drivers. [6]&lt;br /&gt;
&lt;br /&gt;
The VM, is what contains the OS, we are running through virtualization. [6] This OS is called the guestOS. It will only be able to access any resources that have been made available to the VM by the hostOS. [6] Otherwise, the guestOS will not know about any other resources and does not have direct access to physical hardware. This will be taken care of by the VMM. While, the guestOS will execute as its own machine, unaware of this mediator.&lt;br /&gt;
&lt;br /&gt;
There are various ways of implementing hardware virtualization in a system to allow VMs to run. This includes device emulation, paravirtualization and dedicated devices. [9]&lt;br /&gt;
&lt;br /&gt;
In device emulation the VMM provides a complete virtualization of a device for the guestOS to interact with, in the software. [9] The VMM will map this virtualized device to the physical resource and handle any interactions between them. This will usually include converting instructions from the guestOS into instructions that are compatible with the device. [9] Device emulation allows for the VM to be migrated easily to another machine as it is not dependent on the physical devices but rather, on the software emulations instead. [9] It also allows for simpler multiplexing between multiple virtual machines as it can handle sharing though these virtualized devices. [9] A drawback of emulation, however, is poor performance. This is because the VMM must handle every request and convert them to be compatible with the physical device. [9] Nonetheless, despite its poor performance, emulation is still the most common form of virtualization.&lt;br /&gt;
&lt;br /&gt;
Paravirtualization allows for a boost in performance by having the guestOS and the hostOS work together to improve performance. [9] In paravirtualization, the guestOS is not a native OS and must be modified so guestOS is aware that it is a virtualized system. [9] Since the guestOS is aware of this, it can now make better decisions about how it accesses devices. Seeing as the guestOS will be able to handle its decisions better, the VMM’s responsibility is reduced as it now does not have to translate between the guestOS and the physical devices. [9] Though the performance boost is a great advantage, there are many disadvantages to this. Some disadvantages are that you can only use paravirtualization if you can implement the modifications to the guestOS. As well, not everything can be paravirtualized and as such, this limits the cases in which this method can be used. [9] Also, every guestOS must be modified in order to be used in paravirtualization. The modifications will differ in various OS and so, there is also the task of implementing these changes to make a guestOS compatible. [9]&lt;br /&gt;
&lt;br /&gt;
Instead of virtualizing the hardware and mediating between the VMM, dedicated devices allow mapping directly to the guestOS. [9] In this method, the device will use the guestOS’s drivers instead of the hostOS’s. [9] Using this method allows the guestOS to use the hardware to its full extent, without having to deal with the VMM. This then, simplifies the VMM by eliminating the overhead by virtualizating the hardware and handling the requests to devices. [9] However, there are limited physical resources to be dedicated to a guestOS. This also makes migration difficult as the guestOS is dependent on the physical device. [9]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;notes&#039;&#039;&#039;&lt;br /&gt;
- it ended up being quite lengthy. I mainly focused on the device virtualization rather than the architecture of a VM (like x86 virtualization). I&#039;ll put up my notes for the paper I found for virtualization. I didn&#039;t talk about Xen or VMware though. If any of that is needed, I can try to continue working on it tonight but I have another priority.&lt;br /&gt;
&lt;br /&gt;
-try focusing on the emulation side of VM where emulation&#039;s weaknesses vs direct hardware access or custom abstraction that exokernels -Slade&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Paragraph 3 -Exokernel -Corey L&lt;br /&gt;
&lt;br /&gt;
(This is only half, I have a Bell Tech here working on my internet. I will finish when he leaves)&lt;br /&gt;
&lt;br /&gt;
Exokernels can be seen as a compromise between a microkernel and a VM. It can also be seen as simply dividing a monolithic kernel up into 2 parts. The management tasks of the kernel remain in the exokernel, these are the raw resource management tasks such as memory management. While the higher level abstractions such as file systems, address spaces, and interprocess communication is done at the application level[1]. These abstractions are usually provided by library OSs which allow applications to handle their own machine resources in ways not possible with the traditional kernel. Which in turn can cause large performance boosts in several areas which will be shown below. &lt;br /&gt;
&lt;br /&gt;
The exokernel walks this fine line between management and control by only providing three functions for accessing the machine&#039;s resources. It will only track ownership of resources, ensure protection by guarding all resource usage and bind points and revoke access to the resources. [1] By doing so the exokernel allows the library OSs maximum freedom over the machine&#039;s resources without allowing them to interfere with one another&#039;s resources as you would see in an unmanaged system.&lt;br /&gt;
&lt;br /&gt;
Through these three functions the exokernel can control and allow many different situations. By tracking the ownership of the resources the exokernel can export privileged instructions to the library OS so that traditional OS abstractions can be implemented as well as allowing application based resource management which is the best way to build flexible and efficient systems all while avoiding resource management except when inter-library conflict protection is required to maintain system integrity.[1] By exposing the allocation and the raw resources and their physical names to the application layer the exokernel is able to allow LibOs to request physical resources &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&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;br /&gt;
&lt;br /&gt;
Sweet.  Looks like we got it covered.  We should read each others parts and put suggestions and edits. One of us should try and change it to one style if there are contradictions. And to put it on the main page.  We can figure that out tomorrow.  - Jon S&lt;br /&gt;
&lt;br /&gt;
Once the other parts are up and you see anything you know of as a good reference to back it up, put the link so we can use it. -Slade&lt;br /&gt;
&lt;br /&gt;
I made some edits to the first two paragraphs. I just reworded some of the unclear sentences and some grammatical errors. I&#039;ll work on editing more of it after comp 3007. Also when all the parts are up i can go through it and link the paragraphs together so it can be read more like an essay  --[[User:Aellebla|Aellebla]] 15:18, 14 October 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
So far so good, if you find some sentences that are off, go ahead and correct them, just note to us in here that you&#039;ve made changes. Almost done guys! -Slade&lt;br /&gt;
&lt;br /&gt;
Awesome Steph!  -JSlonosky&lt;br /&gt;
&lt;br /&gt;
==Potential Test Questions==&lt;br /&gt;
&lt;br /&gt;
Add potential test questions here:&lt;/div&gt;</summary>
		<author><name>Cling</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3474</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=3474"/>
		<updated>2010-10-14T00:35:21Z</updated>

		<summary type="html">&lt;p&gt;Cling: /* 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;
* 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;
&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 -unassigned&lt;br /&gt;
&lt;br /&gt;
Paragraph 3 -Exokernel -Corey L&lt;br /&gt;
&lt;br /&gt;
Conclusion -unassigned&lt;/div&gt;</summary>
		<author><name>Cling</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3451</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=3451"/>
		<updated>2010-10-14T00:21:12Z</updated>

		<summary type="html">&lt;p&gt;Cling: /* 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;
== 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 -unassigned&lt;br /&gt;
&lt;br /&gt;
Paragraph 3 -Exokernel -Corey L&lt;br /&gt;
&lt;br /&gt;
Conclusion -unassigned&lt;/div&gt;</summary>
		<author><name>Cling</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3431</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=3431"/>
		<updated>2010-10-13T23:33:13Z</updated>

		<summary type="html">&lt;p&gt;Cling: /* 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;
* 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;
== 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>Cling</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3421</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=3421"/>
		<updated>2010-10-13T23:14:01Z</updated>

		<summary type="html">&lt;p&gt;Cling: /* 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;
* 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;
== 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>Cling</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Talk:COMP_3000_Essay_1_2010_Question_1&amp;diff=3349</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=3349"/>
		<updated>2010-10-13T21:12:13Z</updated>

		<summary type="html">&lt;p&gt;Cling: Introduction&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 I posted. Will work on this more tonight - Slay]&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;
== 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>Cling</name></author>
	</entry>
</feed>