<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.itcollege.ee/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Smets</id>
	<title>ICO wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.itcollege.ee/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Smets"/>
	<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php/Special:Contributions/Smets"/>
	<updated>2026-05-07T07:50:30Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Htop,_the_successor_of_top&amp;diff=103325</id>
		<title>Htop, the successor of top</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Htop,_the_successor_of_top&amp;diff=103325"/>
		<updated>2016-05-08T17:07:03Z</updated>

		<summary type="html">&lt;p&gt;Smets: /* Installing htop on Ubuntu and a quick guide */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[File:htop.png|thumb|right|alt= Screenshot of htop in action|Screenshot of htop in action]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt;, like &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; (table of processes), is a simple command on the command line designed for Linux, OS X, FreeBSD, OpenBSD. It is used to monitor the system and get an overview over processes happening inside the computer live. &amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; shows how much processing power and memory are being used, as well as other information about the running processes. The information gathered is ordered by CPU usage.&lt;br /&gt;
  &lt;br /&gt;
It was developed by Hisham Muhammad around May 2004 but the most stable version of it was released in early 2016. Both &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; are written in C and both of them are used for the same purposes and act as a task manager, hence the question: why do we need two of the same kind?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; is being constantly updated and tweaked by the developer to give you a better experience.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Comparison between htop and top ==&lt;br /&gt;
&lt;br /&gt;
The question stated above will find its answer here where we compare htop and top:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.&#039;&#039;&#039; In &amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; you can scroll the list vertically and horizontally to see all processes and complete command lines.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2.&#039;&#039;&#039; In &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; you are subject to a delay for each unassigned key you press (especially annoying when multi-key escape sequences are triggered by accident).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3.&#039;&#039;&#039;  &amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; starts faster (&amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; seems to collect data for a while before displaying anything).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;4.&#039;&#039;&#039; In &amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; you don&#039;t need to type the process number to kill a process, in &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; you do.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;5.&#039;&#039;&#039; In &amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; you don&#039;t need to type the process number or the priority value to renice a process, in &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; you do.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;6.&#039;&#039;&#039;  &amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; supports mouse operation, &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; doesn&#039;t.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;7.&#039;&#039;&#039;  &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; is older, hence, more used and tested.&lt;br /&gt;
&lt;br /&gt;
=== Conclusion ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; is just like &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt;, but greatly improved visually and performance wise, including interactivity and the support of mouse operations.&lt;br /&gt;
&lt;br /&gt;
== Installing htop on Ubuntu and a quick guide ==&lt;br /&gt;
&#039;&#039;&#039;1.&#039;&#039;&#039; You can either grab the source code from the htop website (See Also section) or you can do it the easy way and install it with apt-get&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install htop&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And that&#039;s the only step you need to take! Now you can enjoy a greatly improved graph. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.&#039;&#039;&#039; Type &amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; on your command line to start it up.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2.&#039;&#039;&#039; Move up and down with your arrow keys to select a process and with htop you have the ability to kill your processes with the F9 key. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3.&#039;&#039;&#039; You can even change the priority of the process by using the F7 and F8 keys. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;4.&#039;&#039;&#039; You can also use the F6 key to change the default sort column.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
http://hisham.hm/htop/&lt;br /&gt;
&lt;br /&gt;
== References == &lt;br /&gt;
&lt;br /&gt;
https://en.wikipedia.org/wiki/Htop&lt;br /&gt;
&lt;br /&gt;
http://hisham.hm/htop/index.php?page=comparison&lt;br /&gt;
&lt;br /&gt;
https://en.wikipedia.org/wiki/Top_(software)&lt;br /&gt;
&lt;br /&gt;
Article created by Sander Mets, C11, EIK.&lt;br /&gt;
&lt;br /&gt;
[[Category:Operatsioonisüsteemide administreerimine ja sidumine]]&lt;/div&gt;</summary>
		<author><name>Smets</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Htop,_the_successor_of_top&amp;diff=103324</id>
		<title>Htop, the successor of top</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Htop,_the_successor_of_top&amp;diff=103324"/>
		<updated>2016-05-08T16:22:28Z</updated>

		<summary type="html">&lt;p&gt;Smets: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[File:htop.png|thumb|right|alt= Screenshot of htop in action|Screenshot of htop in action]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt;, like &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; (table of processes), is a simple command on the command line designed for Linux, OS X, FreeBSD, OpenBSD. It is used to monitor the system and get an overview over processes happening inside the computer live. &amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; shows how much processing power and memory are being used, as well as other information about the running processes. The information gathered is ordered by CPU usage.&lt;br /&gt;
  &lt;br /&gt;
It was developed by Hisham Muhammad around May 2004 but the most stable version of it was released in early 2016. Both &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; are written in C and both of them are used for the same purposes and act as a task manager, hence the question: why do we need two of the same kind?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; is being constantly updated and tweaked by the developer to give you a better experience.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Comparison between htop and top ==&lt;br /&gt;
&lt;br /&gt;
The question stated above will find its answer here where we compare htop and top:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.&#039;&#039;&#039; In &amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; you can scroll the list vertically and horizontally to see all processes and complete command lines.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2.&#039;&#039;&#039; In &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; you are subject to a delay for each unassigned key you press (especially annoying when multi-key escape sequences are triggered by accident).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3.&#039;&#039;&#039;  &amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; starts faster (&amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; seems to collect data for a while before displaying anything).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;4.&#039;&#039;&#039; In &amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; you don&#039;t need to type the process number to kill a process, in &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; you do.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;5.&#039;&#039;&#039; In &amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; you don&#039;t need to type the process number or the priority value to renice a process, in &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; you do.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;6.&#039;&#039;&#039;  &amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; supports mouse operation, &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; doesn&#039;t.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;7.&#039;&#039;&#039;  &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; is older, hence, more used and tested.&lt;br /&gt;
&lt;br /&gt;
=== Conclusion ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; is just like &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt;, but greatly improved visually and performance wise, including interactivity and the support of mouse operations.&lt;br /&gt;
&lt;br /&gt;
== Installing htop on Ubuntu and a quick guide ==&lt;br /&gt;
&#039;&#039;&#039;1.&#039;&#039;&#039; You can either grab the source code from the htop website or you can do it the easy way and install it with apt-get&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install htop&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And that&#039;s the only step you need to take! Now you can enjoy a greatly improved graph. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.&#039;&#039;&#039; Type &amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; on your command line to start it up.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2.&#039;&#039;&#039; Move up and down with your arrow keys to select a process and with htop you have the ability to kill your processes with the F9 key. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3.&#039;&#039;&#039; You can even change the priority of the process by using the F7 and F8 keys. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;4.&#039;&#039;&#039; You can also use the F6 key to change the default sort column.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
http://hisham.hm/htop/&lt;br /&gt;
&lt;br /&gt;
== References == &lt;br /&gt;
&lt;br /&gt;
https://en.wikipedia.org/wiki/Htop&lt;br /&gt;
&lt;br /&gt;
http://hisham.hm/htop/index.php?page=comparison&lt;br /&gt;
&lt;br /&gt;
https://en.wikipedia.org/wiki/Top_(software)&lt;br /&gt;
&lt;br /&gt;
Article created by Sander Mets, C11, EIK.&lt;br /&gt;
&lt;br /&gt;
[[Category:Operatsioonisüsteemide administreerimine ja sidumine]]&lt;/div&gt;</summary>
		<author><name>Smets</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Htop,_the_successor_of_top&amp;diff=103315</id>
		<title>Htop, the successor of top</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Htop,_the_successor_of_top&amp;diff=103315"/>
		<updated>2016-05-08T15:29:44Z</updated>

		<summary type="html">&lt;p&gt;Smets: Created page with &amp;quot;__NOTOC__ Screenshot of htop in action  &amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt;, like &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; (table of processes), is a sim...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[File:htop.png|thumb|right|alt= Screenshot of htop in action|Screenshot of htop in action]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt;, like &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; (table of processes), is a simple command on the command line designed for Linux, OS X, FreeBSD, OpenBSD. It is used to monitor the system and get an overview over processes happening inside the computer live. &amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; shows how much processing power and memory are being used, as well as other information about the running processes. The information gathered is ordered by CPU usage.&lt;br /&gt;
  &lt;br /&gt;
It was developed by Hisham Muhammad around May 2004 but the most stable version of it was released in early 2016. Both &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; are written in C and both of them are used for the same purposes and act as a task manager, hence the question: why do we need two of the same kind?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; is being constantly updated and tweaked by the developer to give you a better experience.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Comparison between htop and top ==&lt;br /&gt;
&lt;br /&gt;
The question stated above will find its answer here where we compare htop and top:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.&#039;&#039;&#039; In &amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; you can scroll the list vertically and horizontally to see all processes and complete command lines.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2.&#039;&#039;&#039; In &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; you are subject to a delay for each unassigned key you press (especially annoying when multi-key escape sequences are triggered by accident).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3.&#039;&#039;&#039;  &amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; starts faster (&amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; seems to collect data for a while before displaying anything).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;4.&#039;&#039;&#039; In &amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; you don&#039;t need to type the process number to kill a process, in &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; you do.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;5.&#039;&#039;&#039; In &amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; you don&#039;t need to type the process number or the priority value to renice a process, in &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; you do.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;6.&#039;&#039;&#039;  &amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; supports mouse operation, &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; doesn&#039;t.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;7.&#039;&#039;&#039;  &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt; is older, hence, more used and tested.&lt;br /&gt;
&lt;br /&gt;
=== Conclusion ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; is just like &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt;, but greatly improved visually and performance wise, including interactivity and the support of mouse operations.&lt;br /&gt;
&lt;br /&gt;
== Installing htop on Ubuntu and a quick guide ==&lt;br /&gt;
&#039;&#039;&#039;1.&#039;&#039;&#039; You can either grab the source code from the htop website or you can do it the easy way and install it with apt-get&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install htop&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And that&#039;s the only step you need to take! Now you can enjoy a greatly improved graph. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.&#039;&#039;&#039; Type &amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; on your command line to start it up.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2.&#039;&#039;&#039; Move up and down with your arrow keys to select a process and with htop you have the ability to kill your processes with the F9 key. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3.&#039;&#039;&#039; You can even change the priority of the process by using the F7 and F8 keys. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;4.&#039;&#039;&#039; You can also use the F6 key to change the default sort column.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
http://hisham.hm/htop/&lt;br /&gt;
&lt;br /&gt;
== References == &lt;br /&gt;
&lt;br /&gt;
https://en.wikipedia.org/wiki/Htop&lt;br /&gt;
&lt;br /&gt;
http://hisham.hm/htop/index.php?page=comparison&lt;br /&gt;
&lt;br /&gt;
https://en.wikipedia.org/wiki/Top_(software)&lt;/div&gt;</summary>
		<author><name>Smets</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:Htop.png&amp;diff=103312</id>
		<title>File:Htop.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:Htop.png&amp;diff=103312"/>
		<updated>2016-05-08T14:24:55Z</updated>

		<summary type="html">&lt;p&gt;Smets: Smets uploaded a new version of File:Htop.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Smets</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Category:I600_Introduction_to_Computers_and_Informatics&amp;diff=100945</id>
		<title>Category:I600 Introduction to Computers and Informatics</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Category:I600_Introduction_to_Computers_and_Informatics&amp;diff=100945"/>
		<updated>2016-01-26T19:39:10Z</updated>

		<summary type="html">&lt;p&gt;Smets: /* Grading */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this course we&#039;ll give an introduction to variety of topics from hardware to software.&lt;br /&gt;
The course will follow roughly the same structure as [https://lagunita.stanford.edu/courses/Engineering/CS101/Summer2014/about Computer Science 101 at Stanford University] with more hands-on approach. This course substitutes Estonian courses I100 Sissejuhatus informaatikasse and [http://www.pld.ttu.ee/~teet/itarvutid.html I201 Arvutid].&lt;br /&gt;
&lt;br /&gt;
Monday lectures will cover more theoretical stuff;&lt;br /&gt;
Thursday workshops are for getting started with new topics;&lt;br /&gt;
the homework assignments connect theoretical with practice and&lt;br /&gt;
Tuesday sessions are for follow up, asking/answering questions and presenting homework.&lt;br /&gt;
Attendance won&#039;t be tracked, the sessions are there if you need help.&lt;br /&gt;
Bring your laptops for Tuesday and Thursday sessions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Course credits: 6 ECTS&lt;br /&gt;
&lt;br /&gt;
Lecturer: Lauri Võsandi&lt;br /&gt;
&lt;br /&gt;
E-mail: lauri [donut] vosandi [plus] i600 [ät] gmail [dotchka] com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Grading=&lt;br /&gt;
&lt;br /&gt;
Grade mapping:&lt;br /&gt;
&lt;br /&gt;
* 0-50 points, fail&lt;br /&gt;
* 51-60 points, pass 1&lt;br /&gt;
* 61-70 points, satisfactory 2&lt;br /&gt;
* 71-80 points, average 3&lt;br /&gt;
* 81-90 points, good 4&lt;br /&gt;
* 91-100 points, very good 5&lt;br /&gt;
&lt;br /&gt;
Grading is split between theory and practice&lt;br /&gt;
&lt;br /&gt;
* Exam of 50 points, preparation in lectures and general discussion in workshops.&lt;br /&gt;
* Assignments, see instructions and points below.&lt;br /&gt;
* Extra points for improving quality of wiki articles, extracurricular work and also helping others, see points below.&lt;br /&gt;
&lt;br /&gt;
Exam will be halfway between oral and written: You&#039;ll be given 30 minutes to prepare for several random questions and 15 minutes to discuss what you&#039;ve answered.&lt;br /&gt;
If you don&#039;t have prior experience with the topics, it&#039;s highly recommended to take part of the sessions in order to pass the exam. You can use a calculator and this wiki page, don&#039;t rely on the access to terminal or other software tools. You can not access Internet or any remote computers.&lt;br /&gt;
&lt;br /&gt;
Exam sections:&lt;br /&gt;
&lt;br /&gt;
* Execution of ~10 processor instructions&lt;br /&gt;
* Bunch of randomly selected questions from this page&lt;br /&gt;
* Bunch of questions (how much RAM, how big disk, what wireless chipset) asked about a computer you&#039;ll be given&lt;br /&gt;
* Gain SSH access to a machine on the network, basic text file editing skills using nano&lt;br /&gt;
&lt;br /&gt;
Retake times 27th of January:&lt;br /&gt;
&lt;br /&gt;
* 12. jan 14:00 -&lt;br /&gt;
* 12. jan 14:30 -&lt;br /&gt;
* 12. jan 15:00 -&lt;br /&gt;
* 12. jan 15:30 - Sander Mets&lt;br /&gt;
* 13. jan 16:00 - Kristjan Saaremets&lt;br /&gt;
* 13. jan 16:30 -&lt;br /&gt;
* 13. jan 17:00 -&lt;br /&gt;
* 13. jan 17:30 - Indrek Taal&lt;br /&gt;
&lt;br /&gt;
=Lecture: Computer hardware=&lt;br /&gt;
&lt;br /&gt;
Jargon: CPU, RAM, ROM, HDD, SSD, PCI, PCI Express, USB 2.0, USB 3.0, VGA, HDMI, DVI, LCD, TFT, LED, OLED, AMOLED, CRT, PWM&lt;br /&gt;
&lt;br /&gt;
[https://echo360.e-ope.ee/ess/echo/presentation/beef71c3-044c-43c9-a326-e1e62cbb5c9b Lecture recording #1]&lt;br /&gt;
&lt;br /&gt;
[https://echo360.e-ope.ee/ess/echo/presentation/36786bbb-84b6-4604-be6f-c363bf22ce8d Lecture recording #2 starting 12:30]&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/presentation/d/1OzaqTBAUfMOzhG0HZeSJVSszCmFyn4ug35teYJWkyfM/edit?usp=sharing Lecture slides] Random access memory, permanent storage, buses, input devices, display technologies, networking&lt;br /&gt;
&lt;br /&gt;
Potential exam questions:&lt;br /&gt;
&lt;br /&gt;
* Different buses and their uses&lt;br /&gt;
* What are the differences between hard disk drive (HDD) and solid state drive (SSD)? [http://www.storagereview.com/ssd_vs_hdd]&lt;br /&gt;
* What is the purpose of Flash Translation Layer in terms of solid state drives?&lt;br /&gt;
* What are difference between volatile/non-volatile, RAM, ROM, EEPROM and where are they used?&lt;br /&gt;
* What is data retention?&lt;br /&gt;
* What are difference between asynchronous/synchronous, dynamic/static RAM and where are they used?&lt;br /&gt;
* What is [https://compsci2014.wikispaces.com/2.1.3+Explain+the+use+of+cache+memory cache]? What is cache coherence?&lt;br /&gt;
* What are differences between resistive and capacitive touchscreen? [http://www.alphr.com/realworld/357325/capacitive-or-resistive-whats-the-best-type-of-touchscreen]&lt;br /&gt;
* Explain how [http://www.bidouille.org/hack/mousecam computer mouse] works? [http://www.topdesignmag.com/mouse-history-in-photos/ History of computer mouse].&lt;br /&gt;
* Explain how [http://www.daskeyboard.com/blog/typing-through-time-the-history-of-the-keyboard/ computer keyboard] works? [http://computer.howstuffworks.com/keyboard.htm HowStuffworks article] [http://www.explainthatstuff.com/computerkeyboards.html Explain that Stuff article] [http://www.daskeyboard.com/blog/typing-through-time-the-history-of-the-keyboard/ Keyboard History]&lt;br /&gt;
* Explain how [https://en.wikipedia.org/wiki/Cathode_ray_tube cathode ray tube] (CRT) based screen technology works and name pros/cons. [https://www.youtube.com/watch?v=2czqYV3T_Kc]&lt;br /&gt;
* Explain how [https://en.wikipedia.org/wiki/Liquid-crystal_display liquid crystal displays] (LCD) work and name pros/cons. [https://www.youtube.com/watch?v=nCHgmCxGEzY]&lt;br /&gt;
* Name screen technologies making use of thin film transistor (TFT) technology? [https://en.wikipedia.org/wiki/Thin-film_transistor]&lt;br /&gt;
* Name uses for light polarization filters? [https://en.wikipedia.org/wiki/Polarizing_filter_%28photography%29] [https://en.wikipedia.org/wiki/Polarized_3D_system] &lt;br /&gt;
* What are the benefits of [https://en.wikipedia.org/wiki/Twisted_pair twisted pair cabling] and [https://en.wikipedia.org/wiki/Differential_signaling differential signalling]?&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Active_matrix Active matrix] vs [https://en.wikipedia.org/wiki/Passive_matrix_addressing passive matrix] in display technology&lt;br /&gt;
&lt;br /&gt;
Security section: [http://www.bunniestudios.com/blog/?p=3554 Hacking SD cards]&lt;br /&gt;
&lt;br /&gt;
Assignments:&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/I600_Introduction_to_Computers_and_Informatics#Assignment:_Investigating_PC_hardware Investigating PC hardware]&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/I600_Introduction_to_Computers_and_Informatics#Assignment:_Investigating_embedded_hardware Investigating embedded hardware]&lt;br /&gt;
&lt;br /&gt;
=Lecture: Storage abstractions=&lt;br /&gt;
&lt;br /&gt;
In this lecture we&#039;ll talk about permanent storage abstractions: block device, disk, partition, file system, directory/folder, file, journaling, FAT32, NTFS, ext4, HFS+&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/presentation/d/1dJ-HMSR9nW8OuZtSTYf5dlFyPsZKGqxlKoEwIHi9h6k/ Lecture slides] &lt;br /&gt;
&lt;br /&gt;
[https://echo360.e-ope.ee/ess/echo/presentation/36786bbb-84b6-4604-be6f-c363bf22ce8d Lecture recording] starts at 47:50.&lt;br /&gt;
&lt;br /&gt;
* What is a [https://en.wikipedia.org/wiki/Block_%28data_storage%29 block device]?&lt;br /&gt;
* What is [https://en.wikipedia.org/wiki/Logical_block_addressing logical block addressing] and what are the benefits compared to older [https://en.wikipedia.org/wiki/Cylinder-head-sector cylinder-head-sector addressing] method in terms of harddisks?&lt;br /&gt;
* What is a [https://en.wikipedia.org/wiki/Disk_partitioning disk partition]?&lt;br /&gt;
* What is a [https://en.wikipedia.org/wiki/File_system file system]?&lt;br /&gt;
* What is [https://en.wikipedia.org/wiki/Journaling_file_system#Write_hazards journaling] in terms of filesystems and what are the benefits? Name some journaled filesystems in use nowadays.&lt;br /&gt;
&lt;br /&gt;
=Lecture: Bootloaders, kernels=&lt;br /&gt;
&lt;br /&gt;
In this lecture we&#039;ll discuss how a computer boots and how an operating system kernel is loaded.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://echo360.e-ope.ee/ess/echo/presentation/04eeebd1-c892-485a-9123-03abaa3ce3ca Lecture recording #1], first half we&#039;ll discuss about first assignment about investigating PC hardware, slides start at 43:40.&lt;br /&gt;
&lt;br /&gt;
[https://echo360.e-ope.ee/ess/echo/presentation/26f1d40d-7830-4e5c-b783-e061c1e91cfc Lecture recording #2], first 15 minutes we&#039;ll discuss about second assignment about investigating embedded hardware, last slides about kernels are discussed from 16:00 up to 27:30. I forgot to switch video input for lecture recording so you&#039;ll have to browse slides from the link below :/&lt;br /&gt;
&lt;br /&gt;
Lecture slides:&lt;br /&gt;
[https://docs.google.com/presentation/d/1ybYQEqCgN1KdVW1sLdwtfRogavgzzMQdUfTcAnxNAf4/ bootloaders],&lt;br /&gt;
[https://docs.google.com/presentation/d/1xDL27k3z_0I-IKzdjKkwhOhBrg0aOnM0w0u1zDwaEWY/ kernels].&lt;br /&gt;
&lt;br /&gt;
Jargon: [https://en.wikipedia.org/wiki/BIOS BIOS] (basic input/output system), [https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface UEFI] (Unified Extensible Firmware Interface), bootloader, kernel, process, context switch, x86 real/protected mode, paged virtual memory, swap/pagefile, [https://en.wikipedia.org/wiki/User_space kernelspace/supervisor mode, userspace], [https://en.wikipedia.org/wiki/Protection_ring#Hypervisor_mode hypervisor mode] (ring -1), [https://en.wikipedia.org/wiki/System_Management_Mode#Problems system management mode] aka (ring -2).&lt;br /&gt;
&lt;br /&gt;
Potential exam questions:&lt;br /&gt;
&lt;br /&gt;
* What is the role of BIOS/UEFI in x86-based machines?&lt;br /&gt;
* Explain step by step how operating system is booted up, see slides for flowchart.&lt;br /&gt;
* Describe the functionality provided by general purpose operating system. See architecture of [https://en.wikipedia.org/wiki/Architecture_of_Windows_NT Windows NT], [http://www.elinux.org/Android_Architecture Android], [https://en.wikipedia.org/wiki/Architecture_of_OS_X OS X].&lt;br /&gt;
* What are the main differences between [https://en.wikipedia.org/wiki/Real_mode real mode] and [https://en.wikipedia.org/wiki/Protected_mode protected mode] of x86-based processor?&lt;br /&gt;
* What happens during context switch?&lt;br /&gt;
* What is the purpose of [https://en.wikipedia.org/wiki/Virtual_memory paged virtual memory]?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Security section: [https://en.wikipedia.org/wiki/DMA_attack DMA attack], [http://www.outsidaz.org/blog/2007/10/22/resetting-root-password-via-grubkernel-boot-options/ editing GRUB entries to gain root shell] without password prompt, [http://www.theinquirer.net/inquirer/news/2421402/serious-intel-cpu-security-exploit-spotted-in-old-x86-chips 20 years old security exploit in x86 processors].&lt;br /&gt;
&lt;br /&gt;
=Lecture: Libraries, frameworks=&lt;br /&gt;
&lt;br /&gt;
[https://echo360.e-ope.ee/ess/echo/presentation/26f1d40d-7830-4e5c-b783-e061c1e91cfc Lecture recording #1], from 00:27:30 up to 1:04:00.&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/presentation/d/1q9kGg5AI3AyXglxpJdLjLMpgRLdbF9dl62gauNmDEG8/edit Lecture slides]&lt;br /&gt;
&lt;br /&gt;
Jargon: framework, library, [https://en.wikipedia.org/wiki/Application_binary_interface ABI], [https://en.wikipedia.org/wiki/Application_programming_interface API]&lt;br /&gt;
&lt;br /&gt;
Security section: [http://www.fiercecio.com/story/hackers-exploiting-httpsys-bug-crash-iis-web-servers/2015-04-17 HTTP.sys bug crashes IIS web servers], [http://heartbleed.com/ OpenSSL bug Heartbleed].&lt;br /&gt;
&lt;br /&gt;
=Lecture: Programming languages=&lt;br /&gt;
&lt;br /&gt;
In this lecture we&#039;ll talk about programming languages&lt;br /&gt;
&lt;br /&gt;
Lecture recording: [https://echo360.e-ope.ee/ess/echo/presentation/26f1d40d-7830-4e5c-b783-e061c1e91cfc starting from 1:04:00]&lt;br /&gt;
&lt;br /&gt;
Lecture slides: [https://docs.google.com/presentation/d/1CCZntY7Z-AG_Mice5N2kclDGYI2xVVvRHgWUIs-SxYo/edit programming languages, stack machine]&lt;br /&gt;
&lt;br /&gt;
Jargon: stack machine, lexer/lexeme, token, abstract syntax tree&lt;br /&gt;
&lt;br /&gt;
Potential exam questions:&lt;br /&gt;
&lt;br /&gt;
* What are the major steps of compilation?&lt;br /&gt;
* What are the differences between [https://en.wikipedia.org/wiki/Interpreted_language interpreted], [https://en.wikipedia.org/wiki/Just-in-time_compilation JIT-compilation] and [https://en.wikipedia.org/wiki/Compiler traditional compiling]?&lt;br /&gt;
* What is [https://en.wikipedia.org/wiki/Control_flow control flow]? Loops? Conditional statements?&lt;br /&gt;
&lt;br /&gt;
Assignments:&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Category:I600_Introduction_to_Computers_and_Informatics#Assignment:_Disassembling_Python Disassembling Python]&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Category:I600_Introduction_to_Computers_and_Informatics#Assignment:_Investigating_compilers Investigating compilers]&lt;br /&gt;
&lt;br /&gt;
=Lecture: Data encoding=&lt;br /&gt;
&lt;br /&gt;
[https://echo360.e-ope.ee/ess/echo/presentation/ca8310e9-e82e-4e47-b90a-2e1801bcfada Lecture recording]&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/presentation/d/1QV_IMOadIEUTBW7Laqw59j8J7Y8HKwvSDmP-swEEx0s Lecture slides]&lt;br /&gt;
&lt;br /&gt;
In this lecture we&#039;ll talk about bits, bytes, integers, strings, pixels, audio encodings, video encoding etc.&lt;br /&gt;
&lt;br /&gt;
Potential exam questions:&lt;br /&gt;
&lt;br /&gt;
* What is bit? Nibble? Byte? Word?&lt;br /&gt;
* Write 9375 in binary, hexadecimal?&lt;br /&gt;
* Write 0xDEADBEEF in decimal?&lt;br /&gt;
* What is [https://en.wikipedia.org/wiki/Quantization_%28signal_processing%29 quantization] in terms of signal processing?&lt;br /&gt;
* How are [https://en.wikipedia.org/wiki/Integer_%28computer_science%29 integers] stored in binary? What integer range can be described using n bits? How many bits are required to describe integer range from n .. m.&lt;br /&gt;
* How are [https://en.wikipedia.org/wiki/Single-precision_floating-point_format single precision] and [https://en.wikipedia.org/wiki/Double-precision_floating-point_format double precision] floating point numbers stored in binary according to [https://en.wikipedia.org/wiki/IEEE_floating_point IEEE754 standard]? [http://lauri.vosandi.com/hdl/arithmetic/floating-point-representation.html Floating-point multiplication]&lt;br /&gt;
* What is the difference between CMYK and RGB color models? How are YUV, HSV and HSL colorspaces related to RGB? What are sRGB and YCbCr and where are they used?&lt;br /&gt;
* How is data encoded on audio CD-s? What is the [http://lauri.vosandi.com/2013/07/audio-codecs.html capacity of an audio CD]?&lt;br /&gt;
* What is sampling rate? What is bit depth? What is resolution?&lt;br /&gt;
* What is bitrate?&lt;br /&gt;
* What is lossy/lossless compression?&lt;br /&gt;
* What is JPEG suitable for? Is JPEG lossy or lossless compression method?&lt;br /&gt;
* What is PNG suitable for? Does PNG support compression?&lt;br /&gt;
* How are time domain and frequency domain related in terms of signal processing? What is Fourier transform and where it is applied?&lt;br /&gt;
&lt;br /&gt;
Jargon: 44.1kHz sampling rate, 16-bit audio, RGB565 pixel format, RGB888 pixel format&lt;br /&gt;
&lt;br /&gt;
Relevant assignments:&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Category:I600_Introduction_to_Computers_and_Informatics#Assignment:_Disassembling_Python Disassembling Python]&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Category:I600_Introduction_to_Computers_and_Informatics#Assignment:_Investigating_compilers Investigating compilers]&lt;br /&gt;
&lt;br /&gt;
=Lecture: Code execution in processor=&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/presentation/d/18wPDLydyZevMi9F0MX7F6eK-NMBZQzGN4mviF_ft8-E/edit Lecture slides]&lt;br /&gt;
&lt;br /&gt;
[https://echo360.e-ope.ee/ess/echo/presentation/41440769-1cd5-4166-bd4e-299c2af3d3e0?ec=true Lecture recording #1]&lt;br /&gt;
&lt;br /&gt;
[https://echo360.e-ope.ee/ess/echo/presentation/7aeb2a04-b0dc-4547-9dee-e541a5f9c99a?ec=true Lecture recording #2] up to 8:35, system calls&lt;br /&gt;
&lt;br /&gt;
It&#039;s highly reccommended to play around with simulators [http://morriswmz.jit.su/static/simple-mips-pipelined.html here is one for MIPS processors].&lt;br /&gt;
&lt;br /&gt;
In this lecture we&#039;ll talk about different processor architectures, instructions, pipelining, function calls, jumps, loops etc.&lt;br /&gt;
&lt;br /&gt;
Assignments:&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Category:I600_Introduction_to_Computers_and_Informatics#Assignment:_Disassembling_Python Disassembling Python]&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Category:I600_Introduction_to_Computers_and_Informatics#Assignment:_Investigating_compilers Investigating compilers]&lt;br /&gt;
&lt;br /&gt;
Exam question:&lt;br /&gt;
&lt;br /&gt;
* Given ~10 instructions and their explainations, follow the instructions and elaborate after every step what happened in the processor?&lt;br /&gt;
&lt;br /&gt;
=Lecture: Microcontrollers=&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/presentation/d/1qPyzBBfB1TseEzXjcp4-ZjqSnAwbjDmEqyIYcUGFLG0/edit Lecture slides]&lt;br /&gt;
&lt;br /&gt;
[https://echo360.e-ope.ee/ess/echo/presentation/7aeb2a04-b0dc-4547-9dee-e541a5f9c99a?ec=true Lecture recording] starts at 8:35&lt;br /&gt;
&lt;br /&gt;
Jargon: microprocessor, microcontroller, coprocessor, floating-point unit (FPU), digital signal processor (DSP), field programmable grid array (FPGA), sensors, actuators, digital input/output, analog input, general purpose input/output (GPIO), interrupt, interrupt handler, timer/counter, pulse-width modulation (PWM), &lt;br /&gt;
&lt;br /&gt;
Potential exam question:&lt;br /&gt;
&lt;br /&gt;
* What distinguishes microcontroller from microprocessor?&lt;br /&gt;
* What are the differences between Hardvard architecture and von Neumann architecture?&lt;br /&gt;
* What is an interrupt?&lt;br /&gt;
* What is an timer?&lt;br /&gt;
&lt;br /&gt;
=Lecture: Introduction to Boole algebra=&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/presentation/d/1Y1rXvt2oXROhW-LZ07B0Sg90D-_u8SlLUZeaxds7f1g/ Lecture slides]&lt;br /&gt;
&lt;br /&gt;
Exam questions:&lt;br /&gt;
&lt;br /&gt;
* Simplify A AND A OR B&lt;br /&gt;
* Show addition of X and Y in binary&lt;br /&gt;
* Show subtraction of X and Y  in binary&lt;br /&gt;
* Show multiplication of X and Y in binary&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Assignments:&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Category:I600_Introduction_to_Computers_and_Informatics#Assignment:_Designing_arithmetic-logic_unit Designing arithmetic-logic unit]&lt;br /&gt;
&lt;br /&gt;
=Lecture: Hardware description languages=&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/presentation/d/1HO9iPfi8S3ZykuW7IHVm09QamLHiVo6s6lUGwWu4eD4/ Lecture slides]&lt;br /&gt;
&lt;br /&gt;
[https://echo360.e-ope.ee/ess/echo/presentation/b7ca9eb3-5a9d-4e8c-8c1b-25c2891359ee Lecture recording] starts at 05:00&lt;br /&gt;
&lt;br /&gt;
Potential exam questions:&lt;br /&gt;
&lt;br /&gt;
* What are the uses for hardware description languages?&lt;br /&gt;
* What is latch?&lt;br /&gt;
* What is flip-flop?&lt;br /&gt;
* What is mux (multiplexer)?&lt;br /&gt;
* What is register? Register file?&lt;br /&gt;
* What is ALU?&lt;br /&gt;
* What is floating-point unit?&lt;br /&gt;
* What is a cache?&lt;br /&gt;
* What is a bus?&lt;br /&gt;
* Show the circuit diagram for A OR B AND C, NOT A AND B, &amp;lt;insert some other Boole formula here&amp;gt;?&lt;br /&gt;
* Show the truth table for &amp;lt;insert Boole formula here&amp;gt;?&lt;br /&gt;
* Write the equivalent Boole formula of a circuit diagram.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Lecture: Publishing work=&lt;br /&gt;
&lt;br /&gt;
[https://echo360.e-ope.ee/ess/echo/presentation/cd2c0e2b-5f48-4a39-89ca-b75801e5d00b Lecture recording]&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/presentation/d/1hCqRjGUx5Yv6iZN4xaz2UICLWbycnM46ctw2zX0g94U/ Lecture slides]&lt;br /&gt;
&lt;br /&gt;
Potential exam questions:&lt;br /&gt;
&lt;br /&gt;
* What are the major implications of MIT, BSD and GPL licenses?&lt;br /&gt;
* What are the differences between copyright, trademark, trade secret?&lt;br /&gt;
* Where would you use waterfall software development model? Where would you use agile?&lt;br /&gt;
* What is the purpose of a version control system?&lt;br /&gt;
* What would you store in a version control system?&lt;br /&gt;
&lt;br /&gt;
=Lecture: Algorithms and data structures=&lt;br /&gt;
&lt;br /&gt;
[https://echo360.e-ope.ee/ess/echo/presentation/1145600e-cef9-40b4-91da-3cc1174e27eb Lecture recording] unfortunately without audio :(&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/presentation/d/1vwJvvRerM0rYBaiE3pEX5GUXRHuVJvjTUDKo8fqTq_A/ Lecture slides]&lt;br /&gt;
&lt;br /&gt;
Potential exam questions:&lt;br /&gt;
&lt;br /&gt;
* What is time complexity of algorithm?&lt;br /&gt;
* What is space complexity of algorithm?&lt;br /&gt;
* What&#039;s a good algorithm?&lt;br /&gt;
&lt;br /&gt;
=Lecture: History=&lt;br /&gt;
&lt;br /&gt;
Topics: Computer history, Silicon Valley, standards&lt;br /&gt;
&lt;br /&gt;
[https://echo360.e-ope.ee/ess/echo/presentation/584b21e6-4ead-4cb6-bc41-5c653bc5c3a2 Lecture recording]&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/presentation/d/1Ybld2ABpm9QJSLL-Bodr1a5XI5Hk_KM2q_nZVYu2L0c/edit?usp=sharing Lecture slides]&lt;br /&gt;
&lt;br /&gt;
Potential example questions:&lt;br /&gt;
&lt;br /&gt;
* What is [https://en.wikipedia.org/wiki/Moore&#039;s_law Moore&#039;s law]? What is [https://en.wikipedia.org/wiki/Rock&#039;s_law Rock&#039;s law]?&lt;br /&gt;
* What were the major contributing factors for success of Microsoft, Apple, Google, &amp;lt;your favourite company&amp;gt;?&lt;br /&gt;
* What were the major contributing factors to the success of Silicon Valley?&lt;br /&gt;
&lt;br /&gt;
=Assignment: Investigating PC hardware=&lt;br /&gt;
&lt;br /&gt;
Goal: Get familiar with your [https://en.wikipedia.org/wiki/X86 laptop hardware]. Get out of the comfort zone of your primary operating system and try out other operating systems. Learn about [https://en.wikipedia.org/wiki/Full_virtualization hardware virtualization].&lt;br /&gt;
&lt;br /&gt;
Deadline: 16. September&lt;br /&gt;
&lt;br /&gt;
Credits: 5 points plus extra point for being extra thorough about interpreting what you see.&lt;br /&gt;
&lt;br /&gt;
Use what you learned in [[Getting started with Ubuntu]] workshop:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Read the instructions before you act&#039;&#039;&#039;.&lt;br /&gt;
* Place your preferred ISO image to a memory stick using &amp;lt;code&amp;gt;dd&amp;lt;/code&amp;gt; or Win32 Disk Imager and boot it on your personal laptop. You do &#039;&#039;&#039;not&#039;&#039;&#039; need to install Ubuntu on your harddisk, simply click &#039;&#039;&#039;Try Ubuntu&#039;&#039;&#039; once the operating system boots off the memory stick and carry out following tasks.&lt;br /&gt;
* Open up terminal by pressing &amp;lt;code&amp;gt;Ctrl-Alt-T&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Use &amp;lt;code&amp;gt;lsb_release -a&amp;lt;/code&amp;gt; to check what operating system distribution you&#039;re running.&lt;br /&gt;
* Use &amp;lt;code&amp;gt;uname -sr&amp;lt;/code&amp;gt; to check what operating system kernel you&#039;re running. &lt;br /&gt;
* Use &amp;lt;code&amp;gt;cat /proc/cpuinfo&amp;lt;/code&amp;gt; and check processor information. What CPU model and how many cores your computer has?&lt;br /&gt;
* Use &amp;lt;code&amp;gt;arch&amp;lt;/code&amp;gt; to check what CPU architecture is being used by the operating system. Is it 32-bit or 64-bit?&lt;br /&gt;
* Use &amp;lt;code&amp;gt;cat /proc/meminfo&amp;lt;/code&amp;gt; to check memory usage. How much RAM your computer has?&lt;br /&gt;
* Use &amp;lt;code&amp;gt;lspci -t -v -nn&amp;lt;/code&amp;gt; to enumerate PCI and PCI Express devices, attempt to identify what is what.&lt;br /&gt;
* Use &amp;lt;code&amp;gt;lsusb&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;lsusb -t&amp;lt;/code&amp;gt; to enumerate USB devices, again attempt to identify what is what.&lt;br /&gt;
* Use &amp;lt;code&amp;gt;sudo fdisk -l&amp;lt;/code&amp;gt; to enumerate disks and partitions. How big is your harddisk? How many and how big partitions it has?&lt;br /&gt;
* Use &amp;lt;code&amp;gt;lsblk&amp;lt;/code&amp;gt; to enumerate block devices.&lt;br /&gt;
* Use &amp;lt;code&amp;gt;xrandr&amp;lt;/code&amp;gt; to enumerate display outputs. What video output resolutions are available and which one is currently used?&lt;br /&gt;
* Use &amp;lt;code&amp;gt;cat /proc/asound/cards&amp;lt;/code&amp;gt; to check which audio devices are available.&lt;br /&gt;
* Use &amp;lt;code&amp;gt;dmidecode&amp;lt;/code&amp;gt; to see even more information about your computer.&lt;br /&gt;
* Use &amp;lt;code&amp;gt;ifconfig -a&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip addr list&amp;lt;/code&amp;gt; to list all network interfaces.&lt;br /&gt;
* Use &amp;lt;code&amp;gt;iwconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;iw list&amp;lt;/code&amp;gt; to list all wireless network interfaces. Is your wireless network interface detected? If not take a guess why?&lt;br /&gt;
* Use &amp;lt;code&amp;gt;hcitool dev&amp;lt;/code&amp;gt; to list bluetooth host controller. Is your bluetooth device detected?&lt;br /&gt;
* Use &amp;lt;code&amp;gt;glxinfo&amp;lt;/code&amp;gt; to check what 3D rendering capabilities are available, is it hardware accelerated? (hint: is direct rendering enabled?)&lt;br /&gt;
* What [https://en.wikipedia.org/wiki/Sound_card audio card] is your machine using? What bus is it using?&lt;br /&gt;
* What [https://en.wikipedia.org/wiki/Graphics_processing_unit graphics controller] is your machine using? What bus is it using?&lt;br /&gt;
* What webcam is your machine using? What bus is it using?&lt;br /&gt;
* What [https://en.wikipedia.org/wiki/Ethernet wired network] chipset your computer has? What bus is it using? &lt;br /&gt;
* What [https://en.wikipedia.org/wiki/IEEE_802.11 wireless network] chipset your computer has? What bus is it using?&lt;br /&gt;
* What [https://en.wikipedia.org/wiki/Bluetooth Bluetooth] device your computer has? What bus is it using?&lt;br /&gt;
* Is there a [https://en.wikipedia.org/wiki/Mobile_broadband_modem cellular modem] connected and how it&#039;s connected?&lt;br /&gt;
* Boot the ISO image in VirtualBox and follow the same steps as above, &#039;&#039;&#039;what are the differences and why&#039;&#039;&#039;?&lt;br /&gt;
* Answer to questions above and send it as [https://en.wikipedia.org/wiki/Plain_text plain text] e-mail to Lauri, make sure you &#039;&#039;&#039;use the address supplied above with the course code&#039;&#039;&#039;, otherwise your mail is not searchable in my mailbox. Attach collected command outputs as [https://en.wikipedia.org/wiki/Plain_text plain text] file, do &#039;&#039;&#039;not&#039;&#039;&#039; send .odt, .doc files, these are not readable on my smartphone. When answering to questions phrase the text in a way that is understandable out of context, so I don&#039;t have to open up wiki to understand what you&#039;re talking about.&lt;br /&gt;
&lt;br /&gt;
Note that I can&#039;t expect you to install Ubuntu on your physical machine, but I can help if you want to do that. You should have Ubuntu ready to go in a virtual machine at least for subsequent sessions. We&#039;re using Ubuntu because it&#039;s widely used on servers and in the cloud, so any Ubuntu skills will definitely come handy in future. If you&#039;re already familiar with Linux, it&#039;s suggested to take a look at other interesting operating systems such as [https://www.freebsd.org/ FreeBSD] or [http://www.openbsd.org/ OpenBSD]. Take a look at [https://www.kali.org/ Kali Linux] if you&#039;re interested in penetration testing.&lt;br /&gt;
&lt;br /&gt;
=Assignment: Investigating embedded hardware=&lt;br /&gt;
&lt;br /&gt;
Background: Most of the smartphones nowadays are using [https://en.wikipedia.org/wiki/System_on_a_chip SoC] built around [https://en.wikipedia.org/wiki/ARM_architecture ARM] processor. Raspberry Pi is an excellent piece of hardware to for checking out how an ARM-based machine looks like.&lt;br /&gt;
&lt;br /&gt;
Goal: Get familiar with hardware ARM-based hardware.&lt;br /&gt;
&lt;br /&gt;
Deadline: 23. September&lt;br /&gt;
&lt;br /&gt;
Points: 4 points&lt;br /&gt;
&lt;br /&gt;
Use what you learned in [[Getting started with Ubuntu]] and [[Getting started with Raspberry Pi]] workshops:&lt;br /&gt;
&lt;br /&gt;
* Read the instructions before you get busy.&lt;br /&gt;
* Boot Raspbian on Raspberry Pi.&lt;br /&gt;
* Use the commands described in previous assignment to examine the environment of Raspbian on Raspberry Pi. What are the major differences compares to your laptop and virtual machine?&lt;br /&gt;
* What buses is Raspberry Pi making use of?&lt;br /&gt;
* What filesystems is Raspbian making use of?&lt;br /&gt;
* Answer to questions above and send it as e-mail to Lauri, make sure you &#039;&#039;&#039;use the address supplied above with the course code&#039;&#039;&#039;, otherwise your mail is not searchable in my mailbox. Attach collected command outputs as [https://en.wikipedia.org/wiki/Plain_text plain text] file, do &#039;&#039;&#039;not&#039;&#039;&#039; send .odt, .doc files, these are not readable on a phone. When answering to questions phrase the text in a way that is understandable out of context, so it is not necessary to open up wiki to understand what you&#039;re talking about.&lt;br /&gt;
&lt;br /&gt;
=Assignment: Investigating LAMP=&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/LAMP_%28software_bundle%29 LAMP] software bundle is consists of Linux-based OS, [https://en.wikipedia.org/wiki/Apache_HTTP_Server Apache web server], [https://en.wikipedia.org/wiki/PHP PHP programming language] runtime and [https://en.wikipedia.org/wiki/MySQL MySQL database].&lt;br /&gt;
Most of the web applications on the Internet including Facebook are built on top of LAMP-styled software stack.&lt;br /&gt;
Use a Raspberry Pi or Ubuntu virtual machine to set up [https://www.raspberrypi.org/learning/lamp-web-server-with-wordpress/ WordPress], [https://doc.owncloud.org/server/8.1/admin_manual/installation/index.html ownCloud] or any well-known web application that makes use of a database such as MySQL.&lt;br /&gt;
To make your life easier also set up SSH public key authentication.&lt;br /&gt;
&lt;br /&gt;
Goal: Get familiar with LAMP stack. Get comfortable with (SSH) public key authentication.&lt;br /&gt;
&lt;br /&gt;
Deadline: 30. September&lt;br /&gt;
&lt;br /&gt;
Points: 4 points&lt;br /&gt;
&lt;br /&gt;
Tasks:&lt;br /&gt;
&lt;br /&gt;
* If you&#039;re using Ubuntu virtual machine approach, see [[Accessing a virtual machine via SSH connection]]&lt;br /&gt;
* Use SSH to connect to your server over the network. If you&#039;re using Windows on your laptop use [http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html PuTTY] to gain access to command line and [https://winscp.net/ WinSCP] to copy files, otherwise simply boot Ubuntu in a virtual machine and use &amp;lt;code&amp;gt;ssh username@hostname&amp;lt;/code&amp;gt; to invoke commands and &amp;lt;code&amp;gt;sftp://username@hostname&amp;lt;/code&amp;gt; in the file browser to access filesystem.&lt;br /&gt;
* Set up any of the web applications referenced above. You may be interested in reading also [http://howtoubuntu.org/how-to-install-lamp-on-ubuntu this] and [https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-on-ubuntu-14-04 this].&lt;br /&gt;
* Demonstrate that the web application you installed works in next Tuesday session, screenshots/photos with explanation sent to e-mail above also suffice.&lt;br /&gt;
* Optional: Set up SSH public key authentication to &amp;lt;code&amp;gt;enos.itcollege.ee&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Optional: [https://www.raspberrypi.org/documentation/remote-access/ssh/passwordless.md Set up public key authentication to your Raspberry Pi]. Windows users might want to take a look at [https://winscp.net/eng/docs/ui_puttygen#obtaining_and_starting_puttygen PuTTYgen instructions].&lt;br /&gt;
&lt;br /&gt;
Note: You don&#039;t have to necessarily use Raspberry Pi - Web application installed in Ubuntu VM is also accepted, also if you&#039;re maintaining similar installation of a production server that is accepted as well. [http://www.wampserver.com/en/ WAMP] on Windows is also accepted.&lt;br /&gt;
&lt;br /&gt;
=Assignment: Set up basic IoT scenario=&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/Internet_of_Things Internet of Things] is one of the emerging technologies (read: hype). IoT is essentially about getting everything online, including lightbulbs, switches, window shades etc. In this assignment LED symbolizes a light and the task is to implement code which allows user to switch the LED on and off over the network.&lt;br /&gt;
&lt;br /&gt;
[[File:Raspberry-pi-gpio-18-led bb.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Goal: Get familiar how Python code can be started up. Build basic [https://en.wikipedia.org/wiki/Internet_of_Things IoT] appliance, a light that can be turned on and off via the Internet.&lt;br /&gt;
&lt;br /&gt;
Deadline: 7. October&lt;br /&gt;
&lt;br /&gt;
Points: 4 points&lt;br /&gt;
&lt;br /&gt;
* Complete the [http://codeacademy.com/tracks/python Python track at CodeAcademy] if you haven&#039;t done that yet.&lt;br /&gt;
* Follow the wiki page Blinking LED section under [[Getting started with Raspberry Pi]].&lt;br /&gt;
* Get an LED blinking on command-line.&lt;br /&gt;
* Get LED blinking from Python code.&lt;br /&gt;
* Get basic HTTP server running in Python.&lt;br /&gt;
* Combine all of the above, build an HTTP server that can be used to turn LED on and off from via web browser.&lt;br /&gt;
* Optional: Take a peek at next assignment and upload working version to GitHub.&lt;br /&gt;
* Optional: [http://sourceforge.net/p/raspberry-gpio-python/wiki/PWM/ Smoothen the transitions using PWM].&lt;br /&gt;
&lt;br /&gt;
=Assignment: Collaborating using Git=&lt;br /&gt;
&lt;br /&gt;
Software development is usually done by several contributors, to facilitate efficient collaboration a distributed version control system is a must. In this assignment you&#039;ll upload your code to GitHub and modify fellow student&#039;s code to reflect changes in the Raspberry Pi setup:&lt;br /&gt;
&lt;br /&gt;
[[File:Raspberry-pi-rgb-led bb.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Deadline: 14. October&lt;br /&gt;
&lt;br /&gt;
Points: 5&lt;br /&gt;
&lt;br /&gt;
Goal: Get familiar with distributed version control systems. Collaborate.&lt;br /&gt;
&lt;br /&gt;
* Create [https://github.com/ GitHub] account if you haven&#039;t done so yet.&lt;br /&gt;
* Create a Git repository, eg http://github.com/your-username/rpi-iot-example&lt;br /&gt;
* Install Git on your Raspberry Pi by using &amp;lt;code&amp;gt;apt-get install git&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Clone the repository to your Raspberry Pi using &amp;lt;code&amp;gt;git clone http://github.com/your-username/rpi-iot-example&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Move the Python code created earlier to the Git repository directory.&lt;br /&gt;
* Use &amp;lt;code&amp;gt;git add&amp;lt;/code&amp;gt; to add the files.&lt;br /&gt;
* Configure full name: &amp;lt;code&amp;gt;git config --global user.name &amp;quot;Firstname Surname&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* Configure e-mail: &amp;lt;code&amp;gt;git config --global user.email first.last@domain.tld&amp;lt;/code&amp;gt; &lt;br /&gt;
* Use &amp;lt;code&amp;gt;git commit&amp;lt;/code&amp;gt; to create the [http://blog.no-panic.at/2014/10/20/funny-initial-git-commit-messages/ initial commit].&lt;br /&gt;
* Use &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; to push the commits to GitHub server.&lt;br /&gt;
* Set up [https://help.github.com/articles/generating-ssh-keys/ public key authentication between your laptop and GitHub servers], verify that &amp;lt;code&amp;gt;https://github.com/username.keys&amp;lt;/code&amp;gt; gives the expected result.&lt;br /&gt;
* Use &amp;lt;code&amp;gt;git clone&amp;lt;/code&amp;gt; to clone the repository to your laptop. Ubuntu should first &amp;lt;code&amp;gt;apt-get install git&amp;lt;/code&amp;gt;, Windows and Mac users might want to take a look at [http://git-scm.com/download/ Git homepage]. If you&#039;re looking for graphical user interface take a look at [https://desktop.github.com/ GitHub Desktop] or [https://tortoisegit.org/ TortoiseGit].&lt;br /&gt;
* Create [https://en.wikipedia.org/wiki/README README] in the repository directory, populate it with relevant content - what is it about, who made it etc and commit the changes.&lt;br /&gt;
* In your Raspberry Pi setup replace the single-color LED with RGB LED as shown above.&lt;br /&gt;
* Clone &#039;&#039;&#039;fellow student&#039;s&#039;&#039;&#039; repository and adapt the code to reflect physical changes to the setup, the Python snippet should now permit changing the color of the light, have it blinking and turn it off. Other interesting modes are awarded with extra points.&lt;br /&gt;
* Use either [https://www.atlassian.com/git/tutorials/ Atlassian Tutorials], [http://rogerdudler.github.io/git-guide/ git - the simple guide] or [https://try.github.io/ Try Git] as a reference if you get lost.&lt;br /&gt;
* Document in the README what GPIO pins are used in the code for red, green and blue. Extra points for making the Python code [https://docs.python.org/2/library/argparse.html#module-argparse configurable from command-line].&lt;br /&gt;
* Late submissions will heavily lose points for failure to comply with [http://chris.beams.io/posts/git-commit/ decent commit messages].&lt;br /&gt;
* Send Lauri the URL of your repository at GitHub.&lt;br /&gt;
&lt;br /&gt;
Git resources: [http://git-scm.com/book/en/v2 Pro Git Book] (read the basics to get kickstarted) and [https://www.codecademy.com/en/courses/learn-git/ Codecademy Git course].&lt;br /&gt;
&lt;br /&gt;
=Assignment: Disassembling Python=&lt;br /&gt;
&lt;br /&gt;
CPython is the default, most widely used implementation of the Python programming language. CPython is written in C. CPython compiles Python source into bytecode which is interpreted by a Python virtual (stack) machine. This is very similar to what is done with Java. Use [https://docs.python.org/2/library/dis.html dis] to disassemble a Python function into stack machine instructions. Follow [https://docs.python.org/2/library/dis.html#python-bytecode-instructions bytecode instructions] to determine what each instruction does.&lt;br /&gt;
&lt;br /&gt;
Deadline: 21. October&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Example submission==&lt;br /&gt;
&lt;br /&gt;
Consider following Python function, which calculates the sum of squares. For example sum_of_powers(2, 3) == 14 (1**2 + 2**2 + 3**2):&lt;br /&gt;
&lt;br /&gt;
 def sum_of_powers(exponent, numbers):&lt;br /&gt;
     counter = 1&lt;br /&gt;
     return_value = 0&lt;br /&gt;
     while True:&lt;br /&gt;
         if counter &amp;gt; numbers:&lt;br /&gt;
             break&lt;br /&gt;
         return_value += counter ** exponent&lt;br /&gt;
         counter += 1&lt;br /&gt;
     return return_value&lt;br /&gt;
 &lt;br /&gt;
 # Following two lines are the ones which produce the instructions shown below&lt;br /&gt;
 from dis import dis&lt;br /&gt;
 dis(sum_of_powers)&lt;br /&gt;
&lt;br /&gt;
Corresponding Python stack machine instructions extracted with &amp;lt;code&amp;gt;dis&amp;lt;/code&amp;gt; are following. Columns correspond to: line number in the source code, instruction offset (in bytes), instruction name as listed [https://docs.python.org/2/library/dis.html in dis documentation], &lt;br /&gt;
&lt;br /&gt;
 22           0 LOAD_CONST               1 (1)               # Constant of 1 is pushed to stack&lt;br /&gt;
              3 STORE_FAST               2 (counter)         # Pushed value is popped and stored in variable counter&lt;br /&gt;
 &lt;br /&gt;
 23           6 LOAD_CONST               2 (0)               # Constant of 0 is pushed to stack&lt;br /&gt;
              9 STORE_FAST               3 (return_value)    # Pushed value is popped and stored in variable return_value&lt;br /&gt;
 &lt;br /&gt;
 24          12 SETUP_LOOP              43 (to 58)           # Loop until instruction no 58 is set up&lt;br /&gt;
 &lt;br /&gt;
 25     &amp;gt;&amp;gt;   15 LOAD_FAST                2 (counter)             # Value of variable &amp;lt;counter&amp;gt; is pushed to stack&lt;br /&gt;
             18 LOAD_FAST                1 (numbers)             # Value of variable &amp;lt;numbers&amp;gt; is pushed to stack&lt;br /&gt;
             21 COMPARE_OP               4 (&amp;gt;)                   # Two topmost values of stack are popped and compared,&lt;br /&gt;
                                                                 # boolean result is pushed back to the top of stack&lt;br /&gt;
             24 POP_JUMP_IF_FALSE       31                       # If top of the stack if False,&lt;br /&gt;
                                                                 # jump to instruction no 31 is performed.&lt;br /&gt;
                                                                 # Top of the stack is popped&lt;br /&gt;
 &lt;br /&gt;
 26          27 BREAK_LOOP                                       # Execution jumps out of the loop, the one&lt;br /&gt;
                                                                 # that was set up at inst no 12&lt;br /&gt;
             28 JUMP_FORWARD             0 (to 31)               # Placeholder probably due to the way pipeline is handled&lt;br /&gt;
 &lt;br /&gt;
 27     &amp;gt;&amp;gt;   31 LOAD_FAST                3 (return_value)        # Value of variable &amp;lt;return_value&amp;gt; is pushed to stack&lt;br /&gt;
             34 LOAD_FAST                2 (counter)             # Value of variable &amp;lt;counter&amp;gt; is pushed to stack&lt;br /&gt;
             37 LOAD_FAST                0 (exponent)            # Value of variable &amp;lt;exponent&amp;gt; is pushed to stack&lt;br /&gt;
             40 BINARY_POWER                                     # Exponentiation of two topmost values is performed and&lt;br /&gt;
                                                                 # substituted with the result&lt;br /&gt;
             41 INPLACE_ADD                                      # Two topmost values are added and substituted with the sum&lt;br /&gt;
             42 STORE_FAST               3 (return_value)        # Sum of the addition is stored in variable &amp;lt;return_value&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 28          45 LOAD_FAST                2 (counter)             # Value of variable &amp;lt;counter&amp;gt; is pushed to stack&lt;br /&gt;
             48 LOAD_CONST               1 (1)                   # Constant of 1 is pushed to stack&lt;br /&gt;
             51 INPLACE_ADD                                      # Two topmost values are added and substituted with the sum&lt;br /&gt;
             52 STORE_FAST               2 (counter)             # Sum is stored in the variable &amp;lt;counter&amp;gt;&lt;br /&gt;
             55 JUMP_ABSOLUTE           15                       # Code execution jumps to instruction no 15 (the beginning of the loop)&lt;br /&gt;
 &lt;br /&gt;
 29     &amp;gt;&amp;gt;   58 LOAD_FAST                3 (return_value)    # The value of variable &amp;lt;return_value&amp;gt; is pushed to stack&lt;br /&gt;
             61 RETURN_VALUE                                 # Return top of the stack to the function caller&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the Python VM the state consists of:&lt;br /&gt;
&lt;br /&gt;
* Program counter (PC), the number of currently executed instruction&lt;br /&gt;
* The stack and most importantly top of stack (TOS)&lt;br /&gt;
* Constants extracted from source (co_consts)&lt;br /&gt;
* Variables names (co_names)&lt;br /&gt;
* Variables values (co_varnames)&lt;br /&gt;
* There are *no* registers!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Executing the function with arguments exponent=2 and numbers=3 will result in return value of 14, the arguments are already placed in the co_varnames array by the calling function. Also the constants used in the code are present, so you may assume following state in the Python interpreter just before entering the function body:&lt;br /&gt;
&lt;br /&gt;
    -1. stack = []; co_varnames = [2, 3]; co_consts[?, 1, 0]&lt;br /&gt;
&lt;br /&gt;
The steps that Python VM takes to get to the results are following:&lt;br /&gt;
&lt;br /&gt;
     0. LOAD_CONST 1: stack = [1]&lt;br /&gt;
     3. STORE_FAST 2: stack = []; co_varnames = [2, 3, 1]&lt;br /&gt;
     6. LOAD_CONST 2: stack = [0];&lt;br /&gt;
     9. STORE_FAST 3: stack = []; co_varnames = [2, 3, 1, 0]&lt;br /&gt;
    12. SETUP_LOOP 43: stack = []; loop is set up, counter is 1&lt;br /&gt;
 &lt;br /&gt;
    Here we enter loop body for the first time&lt;br /&gt;
    &lt;br /&gt;
    15. LOAD_FAST 2: stack = [1]&lt;br /&gt;
    18. LOAD_FAST 1: stack = [1, 3]&lt;br /&gt;
    21. COMPARE_OP 4: stack = [False]&lt;br /&gt;
    24. POP_JUMP_IF_FALSE 31: stack = []; jump to instruction 31&lt;br /&gt;
    31. LOAD_FAST 3: stack = [0];&lt;br /&gt;
    34. LOAD_FAST 2: stack = [0, 1];&lt;br /&gt;
    37. LOAD_FAST 0: stack = [0, 1, 2];&lt;br /&gt;
    40. BINARY_POWER: stack = [0, 1]&lt;br /&gt;
    41. INPLACE_ADD: stack = [1]&lt;br /&gt;
    42. STORE_FAST 3: stack = []; co_varnames = [2, 3, 1, 1]&lt;br /&gt;
    45. LOAD_FAST 3: stack = [1];&lt;br /&gt;
    48. LOAD_CONST 1: stack = [1, 1];&lt;br /&gt;
    51. INPLACE_ADD: stack = [2]&lt;br /&gt;
    52. STORE_FAST 2: stack = []; co_varnames = [2, 3, 2, 1]&lt;br /&gt;
    53. JUMP_ABSOLUTE 15: jump to instruction no 15, counter is 2&lt;br /&gt;
 &lt;br /&gt;
    Here we enter loop body for the second time&lt;br /&gt;
    &lt;br /&gt;
    15. LOAD_FAST 2: stack = [2]&lt;br /&gt;
    18. LOAD_FAST 1: stack = [2, 3]&lt;br /&gt;
    21. COMPARE_OP: stack = [False]&lt;br /&gt;
    24. POP_JUMP_IF_FALSE 31: stack = []; jump to instruction 31&lt;br /&gt;
    31. LOAD_FAST 3: stack = [1]; here we have only 1**1&lt;br /&gt;
    34. LOAD_FAST 2: stack = [1, 2];&lt;br /&gt;
    37. LOAD_FAST 0: stack = [1, 2, 2];&lt;br /&gt;
    40. BINARY_POWER: stack = [1, 4]&lt;br /&gt;
    41. INPLACE_ADD: stack = [5]; here we already have 1**2 + 2**2&lt;br /&gt;
    42. STORE_FAST 3: stack = []; co_varnames = [2, 3, 2, 5]&lt;br /&gt;
    45. LOAD_FAST 3: stack = [2];&lt;br /&gt;
    48. LOAD_CONST 1: stack = [2, 1];&lt;br /&gt;
    51. INPLACE_ADD: stack = [3]&lt;br /&gt;
    52. STORE_FAST 2: stack = []; co_varnames = [2, 3, 3, 5]&lt;br /&gt;
    53. JUMP_ABSOLUTE 15: jump to instruction no 15, counter is 3&lt;br /&gt;
 &lt;br /&gt;
    Here we enter the loop body third time&lt;br /&gt;
    &lt;br /&gt;
    15. LOAD_FAST 2: stack = [3]&lt;br /&gt;
    18. LOAD_FAST 1: stack = [3, 3]&lt;br /&gt;
    21. COMPARE_OP: stack = [False]&lt;br /&gt;
    24. POP_JUMP_IF_FALSE 31: stack = []; jump to instruction 31&lt;br /&gt;
    31. LOAD_FAST 3: stack = [5]&lt;br /&gt;
    34. LOAD_FAST 2: stack = [5, 3];&lt;br /&gt;
    37. LOAD_FAST 0: stack = [5, 3, 2];&lt;br /&gt;
    40. BINARY_POWER: stack = [5, 9]&lt;br /&gt;
    41. INPLACE_ADD: stack = [14]; here we have 1**2 + 2**2 + 3**2&lt;br /&gt;
    42. STORE_FAST: stack = []; co_varnames = [2, 3, 3, 14]&lt;br /&gt;
    45. LOAD_FAST 3: stack = [3];&lt;br /&gt;
    48. LOAD_CONST 1: stack = [3, 1];&lt;br /&gt;
    51. INPLACE_ADD: stack = [4]&lt;br /&gt;
    52. STORE_FAST 2: stack = []; co_varnames = [2, 3, 4, 14]&lt;br /&gt;
    53. JUMP_ABSOLUTE 15: jump to instruction no 15, counter is 4&lt;br /&gt;
 &lt;br /&gt;
    Here we enter the loop body fourth (!!!) time&lt;br /&gt;
    &lt;br /&gt;
    15. LOAD_FAST 2; stack = [4]&lt;br /&gt;
    18. LOAD_FAST 1; stack = [4, 3]&lt;br /&gt;
    21. COMPARE_OP 4; stack = [True]&lt;br /&gt;
    24. POP_JUMP_IF_FALSE 31; stack = []; but the condition does not hold anymore so we jump out of the loop&lt;br /&gt;
    27. BREAK_LOOP; break out of the loop&lt;br /&gt;
    58. LOAD_FAST 3; stack = [14]&lt;br /&gt;
    61. RETURN_VALUE; return 14 to caller&lt;br /&gt;
&lt;br /&gt;
==Assignment steps==&lt;br /&gt;
&lt;br /&gt;
# Select one of the Fibonacci code examples below.&lt;br /&gt;
# Use &amp;lt;code&amp;gt;from dis import dis&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;dis(function_name_goes_here)&amp;lt;/code&amp;gt; to disassemble the function to opcodes.&lt;br /&gt;
# Comment the stack machine instructions as shown above (3p).&lt;br /&gt;
# Invoke the Fibonacci number calculation function with n=2, follow the instructions and elaborate after each instruction executed a) the stack contents b) co_varnames contents c) co_names contents d) what happened as shown above. Note that certain code blocks will be executed repeatedly, which means you&#039;ll have more than &#039;&#039;&#039;30 instructions executed&#039;&#039;&#039; (2p).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fibonacci with iterators:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def fib(n):&lt;br /&gt;
    a,b = 1,1&lt;br /&gt;
    for i in range(n-1):&lt;br /&gt;
        a,b = b,a+b&lt;br /&gt;
    return a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fibonacci with recursion:&lt;br /&gt;
&lt;br /&gt;
 def fib(n):&lt;br /&gt;
     if n==1 or n==2:&lt;br /&gt;
         return 1&lt;br /&gt;
     return fib(n-1) + fib(n-2)&lt;br /&gt;
&lt;br /&gt;
Fibonacci with infinite loop and breaks:&lt;br /&gt;
&lt;br /&gt;
 def fib3(n):&lt;br /&gt;
     a,b,i = 1,1,0&lt;br /&gt;
     while True:&lt;br /&gt;
         i += 1&lt;br /&gt;
         if i &amp;gt;= n: break&lt;br /&gt;
         b,a = a+b,b&lt;br /&gt;
     return a&lt;br /&gt;
&lt;br /&gt;
Another variation:&lt;br /&gt;
&lt;br /&gt;
 def fib4(n):&lt;br /&gt;
     a = 1&lt;br /&gt;
     b = 1&lt;br /&gt;
     i = 0&lt;br /&gt;
     while True:&lt;br /&gt;
         i += 1&lt;br /&gt;
         if i &amp;gt;= n: break&lt;br /&gt;
         s = a + b&lt;br /&gt;
         a = b&lt;br /&gt;
         b = s&lt;br /&gt;
     return a&lt;br /&gt;
&lt;br /&gt;
=Assignment: Investigating compilers=&lt;br /&gt;
&lt;br /&gt;
Use what you learned in the [https://wiki.itcollege.ee/index.php/Getting_started_with_GCC Getting started with GCC] session.&lt;br /&gt;
See assignment steps below.&lt;br /&gt;
Everything you need to understand ARM instructions should be [http://aelmahmoudy.users.sourceforge.net/electronix/arm/chapter2.htm here].&lt;br /&gt;
Another good resource seems to be [http://www.davespace.co.uk/arm/introduction-to-arm/ Introduction to ARM] by David Thomas.&lt;br /&gt;
See page 14 of [http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042e/IHI0042E_aapcs.pdf Procedure Call Standard for the ARM® Architecture] if you want to learn more about how function calls are implemented on ARM.&lt;br /&gt;
See [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204j/Cihfddaf.html here] for more information about branching instructions: B, BL, BX.&lt;br /&gt;
&amp;lt;Insert extemely useful link here yourself&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deadline: 4. November&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have Ubuntu installed on your machine skip next step and use SSH to perform these steps remotely at &amp;lt;code&amp;gt;enos.itcollege.ee&amp;lt;/code&amp;gt;.&lt;br /&gt;
Otherwise install ARM cross-compiler:&lt;br /&gt;
&lt;br /&gt;
 apt-get install gcc-arm-linux-gnueabi&lt;br /&gt;
&lt;br /&gt;
Consider C snippet for calculating integer [https://en.wikipedia.org/wiki/Exponentiation exponentiation], place it in a file &amp;lt;code&amp;gt;power.c&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 int power(long base, long exponent) {&lt;br /&gt;
     int counter;&lt;br /&gt;
     int result = 1;&lt;br /&gt;
     for (counter = 0; counter &amp;lt; exponent; counter++)&lt;br /&gt;
         result *= base;&lt;br /&gt;
     return result;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Generating assembly===&lt;br /&gt;
&lt;br /&gt;
Compile ARM assembly of the code snippet:&lt;br /&gt;
&lt;br /&gt;
 arm-linux-gnueabi-gcc -Os -S power.c -o power.s   # Cross-compile ARM assembly file power.s from C source code file power.c&lt;br /&gt;
 cat power.s                                       # Dump the assembly file on terminal&lt;br /&gt;
&lt;br /&gt;
The compiler should produce something similar to following:&lt;br /&gt;
&lt;br /&gt;
 	.arch armv5t&lt;br /&gt;
 	.fpu softvfp&lt;br /&gt;
 	.eabi_attribute 20, 1&lt;br /&gt;
 	.eabi_attribute 21, 1&lt;br /&gt;
 	.eabi_attribute 23, 3&lt;br /&gt;
 	.eabi_attribute 24, 1&lt;br /&gt;
 	.eabi_attribute 25, 1&lt;br /&gt;
 	.eabi_attribute 26, 2&lt;br /&gt;
 	.eabi_attribute 30, 2&lt;br /&gt;
 	.eabi_attribute 34, 0&lt;br /&gt;
 	.eabi_attribute 18, 4&lt;br /&gt;
 	.file	&amp;quot;power.c&amp;quot;&lt;br /&gt;
 	.text&lt;br /&gt;
 	.align	2&lt;br /&gt;
 	.global	power&lt;br /&gt;
 	.type	power, %function&lt;br /&gt;
 power:&lt;br /&gt;
 	@ args = 0, pretend = 0, frame = 0&lt;br /&gt;
 	@ frame_needed = 0, uses_anonymous_args = 0&lt;br /&gt;
 	@ link register save eliminated.&lt;br /&gt;
 	cmp	r1, #0&lt;br /&gt;
 	mov	r2, #1&lt;br /&gt;
 	ble	.L2&lt;br /&gt;
 	mov	r3, #0&lt;br /&gt;
 .L3:&lt;br /&gt;
 	add	r3, r3, #1&lt;br /&gt;
 	cmp	r3, r1&lt;br /&gt;
 	mul	r2, r0, r2&lt;br /&gt;
 	bne	.L3&lt;br /&gt;
 .L2:&lt;br /&gt;
 	mov	r0, r2&lt;br /&gt;
 	bx	lr&lt;br /&gt;
 	.size	power, .-power&lt;br /&gt;
 	.ident	&amp;quot;GCC: (Ubuntu/Linaro 4.7.3-12ubuntu1) 4.7.3&amp;quot;&lt;br /&gt;
 	.section	.note.GNU-stack,&amp;quot;&amp;quot;,%progbits&lt;br /&gt;
&lt;br /&gt;
===Commenting the assembly===&lt;br /&gt;
&lt;br /&gt;
You can safely ignore the lines starting with dot, these are simply hints for the next stage of the compilation process.&lt;br /&gt;
Thus you&#039;re left only (!!!) 10 actual instructions. Here you can also see what kind of comments are expected from the submission:&lt;br /&gt;
&lt;br /&gt;
 power:&lt;br /&gt;
 	cmp	r1, #0             /* Compare register r1 (second argument) contents against constant 0 */    &lt;br /&gt;
 	mov	r2, #1             /* Copy the constant 1 to register r2 */&lt;br /&gt;
 	ble	.L2                /* Jump to label .L2 if the comparison was false */&lt;br /&gt;
 	mov	r3, #0             /* Copy the constant 0 to register r3 */&lt;br /&gt;
 .L3:&lt;br /&gt;
 	add	r3, r3, #1         /* Perform r3 = r3 + 1 */&lt;br /&gt;
 	cmp	r3, r1             /* Compare register r3 and r1 (second argument) */&lt;br /&gt;
 	mul	r2, r0, r2         /* Perform r2 = r0 (first argument) * r2 */&lt;br /&gt;
 	bne	.L3                /* If r3 and r1 were different jump to label .L3&lt;br /&gt;
 .L2:&lt;br /&gt;
 	mov	r0, r2             /* Copy register r2 contents to register r0 */&lt;br /&gt;
 	bx	lr                 /* Jump back to caller */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Analyzing the code===&lt;br /&gt;
&lt;br /&gt;
Code analysis reveals that registers are mapped as following:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r0&amp;lt;/code&amp;gt; - argument &amp;lt;code&amp;gt;base&amp;lt;/code&amp;gt; and eventually return value&lt;br /&gt;
* &amp;lt;code&amp;gt;r1&amp;lt;/code&amp;gt; - argument &amp;lt;code&amp;gt;exponent&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;r2&amp;lt;/code&amp;gt; - variable &amp;lt;code&amp;gt;result&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;r3&amp;lt;/code&amp;gt; - variable &amp;lt;code&amp;gt;counter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We can also see how the &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; loop gets translated into assembly:&lt;br /&gt;
&lt;br /&gt;
 power:&lt;br /&gt;
 	cmp	r1, #0&lt;br /&gt;
 	mov	r2, #1&lt;br /&gt;
 	ble	.L2&lt;br /&gt;
 	mov	r3, #0&lt;br /&gt;
 .L3:&lt;br /&gt;
 	add	r3, r3, #1 &amp;lt;---+&lt;br /&gt;
 	cmp	r3, r1         | 4 instructions are executed repeatedly&lt;br /&gt;
 	mul	r2, r0, r2     | if exponent is greater than 0&lt;br /&gt;
 	bne	.L3 -----------+&lt;br /&gt;
 .L2:&lt;br /&gt;
 	mov	r0, r2&lt;br /&gt;
 	bx	lr&lt;br /&gt;
&lt;br /&gt;
===Stepping through the instructions===&lt;br /&gt;
&lt;br /&gt;
When we execute the function with for example arguments base=5 and exponent=3 following happens in the processor.&lt;br /&gt;
Note that this will essentially calculates 5 ^ 3 (5 to the power of 3) which is 125.&lt;br /&gt;
Following has been done manually to illustrate how much time does it take to execute the the function.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 /* When processor enters the function body the arguments are already placed in registers r0=5 (base), r1=3 (exponent) */&lt;br /&gt;
 cmp r1, #0                        /* Compare exponent to 0 */&lt;br /&gt;
 mov r2, #1                        /* Place constant 1 in register r2,&lt;br /&gt;
                                      this corresponds to result = 1 in C code */&lt;br /&gt;
 ble .L2                           /* Exponent was not less than 0, so no jump to L2&lt;br /&gt;
 mov r3, #0                        /* Place constant 0 in register r3,&lt;br /&gt;
                                      this corresponds to variable counter */&lt;br /&gt;
 &lt;br /&gt;
 add r3, r3, #1                    /* Perform r3 = 0 + 1 which results in 1 being stored to r3&lt;br /&gt;
                                      this corresponds to first invocation of counter++ in C code */&lt;br /&gt;
 cmp r3, r1                        /* Compare counter (1 in this case) to exponent (3), this will be used by bne instruction below */&lt;br /&gt;
 mul r2, r0, r2                    /* Perform r2 = r0 * r2 which results in 1 * 5 = 5 being placed in r2&lt;br /&gt;
                                      this corresponds to first invocation of result *= base in C code */&lt;br /&gt;
 bne .L3                           /* The comparison resulted in counter being not equal to exponent, so we jump back to L3&lt;br /&gt;
                                      this corresponds to first invocation of counter &amp;lt; exponent in C code */&lt;br /&gt;
 &lt;br /&gt;
 add r3, r3, #1                    /* Perform r3 = 1 + 1 which results in 2 being stored to r3&lt;br /&gt;
                                      this corresponds to second invocation of counter++ in C code */&lt;br /&gt;
 cmp r3, r1                        /* Compare counter (2 in this case) to exponent (3), this will be used by bne instruction below */&lt;br /&gt;
 mul r2, r0, r2                    /* Perform r2 = r0 * r2 which results 5 * 5 = 25 being placed in r2&lt;br /&gt;
                                      this corresponds to second invocation of result *= base in C code */&lt;br /&gt;
 bne .L3                           /* The comparison resulted in counter being not equal to exponent, so we jump back to L3&lt;br /&gt;
                                      this corresponds to second invocation of counter &amp;lt; exponent in C code */&lt;br /&gt;
 &lt;br /&gt;
 add r3, r3, #1                    /* Perform r3 = 2 + 1 which results in 3 being stored to r3&lt;br /&gt;
                                      this corresponds to third invocation of counter++ in C code */&lt;br /&gt;
 cmp r3, r1                        /* Compare counter (3 in this case) to exponent (3), this will be used by bne instruction below */&lt;br /&gt;
 mul r2, r0, r2                    /* Perform r2 = r0 * r2 which results 25 * 5 = 125 being placed in r2&lt;br /&gt;
                                      this corresponds to third invocation of result *= base in C code */&lt;br /&gt;
 bne .L3                           /* The comparison resulted in counter being equal to exponent, so we DO NOT jump back to L3 */&lt;br /&gt;
 &lt;br /&gt;
 mov	r0, r2                     /* Copy register r2 contents (125) to register r0 */&lt;br /&gt;
 bx	lr                         /* Jump back to caller */&lt;br /&gt;
 /* Function returns with 125 placed in r0 this is where caller function should expect the return value */&lt;br /&gt;
 /* The other registers will still hold whatever values were left there: r1 = 3, r2 = 125, r3 = 3 */&lt;br /&gt;
&lt;br /&gt;
===ARM registers===&lt;br /&gt;
&lt;br /&gt;
If you get lost with the ARM register naming conventions use following as a guide.&lt;br /&gt;
&lt;br /&gt;
ARM7 has 16x 32-bit registers:&lt;br /&gt;
&lt;br /&gt;
  r0 (a1) - Argument/result/scratch register, this is where first function argument is usually placed&lt;br /&gt;
  r1 (a2) - Argument/result/scratch register, this is where second function argument is placed&lt;br /&gt;
  r2 (a3) - Argument/scratch register 3&lt;br /&gt;
  r3 (a4) - Argument/scratch register 4&lt;br /&gt;
  r4 (v1) - Variable register 1&lt;br /&gt;
  r5 (v2) - Variable register 2&lt;br /&gt;
  r6 (v3) - Variable register 3&lt;br /&gt;
  r7 (v4) - Variable register 4&lt;br /&gt;
  r8 (v5) - Variable register 5&lt;br /&gt;
  r9 (v6) - Variable register 6&lt;br /&gt;
 r10 (v7) - Variable register 7&lt;br /&gt;
 r11 (fp) - Frame pointer, variable register 8 &lt;br /&gt;
 r12 (ip) - Intra-procedure call scratch register&lt;br /&gt;
 r13 (sp) - Stack pointer&lt;br /&gt;
 r14 (lr) - Link register (to which memory address currently&lt;br /&gt;
                           executing function should return to?)&lt;br /&gt;
 r15 (pc) - Program counter (what is the memory address of instruction&lt;br /&gt;
      ^                      that we are going to execute next?)&lt;br /&gt;
      |&lt;br /&gt;
      +- These are simply aliases for the numbered registers and&lt;br /&gt;
         can be used interchangeably.&lt;br /&gt;
&lt;br /&gt;
==Assignment steps==&lt;br /&gt;
&lt;br /&gt;
# Select one of the Fibonacci calculation examples below and use ARM cross compiler as shown above to generate the assembly corresponding to the C source code (1p).&lt;br /&gt;
# Remove the compiler hints (lines starting with dot), this should leave you less than 20 instructions. If it&#039;s more than that try different optimization flags. Analyze and comment the assembly as shown above (1p).&lt;br /&gt;
# Use n=3 as argument and follow the instructions, what values are left in the registers after the function finishes (2p)?&lt;br /&gt;
# Optional/extra: Elaborate step by step what happens in the processor: what instruction is being executed and what values are left in registers after instruction finishes? (1p)&lt;br /&gt;
# Optional/extra: Recompile with different optimization levels: &amp;lt;code&amp;gt;-Os&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;-O0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;-O1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;-O2&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;-O3&amp;lt;/code&amp;gt;. What differences did you notice? (1p)&lt;br /&gt;
# Optional/extra: Take a guess which one of the Fibonacci calculation functions below is the slowest? Which one is the fastest? Why? (1p)&lt;br /&gt;
# Send your conclusions as e-mail attachment to Lauri, attach the commented assembly, make sure you &#039;&#039;&#039;use the address supplied above with the course code&#039;&#039;&#039;, otherwise your mail is not searchable in my mailbox.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fibonacci calculation using &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;-loop:&lt;br /&gt;
&lt;br /&gt;
 int fib(n) {&lt;br /&gt;
     int a = 1;&lt;br /&gt;
     int b = 1;&lt;br /&gt;
     int i;&lt;br /&gt;
     for (i = 0; i &amp;lt; n; i++) {&lt;br /&gt;
         int s = a + b;&lt;br /&gt;
         a = b;&lt;br /&gt;
         b = s;&lt;br /&gt;
     }&lt;br /&gt;
     return a;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Fibonacci calculation using recursion:&lt;br /&gt;
&lt;br /&gt;
 int fib2(n) {&lt;br /&gt;
     if (n == 1 || n== 2) {&lt;br /&gt;
         return 1;&lt;br /&gt;
     } else {&lt;br /&gt;
         return fib(n-1) + fib(n-2);&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Fibonacci calculation using &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;-loop:&lt;br /&gt;
&lt;br /&gt;
 int fib4(n) {&lt;br /&gt;
     int a = 1;&lt;br /&gt;
     int b = 1;&lt;br /&gt;
     int i = 0;&lt;br /&gt;
     while(1) {&lt;br /&gt;
         i += 1;&lt;br /&gt;
         if (i &amp;gt;= n) { break; }&lt;br /&gt;
         int s = a + b;&lt;br /&gt;
         a = b;&lt;br /&gt;
         b = s;&lt;br /&gt;
     }&lt;br /&gt;
     return a;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=Assignment: Investigating microcontrollers=&lt;br /&gt;
&lt;br /&gt;
In this assignment we use Arduino to implement traffic lights for [http://www.nobleled.com/uploads/110833/100_101.jpg crossroads].&lt;br /&gt;
If you don&#039;t care much about doing this assignment hands on, you can give a try [https://123d.circuits.io/ online].&lt;br /&gt;
&lt;br /&gt;
==Assignment steps==&lt;br /&gt;
&lt;br /&gt;
* Install Arduino IDE on your personal machine, on Windows/Mac check out [https://www.arduino.cc/ Arduino homepage] for instructions, on Ubuntu &amp;lt;code&amp;gt;apt-get install arduino&amp;lt;/code&amp;gt; should suffice. You can also use school computers, Ubuntu has Arduino preinstalled.&lt;br /&gt;
* From Arduino IDE menu open up File -&amp;gt; Examples -&amp;gt; 01. Basic -&amp;gt; Blink&lt;br /&gt;
* In Arduino IDE menu Tools -&amp;gt; Board -&amp;gt; Arduino Mega2560&lt;br /&gt;
* In Arduino IDE menu Tools -&amp;gt; Serial port -&amp;gt; Select what makes sense&lt;br /&gt;
* On Ubuntu you may have to add yourself to the dialout group before you can access the serial ports. Use the command &amp;lt;code&amp;gt;sudo gpasswd -a $USER dialout&amp;lt;/code&amp;gt;, log out and log in again to your PC.&lt;br /&gt;
* Press the second button in the toolbar to upload the code, make sure the changes take effect on the board. You should see on-board LED blinking.&lt;br /&gt;
* Connect some LED-s to the board. &#039;&#039;&#039;MAKE SURE YOU USE RESISTORS TO PROTECT LED-s AND THE BOARD&#039;&#039;&#039;&lt;br /&gt;
* Implement traffic light cycle using &amp;lt;code&amp;gt;digitalWrite&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;delay&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;loop&amp;lt;/code&amp;gt; function (3p)&lt;br /&gt;
* Use interrupts to read button presses, see example below. Pressing the button should toggle the LED now (1p)&lt;br /&gt;
* Extra: Use [https://www.arduino.cc/en/Reference/AnalogWrite PWM] to implement smoother blinking (1p)&lt;br /&gt;
* Extra: Use [http://lauri.vosandi.com/arduino/lcd1602-key-shield.html LCD1602] shield to display countdown (1p)&lt;br /&gt;
* Use [https://www.arduino.cc/en/Reference/Serial serial] interface to send messages to your PC.&lt;br /&gt;
* You can find useful code snippets for Robotics club equipment [http://lauri.vosandi.com/arduino here]&lt;br /&gt;
&lt;br /&gt;
==Code example: reading button press with interrupts==&lt;br /&gt;
&lt;br /&gt;
Set up a push button as shown below:&lt;br /&gt;
&lt;br /&gt;
[[File:Arduino-pushbutton_bb.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Insert following code to Arduino IDE and upload it to Arduino, verify that it works:&lt;br /&gt;
&lt;br /&gt;
 int led = 13;&lt;br /&gt;
 int button  = 2;&lt;br /&gt;
 int flag = LOW;&lt;br /&gt;
 &lt;br /&gt;
 void setup() {&lt;br /&gt;
     pinMode(led, OUTPUT);         // Set up pin 13 as digital output&lt;br /&gt;
     pinMode(button, INPUT_PULLUP);       // Set up pin 9 as digital input with pull-up resistor enabled&lt;br /&gt;
 &lt;br /&gt;
     // Associate interrupt handler with an event&lt;br /&gt;
     attachInterrupt(digitalPinToInterrupt(button), onButtonPressed, FALLING);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void onButtonPressed() {&lt;br /&gt;
     // Keep this as short as possible&lt;br /&gt;
     flag = HIGH;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void loop() {&lt;br /&gt;
     // Do something useful or let processor sleep here&lt;br /&gt;
     if (flag) {&lt;br /&gt;
         digitalWrite(led, HIGH);&lt;br /&gt;
         delay(2000);&lt;br /&gt;
         flag = LOW;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     digitalWrite(led, LOW);&lt;br /&gt;
     delay(50);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Code example: Cycling through different traffic light states==&lt;br /&gt;
&lt;br /&gt;
Add LED-s to the design:&lt;br /&gt;
&lt;br /&gt;
[[File:Traffic-lights_bb.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Use following as hint to implement cycling through traffic light states:&lt;br /&gt;
&lt;br /&gt;
 // Define pin numbers&lt;br /&gt;
 int car_green = 5;&lt;br /&gt;
 int car_yellow = 6;&lt;br /&gt;
 int car_red = 7;&lt;br /&gt;
 &lt;br /&gt;
 // For LED-s we&#039;re sinking the 5V voltage, hence LED is turned on when voltage on the pin is LOW&lt;br /&gt;
 int on = LOW;&lt;br /&gt;
 int off = HIGH;&lt;br /&gt;
 &lt;br /&gt;
 void setup() {&lt;br /&gt;
     pinMode(car_green, OUTPUT);&lt;br /&gt;
     pinMode(car_yellow, OUTPUT);&lt;br /&gt;
     pinMode(car_red, OUTPUT);&lt;br /&gt;
     digitalWrite(cars_yellow, off);&lt;br /&gt;
     Serial.begin(9600);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void loop() {&lt;br /&gt;
     Serial.println(&amp;quot;Cars green, pedestrians red for 5 seconds&amp;quot;);&lt;br /&gt;
     digitalWrite(cars_red, off);&lt;br /&gt;
     digitalWrite(cars_green, on);&lt;br /&gt;
     delay(5000);&lt;br /&gt;
 &lt;br /&gt;
     Serial.println(&amp;quot;Green for cars is blinking 5 seconds&amp;quot;);&lt;br /&gt;
     for(int j = 0; j &amp;lt; 10; j++) {&lt;br /&gt;
         digitalWrite(cars_green, j % 2 == 0);&lt;br /&gt;
         delay(500);&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     Serial.println(&amp;quot;Cars red, pedestrians green for 5 seconds&amp;quot;);&lt;br /&gt;
     digitalWrite(cars_green, off);&lt;br /&gt;
     digitalWrite(cars_red, on);&lt;br /&gt;
     delay(5000);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Skeleton of the final submission==&lt;br /&gt;
&lt;br /&gt;
The real traffic light has of course a little bit more states:&lt;br /&gt;
&lt;br /&gt;
 1. Cars green, pedestrians red for 10 seconds&lt;br /&gt;
 2. Cars green **blinking**, pedestrians red for 2 seconds&lt;br /&gt;
 3. Cars red, pedestrians green for 10 seconds&lt;br /&gt;
 4. Cars red, pedestrians green **blinking** for 2 seconds&lt;br /&gt;
 5. Cars yellow, pedestrians red for 2 seconds&lt;br /&gt;
&lt;br /&gt;
So your final code will look something like this:&lt;br /&gt;
&lt;br /&gt;
 // Define pin numbers here&lt;br /&gt;
 &lt;br /&gt;
 // Initially the flag is low&lt;br /&gt;
 int pedestrian_requested_crossing = LOW;&lt;br /&gt;
  &lt;br /&gt;
 void setup() {&lt;br /&gt;
     // Initialize necessary pins as digital outputs&lt;br /&gt;
     // Reset pins with digitalWrite&lt;br /&gt;
 &lt;br /&gt;
     // Initialize button pin as digital input&lt;br /&gt;
     // Enable pull-up resistor on button pin&lt;br /&gt;
     // Associate button interrupt handler function (onButtonPressed) below with the event on the button&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void onButtonPressed() {&lt;br /&gt;
     // Here set pedestrian_requested_crossing flag to HIGH&lt;br /&gt;
     // Don&#039;t do anything else here!&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void loop() {&lt;br /&gt;
     Serial.println(&amp;quot;Cars green, pedestrians red for 5 seconds&amp;quot;);&lt;br /&gt;
     digitalWrite(cars_red, off);&lt;br /&gt;
     digitalWrite(cars_green, on);&lt;br /&gt;
     // Set pedestrian lights here&lt;br /&gt;
     delay(5000);&lt;br /&gt;
 &lt;br /&gt;
     if (pedestrian_requested_crossing) {&lt;br /&gt;
 &lt;br /&gt;
         Serial.println(&amp;quot;Green for cars is blinking 5 seconds&amp;quot;);&lt;br /&gt;
         for(int j = 0; j &amp;lt; 10; j++) {&lt;br /&gt;
             digitalWrite(cars_green, j % 2 == 0);&lt;br /&gt;
             delay(500);&lt;br /&gt;
         }&lt;br /&gt;
 &lt;br /&gt;
         Serial.println(&amp;quot;Cars red, pedestrians green for 5 seconds&amp;quot;);&lt;br /&gt;
         digitalWrite(cars_green, off);&lt;br /&gt;
         digitalWrite(cars_red, on);&lt;br /&gt;
         // Set pedestrian lights here&lt;br /&gt;
         delay(5000);&lt;br /&gt;
 &lt;br /&gt;
         // Add another state here&lt;br /&gt;
 &lt;br /&gt;
         // And another state here&lt;br /&gt;
 &lt;br /&gt;
         // Reset flag here&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=Assignment: Adders with NAND gates=&lt;br /&gt;
&lt;br /&gt;
In this assignment we use chips to build an adder. Get max points (4p) by wiring up half adder and double your points (8p) if you can make full adder work as well :)&lt;br /&gt;
&lt;br /&gt;
[[File:53-7400n-detailed.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Each SN74HC03N chip contains four NAND gates arranged like this, observe the pit on the left. VCC corresponds to 5V power supply and GND corresponds to ground or 0V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Half adder==&lt;br /&gt;
&lt;br /&gt;
Each [http://www.ti.com/lit/gpn/sn74hc03 SN74HC03] contains 4 NAND gates.&lt;br /&gt;
Use breadboard to wire up half adder with 7400 chips (4p):&lt;br /&gt;
&lt;br /&gt;
[[File:Half-adder_bb.png|700px]]&lt;br /&gt;
&lt;br /&gt;
The truth table for half adder:&lt;br /&gt;
&lt;br /&gt;
   A  |  B  | Cout | Sum  | Human readable (how many bits are high?)&lt;br /&gt;
 -----+-----+------+------+-------------------------------------------&lt;br /&gt;
   0  |  0  |  0   |  0   | 0&lt;br /&gt;
 -----+-----+------+------+-------------------------------------------&lt;br /&gt;
   0  |  1  |  0   |  1   | 1&lt;br /&gt;
 -----+-----+------+------+-------------------------------------------&lt;br /&gt;
   1  |  0  |  0   |  1   | 1&lt;br /&gt;
 -----+-----+------+------+-------------------------------------------&lt;br /&gt;
   1  |  1  |  1   |  0   | 2&lt;br /&gt;
&lt;br /&gt;
==Full adder==&lt;br /&gt;
&lt;br /&gt;
You can double your points if you manage to wire up a full adder (+4p)&lt;br /&gt;
&lt;br /&gt;
[[File:Nand-full-adder.png]]&lt;br /&gt;
&lt;br /&gt;
On a breadboard it looks a bit messy, but if you pay attention to gate numbering as shown above it should make your life significantly easier.&lt;br /&gt;
The gates 1, 2, 3, 4 are placed in the leftmost chip; 5, 6, 7, 8 are placed in the middle one and gate 9 is the only one in the rightmost chip:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Full-adder_bb.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   A  |  B  | Cin | Cout | Sum  | Human readable (how many bits are high?)&lt;br /&gt;
 -----+-----+-----+------+------+-------------------------------------------&lt;br /&gt;
   0  |  0  |  0  |  0   |  0   | 0&lt;br /&gt;
 -----+-----+-----+------+------+-------------------------------------------&lt;br /&gt;
   0  |  0  |  1  |  0   |  1   | 1&lt;br /&gt;
 -----+-----+-----+------+------+-------------------------------------------&lt;br /&gt;
   0  |  1  |  0  |  0   |  1   | 1&lt;br /&gt;
 -----+-----+-----+------+------+-------------------------------------------&lt;br /&gt;
   0  |  1  |  1  |  1   |  0   | 2&lt;br /&gt;
 -----+-----+-----+------+------+-------------------------------------------&lt;br /&gt;
   1  |  0  |  0  |  0   |  1   | 1&lt;br /&gt;
 -----+-----+-----+------+------+-------------------------------------------&lt;br /&gt;
   1  |  0  |  1  |  1   |  0   | 2&lt;br /&gt;
 -----+-----+-----+------+------+-------------------------------------------&lt;br /&gt;
   1  |  1  |  0  |  1   |  0   | 2&lt;br /&gt;
 -----+-----+-----+------+------+-------------------------------------------&lt;br /&gt;
   1  |  1  |  1  |  1   |  1   | 3&lt;br /&gt;
&lt;br /&gt;
==Unittest==&lt;br /&gt;
&lt;br /&gt;
Use following code snippet on Arduino to test the circuit, it will shuffle through all the possible inputs and test whether the expected output is on the output pins.&lt;br /&gt;
If you see &amp;lt;code&amp;gt;sum&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;cout&amp;lt;/code&amp;gt; outputs giving 0 all the time it&#039;s likely you have resistors of too low resistance in the circuit which is draining all the voltage on the NAND gate output pins.&lt;br /&gt;
&lt;br /&gt;
 int PIN_A = 2;&lt;br /&gt;
 int PIN_B = 3;&lt;br /&gt;
 int PIN_CIN = 4;&lt;br /&gt;
 int PIN_SUM = 5;&lt;br /&gt;
 int PIN_COUT = 6;&lt;br /&gt;
 &lt;br /&gt;
 void setup() {&lt;br /&gt;
     // Set up serial&lt;br /&gt;
     Serial.begin(9600);&lt;br /&gt;
     &lt;br /&gt;
     // Set up operands&lt;br /&gt;
     pinMode(PIN_A, OUTPUT);&lt;br /&gt;
     pinMode(PIN_B, OUTPUT);&lt;br /&gt;
     pinMode(PIN_CIN, OUTPUT);&lt;br /&gt;
     digitalWrite(PIN_A, HIGH);&lt;br /&gt;
     digitalWrite(PIN_B, HIGH);&lt;br /&gt;
     digitalWrite(PIN_CIN, HIGH);&lt;br /&gt;
     &lt;br /&gt;
     // Set up measurement pins&lt;br /&gt;
     pinMode(PIN_SUM, INPUT_PULLUP);&lt;br /&gt;
     pinMode(PIN_COUT, INPUT_PULLUP);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void test(int a, int b, int cin) {&lt;br /&gt;
     int cout = a &amp;amp;&amp;amp; b || a &amp;amp;&amp;amp; cin || b &amp;amp;&amp;amp; cin;&lt;br /&gt;
     int sum = a ^ b ^ cin;&lt;br /&gt;
     &lt;br /&gt;
     digitalWrite(PIN_A, a);&lt;br /&gt;
     digitalWrite(PIN_B, b);&lt;br /&gt;
     digitalWrite(PIN_CIN, cin);&lt;br /&gt;
     &lt;br /&gt;
     Serial.print(&amp;quot;Writing: a=&amp;quot;);&lt;br /&gt;
     Serial.print(a);&lt;br /&gt;
     Serial.print(&amp;quot;, b=&amp;quot;);&lt;br /&gt;
     Serial.print(b);&lt;br /&gt;
     Serial.print(&amp;quot;, cin=&amp;quot;);&lt;br /&gt;
     Serial.print(cin);&lt;br /&gt;
     Serial.print(&amp;quot;  Expecting: sum=&amp;quot;);&lt;br /&gt;
     Serial.print(sum);&lt;br /&gt;
     Serial.print(&amp;quot;, cout=&amp;quot;);&lt;br /&gt;
     Serial.print(cout);&lt;br /&gt;
     &lt;br /&gt;
     int measured_sum = digitalRead(PIN_SUM);&lt;br /&gt;
     int measured_cout = digitalRead(PIN_COUT);&lt;br /&gt;
 &lt;br /&gt;
     Serial.print(&amp;quot;  Got: sum=&amp;quot;);&lt;br /&gt;
     Serial.print(measured_sum);&lt;br /&gt;
     Serial.print(&amp;quot; cout=&amp;quot;);&lt;br /&gt;
     Serial.print(measured_cout);&lt;br /&gt;
     &lt;br /&gt;
     Serial.print(&amp;quot;  Test:&amp;quot;);&lt;br /&gt;
     if (measured_sum != sum || measured_cout != cout) {&lt;br /&gt;
         Serial.print(&amp;quot;  FAIL&amp;quot;);&lt;br /&gt;
     } else {&lt;br /&gt;
         Serial.print(&amp;quot;  GOOD&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     Serial.println();&lt;br /&gt;
     delay(500);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void loop() {&lt;br /&gt;
     Serial.println(&amp;quot;Running test&amp;quot;);&lt;br /&gt;
     test(0, 0, 0);&lt;br /&gt;
     test(0, 0, 1);&lt;br /&gt;
     test(0, 1, 0);&lt;br /&gt;
     test(0, 1, 1);&lt;br /&gt;
     test(1, 0, 0);&lt;br /&gt;
     test(1, 0, 1);&lt;br /&gt;
     test(1, 1, 0);&lt;br /&gt;
     test(1, 1, 1);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=Assignment: Debugging ALU design=&lt;br /&gt;
&lt;br /&gt;
Bob had to ship the ALU design to the hardware manufacturer by yesterday. The project manager is angry about missed deadline. Bob still hasn&#039;t figured out why the ALU is not working properly. Help Bob by figuring out what&#039;s the problem.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re on Ubuntu install GHDL and GtkWave, otherwise simply use a school computer:&lt;br /&gt;
&lt;br /&gt;
 sudo add-apt-repository ppa:pgavin/ghdl&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
 sudo apt-get install ghdl gtkwave git&lt;br /&gt;
&lt;br /&gt;
Clone the repository&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/laurivosandi/vhdl-exercise&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; to compile the components and run the testbench:&lt;br /&gt;
&lt;br /&gt;
 cd path/to/vhdl-exercise&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
Expected output of the testbench:&lt;br /&gt;
&lt;br /&gt;
 alu_testbench.vhd:77:9:@360ns:(report note): Finished testing addition operation of ALU&lt;br /&gt;
 alu_testbench.vhd:106:9:@1us:(report note): Finished testing subtraction operation of ALU&lt;br /&gt;
 alu_testbench.vhd:135:9:@1640ns:(report note): Finished testing NAND operation of ALU&lt;br /&gt;
 alu_testbench.vhd:166:9:@2280ns:(report note): Finished testing NOR operation of ALU&lt;br /&gt;
&lt;br /&gt;
However there are few bugs in &amp;lt;code&amp;gt;alu.vhd&amp;lt;/code&amp;gt;, find the bugs and correct them. If this is your first experience with VHDL, take a look [http://lauri.vosandi.com/hdl/ here].&lt;br /&gt;
&lt;br /&gt;
=Assignment: Publishing your work=&lt;br /&gt;
&lt;br /&gt;
Deadline: 25. November&lt;br /&gt;
&lt;br /&gt;
* Clean up your Git repositories and send the URL of a repository that you&#039;ve actively worked on (for example the one from Java course) to Lauri, but before check the following:&lt;br /&gt;
** The repository should show changes you&#039;ve made over at least few days.&lt;br /&gt;
** The repository has to contain only plaintext files unless there is a really good reason not to (eg. images).&lt;br /&gt;
** There has to be authorship information in the files.&lt;br /&gt;
** Add &amp;lt;code&amp;gt;.gitignore&amp;lt;/code&amp;gt; file to your GitHub repositories to ignore temporary files, see [https://git-scm.com/docs/gitignore Git docs] for more details.&lt;br /&gt;
** Add [http://opensource.org/licenses LICENSE] file in the repository directory and commit the changes. LICENSE should answer to some important questions&lt;br /&gt;
*** Who is the copyright holder?&lt;br /&gt;
*** Under which conditions is redistribution permitted?&lt;br /&gt;
** Add nicely formatted README file, see [https://help.github.com/articles/markdown-basics/ Markdown] (online editor [http://dillinger.io here]) and [http://sphinx-doc.org/rest.html reStructuredText] for more details. README should answer to several silly questions:&lt;br /&gt;
*** What is the repository about?&lt;br /&gt;
*** Who made it?&lt;br /&gt;
*** How can the author be contacted? E-mail address, IRC chat channel on Freenode, Skype username?&lt;br /&gt;
*** How can the code be used? What hardware is necessary? How should the user wire the circuit to make it work? Add images if necessary.&lt;br /&gt;
*** What is the policy for including changes from third party developers?&lt;br /&gt;
* There will be more details here&lt;br /&gt;
&lt;br /&gt;
=Extra points=&lt;br /&gt;
&lt;br /&gt;
Here you can claim extra credit points for various tasks, this is mostly to improve the quality of wiki.itcollege.ee.&lt;br /&gt;
Once you have taken care of the task insert your name in the end of the line with corresponding date.&lt;br /&gt;
&lt;br /&gt;
* Expand [[Getting started with Ubuntu#Installing in VirtualBox]] section with highlighted screenshots of VirtualBox. Points: 1p&lt;br /&gt;
* Create [[Claiming GitHub Student Developer Pack]] with screenshots how to add @itcollege.ee e-mail to your GitHub profile and claim [https://education.github.com/pack Student Developer Pack] Points: 2p&lt;/div&gt;</summary>
		<author><name>Smets</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Exam_help&amp;diff=100569</id>
		<title>Exam help</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Exam_help&amp;diff=100569"/>
		<updated>2016-01-13T11:44:25Z</updated>

		<summary type="html">&lt;p&gt;Smets: /* What are the major steps of compilation? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Computer hardware==&lt;br /&gt;
&lt;br /&gt;
=== Different buses and their uses===&lt;br /&gt;
In computer architecture, a bus is a communication system that transfers data between components inside a computer, or between computers. This expression covers all related hardware components (wire, optical fiber, etc.) and software, including communication protocols.&lt;br /&gt;
&lt;br /&gt;
The internal bus, also known as internal data bus, memory bus, system bus or Front-Side-Bus, connects all the internal components of a computer, such as CPU and memory, to the motherboard. Internal data buses are also referred to as a local bus, because they are intended to connect to local devices. This bus is typically rather quick and is independent of the rest of the computer operations.&lt;br /&gt;
&lt;br /&gt;
The external bus, or expansion bus, is made up of the electronic pathways that connect the different external devices, such as printer etc., to the computer.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Types and uses:&#039;&#039;&#039;&lt;br /&gt;
;USB&lt;br /&gt;
:Universal Serial Bus. Designed for: input devices, digital cameras, printers, media players...&lt;br /&gt;
&lt;br /&gt;
;Serial ATA&lt;br /&gt;
:Used by internal storage devices (hard disk). They replace the old ATA connectors.&lt;br /&gt;
&lt;br /&gt;
;PCI&lt;br /&gt;
:Peripheral Component Interconnect, is a local computer bus for attaching hardware devices in a computer. Attached devices can take either the form of an integrated circuit fitted onto the motherboard itself or an expansion card that fits into a slot. Typical PCI cards used in PCs include: network cards, sound cards, modems, extra ports such as USB or serial, TV tuner cards and disk controllers.&lt;br /&gt;
&lt;br /&gt;
;PCI Express&lt;br /&gt;
:Peripheral Component Interconnect Express (also called PCIe), is a high-speed serial computer expansion bus standard designed to replace the older PCI, PCI-X, and AGP bus standards. PCIe has numerous improvements over the older standards, including higher maximum system bus throughput, lower I/O pin count and smaller physical footprint, better performance scaling for bus devices, a more detailed error detection and reporting mechanism, and native hot-plug functionality. More recent revisions of the PCIe standard provide hardware support for I/O virtualization.&lt;br /&gt;
&lt;br /&gt;
;Mini PCIe&lt;br /&gt;
:It is based on PCI Express technoogy. Main point is its small size and its large variety of connectors makes it used for USB2.0 cards, SIM card, Wifi and Bluetooth cards, 3G and GPS cards.&lt;br /&gt;
&lt;br /&gt;
;ExpressCard&lt;br /&gt;
:It is an interface to connect peripheral devices to a computer, usually a laptop computer. ExpressCards can connect a variety of devices to a computer including mobile broadband modems, IEEE 1394 (FireWire) connectors, USB connectors, Ethernet network ports, Serial ATA storage devices, solid-state drives, external enclosures for desktop-size PCI Express graphics cards and other peripheral devices, wireless network interface controllers (NIC), TV tuner cards, Common Access Card (CAC) readers, and sound cards.&lt;br /&gt;
&lt;br /&gt;
===What are the differences between hard disk drive (HDD) and solid state drive (SSD)?=== &lt;br /&gt;
The traditional spinning hard drive (HDD) is the basic nonvolatile storage on a computer. Hard drives are essentially metal platters with a magnetic coating which stores the data. A read/write head on an arm accesses the data while the platters are spinning in a hard drive enclosure.&lt;br /&gt;
An SSD does same the job as an HDD, but instead of a magnetic coating on top of platters, the data is stored on interconnected flash memory chips that retain the data even when there&#039;s no power present. HDDs have spinning plates with magnetic coating, while SSDs have no moving parts and instead are using flash memory.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribute&lt;br /&gt;
!SSD (Solid State Drive)&lt;br /&gt;
!HDD (Hard Disk Drive)&lt;br /&gt;
|-&lt;br /&gt;
|Power Draw / Battery Life 	&lt;br /&gt;
|Less power draw, averages 2 – 3 watts, resulting in 30+ minute battery boost 	&lt;br /&gt;
|More power draw, averages 6 – 7 watts and therefore uses more battery&lt;br /&gt;
|-&lt;br /&gt;
|Cost 	&lt;br /&gt;
|Expensive, roughly $0.10 per gigabyte (based on buying a 1TB drive)&lt;br /&gt;
|Only around $0.06 per gigabyte, very cheap (buying a 4TB model)&lt;br /&gt;
|-&lt;br /&gt;
|Capacity 	&lt;br /&gt;
|Typically not larger than 1TB for notebook size drives; 1TB max for desktops 	&lt;br /&gt;
|Typically around 500GB and 2TB maximum for notebook size drives; 6TB max for desktops&lt;br /&gt;
|-&lt;br /&gt;
|Operating System Boot Time 	&lt;br /&gt;
|Around 10-13 seconds average bootup time 	&lt;br /&gt;
|Around 30-40 seconds average bootup time&lt;br /&gt;
|-&lt;br /&gt;
|Noise 	&lt;br /&gt;
|There are no moving parts and as such no sound 	&lt;br /&gt;
|Audible clicks and spinning can be heard&lt;br /&gt;
|-&lt;br /&gt;
|Vibration 	&lt;br /&gt;
|No vibration as there are no moving parts 	&lt;br /&gt;
|The spinning of the platters can sometimes result in vibration&lt;br /&gt;
|-&lt;br /&gt;
|Heat Produced 	&lt;br /&gt;
|Lower power draw and no moving parts so little heat is produced 	&lt;br /&gt;
|HDD doesn’t produce much heat, but it will have a measurable amount more heat than an SSD due to moving parts and higher power draw&lt;br /&gt;
|-&lt;br /&gt;
|Failure Rate 	&lt;br /&gt;
|Mean time between failure rate of 2.0 million hours 	&lt;br /&gt;
|Mean time between failure rate of 1.5 million hours&lt;br /&gt;
|-&lt;br /&gt;
|File Copy / Write Speed 	&lt;br /&gt;
|Generally above 200 MB/s and up to 550 MB/s for cutting edge drives 	&lt;br /&gt;
|The range can be anywhere from 50 – 120MB / s&lt;br /&gt;
|-&lt;br /&gt;
|Encryption 	&lt;br /&gt;
|Full Disk Encryption (FDE) Supported on some models 	&lt;br /&gt;
|Full Disk Encryption (FDE) Supported on some models&lt;br /&gt;
|-&lt;br /&gt;
|File Opening Speed 	&lt;br /&gt;
|Up to 30% faster than HDD 	&lt;br /&gt;
|Slower than SSD&lt;br /&gt;
|-&lt;br /&gt;
|Magnetism Affected? 	&lt;br /&gt;
|An SSD is safe from any effects of magnetism 	&lt;br /&gt;
|Magnets can erase data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===What is the purpose of Flash Translation Layer in terms of solid state drives?===&lt;br /&gt;
Flash drives have limited lifespan due to write cycles (or rather program-erase (PE) cycles) and to exhaust the drive equally, FTL layer is utilised.&lt;br /&gt;
&lt;br /&gt;
Although presenting an array of Logical Block Addresses (LBA) makes sense for HDDs as their sectors can be overwritten, it is not fully suited to the way flash memory works. For this reason, an additional component is required to hide the inner characteristics of NAND flash memory and expose only an array of LBAs to the host. This component is called the Flash Translation Layer (FTL), and resides in the SSD controller. The FTL is critical and has three main purposes: logical block mapping, wear leveling and garbage collection.&lt;br /&gt;
&lt;br /&gt;
The logical block mapping translates logical block addresses (LBAs) from the host space into physical block addresses (PBAs) in the physical NAND-flash memory space. This mapping takes the form of a table, which for any LBA gives the corresponding PBA.&lt;br /&gt;
&lt;br /&gt;
Wear leveling (also written as wear levelling) is a technique[1] for prolonging the service life of some kinds of erasable computer storage media, such as flash memory (used in solid-state drives (SSDs) and USB flash drives).&lt;br /&gt;
&lt;br /&gt;
The garbage collection process in the SSD controller ensures that “stale” pages are erased and restored into a “free” state so that the incoming write commands can be processed. If the data in a page has to be updated, the new version is written to a free page, and the page containing the previous version is marked as stale. When blocks contain stale pages, they need to be erased before they can be written to.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===What are difference between volatile/non-volatile, RAM, ROM, EEPROM and where are they used?===&lt;br /&gt;
&lt;br /&gt;
Volatile = does not hold data after power off.&lt;br /&gt;
Non-volatile = holds data even after power off.&lt;br /&gt;
&lt;br /&gt;
Random Access Memory or RAM is a form of data storage that can be accessed randomly at any time, in any order and from any physical location, allowing quick access and manipulation. RAM allows the computer to read data quickly to run applications. It allows reading and writing. It is volatile.&lt;br /&gt;
&lt;br /&gt;
Read-only memory or ROM is also a form of data storage that can not be easily altered or reprogrammed. Stores instuctions that are not nescesary for re-booting up to make the computer operate when it is switched off. They are hardwired. ROM stores the program required to initially boot the computer. It only allows reading. It is non-volatile.&lt;br /&gt;
&lt;br /&gt;
EEPROM (electrically erasable programmable read-only memory) is user-modifiable read-only memory (ROM) that can be erased and reprogrammed. Unlike EPROM chips, EEPROMs do not need to be removed from the computer to be modified. However, an EEPROM chip has to be erased and reprogrammed in its entirety, not selectively. It also has a limited life - that is, the number of times it can be reprogrammed is limited to tens or hundreds of thousands of times. BIOS of PCs are usually written to EEPROM.&lt;br /&gt;
&lt;br /&gt;
===What is data retention?===&lt;br /&gt;
It is how long a device can hold data before it becomes unreadable. SSD specifications show a data retention of at least one year for personal devices.&lt;br /&gt;
&lt;br /&gt;
Data retention is also the time a company must (or can) retain informations/logs about its users/customers/suppliers by law.&lt;br /&gt;
&lt;br /&gt;
===What are difference between asynchronous/synchronous, dynamic/static RAM and where are they used?===&lt;br /&gt;
The two main forms of modern RAM are static RAM (SRAM) and dynamic RAM (DRAM). In SRAM, a bit of data is stored using the state of a six transistor memory cell. This form of RAM is more expensive to produce, but is generally faster and requires less power than DRAM and, in modern computers, is often used as cache memory for the CPU. DRAM stores a bit of data using a transistor and capacitor pair, which together comprise a DRAM memory cell. The capacitor holds a high or low charge (1 or 0, respectively), and the transistor acts as a switch that lets the control circuitry on the chip read the capacitor&#039;s state of charge or change it. As this form of memory is less expensive to produce than static RAM, it is the predominant form of computer memory used in modern computers.&lt;br /&gt;
Dynamic RAM is used to create larger RAM space system, where Static RAM create speed- sensitive cache.&lt;br /&gt;
&lt;br /&gt;
Asynchronous refers to the fact that the memory is not synchronized to the system clock. A memory access is begun, and a certain period of time later the memory value appears on the bus. The signals are not coordinated with the system clock at all. Asynchronous memory works fine in lower-speed memory bus systems but is not nearly as suitable for use in high-speed (&amp;gt;66 MHz) memory systems.&lt;br /&gt;
A newer type of DRAM, called &amp;quot;synchronous DRAM&amp;quot; or &amp;quot;SDRAM&amp;quot;, is synchronized to the system clock; all signals are tied to the clock so timing is much tighter and better controlled. This type of memory is much faster than asynchronous DRAM and can be used to improve the performance of the system. It is more suitable to the higher-speed memory systems of the newest PCs.&lt;br /&gt;
&lt;br /&gt;
===What is [https://compsci2014.wikispaces.com/2.1.3+Explain+the+use+of+cache+memory cache]? What is cache coherence?===&lt;br /&gt;
&lt;br /&gt;
Cache memory is used to reduce the average memory access times. This is done by storing the data that is frequently accessed in main memory addresses therefore allowing the CPU to access the data faster. This is due to the fact that cache memory can be read a lot faster than main memory.&lt;br /&gt;
&lt;br /&gt;
[[File:Cache_Coherency_Generic.png|100px|left]]&lt;br /&gt;
Cache coherence is the consistency of shared resource data that ends up stored in multiple local caches. When clients in a system maintain caches of a common memory resource, problems may arise with inconsistent data, which is particularly the case with CPUs in a multiprocessing system.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
===What are differences between resistive and capacitive touchscreen?=== &lt;br /&gt;
Resistive touchscreen needs pressure to work by connecting to sheets of plastic and thus conducting electricity. Capacitive touchscreen works by conducting electricity from user&#039;s finger.&lt;br /&gt;
&lt;br /&gt;
Resistive touchscreens rely on the pressure of your fingertip—or any other object—to register input. They consist of two flexible layers with an air gap in-between. In order for the touchscreen to register input, you must press on the top layer using a small amount of pressure, in order to depress the top layer enough to make contact with the bottom layer. The touchscreen will then register the precise location of the touch. You can use anything you want on a resistive touchscreen to make the touch interface work; a gloved finger, a wooden rod, a fingernail – anything that creates enough pressure on the point of impact will activate the mechanism and the touch will be registered.&lt;br /&gt;
&lt;br /&gt;
Capacitive touchscreens instead sense conductivity to register input—usually from the skin on your fingertip. Because you don’t need to apply pressure, capacitive touchscreens are more responsive than resistive touchscreens. However, because they work by sensing conductivity, capacitive touchscreens can only be used with objects that have conductive properties, which includes your fingertip (which is most ideal), and special styluses designed with a conductive tip. This is the reason you cannot use a capacitive screen while wearing gloves – the gloves are not conductive, and the touch does not cause any change in the electrostatic field.&lt;br /&gt;
&lt;br /&gt;
[http://www.alphr.com/realworld/357325/capacitive-or-resistive-whats-the-best-type-of-touchscreen In-depth comparison of two]&lt;br /&gt;
&lt;br /&gt;
===Explain how [http://www.bidouille.org/hack/mousecam computer mouse] works?===&lt;br /&gt;
An optical computer mouse uses a light source, typically an LED, and a light detector, such as an array of photodiodes, to detect movement relative to a surface.&lt;br /&gt;
Modern surface-independent optical mice work by using an optoelectronic sensor (essentially, a tiny low-resolution video camera) to take successive images of the surface on which the mouse operates.&lt;br /&gt;
The technology underlying the modern optical computer mouse is known as digital image correlation.&lt;br /&gt;
To understand how optical mice work, imagine two photographs of the same object except slightly offset from each other. Place both photographs on a light table to make them transparent, and slide one across the other until their images line up. The amount that the edges of one photograph overhang the other represents the offset between the images, and in the case of an optical computer mouse the distance it has moved.&lt;br /&gt;
Optical mice capture one thousand successive images or more per second. Depending on how fast the mouse is moving, each image will be offset from the previous one by a fraction of a pixel or as many as several pixels. Optical mice mathematically process these images using cross correlation to calculate how much each successive image is offset from the previous one.&lt;br /&gt;
[http://www.topdesignmag.com/mouse-history-in-photos/ History of computer mouse].&lt;br /&gt;
&lt;br /&gt;
===Explain how [http://www.daskeyboard.com/blog/typing-through-time-the-history-of-the-keyboard/ computer keyboard] works?===&lt;br /&gt;
A keyboard is a lot like a miniature computer. It has its own processor and circuitry that carries information to and from that processor. A large part of this circuitry makes up the key matrix.&lt;br /&gt;
The key matrix is a grid of circuits underneath the keys. In all keyboards, each circuit is broken at a point below each key. When you press a key, it presses a switch, completing the circuit and allowing a tiny amount of current to flow through. The mechanical action of the switch causes some vibration, called bounce, which the processor filters out. If you press and hold a key, the processor recognizes it as the equivalent of pressing a key repeatedly.&lt;br /&gt;
When the processor finds a circuit that is closed, it compares the location of that circuit on the key matrix to the character map in its read-only memory (ROM). A character map is basically a comparison chart or lookup table. It tells the processor the position of each key in the matrix and what each keystroke or combination of keystrokes represents. For example, the character map lets the processor know that pressing the a key by itself corresponds to a small letter &amp;quot;a,&amp;quot; but the Shift and a keys pressed together correspond to a capital &amp;quot;A.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[http://computer.howstuffworks.com/keyboard.htm HowStuffworks article]&lt;br /&gt;
&lt;br /&gt;
[http://www.explainthatstuff.com/computerkeyboards.html Explain that Stuff article]&lt;br /&gt;
&lt;br /&gt;
[http://www.daskeyboard.com/blog/typing-through-time-the-history-of-the-keyboard/ Keyboard History]&lt;br /&gt;
&lt;br /&gt;
===Explain how [https://en.wikipedia.org/wiki/Cathode_ray_tube cathode ray tube] (CRT) based screen technology works and name pros/cons.===&lt;br /&gt;
&lt;br /&gt;
The cathode ray tube (CRT) is a vacuum tube containing one or more electron guns, and a phosphorescent screen used to, It has a means to accelerate and deflect the electron beam(s) onto the screen to create the images. The images may represent electrical waveforms (oscilloscope), pictures (television, computer monitor), radar targets or others. CRTs have also been used as memory devices, in which case the visible light emitted from the fluorescent material (if any) is not intended to have significant meaning to a visual observer (though the visible pattern on the tube face may cryptically represent the stored data).&lt;br /&gt;
&lt;br /&gt;
The CRT uses an evacuated glass envelope which is large, deep (i.e. long from front screen face to rear end), fairly heavy, and relatively fragile. As a matter of safety, the face is typically made of thick lead glass so as to be highly shatter-resistant and to block most X-ray emissions, particularly if the CRT is used in a consumer product.&lt;br /&gt;
&lt;br /&gt;
Cons: CRTs, despite recent advances, have remained relatively heavy and bulky and take up a lot of space in comparison to other display technologies. CRT screens have much deeper cabinets compared to flat panels and rear-projection displays for a given screen size, and so it becomes impractical to have CRTs larger than 40 inches (102 cm). The CRT disadvantages became especially significant in light of rapid technological advancements in LCD and plasma flat-panels which allow them to easily surpass 40 inches (102 cm) as well as being thin and wall-mountable, two key features that were increasingly being demanded by consumers.&lt;br /&gt;
&lt;br /&gt;
Pros: CRTs are still popular in the printing and broadcasting industries as well as in the professional video, photography, and graphics fields due to their greater color fidelity, contrast, and better viewing from off-axis (wider viewing angle). CRTs also still find adherents in vintage video gaming because of their higher resolution per initial cost, lowest possible input lag, fast response time, and multiple native resolutions such as 576p.&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=2czqYV3T_Kc Slow motion video]&lt;br /&gt;
&lt;br /&gt;
===Explain how [https://en.wikipedia.org/wiki/Liquid-crystal_display liquid crystal displays] (LCD) work and name pros/cons.===&lt;br /&gt;
&lt;br /&gt;
A liquid-crystal display (LCD) is a flat-panel display or other electronic visual display that uses the light-modulating properties of liquid crystals. Liquid crystals do not emit light directly.&lt;br /&gt;
&lt;br /&gt;
LCDs are available to display arbitrary images (as in a general-purpose computer display) or fixed images with low information content, which can be displayed or hidden, such as preset words, digits, and 7-segment displays as in a digital clock. They use the same basic technology, except that arbitrary images are made up of a large number of small pixels, while other displays have larger elements. LCDs are used in a wide range of applications including computer monitors, televisions, instrument panels, aircraft cockpit displays, and signage.&lt;br /&gt;
&lt;br /&gt;
One feature of liquid crystals is that they&#039;re affected by electric current. A particular sort of nematic (have a definite order or pattern) liquid crystal, called twisted nematics (TN), is naturally twisted. Applying an electric current to these liquid crystals will untwist them to varying degrees, depending on the current&#039;s voltage. LCDs use these liquid crystals because they react predictably to electric current in such a way as to control light passage.&lt;br /&gt;
&lt;br /&gt;
To create an LCD, you take two pieces of polarized glass. You then add a coating of nematic liquid crystals to one of the filters. The first layer of molecules will align with the filter&#039;s orientation. Then add the second piece of glass with the polarizing film at a right angle to the first piece. Each successive layer of TN molecules will gradually twist until the uppermost layer is at a 90-degree angle to the bottom, matching the polarized glass filters.&lt;br /&gt;
&lt;br /&gt;
As light strikes the first filter, it is polarized. The molecules in each layer then guide the light they receive to the next layer. As the light passes through the liquid crystal layers, the molecules also change the light&#039;s plane of vibration to match their own angle. When the light reaches the far side of the liquid crystal substance, it vibrates at the same angle as the final layer of molecules. If the final layer is matched up with the second polarized glass filter, then the light will pass through.&lt;br /&gt;
&lt;br /&gt;
If we apply an electric charge to liquid crystal molecules, they untwist. When they straighten out, they change the angle of the light passing through them so that it no longer matches the angle of the top polarizing filter. Consequently, no light can pass through that area of the LCD, which makes that area darker than the surrounding areas.&lt;br /&gt;
&lt;br /&gt;
Pros: They are available in a wider range of screen sizes than CRT and plasma displays, and since they do not use phosphors, they do not suffer image burn-in. The LCD screen is more energy-efficient and can be disposed of more safely than a CRT can.&lt;br /&gt;
Cons: LCDs are, however, susceptible to image persistence.&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=nCHgmCxGEzY Slow motion video]&lt;br /&gt;
&lt;br /&gt;
===Name screen technologies making use of thin film transistor (TFT) technology?===&lt;br /&gt;
&lt;br /&gt;
The best known application of thin-film transistors is in TFT LCDs (active-matrix), an implementation of LCD technology. Transistors are embedded within the panel itself, reducing crosstalk between pixels and improving image stability.&lt;br /&gt;
&lt;br /&gt;
As of 2008, many color LCD TVs and monitors use this technology. TFT panels are frequently used in digital radiography applications (medical).&lt;br /&gt;
&lt;br /&gt;
AMOLED (active-matrix organic light-emitting diode) screens also contain a TFT layer (in best smartphones).&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/Thin-film_transistor Wikipedia article]&lt;br /&gt;
&lt;br /&gt;
===Name uses for light polarization filters?===&lt;br /&gt;
A polarizer or polariser is an optical filter that passes light of a specific polarization and blocks waves of other polarizations. It can convert a beam of light of undefined or mixed polarization into a beam with well-defined polarization, polarized light. Polarizers are used in many optical techniques and instruments, and polarizing filters find applications in photography, liquid crystal display technology and 3D watching. Polarizers can also be made for other types of electromagnetic waves besides light, such as radio waves, microwaves, and X-rays.&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/Polarizing_filter_%28photography%29 Polarizer photo] [https://en.wikipedia.org/wiki/Polarized_3D_system Polarizer 3D]&lt;br /&gt;
&lt;br /&gt;
===What are the benefits of [https://en.wikipedia.org/wiki/Twisted_pair twisted pair cabling] and [https://en.wikipedia.org/wiki/Differential_signaling differential signalling]?===&lt;br /&gt;
&#039;&#039;&#039;Twisted pair&#039;&#039;&#039; cabling is a type of wiring in which two conductors of a single circuit are twisted together for the purposes of canceling out electromagnetic interference (EMI) from external sources; for instance, electromagnetic radiation from unshielded twisted pair (UTP) cables, and crosstalk between neighboring pairs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Differential signaling&#039;&#039;&#039; is a method for electrically transmitting information using two complementary signals. The technique sends the same electrical signal as a differential pair of signals, each in its own conductor. The pair of conductors can be wires (typically twisted together) or traces on a circuit board. The receiving circuit responds to the electrical difference between the two signals, rather than the difference between a single wire and ground. Since the receiving circuit only detects the difference between the wires, the technique resists electromagnetic noise compared to one conductor with an un-paired reference (ground). The technique works for both analog signaling and digital signaling.&lt;br /&gt;
&lt;br /&gt;
===[https://en.wikipedia.org/wiki/Active_matrix Active matrix] vs [https://en.wikipedia.org/wiki/Passive_matrix_addressing passive matrix] in display technology===&lt;br /&gt;
Active-matrix display : Active-matrix LCDs depend on thin film transistors (TFT). Basically, TFTs are tiny switching transistors and capacitors. They are arranged in a matrix on a glass substrate. To address a particular pixel, the proper row is switched on, and then a charge is sent down the correct column. Since all of the other rows that the column intersects are turned off, only the capacitor at the designated pixel receives a charge. The capacitor is able to hold the charge until the next refresh cycle. And if we carefully control the amount of voltage supplied to a crystal, we can make it untwist only enough to allow some light through. It displays high-quality colour that is viewable from all angles and reduces crosstalk between pixels and improving image stability.&lt;br /&gt;
&lt;br /&gt;
Passive-matrix display : it uses a simple grid to supply the charge to a particular pixel on the display. The rows or columns are connected to integrated circuits that control when a charge is sent down a particular column or row. To turn on a pixel, the integrated circuit sends a charge down the correct column of one substrate and a ground activated on the correct row of the other. The row and column intersect at the designated pixel, and that delivers the voltage to untwist the liquid crystals at that pixel. The simplicity of the passive-matrix system is beautiful, but it has significant drawbacks, notably slow response time and imprecise voltage control. Response time refers to the LCD&#039;s ability to refresh the image displayed. The easiest way to observe slow response time in a passive-matrix LCD is to move the mouse pointer quickly from one side of the screen to the other. You will notice a series of &amp;quot;ghosts&amp;quot; following the pointer. Imprecise voltage control hinders the passive matrix&#039;s ability to influence only one pixel at a time. When voltage is applied to untwist one pixel, the pixels around it also partially untwist, which makes images appear fuzzy and lacking in contrast.&lt;br /&gt;
&lt;br /&gt;
==Storage abstractions==&lt;br /&gt;
&lt;br /&gt;
===What is a [https://en.wikipedia.org/wiki/Block_%28data_storage%29 block device]?===&lt;br /&gt;
In computing (specifically data transmission and data storage), a block, sometimes called a physical record, is a sequence of bytes or bits, usually containing some whole number of records, having a maximum length, a block size.Data thus structured are said to be blocked. The process of putting data into blocks is called blocking. Most file systems are based on a block device, which is a level of abstraction for the hardware responsible for storing and retrieving specified blocks of data&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Logical_block_addressing logical block addressing] and what are the benefits compared to older [https://en.wikipedia.org/wiki/Cylinder-head-sector cylinder-head-sector addressing] method in terms of harddisks?===&lt;br /&gt;
Logical block addressing (LBA) is a common scheme used for specifying the location of blocks of data stored on computer storage devices, generally secondary storage systems such as hard disk drives. LBA is a particularly simple linear addressing scheme; blocks are located by an integer index, with the first block being LBA 0, the second LBA 1, and so on. &lt;br /&gt;
&lt;br /&gt;
Cylinder-head-sector, also known as CHS, is an early method for giving addresses to each physical block of data on a hard disk drive. CHS addressing is the process of identifying individual sectors on a disk by their position in a track, where the track is determined by the head and cylinder numbers.&lt;br /&gt;
&lt;br /&gt;
LBA allows a maximum addressing capacity of 2TB although CHS allows 8GB&lt;br /&gt;
&lt;br /&gt;
===What is a [https://en.wikipedia.org/wiki/Disk_partitioning disk partition]?===&lt;br /&gt;
Disk partitioning is the creation of one or more regions on a hard disk or other secondary storage, so that an operating system can manage information in each region separately. Partitioning is typically the first step of preparing a newly manufactured disk, before any files or directories have been created. The disk stores the information about the partitions&#039; locations and sizes in an area known as the partition table that the operating system reads before any other part of the disk. Each partition then appears in the operating system as a distinct &amp;quot;logical&amp;quot; disk that uses part of the actual disk.&lt;br /&gt;
&lt;br /&gt;
===What is a [https://en.wikipedia.org/wiki/File_system file system]?===&lt;br /&gt;
In computing, a file system (or filesystem) is used to control how data is stored and retrieved. Without a file system, information placed in a storage area would be one large body of data with no way to tell where one piece of information stops and the next begins. By separating the data into individual pieces, and giving each piece a name, the information is easily separated and identified. Taking its name from the way paper-based information systems are named, each group of data is called a &amp;quot;file&amp;quot;. The structure and logic rules used to manage the groups of information and their names is called a &amp;quot;file system&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Journaling_file_system#Write_hazards journaling] in terms of filesystems and what are the benefits? Name some journaled file systems in use nowadays.===&lt;br /&gt;
A journaling file system is a file system that keeps track of changes not yet committed to the file system&#039;s main part by recording the intentions of such changes in a data structure known as a &amp;quot;journal&amp;quot;, which is usually a circular log. In the event of a system crash or power failure, such file systems can be brought back online quicker with lower likelihood of becoming corrupted.&lt;br /&gt;
&lt;br /&gt;
Depending on the actual implementation, a journaling file system may only keep track of stored metadata, resulting in improved performance at the expense of increased possibility for data corruption. Alternatively, a journaling file system may track both stored data and related metadata, while some implementations allow selectable behavior in this regard.&lt;br /&gt;
&lt;br /&gt;
Modern journaling: HFS+, NTFS, ext4, Btrfs, ZFS&lt;br /&gt;
&lt;br /&gt;
==Bootloaders, kernels==&lt;br /&gt;
&lt;br /&gt;
===What is the role of BIOS/UEFI in x86-based machines?===&lt;br /&gt;
BIOS (Basic Input/Output System) performs during boot up process of a computer and prepares it for the OS and its&#039; programs.&lt;br /&gt;
&lt;br /&gt;
UEFI (Unified Extensible Firmware Interface) is a replacement for BIOS. It offers several advantages over previous firmware interface, like: &lt;br /&gt;
* Ability to boot from large disks (over 2 TB) with a GUID Partition Table (GPT)&lt;br /&gt;
* CPU-independent architecture&lt;br /&gt;
* CPU-independent drivers&lt;br /&gt;
* Flexible pre-OS environment, including network capability&lt;br /&gt;
* Modular design&lt;br /&gt;
&lt;br /&gt;
===Explain step by step how operating system is booted up, see slides for flowchart.===&lt;br /&gt;
[[File:ChromeOSFirmwareBootandRecoveryPUBLISHED.png#filelinks]]&lt;br /&gt;
&lt;br /&gt;
1. The first thing a computer has to do when it is turned on is start up a special program called an operating system. That process is called booting. The instructions for booting are built into BIOS (Basic input/output system).&lt;br /&gt;
&lt;br /&gt;
2. The BIOS will tell your computer to look into the boot disk (usually the lowest-numbered hard disk) for a boot loader and the boot loader will be pulled into memory and will be started.&lt;br /&gt;
 &lt;br /&gt;
3. The boot loader&#039;s job is to start the real operating system and it does it by looking for a kernel, loading it into memory and  starting it. &lt;br /&gt;
&lt;br /&gt;
5. Once the kernel starts, it has to look around to find the rest of the hardware and get ready to run programs ( It does this by poking not at ordinary memory locations but rather at I/O ports — special bus addresses that are likely to have device controller cards listening at them for commands). The kernel doesn&#039;t poke at random; it has a lot of built-in knowledge about what it&#039;s likely to find where, and how controllers will respond if they&#039;re present. This process is called autoprobing.&lt;br /&gt;
&lt;br /&gt;
6. After the kernel is up and running, it&#039;s the end of first stage. After the first stage, the kernel hands control to a special program called &amp;quot;init&amp;quot; which spawns housekeeping processes. The init&#039;s process&#039;s first task is to look that your hard disks are okay &lt;br /&gt;
&lt;br /&gt;
7. Init&#039;s next step is to start several daemons. A daemon is a program like a print spooler, a mail listener or a WWW server that lurks in the background, waiting for things to do. These special programs often have to coordinate several requests that could conflict. They are daemons because it&#039;s often easier to write one program that runs constantly and knows about all requests than it would be to try to make sure that a flock of copies (each processing one request and all running at the same time) don&#039;t step on each other.&lt;br /&gt;
&lt;br /&gt;
8. The next step is to prepare for users. Init starts a copy of a program called getty to watch your screen and keyboard (and maybe more copies to watch dial-in serial ports).&lt;br /&gt;
&lt;br /&gt;
9. The next step is to start up various daemons that support networking and other services. The most important of these is your X server. X is a daemon that manages your display, keyboard, and mouse. Its main job is to produce the color pixel graphics you normally see on your screen.&lt;br /&gt;
&lt;br /&gt;
10. When the X server comes up, during the last part of your machine&#039;s boot process, it effectively takes over the hardware from whatever virtual console was previously in control. That&#039;s when you&#039;ll see a graphical login screen, produced for you by a program called a display manager.&lt;br /&gt;
&lt;br /&gt;
===BIOS===&lt;br /&gt;
* Basic input and output system&lt;br /&gt;
* Located at memory location 0xFFFF0&lt;br /&gt;
* Boot firmware designed to be run at startup&lt;br /&gt;
* POST- power on self test &lt;br /&gt;
* Run-time service&lt;br /&gt;
  initial configuration &lt;br /&gt;
  selects which device to boot from&lt;br /&gt;
* Alternatively, Extensible Firmware Interface (EFI)&lt;br /&gt;
&lt;br /&gt;
===Describe the functionality provided by general purpose operating system.===&lt;br /&gt;
An operating system (OS) is system software that manages computer hardware and software resources and provides common services for computer programs. The operating system is a component of the system software in a computer system. Application programs usually require an operating system to function.&lt;br /&gt;
&lt;br /&gt;
Time-sharing operating systems schedule tasks for efficient use of the system and may also include accounting software for cost allocation of processor time, mass storage, printing, and other resources.&lt;br /&gt;
&lt;br /&gt;
For hardware functions such as input and output and memory allocation, the operating system acts as an intermediary between programs and the computer hardware, although the application code is usually executed directly by the hardware and frequently makes system calls to an OS function or is interrupted by it. Operating systems are found on many devices that contain a computer—from cellular phones and video game consoles to web servers and supercomputers.&lt;br /&gt;
&lt;br /&gt;
See architecture of [https://en.wikipedia.org/wiki/Architecture_of_Windows_NT Windows NT], [http://www.elinux.org/Android_Architecture Android], [https://en.wikipedia.org/wiki/Architecture_of_OS_X OS X].&lt;br /&gt;
&lt;br /&gt;
===What are the main differences between [https://en.wikipedia.org/wiki/Real_mode real mode] and [https://en.wikipedia.org/wiki/Protected_mode protected mode] of x86-based processor?===&lt;br /&gt;
&lt;br /&gt;
Protected mode differed from the original mode of the 8086, which was later dubbed “real mode”, in that areas of memory could be physically isolated by the processor itself to prevent illegal writes to other programs running in memory at the same time. Prior to protected mode, multiple programs could be running in memory at the same time, but any program could access any area of memory and, therefore, if malicious or errant, for example, could take down the entire system. The 80286 introduced the protected mode to isolate that possibility by allowing the operating system (OS) to dictate where each program should run.&lt;br /&gt;
&lt;br /&gt;
===What happens during context switch?===&lt;br /&gt;
&lt;br /&gt;
During a context switch, the kernel will save the context of the old process in its PCB and then load the saved context of the new process scheduled to run.&lt;br /&gt;
&lt;br /&gt;
===What is the purpose of [https://en.wikipedia.org/wiki/Virtual_memory paged virtual memory]?===&lt;br /&gt;
Virtual memory is a memory management technique that is implemented using both hardware and software. It maps memory addresses used by a program, called virtual addresses, into physical addresses in computer memory. Main storage as seen by a process or task appears as a contiguous address space or collection of contiguous segments. The operating system manages virtual address spaces and the assignment of real memory to virtual memory. Address translation hardware in the CPU, often referred to as a memory management unit or MMU, automatically translates virtual addresses to physical addresses. Software within the operating system may extend these capabilities to provide a virtual address space that can exceed the capacity of real memory and thus reference more memory than is physically present in the computer.&lt;br /&gt;
&lt;br /&gt;
The primary benefits of virtual memory include freeing applications from having to manage a shared memory space, increased security due to memory isolation, and being able to conceptually use more memory than might be physically available, using the technique of paging.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Paged virtual memory&#039;&#039;&#039;: nearly all implementations of virtual memory divide a virtual address space into pages, blocks of contiguous virtual memory addresses. Pages on contemporary[NB 2] systems are usually at least 4 kilobytes in size; systems with large virtual address ranges or amounts of real memory generally use larger page sizes.&lt;br /&gt;
&lt;br /&gt;
use &amp;lt;code&amp;gt;cat /proc/meminfo&amp;lt;/code&amp;gt; to see the virtual memory.&lt;br /&gt;
&lt;br /&gt;
==Libraries, frameworks==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;OS provides libraries&#039;&#039;&#039;&lt;br /&gt;
*Render fonts: libfreetype&lt;br /&gt;
*Render user interface: GTK, Qt, Cocoa, MFC&lt;br /&gt;
*Playback MP3-s: libmad, Gstreamer,&lt;br /&gt;
*Encrypt connections: OpenSSL, LibreSSL, etc.&lt;br /&gt;
*Database functionality: SQLite&lt;br /&gt;
*Web browsing: WebKit&lt;br /&gt;
*3D graphics: OpenGL, DirectX&lt;br /&gt;
*Runtime environments: Java VM, .NET&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;OS provides services&#039;&#039;&#039;&lt;br /&gt;
*IPC (Inter-process communication) aka send messages between apps&lt;br /&gt;
*Window management&lt;br /&gt;
*Cache geolocation information&lt;br /&gt;
*Manage phonecalls&lt;br /&gt;
*Network management&lt;br /&gt;
*Framework ≃ Bunch of libraries + some services&lt;br /&gt;
&lt;br /&gt;
==Programming languages==&lt;br /&gt;
&lt;br /&gt;
===What are the major steps of compilation?===&lt;br /&gt;
1. &#039;&#039;&#039;Lexer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The first phase of scanner works as a text scanner. This phase scans the source code as a stream of characters and converts it into meaningful lexemes. Lexical analyser represents these lexemes in the form of tokens as: &amp;lt;token-name, attribute-value&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Parser&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The next phase is called the syntax analysis or parsing. It takes the token produced by lexical analysis as input and generates a parse tree (or syntax tree). In this phase, token arrangements are checked against the source code grammar, i.e. the parser checks if the expression made by the tokens is syntactically correct.&lt;br /&gt;
&lt;br /&gt;
3. &#039;&#039;&#039;Type checker&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Semantic analysis checks whether the parse tree constructed follows the rules of language. For example, assignment of values is between compatible data types, and adding string to an integer. Also, the semantic analyser keeps track of identifiers, their types and expressions; whether identifiers are declared before use or not etc. The semantic analyser produces an annotated syntax tree as an output and an intermediate code is produced.&lt;br /&gt;
&lt;br /&gt;
4. &#039;&#039;&#039;Optimizer&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The next phase does code optimization of the intermediate code. Optimization can be assumed as something that removes unnecessary code lines, and arranges the sequence of statements in order to speed up the program execution without wasting resources (CPU, memory).&lt;br /&gt;
&lt;br /&gt;
5. &#039;&#039;&#039;Code generator&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In this phase, the code generator takes the optimized representation of the intermediate code and maps it to the target machine language. The code generator translates the intermediate code into a sequence of (generally) re-locatable machine code. Sequence of instructions of machine code performs the task as the intermediate code would do.&lt;br /&gt;
&lt;br /&gt;
nmap 192.168.12.1-254 -p22,80&lt;br /&gt;
&lt;br /&gt;
===What are the differences between [https://en.wikipedia.org/wiki/Interpreted_language interpreted], [https://en.wikipedia.org/wiki/Just-in-time_compilation JIT-compilation] and [https://en.wikipedia.org/wiki/Compiler traditional compiling]?===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Interpreted language&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
An interpreted language is a programming language for which most of its implementations execute instructions directly, without previously compiling a program into machine-language instructions. The interpreter executes the program directly, translating each statement into a sequence of one or more subroutines already compiled into machine code. Example: JavaScript&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Just-in-time compilation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In computing, just-in-time (JIT) compilation, also known as dynamic translation, is compilation done during execution of a program – at run time – rather than prior to execution. Most often this consists of translation to machine code, which is then executed directly, but can also refer to translation to another format.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Compiler&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A compiler is a computer program (or a set of programs) that transforms source code written in a programming language (the source language) into another computer language (the target language), with the latter often having a binary form known as object code. The most common reason for converting source code is to create an executable program.&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Control_flow control flow]? Loops? Conditional statements?===&lt;br /&gt;
Flow control&lt;br /&gt;
In computer science, control flow (or alternatively, flow of control) is the order in which individual statements, instructions or function calls of an imperative program are executed or evaluated. The emphasis on explicit control flow distinguishes an imperative programming language from a declarative programming language.&lt;br /&gt;
Within an imperative programming language, a control flow statement is a statement whose execution results in a choice being made as to which of two or more paths should be followed. For non-strict functional languages, functions and language constructs exist to achieve the same result, but they are not necessarily called control flow statements.&lt;br /&gt;
&lt;br /&gt;
The kinds of control flow statements supported by different languages vary, but can be categorized by their effect:&lt;br /&gt;
&lt;br /&gt;
* continuation at a different statement (unconditional branch or jump),&lt;br /&gt;
* executing a set of statements only if some condition is met (choice - i.e., conditional branch),&lt;br /&gt;
* executing a set of statements zero or more times, until some condition is met (i.e., loop - the same as conditional branch),&lt;br /&gt;
* executing a set of distant statements, after which the flow of control usually returns (subroutines, coroutines, and continuations),&lt;br /&gt;
* stopping the program, preventing any further execution (unconditional halt).&lt;br /&gt;
&lt;br /&gt;
Count-controlled loops&lt;br /&gt;
&lt;br /&gt;
Most programming languages have constructions for repeating a loop a certain number of times. Note that if N is less than 1 in these examples then the language may specify that the body is skipped completely, or that the body is executed just once with N = 1. In most cases counting can go downwards instead of upwards and step sizes other than 1 can be used.&lt;br /&gt;
&lt;br /&gt;
   FOR I = 1 TO N           | for I := 1 to N do begin&lt;br /&gt;
       xxx                  |     xxx&lt;br /&gt;
   NEXT I                   | end;&lt;br /&gt;
------------------------------------------------------------&lt;br /&gt;
   DO I = 1,N               | for ( I=1; I&amp;lt;=N; ++I ) {&lt;br /&gt;
       xxx                  |     xxx&lt;br /&gt;
   END DO                   | }&lt;br /&gt;
&lt;br /&gt;
In many programming languages, only integers can be reliably used in a count-controlled loop. Floating-point numbers are represented imprecisely due to hardware constraints, so a loop such as&lt;br /&gt;
&lt;br /&gt;
==Data encoding==&lt;br /&gt;
&lt;br /&gt;
===What is bit? Nibble? Byte? Word?===&lt;br /&gt;
A bit is the basic unit of information in computing and digital communications. A bit can have only one of two values, and may therefore be physically implemented with a two-state device. These values are most commonly represented as either a 0 or 1. The two values can also be interpreted as logical values (true/false, yes/no), algebraic signs (+/−), activation states (on/off), or any other two-valued attribute.&lt;br /&gt;
&lt;br /&gt;
Nibble is half of an octet. A nibble has sixteen possible values.&lt;br /&gt;
&lt;br /&gt;
Byte is a unit of eight bits. Comes from the number of bits used to encode a single character of text in a computer. The term byte initially meant &#039;the smallest addressable unit of memory&#039;. In the past, 5-, 6-, 7-, 8-, and 9-bit bytes have all been used. The term byte was usually not used at all in connection with bit- and word-addressed machines. The term octet always refers to an 8-bit quantity. It is mostly used in the field of computer networking, where computers with different byte widths might have to communicate. In modern usage byte almost invariably means eight bits, since all other sizes have fallen into disuse; thus byte has come to be synonymous with octet.&lt;br /&gt;
&lt;br /&gt;
The term &#039;word&#039; is used for a small group of bits which are handled simultaneously by processors of a particular architecture. The size of a word is thus CPU-specific. The size of a word is reflected in many aspects of a computer&#039;s structure and operation; the majority of the registers in a processor are usually word sized and the largest piece of data that can be transferred to and from the working memory in a single operation is a word in many (not all) architectures. Modern general purpose computers usually use 32 or 64 bits.&lt;br /&gt;
&lt;br /&gt;
===Write 9375 in binary, hexadecimal?===&lt;br /&gt;
&#039;&#039;&#039;Binary&#039;&#039;&#039; or base two counting system starts from right with 0 and continues left with each step being to the power of 2.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: right;&amp;quot;&lt;br /&gt;
| 2^14&lt;br /&gt;
| 2^13 &lt;br /&gt;
| 2^12 &lt;br /&gt;
| 2^11 &lt;br /&gt;
| 2^10 &lt;br /&gt;
| 2^9 &lt;br /&gt;
| 2^8 &lt;br /&gt;
| 2^7 &lt;br /&gt;
| 2^6 &lt;br /&gt;
| 2^5 &lt;br /&gt;
| 2^4 &lt;br /&gt;
| 2^3 &lt;br /&gt;
| 2^2 &lt;br /&gt;
| 2^1&lt;br /&gt;
| 2^0&lt;br /&gt;
|- &lt;br /&gt;
| 16384&lt;br /&gt;
| 8192 &lt;br /&gt;
| 4096 &lt;br /&gt;
| 2048 &lt;br /&gt;
| 1024 &lt;br /&gt;
| 512 &lt;br /&gt;
| 256 &lt;br /&gt;
| 128 &lt;br /&gt;
|  64 &lt;br /&gt;
|  32 &lt;br /&gt;
|  16 &lt;br /&gt;
|   8 &lt;br /&gt;
|   4 &lt;br /&gt;
|   2&lt;br /&gt;
|   1&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To find out the decimal number (9375) in binary, look if it contains the number equal or smaller. 8192 is smaller than 9375, mark down 1. 9375-8192=1183 contains 1024, mark 1, etc. Number 9375 base ten is 0x10010010011111 in binary, where the &#039;0b&#039; represents base two. From binary to decimal conversion works the other way around. If perplexed, [https://www.khanacademy.org/math/pre-algebra/applying-math-reasoning-topic/alternate-number-bases/v/decimal-to-binary see the explanatory video on Khan academy].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hexadecimal&#039;&#039;&#039; or base 16 system goes from 0 until 9, then starts with A (10 base 10) until F (15 base 10).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: right;&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
|2&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|5&lt;br /&gt;
|6&lt;br /&gt;
|7&lt;br /&gt;
|8&lt;br /&gt;
|9&lt;br /&gt;
|10&lt;br /&gt;
|11&lt;br /&gt;
|12&lt;br /&gt;
|13&lt;br /&gt;
|14&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|5&lt;br /&gt;
|6&lt;br /&gt;
|7&lt;br /&gt;
|8&lt;br /&gt;
|9&lt;br /&gt;
|A&lt;br /&gt;
|B&lt;br /&gt;
|C&lt;br /&gt;
|D&lt;br /&gt;
|E&lt;br /&gt;
|F&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Conversion from base two to hex is similar to decimal to base two conversion. First, we figure out the multiples of 16:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: right;&amp;quot;&lt;br /&gt;
|16^0&lt;br /&gt;
|16^1&lt;br /&gt;
|16^2&lt;br /&gt;
|16^3&lt;br /&gt;
|16^4&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|16&lt;br /&gt;
|256&lt;br /&gt;
|4096&lt;br /&gt;
|65 536&lt;br /&gt;
|-&lt;br /&gt;
|F&lt;br /&gt;
|9&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|&amp;lt;-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
9375 has two multiples of 4096 (9375 - &#039;&#039;&#039;2&#039;&#039;&#039;*4096 = 9375 - 8192 = 1183), 1183 has &#039;&#039;&#039;4&#039;&#039;&#039; multiples of 256 (1183 - &#039;&#039;&#039;4&#039;&#039;&#039;*256 = 159), 159 has 159 - &#039;&#039;&#039;9&#039;&#039;&#039;*16 = 15 (15 in decimal is &#039;&#039;&#039;F&#039;&#039;&#039; in hex) and we come to 249F. As with base 2, you can convert this way from hex to decimal. If still don&#039;t get it, watch a [https://www.khanacademy.org/math/pre-algebra/applying-math-reasoning-topic/alternate-number-bases/v/decimal-to-hexadecimal video on Khan academy].&lt;br /&gt;
&lt;br /&gt;
===Write 0xDEADBEEF in decimal?===&lt;br /&gt;
Following the table above we calculate, 13x16^8 + 14x16^7 + 10x16^6 + 13x16^5 + 11x16^4 + 14x16^3 + 14x16^2 + 15x16^1 = A BIG NUMBER!&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Quantization_%28signal_processing%29 quantization] in terms of signal processing?===&lt;br /&gt;
Quantization, in mathematics and digital signal processing, is the process of mapping a large set of input values to a (countable) smaller set. Rounding and truncation are typical examples of quantization processes. Quantization is involved to some degree in nearly all digital signal processing, as the process of representing a signal in digital form ordinarily involves rounding. Quantization also forms the core of essentially all lossy compression algorithms. The difference between an input value and its quantized value (such as round-off error) is referred to as quantization error. A device or algorithmic function that performs quantization is called a quantizer. An analog-to-digital converter is an example of a quantizer.&lt;br /&gt;
&lt;br /&gt;
===How are [https://en.wikipedia.org/wiki/Integer_%28computer_science%29 integers] stored in binary? What integer range can be described using n bits? How many bits are required to describe integer range from n .. m.===&lt;br /&gt;
The value of an item with an integral type is the mathematical integer that it corresponds to. Integral types may be unsigned (capable of representing only non-negative integers) or signed (capable of representing negative integers as well).&lt;br /&gt;
&lt;br /&gt;
The most common representation of a positive integer is a string of bits, using the binary numeral system. The order of the memory bytes storing the bits varies; see endianness. The width or precision of an integral type is the number of bits in its representation. An integral type with n bits can encode 2n numbers. &lt;br /&gt;
&lt;br /&gt;
There are four well-known ways to represent signed numbers in a binary computing system. The most common is two&#039;s complement, which allows a signed integral type with n bits to represent numbers from −2(n−1) through 2(n−1)−1.&lt;br /&gt;
&lt;br /&gt;
===How are [https://en.wikipedia.org/wiki/Single-precision_floating-point_format single precision] and [https://en.wikipedia.org/wiki/Double-precision_floating-point_format double precision] floating point numbers stored in binary according to [https://en.wikipedia.org/wiki/IEEE_floating_point IEEE754 standard]?===&lt;br /&gt;
[http://lauri.vosandi.com/hdl/arithmetic/floating-point-representation.html Floating-point multiplication]&lt;br /&gt;
&lt;br /&gt;
===What is the difference between CMYK and RGB color models? How are YUV, HSV and HSL colorspaces related to RGB? What are sRGB and YCbCr and where are they used?===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CMYK Color Mode&#039;&#039;&#039;&lt;br /&gt;
[[File:SubtractiveColor.svg.png|right|100px|]]&lt;br /&gt;
If printers are using a digital printing method, they would print color on paper using CMYK colors. This is a four color mode that utilizes the colors &#039;&#039;&#039;cyan&#039;&#039;&#039;, &#039;&#039;&#039;magenta&#039;&#039;&#039;, &#039;&#039;&#039;yellow&#039;&#039;&#039; and &#039;&#039;&#039;black&#039;&#039;&#039; in various amounts to create all of the necessary colors when printing images. It is a subtractive process which, from a white background, adding a unique color means more light is removed, or absorbed, to create new colors. When the first three colors are added together, the result is not pure black, but rather a very dark brown. The K color, or black, is used to completely remove light from the printed picture, which is why the eye perceives the color as black.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;RGB Color Mode&#039;&#039;&#039;&lt;br /&gt;
[[File:220px-AdditiveColor.svg.png|right|100px|]]&lt;br /&gt;
RGB is the color scheme that is associated with electronic displays, such as CRT, LCD monitors, digital cameras and scanners. It is an additive type of color mode that, from a black background, combines the primary colors, red, green and blue, in various degrees to create a variety of different colors. When all three of the colors are combined and displayed to their full extent, the result is a pure white. When all three colors are combined to the lowest degree, or value, the result is black. Software such as photo editing programs use the RGB color mode because it offers the widest range of colors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;YUV, HSV, HSL&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Y&#039;UV model defines a color space in terms of one luma (Y&#039;) and two chrominance (UV) components. The Y&#039;UV color model is used in the PAL and SECAM composite color video standards.YUV models human perception of color more closely than the standard RGB model used in computer graphics hardware. Y&#039; stands for the luma component (the brightness) and U and V are the chrominance (color) components. &lt;br /&gt;
&lt;br /&gt;
HSV (hue, saturation, value), is often used by artists because it is often more natural to think about a color in terms of hue and saturation than in terms of additive or subtractive color components. HSL (hue, saturation, lightness/luminance), also known as HSL, HSI (hue, saturation, intensity) or HSD (hue, saturation, darkness), is quite similar to HSV, with &amp;quot;lightness&amp;quot; replacing &amp;quot;brightness&amp;quot;. HSV and HSL are a transformation of an RGB colorspace, and its components and colorimetry are relative to the RGB colorspace from which it was derived.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;sRGB and YCbCr&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
sRGB is pretty much the default color space everywhere you look. This means that most browsers, applications, and devices are designed to work with sRGB, and assume that images are in the sRGB color space. In fact, most browser simply ignore the embedded color space information in images and render them as sRGB images. If you publish your images on the web, you should always save and publish them as sRGB.&lt;br /&gt;
&lt;br /&gt;
YCbCr is one of two primary color spaces used to represent digital component video (the other is RGB). The difference between YCbCr and RGB is that YCbCr represents color as brightness and two color difference signals, while RGB represents color as red, green and blue. In YCbCr, the Y is the brightness (luma), Cb is blue minus luma (B-Y) and Cr is red minus luma (R-Y). MPEG compression, which is used in DVDs, digital TV and Video CDs, is coded in YCbCr.&lt;br /&gt;
&lt;br /&gt;
===How is data encoded on audio CD-s? What is the [http://lauri.vosandi.com/2013/07/audio-codecs.html capacity of an audio CD]?===&lt;br /&gt;
&lt;br /&gt;
There are 2 channels (left and right).&lt;br /&gt;
The amplitude of the voltage sound level is encoded with 16 bits per channel (or 2 bytes).&lt;br /&gt;
The sampling rate is how often this amplitude is measured: 44.1kHz (44100 times a second).&lt;br /&gt;
The CD had a specification to hold 80 minutes of music (4800 seconds).&lt;br /&gt;
&lt;br /&gt;
Capacity of a audio CD in bytes = 2 channels x 2 bytes (16 bites) x 44100 Hz x 4800 seconds = 846720000 bytes =&amp;gt; 846 Mbytes&lt;br /&gt;
&lt;br /&gt;
===What is sampling rate? What is bit depth? What is resolution?===&lt;br /&gt;
&#039;&#039;&#039;SAMPLE RATE:&#039;&#039;&#039;&lt;br /&gt;
Sample rate is the number of samples of audio carried per second, measured in Hz or kHz (one kHz being 1 000 Hz). For example, 44 100 samples per second can be expressed as either 44 100 Hz, or 44.1 kHz. Bandwidth is the difference between the highest and lowest frequencies carried in an audio stream&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BIT DEPTH:&#039;&#039;&#039;&lt;br /&gt;
Bit depth refers to the color information stored in an image. The higher the bit depth of an image, the more colors it can store. The simplest image, a 1 bit image, can only show two colors, black and white&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RESOLUTION:&#039;&#039;&#039;&lt;br /&gt;
Resolution is the number of pixels (individual points of color) contained on a display monitor, expressed in terms of the number of pixels on the horizontal axis and the number on the vertical axis. The sharpness of the image on a display depends on the resolution and the size of the monitor.&lt;br /&gt;
&lt;br /&gt;
===What is bitrate?===&lt;br /&gt;
Bitrate is the number of bits that are conveyed or processed per unit of time.&lt;br /&gt;
&lt;br /&gt;
The bit rate is quantified using the bits per second unit (symbol: &amp;quot;bit/s&amp;quot;), often in conjunction with an SI prefix such as &amp;quot;kilo&amp;quot; (1 kbit/s = 1000 bit/s), &amp;quot;mega&amp;quot; (1 Mbit/s = 1000 kbit/s), &amp;quot;giga&amp;quot; (1 Gbit/s = 1000 Mbit/s) or &amp;quot;tera&amp;quot; (1 Tbit/s = 1000 Gbit/s).[2] The non-standard abbreviation &amp;quot;bps&amp;quot; is often used to replace the standard symbol &amp;quot;bit/s&amp;quot;, so that, for example, &amp;quot;1 Mbps&amp;quot; is used to mean one million bits per second.&lt;br /&gt;
&lt;br /&gt;
One byte per second (1 B/s) corresponds to 8 bit/s.&lt;br /&gt;
&lt;br /&gt;
===What is lossy/lossless compression?===&lt;br /&gt;
Lossless and lossy compression are terms that describe whether or not, in the compression of a file, all original data can be recovered when the file is uncompressed. With lossless compression, every single bit of data that was originally in the file remains after the file is uncompressed.&lt;br /&gt;
&lt;br /&gt;
===What is JPEG suitable for? Is JPEG lossy or lossless compression method?===&lt;br /&gt;
JPEG is a commonly used method of lossy compression for digital images, particularly for those images produced by digital photography. The degree of compression can be adjusted, allowing a selectable tradeoff between storage size and image quality. JPEG typically achieves 10:1 compression with little perceptible loss in image quality. JPEG compression is used in a number of image file formats. JPEG/Exif is the most common image format used by digital cameras and other photographic image capture devices; along with JPEG/JFIF, it is the most common format for storing and transmitting photographic images on the World Wide Web. These format variations are often not distinguished, and are simply called JPEG.&lt;br /&gt;
&lt;br /&gt;
===What is PNG suitable for? Does PNG support compression?===&lt;br /&gt;
&lt;br /&gt;
Portable Network Graphics is a raster graphics file format that supports lossless data compression. PNG was created as an improved, non-patented replacement for Graphics Interchange Format (GIF), and is the most used lossless image compression format on the Internet.&lt;br /&gt;
&lt;br /&gt;
===How are time domain and frequency domain related in terms of signal processing? What is Fourier transform and where it is applied?===&lt;br /&gt;
&lt;br /&gt;
==Code execution in processor==&lt;br /&gt;
&lt;br /&gt;
===Given ~10 instructions and their explainations, follow the instructions and elaborate after every step what happened in the processor?===&lt;br /&gt;
&lt;br /&gt;
==Microcontrollers==&lt;br /&gt;
&lt;br /&gt;
===What distinguishes microcontroller from microprocessor?===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;MICROPROCESSOR&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;MICRO CONTROLLER&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|Microprocessor is heart of Computer system.	&lt;br /&gt;
|Micro Controller is a heart of embedded system.&lt;br /&gt;
|-&lt;br /&gt;
|It is just a processor. Memory and I/O components have to be connected externally	&lt;br /&gt;
|Micro controller has external processor along with internal memory and i/O components&lt;br /&gt;
|-&lt;br /&gt;
|Since memory and I/O has to be connected externally, the circuit becomes large.	&lt;br /&gt;
|Since memory and I/O are present internally, the circuit is small.&lt;br /&gt;
|-&lt;br /&gt;
|Cannot be used in compact systems and hence inefficient	&lt;br /&gt;
|Can be used in compact systems and hence it is an efficient technique&lt;br /&gt;
|-&lt;br /&gt;
|Cost of the entire system increases	&lt;br /&gt;
|Cost of the entire system is low&lt;br /&gt;
|-&lt;br /&gt;
|Due to external components, the entire power consumption is high. Hence it is not suitable to used with devices running on stored power like batteries.	&lt;br /&gt;
|Since external components are low, total power consumption is less and can be used with devices running on stored power like batteries.&lt;br /&gt;
|-&lt;br /&gt;
|Most of the microprocessors do not have power saving features.	&lt;br /&gt;
|Most of the micro controllers have power saving modes like idle mode and power saving mode. This helps to reduce power consumption even further.&lt;br /&gt;
|-&lt;br /&gt;
|Since memory and I/O components are all external, each instruction will need external operation, hence it is relatively slower.	&lt;br /&gt;
|Since components are internal, most of the operations are internal instruction, hence speed is fast.&lt;br /&gt;
|-&lt;br /&gt;
|Microprocessor have less number of registers, hence more operations are memory based.	&lt;br /&gt;
|Micro controller have more number of registers, hence the programs are easier to write.&lt;br /&gt;
|-&lt;br /&gt;
|Microprocessors are based on von Neumann model/architecture where program and data are stored in same memory module	&lt;br /&gt;
|Micro controllers are based on Harvard architecture where program memory and Data memory are separate&lt;br /&gt;
|-&lt;br /&gt;
|Mainly used in personal computers	&lt;br /&gt;
|Used mainly in washing machine, MP3 players&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===What are the differences between Harvard architecture and von Neumann architecture?===&lt;br /&gt;
Difference of von Neumann architecture from Harvard is that von Neumann can do a single operation at a time -- it cannot write while reading an instruction. A property that a computer with Harvard architecture can do.&lt;br /&gt;
&lt;br /&gt;
===What is an interrupt?===&lt;br /&gt;
Interrupt is a signal that there is something that requires immediate attention from the processing unit. Processor suspends its current activities, saves its state, deals with the temporary interrupt and returns itself to the previous state.&lt;br /&gt;
&lt;br /&gt;
===What is an timer?===&lt;br /&gt;
Timer is a line of code that tracks the passage of time based on the clock oscillator which is built in to the hardware where the software is running.&lt;br /&gt;
&lt;br /&gt;
==Introduction to Boole algebra==&lt;br /&gt;
&lt;br /&gt;
===Simplify A AND A OR B===&lt;br /&gt;
&lt;br /&gt;
===Show addition of X and Y in binary===&lt;br /&gt;
&lt;br /&gt;
 Two&#039;s Complement Addition&lt;br /&gt;
&lt;br /&gt;
 Add the values and discard any carry-out bit.&lt;br /&gt;
&lt;br /&gt;
 Examples: using 8-bit two’s complement numbers.&lt;br /&gt;
&lt;br /&gt;
 Add −8 to +3&lt;br /&gt;
  (+3)   0000 0011&lt;br /&gt;
 +(−8)   1111 1000&lt;br /&gt;
  -----------------&lt;br /&gt;
  (−5)   1111 1011&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Add −5 to −2&lt;br /&gt;
  (−2)   1111 1110&lt;br /&gt;
 +(−5)   1111 1011&lt;br /&gt;
  -----------------&lt;br /&gt;
  (−7) 1 1111 1001 : discard carry-out&lt;br /&gt;
&lt;br /&gt;
===Show subtraction of X and Y  in binary===&lt;br /&gt;
&lt;br /&gt;
 Two&#039;s Complement Subtraction&lt;br /&gt;
&lt;br /&gt;
 Normally accomplished by negating the subtrahend and adding it to the minuhend. Any carry-out is  discarded.&lt;br /&gt;
&lt;br /&gt;
 Example: Using 8-bit Two&#039;s Complement Numbers (−128 ≤ x ≤ +127)&lt;br /&gt;
&lt;br /&gt;
  (+8) 0000 1000               0000 1000&lt;br /&gt;
 −(+5) 0000 0101 -&amp;gt; Negate -&amp;gt; +1111 1011&lt;br /&gt;
 -----                        -----------&lt;br /&gt;
  (+3)                       1 0000 0011 : discard carry-out&lt;br /&gt;
&lt;br /&gt;
===Show multiplication of X and Y in binary===&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
  Multiplication Example 11001012 × 1111012 (10110 × 6110)&lt;br /&gt;
       &lt;br /&gt;
       1100101   10110&lt;br /&gt;
      × 111101  × 6110&lt;br /&gt;
       -------&lt;br /&gt;
       1100101&lt;br /&gt;
    +1100101&lt;br /&gt;
   +1100101&lt;br /&gt;
  +1100101&lt;br /&gt;
 +1100101&lt;br /&gt;
 -------------&lt;br /&gt;
 ?????????????&lt;br /&gt;
 -------------    &lt;br /&gt;
 &lt;br /&gt;
 Easier to use intermediary results:&lt;br /&gt;
&lt;br /&gt;
       1100101   10110&lt;br /&gt;
      × 111101  × 6110&lt;br /&gt;
       -------&lt;br /&gt;
       1100101&lt;br /&gt;
    +1100101&lt;br /&gt;
    ----------&lt;br /&gt;
     111111001&lt;br /&gt;
   +1100101&lt;br /&gt;
  ------------&lt;br /&gt;
   10100100001&lt;br /&gt;
  +1100101&lt;br /&gt;
 -------------&lt;br /&gt;
  101101110001&lt;br /&gt;
 +1100101&lt;br /&gt;
 -------------&lt;br /&gt;
 1100000010001 = 409610 + 204810 + 1610 + 1 = 616110&lt;br /&gt;
 -------------&lt;br /&gt;
&lt;br /&gt;
==Hardware description languages==&lt;br /&gt;
&lt;br /&gt;
===What are the uses for hardware description languages?===&lt;br /&gt;
In electronics, a hardware description language (HDL) is a specialized computer language used to program the structure, design and operation of electronic circuits, and most commonly, digital logic circuits.&lt;br /&gt;
&lt;br /&gt;
A hardware description language enables a precise, formal description of an electronic circuit that allows for the automated analysis, simulation, and simulated testing of an electronic circuit. It also allows for the compilation of an HDL program into a lower level specification of physical electronic components, such as the set of masks used to create an integrated circuit.&lt;br /&gt;
&lt;br /&gt;
A hardware description language looks much like a programming language such as C; it is a textual description consisting of expressions, statements and control structures. One important difference between most programming languages and HDLs is that HDLs explicitly include the notion of time.&lt;br /&gt;
&lt;br /&gt;
===What is latch?===&lt;br /&gt;
A latch is an example of a bistable multivibrator, that is, a device with exactly two stable states. These states are high-output and low-output. A latch has a feedback path, so information can be retained by the device. Therefore latches can be memory devices, and can store one bit of data for as long as the device is powered. As the name suggests, latches are used to &amp;quot;latch onto&amp;quot; information and hold in place. Latches are very similar to flip-flops, but are not synchronous devices, and do not operate on clock edges as flip-flops do.&lt;br /&gt;
&lt;br /&gt;
===What is flip-flop?===&lt;br /&gt;
A flip-flop is a device very like a latch in that it is a bistable multivibrator, having two states and a feedback path that allows it to store a bit of information. The difference between a latch and a flip-flop is that a latch is asynchronous, and the outputs can change as soon as the inputs do (or at least after a small propagation delay). A flip-flop, on the other hand, is edge-triggered and only changes state when a control signal goes from high to low or low to high. This distinction is relatively recent and is not formal, with many authorities still referring to flip-flops as latches and vice versa, but it is a helpful distinction to make for the sake of clarity.&lt;br /&gt;
&lt;br /&gt;
There are several different types of flip-flop each with its own uses and peculiarities. The four main types of flip-flop are : SR, JK, D, and T.&lt;br /&gt;
&lt;br /&gt;
===What is mux (multiplexer)?===&lt;br /&gt;
A multiplexer (or mux) is a device that selects one of several analog or digital input signals and forwards the selected input into a single line.[1] A multiplexer of 2n inputs has n select lines, which are used to select which input line to send to the output.[2] Multiplexers are mainly used to increase the amount of data that can be sent over the network within a certain amount of time and bandwidth.[1] A multiplexer is also called a data selector.&lt;br /&gt;
&lt;br /&gt;
An electronic multiplexer makes it possible for several signals to share one device or resource, for example one A/D converter or one communication line, instead of having one device per input signal.&lt;br /&gt;
&lt;br /&gt;
===What is register? Register file?===&lt;br /&gt;
&#039;&#039;&#039;Registers&#039;&#039;&#039; are a special, high-speed storage area within the CPU. All data must be represented in a register before it can be processed. For example, if two numbers are to be multiplied, both numbers must be in registers, and the result is also placed in a register. A register may hold a computer instruction , a storage address, or any kind of data (such as a bit sequence or individual characters). A register must be large enough to hold an instruction - for example, in a 32-bit instruction computer, a register must be 32 bits in length. In some computer designs, there are smaller registers - for example, half-registers - for shorter instructions. Depending on the processor design and language rules, registers may be numbered or have arbitrary names.&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;register file&#039;&#039;&#039; is an array of processor registers in a central processing unit (CPU). Modern integrated circuit-based register files are usually implemented by way of fast static RAMs with multiple ports. Such RAMs are distinguished by having dedicated read and write ports, whereas ordinary multiported SRAMs will usually read and write through the same ports.&lt;br /&gt;
&lt;br /&gt;
The instruction set architecture of a CPU will almost always define a set of registers which are used to stage data between memory and the functional units on the chip. In simpler CPUs, these architectural registers correspond one-for-one to the entries in a physical register file within the CPU. More complicated CPUs use register renaming, so that the mapping of which physical entry stores a particular architectural register changes dynamically during execution. The register file is part of the architecture and visible to the programmer, as opposed to the concept of transparent caches.&lt;br /&gt;
&lt;br /&gt;
===What is ALU?===&lt;br /&gt;
An arithmetic logic unit (ALU) is a digital electronic circuit that performs arithmetic and bitwise logical operations on integer binary numbers. This is in contrast to a floating-point unit (FPU), which operates on floating point numbers. An ALU is a fundamental building block of many types of computing circuits, including the central processing unit (CPU) of computers, FPUs, and graphics processing units (GPUs). A single CPU, FPU or GPU may contain multiple ALUs.&lt;br /&gt;
&lt;br /&gt;
The inputs to an ALU are the data to be operated on, called operands, and a code indicating the operation to be performed; the ALU&#039;s output is the result of the performed operation. In many designs, the ALU also exchanges additional information with a status register, which relates to the result of the current or previous operations.&lt;br /&gt;
&lt;br /&gt;
===What is floating-point unit?===&lt;br /&gt;
A floating-point unit (FPU) is a part of a computer system specially designed to carry out operations on floating point numbers. Typical operations are addition, subtraction, multiplication, division, square root, and bitshifting. Some systems (particularly older, microcode-based architectures) can also perform various transcendental functions such as exponential or trigonometric calculations, though in most modern processors these are done with software library routines.&lt;br /&gt;
&lt;br /&gt;
In general purpose computer architectures, one or more FPUs may be integrated with the central processing unit; however many embedded processors do not have hardware support for floating-point operations.&lt;br /&gt;
&lt;br /&gt;
===What is a cache?===&lt;br /&gt;
Clearing Computer Cache. The cache (pronounced &amp;quot;cash&amp;quot;) is a space in your computer&#039;s hard drive and in RAM memory where your browser saves copies of previously visited Web pages. Your browser uses the cache like a short-term memory&lt;br /&gt;
&lt;br /&gt;
===What is a bus?===&lt;br /&gt;
In computer architecture, a bus (related to the Latin &amp;quot;omnibus&amp;quot;, meaning &amp;quot;for all&amp;quot;) is a communication system that transfers data between components inside a computer, or between computers.&lt;br /&gt;
&lt;br /&gt;
===Show the circuit diagram for A OR B AND C, NOT A AND B, &amp;lt;insert some other Boole formula here&amp;gt;?===&lt;br /&gt;
&lt;br /&gt;
===Show the truth table for &amp;lt;insert Boole formula here&amp;gt;?===&lt;br /&gt;
&lt;br /&gt;
 Logical Conjunction(AND)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|p	&lt;br /&gt;
|q	&lt;br /&gt;
|p ∧ q&lt;br /&gt;
|-&lt;br /&gt;
|T	&lt;br /&gt;
|T	&lt;br /&gt;
|T&lt;br /&gt;
|-&lt;br /&gt;
|T	&lt;br /&gt;
|F	&lt;br /&gt;
|F&lt;br /&gt;
|-&lt;br /&gt;
|F	&lt;br /&gt;
|T	&lt;br /&gt;
|F&lt;br /&gt;
|-&lt;br /&gt;
|F	&lt;br /&gt;
|F	&lt;br /&gt;
|F&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Logical Disjunction(OR)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|p	&lt;br /&gt;
|q	&lt;br /&gt;
|p ∨ q&lt;br /&gt;
|-&lt;br /&gt;
|T	&lt;br /&gt;
|T	&lt;br /&gt;
|T&lt;br /&gt;
|-&lt;br /&gt;
|T	&lt;br /&gt;
|F	&lt;br /&gt;
|T&lt;br /&gt;
|-&lt;br /&gt;
|F	&lt;br /&gt;
|T	&lt;br /&gt;
|T&lt;br /&gt;
|-&lt;br /&gt;
|F	&lt;br /&gt;
|F	&lt;br /&gt;
|F&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Logical NAND&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|p	&lt;br /&gt;
|q	&lt;br /&gt;
|p ↑ q&lt;br /&gt;
|-&lt;br /&gt;
|T	&lt;br /&gt;
|T	&lt;br /&gt;
|F&lt;br /&gt;
|-&lt;br /&gt;
|T	&lt;br /&gt;
|F	&lt;br /&gt;
|T&lt;br /&gt;
|-&lt;br /&gt;
|F	&lt;br /&gt;
|T	&lt;br /&gt;
|T&lt;br /&gt;
|-&lt;br /&gt;
|F	&lt;br /&gt;
|F	&lt;br /&gt;
|T&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Logical  NOR&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|p	&lt;br /&gt;
|q	&lt;br /&gt;
|p ↓ q&lt;br /&gt;
|-&lt;br /&gt;
|T	&lt;br /&gt;
|T	&lt;br /&gt;
|F&lt;br /&gt;
|-&lt;br /&gt;
|T	&lt;br /&gt;
|F	&lt;br /&gt;
|F&lt;br /&gt;
|-&lt;br /&gt;
|F	&lt;br /&gt;
|T	&lt;br /&gt;
|F&lt;br /&gt;
|-&lt;br /&gt;
|F	&lt;br /&gt;
|F	&lt;br /&gt;
|T&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Write the equivalent Boole formula of a circuit diagram.===&lt;br /&gt;
&lt;br /&gt;
==Publishing work==&lt;br /&gt;
&lt;br /&gt;
===What are the major implications of MIT, BSD and GPL licenses?===&lt;br /&gt;
The MIT License is a free software license originating at the Massachusetts Institute of Technology (MIT). It is a permissive free software license, meaning that it puts only very limited restriction on reuse and has therefore an excellent license compatibility. The MIT license permits reuse within proprietary software provided all copies of the licensed software include a copy of the MIT License terms and the copyright notice. The MIT license is also compatible with many copyleft licenses as the GPL; MIT licensed software can be integrated into GPL software, but not the other way around.&lt;br /&gt;
While the MIT license was always an important and often used license in the FOSS domain, in 2015 according to Black Duck Software and GitHub data, it became the most popular license before GPL variants and other FOSS licenses.&lt;br /&gt;
Notable software packages that use one of the versions of the MIT License include Expat, the Mono development platform class libraries, Ruby on Rails, Node.js, jQuery and the X Window System, for which the license was written.&lt;br /&gt;
&lt;br /&gt;
BSD licenses are a family of permissive free software licenses, imposing minimal restrictions on the redistribution of covered software. They have max 4 articles + header and footer.&lt;br /&gt;
*Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.&lt;br /&gt;
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.&lt;br /&gt;
* Neither the name of the &amp;lt;organization&amp;gt; nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.&lt;br /&gt;
&lt;br /&gt;
The GNU General Public License (GNU GPL or GPL) is a widely used free software license, which guarantees end users (individuals, organizations, companies) the freedoms to run, study, share (copy), and modify the software. Software that allows these rights is called free software and, if the software is copylefted, requires those rights to be retained. The GPL demands both. The license was originally written by Richard Stallman of the Free Software Foundation (FSF) for the GNU Project. In other words, the GPL grants the recipients of a computer program the rights of the Free Software Definition and uses copyleft to ensure the freedoms are preserved whenever the work is distributed, even when the work is changed or added to. The GPL is a copyleft license, which means that derived works can only be distributed under the same license terms. This is in distinction to permissive free software licenses, of which the BSD licenses and the MIT License are the standard examples. GPL was the first copyleft license for general use.&lt;br /&gt;
&lt;br /&gt;
===What are the differences between copyright, trademark, trade secret?===&lt;br /&gt;
“Intellectual property is something that is created by the mind.”  Typically, we think of ideas as being created by the mind – but intellectual property does not protect bare ideas: rather, it is the expression or symbolic power/recognizability of the ideas that are protected. &lt;br /&gt;
Thus, it is the design of the rocket that is patented, not the idea of a rocket.  It is the painting of the lake that is copyrighted, not the idea of a lake.  And it is the consumer recognizable logo that is trademarked, not the idea of a logo.  Intellectual property protects how we express and identify ideas in concrete ways – not the idea itself.&lt;br /&gt;
&lt;br /&gt;
In particular:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Patents&#039;&#039;&#039;: protect functional expressions of an idea – not the idea itself.  A machines, method/process, manufacture, compositions of matter, and improvements of any of these items can be patented.  Thus, I can patent a design for the nozzle on a rocket, or the method of making the rocket, or the method of making the rocket fuel, or the metal in which the rocket fuel is stored, or a new way of transporting the rocket fuel to the rocket.  But I cannot patent the broad “idea” of a rocket.&lt;br /&gt;
     &lt;br /&gt;
&#039;&#039;&#039;Copyrights&#039;&#039;&#039;: protect the specific creative expression of an idea through any medium of artistic/creative expression – i.e., paintings, photographs, sculpture, writings, software, etc.   A copyright protects your painting of a haystack, but it would not prohibit another painter from expressing their artistry or viewpoint by also painting a haystack. Likewise, while Ian Fleming was able to receive a copyright on his particular expression of the idea of a secret agent (i.e., a debonair English secret agent), he could not prevent Rich Wilkes from receiving a copyright on his expression of the idea of a secret agent (i.e., a tattooed bald extreme athlete turned reluctant secret agent).  &lt;br /&gt;
     &lt;br /&gt;
&#039;&#039;&#039;Trademarks&#039;&#039;&#039;: protect any symbol that indicates the source or origin of the goods or services to which it is affixed.  While a trademark can be extremely valuable to its owner, the ultimate purpose of a trademark is to protect consumers – that is, the function of a trademark is to inform the consumer where the goods or services originate.  The consumer, knowing the origin of the goods, can make purchasing decisions based on prior knowledge, reputation or marketing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Trade secret&#039;&#039;&#039;: is a formula, practice, process, design, instrument, pattern, commercial method, or compilation of information which is not generally known or reasonably ascertainable by others, and by which a business can obtain an economic advantage over competitors or customers.[&lt;br /&gt;
&lt;br /&gt;
While each category is distinct, a product (or components/aspects of a product) may fall into one or more of the categories.  For example, software can be protected by both patents and copyrights.  The copyright would protect the artistic expression of the idea – i.e., the code itself – while the patent would protect the functional expression of the idea – e.g., using a single click to purchase a book online.  Likewise, it is likely that the software company will use a trademark to indicate who made the software. &lt;br /&gt;
&lt;br /&gt;
An additional example would be a logo for a company.  The logo may serve as a trademark indicating that all products affixed with the logo are from the same source.  The creative and artistic aspects of the logo may also be protected by a copyright.&lt;br /&gt;
&lt;br /&gt;
===Where would you use waterfall software development model? Where would you use agile?===&lt;br /&gt;
&lt;br /&gt;
===What is the purpose of a version control system?===&lt;br /&gt;
&lt;br /&gt;
 Why Use a Version Control System?&lt;br /&gt;
&lt;br /&gt;
There are many benefits of using a version control system for your projects. This chapter explains some of them in detail.&lt;br /&gt;
&lt;br /&gt;
 Collaboration&lt;br /&gt;
&lt;br /&gt;
Without a VCS in place, you&#039;re probably working together in a shared folder on the same set of files. Shouting through the office that you are currently working on file &amp;quot;xyz&amp;quot; and that, meanwhile, your teammates should keep their fingers off is not an acceptable workflow. It&#039;s extremely error-prone as you&#039;re essentially doing open-heart surgery all the time: sooner or later, someone will overwrite someone else&#039;s changes.&lt;br /&gt;
&lt;br /&gt;
With a VCS, everybody on the team is able to work absolutely freely - on any file at any time. The VCS will later allow you to merge all the changes into a common version. There&#039;s no question where the latest version of a file or the whole project is. It&#039;s in a common, central place: your version control system.&lt;br /&gt;
&lt;br /&gt;
Other benefits of using a VCS are even independent of working in a team or on your own.&lt;br /&gt;
&lt;br /&gt;
 Storing Versions (Properly)&lt;br /&gt;
&lt;br /&gt;
Saving a version of your project after making changes is an essential habit. But without a VCS, this becomes tedious and confusing very quickly:&lt;br /&gt;
&lt;br /&gt;
How much do you save? Only the changed files or the complete project? In the first case, you&#039;ll have a hard time viewing the complete project at any point in time - in the latter case, you&#039;ll have huge amounts of unnecessary data lying on your hard drive.&lt;br /&gt;
How do you name these versions? If you&#039;re a very organized person, you might be able to stick to an actually comprehensible naming scheme (if you&#039;re happy with &amp;quot;acme-inc-redesign-2013-11-12-v23&amp;quot;). However, as soon as it comes to variants (say, you need to prepare one version with the header area and one without it), chances are good you&#039;ll eventually lose track.&lt;br /&gt;
The most important question, however, is probably this one: How do you know what exactly is different in these versions? Very few people actually take the time to carefully document each important change and include this in a README file in the project folder.&lt;br /&gt;
A version control system acknowledges that there is only one project. Therefore, there&#039;s only the one version on your disk that you&#039;re currently working on. Everything else - all the past versions and variants - are neatly packed up inside the VCS. When you need it, you can request any version at any time and you&#039;ll have a snapshot of the complete project right at hand.&lt;br /&gt;
&lt;br /&gt;
 Restoring Previous Versions&lt;br /&gt;
&lt;br /&gt;
Being able to restore older versions of a file (or even the whole project) effectively means one thing: you can&#039;t mess up! If the changes you&#039;ve made lately prove to be garbage, you can simply undo them in a few clicks. Knowing this should make you a lot more relaxed when working on important bits of a project.&lt;br /&gt;
&lt;br /&gt;
 Understanding What Happened&lt;br /&gt;
&lt;br /&gt;
Every time you save a new version of your project, your VCS requires you to provide a short description of what was changed. Additionally (if it&#039;s a code / text file), you can see what exactly was changed in the file&#039;s content. This helps you understand how your project evolved between versions.&lt;br /&gt;
&lt;br /&gt;
 Backup&lt;br /&gt;
&lt;br /&gt;
A side-effect of using a distributed VCS like Git is that it can act as a backup; every team member has a full-blown version of the project on his disk - including the project&#039;s complete history. Should your beloved central server break down (and your backup drives fail), all you need for recovery is one of your teammates&#039; local Git repository.&lt;br /&gt;
&lt;br /&gt;
===What would you store in a version control system?===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Algorithms and data structures==&lt;br /&gt;
&lt;br /&gt;
===What is time complexity of algorithm?===&lt;br /&gt;
In computer science, the time complexity of an algorithm quantifies the amount of time taken by an algorithm to run as a function of the length of the string representing the input. Time complexity is commonly estimated by counting the number of elementary operations performed by the algorithm, where an elementary operation takes a fixed amount of time to perform.&lt;br /&gt;
&lt;br /&gt;
===What is space complexity of algorithm?===&lt;br /&gt;
Space complexity is a measure of the amount of working storage an algorithm needs. That means how much memory, in the worst case, is needed at any point in the algorithm.&lt;br /&gt;
It represents the total amount of memory space that a &amp;quot;normal&amp;quot; physical computer would need to solve a given computational problem with a given algorithm.&lt;br /&gt;
&lt;br /&gt;
===What&#039;s a good algorithm?===&lt;br /&gt;
It executes as fast as possible.&lt;br /&gt;
It takes as less space as possible.&lt;br /&gt;
It is adaptable to computers.&lt;br /&gt;
It is simple.&lt;br /&gt;
It is elegant (well written).&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Moore&#039;s_law Moore&#039;s law]? What is [https://en.wikipedia.org/wiki/Rock&#039;s_law Rock&#039;s law]?===&lt;br /&gt;
Moore&#039;s law is the observation that the number of transistors in a dense integrated circuit doubles approximately every two years. The observation is named after Gordon E. Moore, the co-founder of Intel and Fairchild Semiconductor, whose 1965 paper described a doubling every year in the number of components per integrated circuit, and projected this rate of growth would continue for at least another decade. In 1975, looking forward to the next decade, he revised the forecast to doubling every two years.&lt;br /&gt;
Rock&#039;s law or Moore&#039;s second law, named for Arthur Rock or Gordon Moore, says that the cost of a semiconductor chip fabrication plant doubles every four years. As of 2015, the price had already reached about 14 billion US dollars.&lt;br /&gt;
&lt;br /&gt;
===What were the major contributing factors for success of Microsoft, Apple, Google, &amp;lt;your favourite company&amp;gt;?===&lt;br /&gt;
&lt;br /&gt;
===What were the major contributing factors to the success of Silicon Valley?===&lt;/div&gt;</summary>
		<author><name>Smets</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Exam_help&amp;diff=100330</id>
		<title>Exam help</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Exam_help&amp;diff=100330"/>
		<updated>2016-01-11T20:26:09Z</updated>

		<summary type="html">&lt;p&gt;Smets: /* Explain how cathode ray tube (CRT) based screen technology works and name pros/cons. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Computer hardware==&lt;br /&gt;
&lt;br /&gt;
=== Different buses and their uses===&lt;br /&gt;
In computer architecture, a bus is a communication system that transfers data between components inside a computer, or between computers. This expression covers all related hardware components (wire, optical fiber, etc.) and software, including communication protocols.&lt;br /&gt;
&lt;br /&gt;
The internal bus, also known as internal data bus, memory bus, system bus or Front-Side-Bus, connects all the internal components of a computer, such as CPU and memory, to the motherboard. Internal data buses are also referred to as a local bus, because they are intended to connect to local devices. This bus is typically rather quick and is independent of the rest of the computer operations.&lt;br /&gt;
&lt;br /&gt;
The external bus, or expansion bus, is made up of the electronic pathways that connect the different external devices, such as printer etc., to the computer.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Types and uses:&#039;&#039;&#039;&lt;br /&gt;
;USB&lt;br /&gt;
:Universal Serial Bus. Designed for: input devices, digital cameras, printers, media players...&lt;br /&gt;
&lt;br /&gt;
;Serial ATA&lt;br /&gt;
:Used by internal storage devices (hard disk). They replace the old ATA connectors.&lt;br /&gt;
&lt;br /&gt;
;PCI&lt;br /&gt;
:Peripheral Component Interconnect, is a local computer bus for attaching hardware devices in a computer. Attached devices can take either the form of an integrated circuit fitted onto the motherboard itself or an expansion card that fits into a slot. Typical PCI cards used in PCs include: network cards, sound cards, modems, extra ports such as USB or serial, TV tuner cards and disk controllers.&lt;br /&gt;
&lt;br /&gt;
;PCI Express&lt;br /&gt;
:Peripheral Component Interconnect Express (also called PCIe), is a high-speed serial computer expansion bus standard designed to replace the older PCI, PCI-X, and AGP bus standards. PCIe has numerous improvements over the older standards, including higher maximum system bus throughput, lower I/O pin count and smaller physical footprint, better performance scaling for bus devices, a more detailed error detection and reporting mechanism, and native hot-plug functionality. More recent revisions of the PCIe standard provide hardware support for I/O virtualization.&lt;br /&gt;
&lt;br /&gt;
;Mini PCIe&lt;br /&gt;
:It is based on PCI Express technoogy. Main point is its small size and its large variety of connectors makes it used for USB2.0 cards, SIM card, Wifi and Bluetooth cards, 3G and GPS cards.&lt;br /&gt;
&lt;br /&gt;
;ExpressCard&lt;br /&gt;
:It is an interface to connect peripheral devices to a computer, usually a laptop computer. ExpressCards can connect a variety of devices to a computer including mobile broadband modems, IEEE 1394 (FireWire) connectors, USB connectors, Ethernet network ports, Serial ATA storage devices, solid-state drives, external enclosures for desktop-size PCI Express graphics cards and other peripheral devices, wireless network interface controllers (NIC), TV tuner cards, Common Access Card (CAC) readers, and sound cards.&lt;br /&gt;
&lt;br /&gt;
===What are the differences between hard disk drive (HDD) and solid state drive (SSD)?=== &lt;br /&gt;
The traditional spinning hard drive (HDD) is the basic nonvolatile storage on a computer. Hard drives are essentially metal platters with a magnetic coating which stores the data. A read/write head on an arm accesses the data while the platters are spinning in a hard drive enclosure.&lt;br /&gt;
An SSD does same jobas an HDD, but instead of a magnetic coating on top of platters, the data is stored on interconnected flash memory chips that retain the data even when there&#039;s no power present. HDDs have spinning plates with magnetic coating, while SSDs have no moving parts and instead are using flash memory.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribute&lt;br /&gt;
!SSD (Solid State Drive)&lt;br /&gt;
!HDD (Hard Disk Drive)&lt;br /&gt;
|-&lt;br /&gt;
|Power Draw / Battery Life 	&lt;br /&gt;
|Less power draw, averages 2 – 3 watts, resulting in 30+ minute battery boost 	&lt;br /&gt;
|More power draw, averages 6 – 7 watts and therefore uses more battery&lt;br /&gt;
|-&lt;br /&gt;
|Cost 	&lt;br /&gt;
|Expensive, roughly $0.10 per gigabyte (based on buying a 1TB drive)&lt;br /&gt;
|Only around $0.06 per gigabyte, very cheap (buying a 4TB model)&lt;br /&gt;
|-&lt;br /&gt;
|Capacity 	&lt;br /&gt;
|Typically not larger than 1TB for notebook size drives; 1TB max for desktops 	&lt;br /&gt;
|Typically around 500GB and 2TB maximum for notebook size drives; 6TB max for desktops&lt;br /&gt;
|-&lt;br /&gt;
|Operating System Boot Time 	&lt;br /&gt;
|Around 10-13 seconds average bootup time 	&lt;br /&gt;
|Around 30-40 seconds average bootup time&lt;br /&gt;
|-&lt;br /&gt;
|Noise 	&lt;br /&gt;
|There are no moving parts and as such no sound 	&lt;br /&gt;
|Audible clicks and spinning can be heard&lt;br /&gt;
|-&lt;br /&gt;
|Vibration 	&lt;br /&gt;
|No vibration as there are no moving parts 	&lt;br /&gt;
|The spinning of the platters can sometimes result in vibration&lt;br /&gt;
|-&lt;br /&gt;
|Heat Produced 	&lt;br /&gt;
|Lower power draw and no moving parts so little heat is produced 	&lt;br /&gt;
|HDD doesn’t produce much heat, but it will have a measurable amount more heat than an SSD due to moving parts and higher power draw&lt;br /&gt;
|-&lt;br /&gt;
|Failure Rate 	&lt;br /&gt;
|Mean time between failure rate of 2.0 million hours 	&lt;br /&gt;
|Mean time between failure rate of 1.5 million hours&lt;br /&gt;
|-&lt;br /&gt;
|File Copy / Write Speed 	&lt;br /&gt;
|Generally above 200 MB/s and up to 550 MB/s for cutting edge drives 	&lt;br /&gt;
|The range can be anywhere from 50 – 120MB / s&lt;br /&gt;
|-&lt;br /&gt;
|Encryption 	&lt;br /&gt;
|Full Disk Encryption (FDE) Supported on some models 	&lt;br /&gt;
|Full Disk Encryption (FDE) Supported on some models&lt;br /&gt;
|-&lt;br /&gt;
|File Opening Speed 	&lt;br /&gt;
|Up to 30% faster than HDD 	&lt;br /&gt;
|Slower than SSD&lt;br /&gt;
|-&lt;br /&gt;
|Magnetism Affected? 	&lt;br /&gt;
|An SSD is safe from any effects of magnetism 	&lt;br /&gt;
|Magnets can erase data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===What is the purpose of Flash Translation Layer in terms of solid state drives?===&lt;br /&gt;
Flash drives have limited lifespan due to write cycles (or rather program-erase (PE) cycles) and to exhaust the drive equally, FTL layer is utilised.&lt;br /&gt;
&lt;br /&gt;
Although presenting an array of Logical Block Addresses (LBA) makes sense for HDDs as their sectors can be overwritten, it is not fully suited to the way flash memory works. For this reason, an additional component is required to hide the inner characteristics of NAND flash memory and expose only an array of LBAs to the host. This component is called the Flash Translation Layer (FTL), and resides in the SSD controller. The FTL is critical and has three main purposes: logical block mapping, wear leveling and garbage collection.&lt;br /&gt;
&lt;br /&gt;
The logical block mapping translates logical block addresses (LBAs) from the host space into physical block addresses (PBAs) in the physical NAND-flash memory space. This mapping takes the form of a table, which for any LBA gives the corresponding PBA.&lt;br /&gt;
&lt;br /&gt;
Wear leveling (also written as wear levelling) is a technique[1] for prolonging the service life of some kinds of erasable computer storage media, such as flash memory (used in solid-state drives (SSDs) and USB flash drives).&lt;br /&gt;
&lt;br /&gt;
The garbage collection process in the SSD controller ensures that “stale” pages are erased and restored into a “free” state so that the incoming write commands can be processed. If the data in a page has to be updated, the new version is written to a free page, and the page containing the previous version is marked as stale. When blocks contain stale pages, they need to be erased before they can be written to.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===What are difference between volatile/non-volatile, RAM, ROM, EEPROM and where are they used?===&lt;br /&gt;
&lt;br /&gt;
Volatile = does not hold data after power off.&lt;br /&gt;
Non-volatile = holds data even after power off.&lt;br /&gt;
&lt;br /&gt;
Random Access Memory or RAM is a form of data storage that can be accessed randomly at any time, in any order and from any physical location., allowing quick access and manipulation. RAM allows the computer to read data quickly to run applications. It allows reading and writing. It is volatile.&lt;br /&gt;
&lt;br /&gt;
Read-only memory or ROM is also a form of data storage that can not be easily altered or reprogrammed.Stores instuctions that are not nescesary for re-booting up to make the computer operate when it is switched off.They are hardwired. ROM stores the program required to initially boot the computer. It only allows reading. It is non-volatile.&lt;br /&gt;
&lt;br /&gt;
EEPROM (electrically erasable programmable read-only memory) is user-modifiable read-only memory (ROM) that can be erased and reprogrammed. Unlike EPROM chips, EEPROMs do not need to be removed from the computer to be modified. However, an EEPROM chip has to be erased and reprogrammed in its entirety, not selectively. It also has a limited life - that is, the number of times it can be reprogrammed is limited to tens or hundreds of thousands of times. BIOS of PCs are usually written to EEPROM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===What is data retention?===&lt;br /&gt;
It is how long a device can hold data before it becomes unreadable.&lt;br /&gt;
&lt;br /&gt;
===What are difference between asynchronous/synchronous, dynamic/static RAM and where are they used?===&lt;br /&gt;
The two main forms of modern RAM are static RAM (SRAM) and dynamic RAM (DRAM). In SRAM, a bit of data is stored using the state of a six transistor memory cell. This form of RAM is more expensive to produce, but is generally faster and requires less power than DRAM and, in modern computers, is often used as cache memory for the CPU. DRAM stores a bit of data using a transistor and capacitor pair, which together comprise a DRAM memory cell. The capacitor holds a high or low charge (1 or 0, respectively), and the transistor acts as a switch that lets the control circuitry on the chip read the capacitor&#039;s state of charge or change it. As this form of memory is less expensive to produce than static RAM, it is the predominant form of computer memory used in modern computers.&lt;br /&gt;
Dynamic RAM is used to create larger RAM space system, where Static RAM create speed- sensitive cache.&lt;br /&gt;
Dynamic RAM consumes less power than Static RAM.&lt;br /&gt;
&lt;br /&gt;
Asynchronous refers to the fact that the memory is not synchronized to the system clock. A memory access is begun, and a certain period of time later the memory value appears on the bus. The signals are not coordinated with the system clock at all, as described in the section discussing memory access. Asynchronous memory works fine in lower-speed memory bus systems but is not nearly as suitable for use in high-speed (&amp;gt;66 MHz) memory systems.&lt;br /&gt;
A newer type of DRAM, called &amp;quot;synchronous DRAM&amp;quot; or &amp;quot;SDRAM&amp;quot;, is synchronized to the system clock; all signals are tied to the clock so timing is much tighter and better controlled. This type of memory is much faster than asynchronous DRAM and can be used to improve the performance of the system. It is more suitable to the higher-speed memory systems of the newest PCs.&lt;br /&gt;
&lt;br /&gt;
===What is [https://compsci2014.wikispaces.com/2.1.3+Explain+the+use+of+cache+memory cache]? What is cache coherence?===&lt;br /&gt;
&lt;br /&gt;
Cache memory is used to reduce the average memory access times. This is done by storing the data that is frequently accessed in main memory addresses therefore allowing the CPU to access the data faster. This is due to the fact that cache memory can be read a lot faster than main memory.&lt;br /&gt;
 &lt;br /&gt;
Cache coherence is the consistency of shared resource data that ends up stored in multiple local caches. When clients in a system maintain caches of a common memory resource, problems may arise with inconsistent data, which is particularly the case with CPUs in a multiprocessing system.&lt;br /&gt;
&lt;br /&gt;
===What are differences between resistive and capacitive touchscreen?=== &lt;br /&gt;
Resistive touchscreen needs pressure to work by connecting to sheets of plastic and thus conducting electricity. Capacitive touchscreen works by conducting electricity from user&#039;s finger.&lt;br /&gt;
&lt;br /&gt;
Resistive touchscreens rely on the pressure of your fingertip—or any other object—to register input. They consist of two flexible layers with an air gap in-between. In order for the touchscreen to register input, you must press on the top layer using a small amount of pressure, in order to depress the top layer enough to make contact with the bottom layer. The touchscreen will then register the precise location of the touch. You can use anything you want on a resistive touchscreen to make the touch interface work; a gloved finger, a wooden rod, a fingernail – anything that creates enough pressure on the point of impact will activate the mechanism and the touch will be registered.&lt;br /&gt;
&lt;br /&gt;
Capacitive touchscreens instead sense conductivity to register input—usually from the skin on your fingertip. Because you don’t need to apply pressure, capacitive touchscreens are more responsive than resistive touchscreens. However, because they work by sensing conductivity, capacitive touchscreens can only be used with objects that have conductive properties, which includes your fingertip (which is most ideal), and special styluses designed with a conductive tip. This is the reason you cannot use a capacitive screen while wearing gloves – the gloves are not conductive, and the touch does not cause any change in the electrostatic field.&lt;br /&gt;
&lt;br /&gt;
[http://www.alphr.com/realworld/357325/capacitive-or-resistive-whats-the-best-type-of-touchscreen In-depth comparison of two]&lt;br /&gt;
&lt;br /&gt;
===Explain how [http://www.bidouille.org/hack/mousecam computer mouse] works?===&lt;br /&gt;
An optical computer mouse uses a light source, typically an LED, and a light detector, such as an array of photodiodes, to detect movement relative to a surface.&lt;br /&gt;
Modern surface-independent optical mice work by using an optoelectronic sensor (essentially, a tiny low-resolution video camera) to take successive images of the surface on which the mouse operates.&lt;br /&gt;
The technology underlying the modern optical computer mouse is known as digital image correlation.&lt;br /&gt;
To understand how optical mice work, imagine two photographs of the same object except slightly offset from each other. Place both photographs on a light table to make them transparent, and slide one across the other until their images line up. The amount that the edges of one photograph overhang the other represents the offset between the images, and in the case of an optical computer mouse the distance it has moved.&lt;br /&gt;
Optical mice capture one thousand successive images or more per second. Depending on how fast the mouse is moving, each image will be offset from the previous one by a fraction of a pixel or as many as several pixels. Optical mice mathematically process these images using cross correlation to calculate how much each successive image is offset from the previous one.&lt;br /&gt;
[http://www.topdesignmag.com/mouse-history-in-photos/ History of computer mouse].&lt;br /&gt;
&lt;br /&gt;
===Explain how [http://www.daskeyboard.com/blog/typing-through-time-the-history-of-the-keyboard/ computer keyboard] works?===&lt;br /&gt;
A keyboard is a lot like a miniature computer. It has its own processor and circuitry that carries information to and from that processor. A large part of this circuitry makes up the key matrix.&lt;br /&gt;
The key matrix is a grid of circuits underneath the keys. In all keyboards, each circuit is broken at a point below each key. When you press a key, it presses a switch, completing the circuit and allowing a tiny amount of current to flow through. The mechanical action of the switch causes some vibration, called bounce, which the processor filters out. If you press and hold a key, the processor recognizes it as the equivalent of pressing a key repeatedly.&lt;br /&gt;
When the processor finds a circuit that is closed, it compares the location of that circuit on the key matrix to the character map in its read-only memory (ROM). A character map is basically a comparison chart or lookup table. It tells the processor the position of each key in the matrix and what each keystroke or combination of keystrokes represents. For example, the character map lets the processor know that pressing the a key by itself corresponds to a small letter &amp;quot;a,&amp;quot; but the Shift and a keys pressed together correspond to a capital &amp;quot;A.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[http://computer.howstuffworks.com/keyboard.htm HowStuffworks article] &lt;br /&gt;
[http://www.explainthatstuff.com/computerkeyboards.html Explain that Stuff article] [http://www.daskeyboard.com/blog/typing-through-time-the-history-of-the-keyboard/ Keyboard History]&lt;br /&gt;
&lt;br /&gt;
===Explain how [https://en.wikipedia.org/wiki/Cathode_ray_tube cathode ray tube] (CRT) based screen technology works and name pros/cons.===&lt;br /&gt;
[https://www.youtube.com/watch?v=2czqYV3T_Kc]&lt;br /&gt;
The cathode ray tube (CRT) is a vacuum tube containing one or more electron guns, and a phosphorescent screen used to, It has a means to accelerate and deflect the electron beam(s) onto the screen to create the images. The images may represent electrical waveforms (oscilloscope), pictures (television, computer monitor), radar targets or others. CRTs have also been used as memory devices, in which case the visible light emitted from the fluorescent material (if any) is not intended to have significant meaning to a visual observer (though the visible pattern on the tube face may cryptically represent the stored data).&lt;br /&gt;
&lt;br /&gt;
The CRT uses an evacuated glass envelope which is large, deep (i.e. long from front screen face to rear end), fairly heavy, and relatively fragile. As a matter of safety, the face is typically made of thick lead glass so as to be highly shatter-resistant and to block most X-ray emissions, particularly if the CRT is used in a consumer product.&lt;br /&gt;
&lt;br /&gt;
Cons: CRTs, despite recent advances, have remained relatively heavy and bulky and take up a lot of space in comparison to other display technologies. CRT screens have much deeper cabinets compared to flat panels and rear-projection displays for a given screen size, and so it becomes impractical to have CRTs larger than 40 inches (102 cm). The CRT disadvantages became especially significant in light of rapid technological advancements in LCD and plasma flat-panels which allow them to easily surpass 40 inches (102 cm) as well as being thin and wall-mountable, two key features that were increasingly being demanded by consumers.&lt;br /&gt;
&lt;br /&gt;
Pros: CRTs are still popular in the printing and broadcasting industries as well as in the professional video, photography, and graphics fields due to their greater color fidelity, contrast, and better viewing from off-axis (wider viewing angle). CRTs also still find adherents in vintage video gaming because of their higher resolution per initial cost, lowest possible input lag, fast response time, and multiple native resolutions such as 576p.&lt;br /&gt;
&lt;br /&gt;
===Explain how [https://en.wikipedia.org/wiki/Liquid-crystal_display liquid crystal displays] (LCD) work and name pros/cons.===&lt;br /&gt;
[https://www.youtube.com/watch?v=nCHgmCxGEzY]&lt;br /&gt;
LCD panels typically use thinly-coated metallic conductive pathways on a glass substrate to form the cell circuitry to operate the panel. It is usually not possible to use soldering techniques to directly connect the panel to a separate copper-etched circuit board.&lt;br /&gt;
&lt;br /&gt;
Instead, interfacing is accomplished using either adhesive plastic ribbon with conductive traces glued to the edges of the LCD panel, or with an elastomeric connector, which is a strip of rubber or silicone with alternating layers of conductive and insulating pathways, pressed between contact pads on the LCD and mating contact pads on a circuit board.&lt;br /&gt;
&lt;br /&gt;
===Name screen technologies making use of thin film transistor (TFT) technology?===&lt;br /&gt;
[https://en.wikipedia.org/wiki/Thin-film_transistor]&lt;br /&gt;
&lt;br /&gt;
===Name uses for light polarization filters?===&lt;br /&gt;
A polarizer or polariser is an optical filter that passes light of a specific polarization and blocks waves of other polarizations. It can convert a beam of light of undefined or mixed polarization into a beam with well-defined polarization, polarized light. Polarizers are used in many optical techniques and instruments, and polarizing filters find applications in photography, liquid crystal display technology and 3D watching. Polarizers can also be made for other types of electromagnetic waves besides light, such as radio waves, microwaves, and X-rays.&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/Polarizing_filter_%28photography%29 Polarizer photo] [https://en.wikipedia.org/wiki/Polarized_3D_system Polarizer 3D]&lt;br /&gt;
&lt;br /&gt;
===What are the benefits of [https://en.wikipedia.org/wiki/Twisted_pair twisted pair cabling] and [https://en.wikipedia.org/wiki/Differential_signaling differential signalling]?===&lt;br /&gt;
&#039;&#039;&#039;Twisted pair&#039;&#039;&#039; cabling is a type of wiring in which two conductors of a single circuit are twisted together for the purposes of canceling out electromagnetic interference (EMI) from external sources; for instance, electromagnetic radiation from unshielded twisted pair (UTP) cables, and crosstalk between neighboring pairs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Differential signaling&#039;&#039;&#039; is a method for electrically transmitting information using two complementary signals. The technique sends the same electrical signal as a differential pair of signals, each in its own conductor. The pair of conductors can be wires (typically twisted together) or traces on a circuit board. The receiving circuit responds to the electrical difference between the two signals, rather than the difference between a single wire and ground. Since the receiving circuit only detects the difference between the wires, the technique resists electromagnetic noise compared to one conductor with an un-paired reference (ground). The technique works for both analog signaling and digital signaling.&lt;br /&gt;
&lt;br /&gt;
===[https://en.wikipedia.org/wiki/Active_matrix Active matrix] vs [https://en.wikipedia.org/wiki/Passive_matrix_addressing passive matrix] in display technology===&lt;br /&gt;
Active-matrix display : An active-matrix display, also known as a TFT (thin-film transistor) display, uses a separate transistor to apply charges to each liquid crystal cell and thus displays high-quality color that is viewable from all angles.&lt;br /&gt;
&lt;br /&gt;
Passive-matrix display : A passive-matrix display uses fewer transistors, requires less power, and is less expensive than an active-matrix display. The color on a passive-matrix display often is not as bright as an active-matrix display. Users view images on a passive-matrix display best when working directly in front of it.&lt;br /&gt;
&lt;br /&gt;
==Storage abstractions==&lt;br /&gt;
&lt;br /&gt;
===What is a [https://en.wikipedia.org/wiki/Block_%28data_storage%29 block device]?===&lt;br /&gt;
In computing (specifically data transmission and data storage), a block, sometimes called a physical record, is a sequence of bytes or bits, usually containing some whole number of records, having a maximum length, a block size.Data thus structured are said to be blocked. The process of putting data into blocks is called blocking. Most file systems are based on a block device, which is a level of abstraction for the hardware responsible for storing and retrieving specified blocks of data&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Logical_block_addressing logical block addressing] and what are the benefits compared to older [https://en.wikipedia.org/wiki/Cylinder-head-sector cylinder-head-sector addressing] method in terms of harddisks?===&lt;br /&gt;
Logical block addressing (LBA) is a common scheme used for specifying the location of blocks of data stored on computer storage devices, generally secondary storage systems such as hard disk drives. LBA is a particularly simple linear addressing scheme; blocks are located by an integer index, with the first block being LBA 0, the second LBA 1, and so on. &lt;br /&gt;
&lt;br /&gt;
Cylinder-head-sector, also known as CHS, is an early method for giving addresses to each physical block of data on a hard disk drive. CHS addressing is the process of identifying individual sectors on a disk by their position in a track, where the track is determined by the head and cylinder numbers.&lt;br /&gt;
&lt;br /&gt;
LBA allows a maximum addressing capacity of 2TB although CHS allows 8GB&lt;br /&gt;
&lt;br /&gt;
===What is a [https://en.wikipedia.org/wiki/Disk_partitioning disk partition]?===&lt;br /&gt;
Disk partitioning is the creation of one or more regions on a hard disk or other secondary storage, so that an operating system can manage information in each region separately. Partitioning is typically the first step of preparing a newly manufactured disk, before any files or directories have been created. The disk stores the information about the partitions&#039; locations and sizes in an area known as the partition table that the operating system reads before any other part of the disk. Each partition then appears in the operating system as a distinct &amp;quot;logical&amp;quot; disk that uses part of the actual disk.&lt;br /&gt;
&lt;br /&gt;
===What is a [https://en.wikipedia.org/wiki/File_system file system]?===&lt;br /&gt;
In computing, a file system (or filesystem) is used to control how data is stored and retrieved. Without a file system, information placed in a storage area would be one large body of data with no way to tell where one piece of information stops and the next begins. By separating the data into individual pieces, and giving each piece a name, the information is easily separated and identified. Taking its name from the way paper-based information systems are named, each group of data is called a &amp;quot;file&amp;quot;. The structure and logic rules used to manage the groups of information and their names is called a &amp;quot;file system&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Journaling_file_system#Write_hazards journaling] in terms of filesystems and what are the benefits? Name some journaled file systems in use nowadays.===&lt;br /&gt;
A journaling file system is a file system that keeps track of changes not yet committed to the file system&#039;s main part by recording the intentions of such changes in a data structure known as a &amp;quot;journal&amp;quot;, which is usually a circular log. In the event of a system crash or power failure, such file systems can be brought back online quicker with lower likelihood of becoming corrupted.&lt;br /&gt;
&lt;br /&gt;
Depending on the actual implementation, a journaling file system may only keep track of stored metadata, resulting in improved performance at the expense of increased possibility for data corruption. Alternatively, a journaling file system may track both stored data and related metadata, while some implementations allow selectable behavior in this regard&lt;br /&gt;
&lt;br /&gt;
==Bootloaders, kernels==&lt;br /&gt;
&lt;br /&gt;
===What is the role of BIOS/UEFI in x86-based machines?===&lt;br /&gt;
BIOS (Basic Input/Output System) performs during boot up process of a computer and prepares it for the OS and its&#039; programs.&lt;br /&gt;
&lt;br /&gt;
UEFI (Unified Extensible Firmware Interface) is a replacement for BIOS. It offers several advantages over previous firmware interface, like: &lt;br /&gt;
* Ability to boot from large disks (over 2 TB) with a GUID Partition Table (GPT)&lt;br /&gt;
* CPU-independent architecture&lt;br /&gt;
* CPU-independent drivers&lt;br /&gt;
* Flexible pre-OS environment, including network capability&lt;br /&gt;
* Modular design&lt;br /&gt;
&lt;br /&gt;
===Explain step by step how operating system is booted up, see slides for flowchart.===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. The first thing a computer has to do when it is turned on is start up a special program called an operating system. That process is called booting. The instructions for booting are built into BIOS (Basic input/output system).&lt;br /&gt;
&lt;br /&gt;
2. The BIOS will tell your computer to look into the boot disk (usually the lowest-numbered hard disk) for a boot loader and the boot loader will be pulled into memory and will be started.&lt;br /&gt;
 &lt;br /&gt;
3. The boot loader&#039;s job is to start the real operating system and it does it by looking for a kernel, loading it into memory and  starting it. &lt;br /&gt;
&lt;br /&gt;
5. Once the kernel starts, it has to look around to find the rest of the hardware and get ready to run programs ( It does this by poking not at ordinary memory locations but rather at I/O ports — special bus addresses that are likely to have device controller cards listening at them for commands). The kernel doesn&#039;t poke at random; it has a lot of built-in knowledge about what it&#039;s likely to find where, and how controllers will respond if they&#039;re present. This process is called autoprobing.&lt;br /&gt;
&lt;br /&gt;
6. After the kernel is up and running, it&#039;s the end of first stage. After the first stage, the kernel hands control to a special program called &amp;quot;init&amp;quot; which spawns housekeeping processes. The init&#039;s process&#039;s first task is to look that your hard disks are okay &lt;br /&gt;
&lt;br /&gt;
7. Init&#039;s next step is to start several daemons. A daemon is a program like a print spooler, a mail listener or a WWW server that lurks in the background, waiting for things to do. These special programs often have to coordinate several requests that could conflict. They are daemons because it&#039;s often easier to write one program that runs constantly and knows about all requests than it would be to try to make sure that a flock of copies (each processing one request and all running at the same time) don&#039;t step on each other.&lt;br /&gt;
&lt;br /&gt;
8. The next step is to prepare for users. Init starts a copy of a program called getty to watch your screen and keyboard (and maybe more copies to watch dial-in serial ports).&lt;br /&gt;
&lt;br /&gt;
9. The next step is to start up various daemons that support networking and other services. The most important of these is your X server. X is a daemon that manages your display, keyboard, and mouse. Its main job is to produce the color pixel graphics you normally see on your screen.&lt;br /&gt;
&lt;br /&gt;
10. When the X server comes up, during the last part of your machine&#039;s boot process, it effectively takes over the hardware from whatever virtual console was previously in control. That&#039;s when you&#039;ll see a graphical login screen, produced for you by a program called a display manager.&lt;br /&gt;
&lt;br /&gt;
===BIOS===&lt;br /&gt;
* Basic input and output system&lt;br /&gt;
* Located at memory location 0xFFFF0&lt;br /&gt;
* Boot firmware designed to be run at startup&lt;br /&gt;
* POST- power on self test &lt;br /&gt;
* Run-time service&lt;br /&gt;
  initial configuration &lt;br /&gt;
  selects which device to boot from&lt;br /&gt;
* Alternatively, Extensible Firmware Interface (EFI)&lt;br /&gt;
&lt;br /&gt;
===Describe the functionality provided by general purpose operating system.===&lt;br /&gt;
See architecture of [https://en.wikipedia.org/wiki/Architecture_of_Windows_NT Windows NT], [http://www.elinux.org/Android_Architecture Android], [https://en.wikipedia.org/wiki/Architecture_of_OS_X OS X].&lt;br /&gt;
&lt;br /&gt;
===What are the main differences between [https://en.wikipedia.org/wiki/Real_mode real mode] and [https://en.wikipedia.org/wiki/Protected_mode protected mode] of x86-based processor?===&lt;br /&gt;
&lt;br /&gt;
To preserve backward compatibility, all the further processors have had to include a Real mode. In the real mode, the memory addressability is limited to 1MB and it cannot take advantage of additional hardware support for virtual memory etc because interrupts are disabled.&lt;br /&gt;
&lt;br /&gt;
With the advent of the 286 processor, a new mode was included - that is the protected mode. The name &amp;quot;protected&amp;quot; actually derives from the fact that processes run in different address spaces and that they are essentially protected from one another. If a process tries to access another&#039;s address space, it traps to the MMU hardware. In this mode, the full hardware support is enabled, and the processor can address the entire 32 bit address space.&lt;br /&gt;
&lt;br /&gt;
===What happens during context switch?===&lt;br /&gt;
&lt;br /&gt;
During a context switch, the kernel will save the context of the old process in its PCB and then load the saved context of the new process scheduled to run.&lt;br /&gt;
&lt;br /&gt;
===What is the purpose of [https://en.wikipedia.org/wiki/Virtual_memory paged virtual memory]?===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Libraries, frameworks==&lt;br /&gt;
&lt;br /&gt;
==Programming languages==&lt;br /&gt;
&lt;br /&gt;
===What are the major steps of compilation?===&lt;br /&gt;
1. Lexer&lt;br /&gt;
The first phase of scanner works as a text scanner. This phase scans the source code as a stream of characters and converts it into meaningful lexemes. Lexical analyser represents these lexemes in the form of tokens as: &amp;lt;token-name, attribute-value&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Parser&lt;br /&gt;
The next phase is called the syntax analysis or parsing. It takes the token produced by lexical analysis as input and generates a parse tree (or syntax tree). In this phase, token arrangements are checked against the source code grammar, i.e. the parser checks if the expression made by the tokens is syntactically correct.&lt;br /&gt;
&lt;br /&gt;
3. Type checker&lt;br /&gt;
Semantic analysis checks whether the parse tree constructed follows the rules of language. For example, assignment of values is between compatible data types, and adding string to an integer. Also, the semantic analyser keeps track of identifiers, their types and expressions; whether identifiers are declared before use or not etc. The semantic analyser produces an annotated syntax tree as an output and an intermediate code is produced.&lt;br /&gt;
&lt;br /&gt;
4. Optimizer&lt;br /&gt;
The next phase does code optimization of the intermediate code. Optimization can be assumed as something that removes unnecessary code lines, and arranges the sequence of statements in order to speed up the program execution without wasting resources (CPU, memory).&lt;br /&gt;
&lt;br /&gt;
5. Code generator&lt;br /&gt;
In this phase, the code generator takes the optimized representation of the intermediate code and maps it to the target machine language. The code generator translates the intermediate code into a sequence of (generally) re-locatable machine code. Sequence of instructions of machine code performs the task as the intermediate code would do.&lt;br /&gt;
&lt;br /&gt;
===What are the differences between [https://en.wikipedia.org/wiki/Interpreted_language interpreted], [https://en.wikipedia.org/wiki/Just-in-time_compilation JIT-compilation] and [https://en.wikipedia.org/wiki/Compiler traditional compiling]?===&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Control_flow control flow]? Loops? Conditional statements?===&lt;br /&gt;
&lt;br /&gt;
==Data encoding==&lt;br /&gt;
&lt;br /&gt;
===What is bit? Nibble? Byte? Word?===&lt;br /&gt;
Bit is a basic unit of information that can hold either True or False value (1 or 0).&lt;br /&gt;
&lt;br /&gt;
Nibble is half of an octet.&lt;br /&gt;
&lt;br /&gt;
Byte is a unit of eight bits. Comes from the number of bits used to encode a single character of text in a computer&lt;br /&gt;
&lt;br /&gt;
Word is a length of bits the processor-architecture can process in bits (8-bit, 32-bit etc)&lt;br /&gt;
&lt;br /&gt;
===Write 9375 in binary, hexadecimal?===&lt;br /&gt;
&#039;&#039;&#039;Binary&#039;&#039;&#039; or base two counting system starts from right with 0 and continues left with each step being to the power of 2.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: right;&amp;quot;&lt;br /&gt;
| 13^2 &lt;br /&gt;
| 12^2 &lt;br /&gt;
| 11^2 &lt;br /&gt;
| 10^2 &lt;br /&gt;
| 9^2 &lt;br /&gt;
| 8^2 &lt;br /&gt;
| 7^2 &lt;br /&gt;
| 6^2 &lt;br /&gt;
| 5^2 &lt;br /&gt;
| 4^2 &lt;br /&gt;
| 3^2 &lt;br /&gt;
| 2^2 &lt;br /&gt;
| 1^2&lt;br /&gt;
| 0^2&lt;br /&gt;
|- &lt;br /&gt;
| 8192 &lt;br /&gt;
| 4096 &lt;br /&gt;
| 2048 &lt;br /&gt;
| 1024 &lt;br /&gt;
| 512 &lt;br /&gt;
| 256 &lt;br /&gt;
| 128 &lt;br /&gt;
|  64 &lt;br /&gt;
|  32 &lt;br /&gt;
|  16 &lt;br /&gt;
|   8 &lt;br /&gt;
|   4 &lt;br /&gt;
| 2&lt;br /&gt;
|   1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To find out the decimal number (9375) in binary, look if it contains the number equal or smaller. 8192 is smaller than 9375, mark down 1. 9375-8192=1183 contains 1024, mark 1, etc. Number 9375 base ten is 0x10010010011111 in binary, where the &#039;0b&#039; represents base two. From binary to decimal conversion works the other way around. If perplexed, [https://www.khanacademy.org/math/pre-algebra/applying-math-reasoning-topic/alternate-number-bases/v/decimal-to-binary see the explanatory video on Khan academy].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hexadecimal&#039;&#039;&#039; or base 16 system goes from 0 until 9, then starts with A (10 base 10) until F (15 base 10).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: right;&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
|2&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|5&lt;br /&gt;
|6&lt;br /&gt;
|7&lt;br /&gt;
|8&lt;br /&gt;
|9&lt;br /&gt;
|10&lt;br /&gt;
|11&lt;br /&gt;
|12&lt;br /&gt;
|13&lt;br /&gt;
|14&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|5&lt;br /&gt;
|6&lt;br /&gt;
|7&lt;br /&gt;
|8&lt;br /&gt;
|9&lt;br /&gt;
|A&lt;br /&gt;
|B&lt;br /&gt;
|C&lt;br /&gt;
|D&lt;br /&gt;
|E&lt;br /&gt;
|F&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Conversion from base two to hex is similar to decimal to base two conversion. First, we figure out the multiples of 16:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: right;&amp;quot;&lt;br /&gt;
|16^0&lt;br /&gt;
|16^1&lt;br /&gt;
|16^2&lt;br /&gt;
|16^3&lt;br /&gt;
|16^4&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|16&lt;br /&gt;
|256&lt;br /&gt;
|4096&lt;br /&gt;
|65 536&lt;br /&gt;
|-&lt;br /&gt;
|F&lt;br /&gt;
|9&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|&amp;lt;-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
9375 has two multiples of 4096 (9375 - &#039;&#039;&#039;2&#039;&#039;&#039;*4096 = 9375 - 8192 = 1183), 1183 has &#039;&#039;&#039;4&#039;&#039;&#039; multiples of 256 (1183 - &#039;&#039;&#039;4&#039;&#039;&#039;*256 = 159), 159 has 159 - &#039;&#039;&#039;9&#039;&#039;&#039;*16 = 15 (15 in decimal is &#039;&#039;&#039;F&#039;&#039;&#039; in hex) and we come to 249F. As with base 2, you can convert this way from hex to decimal. If still don&#039;t get it, watch a [https://www.khanacademy.org/math/pre-algebra/applying-math-reasoning-topic/alternate-number-bases/v/decimal-to-hexadecimal video on Khan academy].&lt;br /&gt;
&lt;br /&gt;
===Write 0xDEADBEEF in decimal?===&lt;br /&gt;
Following the table above we calculate, 13x16^8 + 14x16^7 + 10x16^6 + 13x16^5 + 11x16^4 + 14x16^3 + 14x16^2 + 15x16^1 = A BIG NUMBER!&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Quantization_%28signal_processing%29 quantization] in terms of signal processing?===&lt;br /&gt;
Quantization, in mathematics and digital signal processing, is the process of mapping a large set of input values to a (countable) smaller set. Rounding and truncation are typical examples of quantization processes. Quantization is involved to some degree in nearly all digital signal processing, as the process of representing a signal in digital form ordinarily involves rounding. Quantization also forms the core of essentially all lossy compression algorithms. The difference between an input value and its quantized value (such as round-off error) is referred to as quantization error. A device or algorithmic function that performs quantization is called a quantizer. An analog-to-digital converter is an example of a quantizer.&lt;br /&gt;
&lt;br /&gt;
===How are [https://en.wikipedia.org/wiki/Integer_%28computer_science%29 integers] stored in binary? What integer range can be described using n bits? How many bits are required to describe integer range from n .. m.===&lt;br /&gt;
&lt;br /&gt;
===How are [https://en.wikipedia.org/wiki/Single-precision_floating-point_format single precision] and [https://en.wikipedia.org/wiki/Double-precision_floating-point_format double precision] floating point numbers stored in binary according to [https://en.wikipedia.org/wiki/IEEE_floating_point IEEE754 standard]?===&lt;br /&gt;
[http://lauri.vosandi.com/hdl/arithmetic/floating-point-representation.html Floating-point multiplication]&lt;br /&gt;
&lt;br /&gt;
===What is the difference between CMYK and RGB color models? How are YUV, HSV and HSL colorspaces related to RGB? What are sRGB and YCbCr and where are they used?===&lt;br /&gt;
&lt;br /&gt;
===How is data encoded on audio CD-s? What is the [http://lauri.vosandi.com/2013/07/audio-codecs.html capacity of an audio CD]?===&lt;br /&gt;
&lt;br /&gt;
===What is sampling rate? What is bit depth? What is resolution?===&lt;br /&gt;
&#039;&#039;&#039;SAMPLE RATE:&#039;&#039;&#039;&lt;br /&gt;
Sample rate is the number of samples of audio carried per second, measured in Hz or kHz (one kHz being 1 000 Hz). For example, 44 100 samples per second can be expressed as either 44 100 Hz, or 44.1 kHz. Bandwidth is the difference between the highest and lowest frequencies carried in an audio stream&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BIT DEPTH:&#039;&#039;&#039;&lt;br /&gt;
Bit depth refers to the color information stored in an image. The higher the bit depth of an image, the more colors it can store. The simplest image, a 1 bit image, can only show two colors, black and white&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RESOLUTION:&#039;&#039;&#039;&lt;br /&gt;
Resolution is the number of pixels (individual points of color) contained on a display monitor, expressed in terms of the number of pixels on the horizontal axis and the number on the vertical axis. The sharpness of the image on a display depends on the resolution and the size of the monitor.&lt;br /&gt;
&lt;br /&gt;
===What is bitrate?===&lt;br /&gt;
Bitrate is the number of bits that are conveyed or processed per unit of time.&lt;br /&gt;
&lt;br /&gt;
The bit rate is quantified using the bits per second unit (symbol: &amp;quot;bit/s&amp;quot;), often in conjunction with an SI prefix such as &amp;quot;kilo&amp;quot; (1 kbit/s = 1000 bit/s), &amp;quot;mega&amp;quot; (1 Mbit/s = 1000 kbit/s), &amp;quot;giga&amp;quot; (1 Gbit/s = 1000 Mbit/s) or &amp;quot;tera&amp;quot; (1 Tbit/s = 1000 Gbit/s).[2] The non-standard abbreviation &amp;quot;bps&amp;quot; is often used to replace the standard symbol &amp;quot;bit/s&amp;quot;, so that, for example, &amp;quot;1 Mbps&amp;quot; is used to mean one million bits per second.&lt;br /&gt;
&lt;br /&gt;
One byte per second (1 B/s) corresponds to 8 bit/s.&lt;br /&gt;
&lt;br /&gt;
===What is lossy/lossless compression?===&lt;br /&gt;
Lossless and lossy compression are terms that describe whether or not, in the compression of a file, all original data can be recovered when the file is uncompressed. With lossless compression, every single bit of data that was originally in the file remains after the file is uncompressed.&lt;br /&gt;
&lt;br /&gt;
===What is JPEG suitable for? Is JPEG lossy or lossless compression method?===&lt;br /&gt;
&lt;br /&gt;
===What is PNG suitable for? Does PNG support compression?===&lt;br /&gt;
&lt;br /&gt;
===How are time domain and frequency domain related in terms of signal processing? What is Fourier transform and where it is applied?===&lt;br /&gt;
&lt;br /&gt;
==Code execution in processor==&lt;br /&gt;
&lt;br /&gt;
===Given ~10 instructions and their explainations, follow the instructions and elaborate after every step what happened in the processor?===&lt;br /&gt;
&lt;br /&gt;
==Microcontrollers==&lt;br /&gt;
&lt;br /&gt;
===What distinguishes microcontroller from microprocessor?===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;MICROPROCESSOR&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;MICRO CONTROLLER&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|Microprocessor is heart of Computer system.	&lt;br /&gt;
|Micro Controller is a heart of embedded system.&lt;br /&gt;
|-&lt;br /&gt;
|It is just a processor. Memory and I/O components have to be connected externally	&lt;br /&gt;
|Micro controller has external processor along with internal memory and i/O components&lt;br /&gt;
|-&lt;br /&gt;
|Since memory and I/O has to be connected externally, the circuit becomes large.	&lt;br /&gt;
|Since memory and I/O are present internally, the circuit is small.&lt;br /&gt;
|-&lt;br /&gt;
|Cannot be used in compact systems and hence inefficient	&lt;br /&gt;
|Can be used in compact systems and hence it is an efficient technique&lt;br /&gt;
|-&lt;br /&gt;
|Cost of the entire system increases	&lt;br /&gt;
|Cost of the entire system is low&lt;br /&gt;
|-&lt;br /&gt;
|Due to external components, the entire power consumption is high. Hence it is not suitable to used with devices running on stored power like batteries.	&lt;br /&gt;
|Since external components are low, total power consumption is less and can be used with devices running on stored power like batteries.&lt;br /&gt;
|-&lt;br /&gt;
|Most of the microprocessors do not have power saving features.	&lt;br /&gt;
|Most of the micro controllers have power saving modes like idle mode and power saving mode. This helps to reduce power consumption even further.&lt;br /&gt;
|-&lt;br /&gt;
|Since memory and I/O components are all external, each instruction will need external operation, hence it is relatively slower.	&lt;br /&gt;
|Since components are internal, most of the operations are internal instruction, hence speed is fast.&lt;br /&gt;
|-&lt;br /&gt;
|Microprocessor have less number of registers, hence more operations are memory based.	&lt;br /&gt;
|Micro controller have more number of registers, hence the programs are easier to write.&lt;br /&gt;
|-&lt;br /&gt;
|Microprocessors are based on von Neumann model/architecture where program and data are stored in same memory module	&lt;br /&gt;
|Micro controllers are based on Harvard architecture where program memory and Data memory are separate&lt;br /&gt;
|-&lt;br /&gt;
|Mainly used in personal computers	&lt;br /&gt;
|Used mainly in washing machine, MP3 players&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===What are the differences between Harvard architecture and von Neumann architecture?===&lt;br /&gt;
Difference of von Neumann architecture from Harvard is that von Neumann can do a single operation at a time -- it cannot write while reading an instruction. A property that a computer with Harvard architecture can do.&lt;br /&gt;
&lt;br /&gt;
===What is an interrupt?===&lt;br /&gt;
Interrupt is a signal that there is something that requires immediate attention from the processing unit. Processor suspends its current activities, saves its state, deals with the temporary interrupt and returns itself to the previous state.&lt;br /&gt;
&lt;br /&gt;
===What is an timer?===&lt;br /&gt;
Timer is a line of code that tracks the passage of time based on the clock oscillator which is built in to the hardware where the software is running.&lt;br /&gt;
&lt;br /&gt;
==Introduction to Boole algebra==&lt;br /&gt;
&lt;br /&gt;
===Simplify A AND A OR B===&lt;br /&gt;
&lt;br /&gt;
===Show addition of X and Y in binary===&lt;br /&gt;
&lt;br /&gt;
===Show subtraction of X and Y  in binary===&lt;br /&gt;
&lt;br /&gt;
===Show multiplication of X and Y in binary===&lt;br /&gt;
&lt;br /&gt;
==Hardware description languages==&lt;br /&gt;
&lt;br /&gt;
===What are the uses for hardware description languages?===&lt;br /&gt;
In electronics, a hardware description language (HDL) is a specialized computer language used to program the structure, design and operation of electronic circuits, and most commonly, digital logic circuits.&lt;br /&gt;
&lt;br /&gt;
A hardware description language enables a precise, formal description of an electronic circuit that allows for the automated analysis, simulation, and simulated testing of an electronic circuit. It also allows for the compilation of an HDL program into a lower level specification of physical electronic components, such as the set of masks used to create an integrated circuit.&lt;br /&gt;
&lt;br /&gt;
A hardware description language looks much like a programming language such as C; it is a textual description consisting of expressions, statements and control structures. One important difference between most programming languages and HDLs is that HDLs explicitly include the notion of time.&lt;br /&gt;
&lt;br /&gt;
===What is latch?===&lt;br /&gt;
A latch is an example of a bistable multivibrator, that is, a device with exactly two stable states. These states are high-output and low-output. A latch has a feedback path, so information can be retained by the device. Therefore latches can be memory devices, and can store one bit of data for as long as the device is powered. As the name suggests, latches are used to &amp;quot;latch onto&amp;quot; information and hold in place. Latches are very similar to flip-flops, but are not synchronous devices, and do not operate on clock edges as flip-flops do.&lt;br /&gt;
&lt;br /&gt;
===What is flip-flop?===&lt;br /&gt;
A flip-flop is a device very like a latch in that it is a bistable multivibrator, having two states and a feedback path that allows it to store a bit of information. The difference between a latch and a flip-flop is that a latch is asynchronous, and the outputs can change as soon as the inputs do (or at least after a small propagation delay). A flip-flop, on the other hand, is edge-triggered and only changes state when a control signal goes from high to low or low to high. This distinction is relatively recent and is not formal, with many authorities still referring to flip-flops as latches and vice versa, but it is a helpful distinction to make for the sake of clarity.&lt;br /&gt;
&lt;br /&gt;
There are several different types of flip-flop each with its own uses and peculiarities. The four main types of flip-flop are : SR, JK, D, and T.&lt;br /&gt;
&lt;br /&gt;
===What is mux (multiplexer)?===&lt;br /&gt;
A multiplexer (or mux) is a device that selects one of several analog or digital input signals and forwards the selected input into a single line.[1] A multiplexer of 2n inputs has n select lines, which are used to select which input line to send to the output.[2] Multiplexers are mainly used to increase the amount of data that can be sent over the network within a certain amount of time and bandwidth.[1] A multiplexer is also called a data selector.&lt;br /&gt;
&lt;br /&gt;
An electronic multiplexer makes it possible for several signals to share one device or resource, for example one A/D converter or one communication line, instead of having one device per input signal.&lt;br /&gt;
&lt;br /&gt;
===What is register? Register file?===&lt;br /&gt;
&#039;&#039;&#039;Registers&#039;&#039;&#039; are a special, high-speed storage area within the CPU. All data must be represented in a register before it can be processed. For example, if two numbers are to be multiplied, both numbers must be in registers, and the result is also placed in a register. A register may hold a computer instruction , a storage address, or any kind of data (such as a bit sequence or individual characters). A register must be large enough to hold an instruction - for example, in a 32-bit instruction computer, a register must be 32 bits in length. In some computer designs, there are smaller registers - for example, half-registers - for shorter instructions. Depending on the processor design and language rules, registers may be numbered or have arbitrary names.&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;register file&#039;&#039;&#039; is an array of processor registers in a central processing unit (CPU). Modern integrated circuit-based register files are usually implemented by way of fast static RAMs with multiple ports. Such RAMs are distinguished by having dedicated read and write ports, whereas ordinary multiported SRAMs will usually read and write through the same ports.&lt;br /&gt;
&lt;br /&gt;
The instruction set architecture of a CPU will almost always define a set of registers which are used to stage data between memory and the functional units on the chip. In simpler CPUs, these architectural registers correspond one-for-one to the entries in a physical register file within the CPU. More complicated CPUs use register renaming, so that the mapping of which physical entry stores a particular architectural register changes dynamically during execution. The register file is part of the architecture and visible to the programmer, as opposed to the concept of transparent caches.&lt;br /&gt;
&lt;br /&gt;
===What is ALU?===&lt;br /&gt;
An arithmetic logic unit (ALU) is a digital electronic circuit that performs arithmetic and bitwise logical operations on integer binary numbers. This is in contrast to a floating-point unit (FPU), which operates on floating point numbers. An ALU is a fundamental building block of many types of computing circuits, including the central processing unit (CPU) of computers, FPUs, and graphics processing units (GPUs). A single CPU, FPU or GPU may contain multiple ALUs.&lt;br /&gt;
&lt;br /&gt;
The inputs to an ALU are the data to be operated on, called operands, and a code indicating the operation to be performed; the ALU&#039;s output is the result of the performed operation. In many designs, the ALU also exchanges additional information with a status register, which relates to the result of the current or previous operations.&lt;br /&gt;
&lt;br /&gt;
===What is floating-point unit?===&lt;br /&gt;
A floating-point unit (FPU) is a part of a computer system specially designed to carry out operations on floating point numbers. Typical operations are addition, subtraction, multiplication, division, square root, and bitshifting. Some systems (particularly older, microcode-based architectures) can also perform various transcendental functions such as exponential or trigonometric calculations, though in most modern processors these are done with software library routines.&lt;br /&gt;
&lt;br /&gt;
In general purpose computer architectures, one or more FPUs may be integrated with the central processing unit; however many embedded processors do not have hardware support for floating-point operations.&lt;br /&gt;
&lt;br /&gt;
===What is a cache?===&lt;br /&gt;
Clearing Computer Cache. The cache (pronounced &amp;quot;cash&amp;quot;) is a space in your computer&#039;s hard drive and in RAM memory where your browser saves copies of previously visited Web pages. Your browser uses the cache like a short-term memory&lt;br /&gt;
&lt;br /&gt;
===What is a bus?===&lt;br /&gt;
In computer architecture, a bus (related to the Latin &amp;quot;omnibus&amp;quot;, meaning &amp;quot;for all&amp;quot;) is a communication system that transfers data between components inside a computer, or between computers.&lt;br /&gt;
&lt;br /&gt;
===Show the circuit diagram for A OR B AND C, NOT A AND B, &amp;lt;insert some other Boole formula here&amp;gt;?===&lt;br /&gt;
&lt;br /&gt;
===Show the truth table for &amp;lt;insert Boole formula here&amp;gt;?===&lt;br /&gt;
&lt;br /&gt;
===Write the equivalent Boole formula of a circuit diagram.===&lt;br /&gt;
&lt;br /&gt;
==Publishing work==&lt;br /&gt;
&lt;br /&gt;
===What are the major implications of MIT, BSD and GPL licenses?===&lt;br /&gt;
&lt;br /&gt;
===What are the differences between copyright, trademark, trade secret?===&lt;br /&gt;
“Intellectual property is something that is created by the mind.”  Typically, we think of ideas as being created by the mind – but intellectual property does not protect bare ideas: rather, it is the expression or symbolic power/recognizability of the ideas that are protected. &lt;br /&gt;
Thus, it is the design of the rocket that is patented, not the idea of a rocket.  It is the painting of the lake that is copyrighted, not the idea of a lake.  And it is the consumer recognizable logo that is trademarked, not the idea of a logo.  Intellectual property protects how we express and identify ideas in concrete ways – not the idea itself.&lt;br /&gt;
&lt;br /&gt;
In particular:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Patents&#039;&#039;&#039;: protect functional expressions of an idea – not the idea itself.  A machines, method/process, manufacture, compositions of matter, and improvements of any of these items can be patented.  Thus, I can patent a design for the nozzle on a rocket, or the method of making the rocket, or the method of making the rocket fuel, or the metal in which the rocket fuel is stored, or a new way of transporting the rocket fuel to the rocket.  But I cannot patent the broad “idea” of a rocket.&lt;br /&gt;
     &lt;br /&gt;
&#039;&#039;&#039;Copyrights&#039;&#039;&#039;: protect the specific creative expression of an idea through any medium of artistic/creative expression – i.e., paintings, photographs, sculpture, writings, software, etc.   A copyright protects your painting of a haystack, but it would not prohibit another painter from expressing their artistry or viewpoint by also painting a haystack. Likewise, while Ian Fleming was able to receive a copyright on his particular expression of the idea of a secret agent (i.e., a debonair English secret agent), he could not prevent Rich Wilkes from receiving a copyright on his expression of the idea of a secret agent (i.e., a tattooed bald extreme athlete turned reluctant secret agent).  &lt;br /&gt;
     &lt;br /&gt;
&#039;&#039;&#039;Trademarks&#039;&#039;&#039;: protect any symbol that indicates the source or origin of the goods or services to which it is affixed.  While a trademark can be extremely valuable to its owner, the ultimate purpose of a trademark is to protect consumers – that is, the function of a trademark is to inform the consumer where the goods or services originate.  The consumer, knowing the origin of the goods, can make purchasing decisions based on prior knowledge, reputation or marketing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Trade secret&#039;&#039;&#039;: is a formula, practice, process, design, instrument, pattern, commercial method, or compilation of information which is not generally known or reasonably ascertainable by others, and by which a business can obtain an economic advantage over competitors or customers.[&lt;br /&gt;
&lt;br /&gt;
While each category is distinct, a product (or components/aspects of a product) may fall into one or more of the categories.  For example, software can be protected by both patents and copyrights.  The copyright would protect the artistic expression of the idea – i.e., the code itself – while the patent would protect the functional expression of the idea – e.g., using a single click to purchase a book online.  Likewise, it is likely that the software company will use a trademark to indicate who made the software. &lt;br /&gt;
&lt;br /&gt;
An additional example would be a logo for a company.  The logo may serve as a trademark indicating that all products affixed with the logo are from the same source.  The creative and artistic aspects of the logo may also be protected by a copyright.&lt;br /&gt;
&lt;br /&gt;
===Where would you use waterfall software development model? Where would you use agile?===&lt;br /&gt;
&lt;br /&gt;
===What is the purpose of a version control system?===&lt;br /&gt;
&lt;br /&gt;
===What would you store in a version control system?===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Algorithms and data structures==&lt;br /&gt;
&lt;br /&gt;
===What is time complexity of algorithm?===&lt;br /&gt;
In computer science, the time complexity of an algorithm quantifies the amount of time taken by an algorithm to run as a function of the length of the string representing the input. Time complexity is commonly estimated by counting the number of elementary operations performed by the algorithm, where an elementary operation takes a fixed amount of time to perform.&lt;br /&gt;
&lt;br /&gt;
===What is space complexity of algorithm?===&lt;br /&gt;
Space complexity is a measure of the amount of working storage an algorithm needs. That means how much memory, in the worst case, is needed at any point in the algorithm.&lt;br /&gt;
It represents the total amount of memory space that a &amp;quot;normal&amp;quot; physical computer would need to solve a given computational problem with a given algorithm.&lt;br /&gt;
&lt;br /&gt;
===What&#039;s a good algorithm?===&lt;br /&gt;
It executes as fast as possible.&lt;br /&gt;
It takes as less space as possible.&lt;br /&gt;
It is adaptable to computers.&lt;br /&gt;
It is simple.&lt;br /&gt;
It is elegant (well written).&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Moore&#039;s_law Moore&#039;s law]? What is [https://en.wikipedia.org/wiki/Rock&#039;s_law Rock&#039;s law]?===&lt;br /&gt;
Moore&#039;s law is the observation that the number of transistors in a dense integrated circuit doubles approximately every two years. The observation is named after Gordon E. Moore, the co-founder of Intel and Fairchild Semiconductor, whose 1965 paper described a doubling every year in the number of components per integrated circuit, and projected this rate of growth would continue for at least another decade. In 1975, looking forward to the next decade, he revised the forecast to doubling every two years.&lt;br /&gt;
Rock&#039;s law or Moore&#039;s second law, named for Arthur Rock or Gordon Moore, says that the cost of a semiconductor chip fabrication plant doubles every four years. As of 2015, the price had already reached about 14 billion US dollars.&lt;br /&gt;
&lt;br /&gt;
===What were the major contributing factors for success of Microsoft, Apple, Google, &amp;lt;your favourite company&amp;gt;?===&lt;br /&gt;
&lt;br /&gt;
===What were the major contributing factors to the success of Silicon Valley?===&lt;/div&gt;</summary>
		<author><name>Smets</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Exam_help&amp;diff=100312</id>
		<title>Exam help</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Exam_help&amp;diff=100312"/>
		<updated>2016-01-11T18:44:00Z</updated>

		<summary type="html">&lt;p&gt;Smets: /* What happens during context switch? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Computer hardware==&lt;br /&gt;
&lt;br /&gt;
=== Different buses and their uses===&lt;br /&gt;
In computer architecture, a bus is a communication system that transfers data between components inside a computer, or between computers. This expression covers all related hardware components (wire, optical fiber, etc.) and software, including communication protocols.&lt;br /&gt;
&lt;br /&gt;
The internal bus, also known as internal data bus, memory bus, system bus or Front-Side-Bus, connects all the internal components of a computer, such as CPU and memory, to the motherboard. Internal data buses are also referred to as a local bus, because they are intended to connect to local devices. This bus is typically rather quick and is independent of the rest of the computer operations.&lt;br /&gt;
&lt;br /&gt;
The external bus, or expansion bus, is made up of the electronic pathways that connect the different external devices, such as printer etc., to the computer.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Types and uses:&#039;&#039;&#039;&lt;br /&gt;
;USB&lt;br /&gt;
:Universal Serial Bus. Designed for: input devices, digital cameras, printers, media players...&lt;br /&gt;
&lt;br /&gt;
;Serial ATA&lt;br /&gt;
:Used by internal storage devices (hard disk). They replace the old ATA connectors.&lt;br /&gt;
&lt;br /&gt;
;PCI&lt;br /&gt;
:Peripheral Component Interconnect, is a local computer bus for attaching hardware devices in a computer. Attached devices can take either the form of an integrated circuit fitted onto the motherboard itself or an expansion card that fits into a slot. Typical PCI cards used in PCs include: network cards, sound cards, modems, extra ports such as USB or serial, TV tuner cards and disk controllers.&lt;br /&gt;
&lt;br /&gt;
;PCI Express&lt;br /&gt;
:Peripheral Component Interconnect Express (also called PCIe), is a high-speed serial computer expansion bus standard designed to replace the older PCI, PCI-X, and AGP bus standards. PCIe has numerous improvements over the older standards, including higher maximum system bus throughput, lower I/O pin count and smaller physical footprint, better performance scaling for bus devices, a more detailed error detection and reporting mechanism, and native hot-plug functionality. More recent revisions of the PCIe standard provide hardware support for I/O virtualization.&lt;br /&gt;
&lt;br /&gt;
;Mini PCIe&lt;br /&gt;
:It is based on PCI Express technoogy. Main point is its small size and its large variety of connectors makes it used for USB2.0 cards, SIM card, Wifi and Bluetooth cards, 3G and GPS cards.&lt;br /&gt;
&lt;br /&gt;
;ExpressCard&lt;br /&gt;
:It is an interface to connect peripheral devices to a computer, usually a laptop computer. ExpressCards can connect a variety of devices to a computer including mobile broadband modems, IEEE 1394 (FireWire) connectors, USB connectors, Ethernet network ports, Serial ATA storage devices, solid-state drives, external enclosures for desktop-size PCI Express graphics cards and other peripheral devices, wireless network interface controllers (NIC), TV tuner cards, Common Access Card (CAC) readers, and sound cards.&lt;br /&gt;
&lt;br /&gt;
===What are the differences between hard disk drive (HDD) and solid state drive (SSD)?=== &lt;br /&gt;
The traditional spinning hard drive (HDD) is the basic nonvolatile storage on a computer. Hard drives are essentially metal platters with a magnetic coating which stores the data. A read/write head on an arm accesses the data while the platters are spinning in a hard drive enclosure.&lt;br /&gt;
An SSD does same jobas an HDD, but instead of a magnetic coating on top of platters, the data is stored on interconnected flash memory chips that retain the data even when there&#039;s no power present. HDDs have spinning plates with magnetic coating, while SSDs have no moving parts and instead are using flash memory.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribute&lt;br /&gt;
!SSD (Solid State Drive)&lt;br /&gt;
!HDD (Hard Disk Drive)&lt;br /&gt;
|-&lt;br /&gt;
|Power Draw / Battery Life 	&lt;br /&gt;
|Less power draw, averages 2 – 3 watts, resulting in 30+ minute battery boost 	&lt;br /&gt;
|More power draw, averages 6 – 7 watts and therefore uses more battery&lt;br /&gt;
|-&lt;br /&gt;
|Cost 	&lt;br /&gt;
|Expensive, roughly $0.10 per gigabyte (based on buying a 1TB drive)&lt;br /&gt;
|Only around $0.06 per gigabyte, very cheap (buying a 4TB model)&lt;br /&gt;
|-&lt;br /&gt;
|Capacity 	&lt;br /&gt;
|Typically not larger than 1TB for notebook size drives; 1TB max for desktops 	&lt;br /&gt;
|Typically around 500GB and 2TB maximum for notebook size drives; 6TB max for desktops&lt;br /&gt;
|-&lt;br /&gt;
|Operating System Boot Time 	&lt;br /&gt;
|Around 10-13 seconds average bootup time 	&lt;br /&gt;
|Around 30-40 seconds average bootup time&lt;br /&gt;
|-&lt;br /&gt;
|Noise 	&lt;br /&gt;
|There are no moving parts and as such no sound 	&lt;br /&gt;
|Audible clicks and spinning can be heard&lt;br /&gt;
|-&lt;br /&gt;
|Vibration 	&lt;br /&gt;
|No vibration as there are no moving parts 	&lt;br /&gt;
|The spinning of the platters can sometimes result in vibration&lt;br /&gt;
|-&lt;br /&gt;
|Heat Produced 	&lt;br /&gt;
|Lower power draw and no moving parts so little heat is produced 	&lt;br /&gt;
|HDD doesn’t produce much heat, but it will have a measurable amount more heat than an SSD due to moving parts and higher power draw&lt;br /&gt;
|-&lt;br /&gt;
|Failure Rate 	&lt;br /&gt;
|Mean time between failure rate of 2.0 million hours 	&lt;br /&gt;
|Mean time between failure rate of 1.5 million hours&lt;br /&gt;
|-&lt;br /&gt;
|File Copy / Write Speed 	&lt;br /&gt;
|Generally above 200 MB/s and up to 550 MB/s for cutting edge drives 	&lt;br /&gt;
|The range can be anywhere from 50 – 120MB / s&lt;br /&gt;
|-&lt;br /&gt;
|Encryption 	&lt;br /&gt;
|Full Disk Encryption (FDE) Supported on some models 	&lt;br /&gt;
|Full Disk Encryption (FDE) Supported on some models&lt;br /&gt;
|-&lt;br /&gt;
|File Opening Speed 	&lt;br /&gt;
|Up to 30% faster than HDD 	&lt;br /&gt;
|Slower than SSD&lt;br /&gt;
|-&lt;br /&gt;
|Magnetism Affected? 	&lt;br /&gt;
|An SSD is safe from any effects of magnetism 	&lt;br /&gt;
|Magnets can erase data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===What is the purpose of Flash Translation Layer in terms of solid state drives?===&lt;br /&gt;
Flash drives have limited lifespan due to write cycles (or rather program-erase (PE) cycles) and to exhaust the drive equally, FTL layer is utilised.&lt;br /&gt;
&lt;br /&gt;
Although presenting an array of Logical Block Addresses (LBA) makes sense for HDDs as their sectors can be overwritten, it is not fully suited to the way flash memory works. For this reason, an additional component is required to hide the inner characteristics of NAND flash memory and expose only an array of LBAs to the host. This component is called the Flash Translation Layer (FTL), and resides in the SSD controller. The FTL is critical and has three main purposes: logical block mapping, wear leveling and garbage collection.&lt;br /&gt;
&lt;br /&gt;
The logical block mapping translates logical block addresses (LBAs) from the host space into physical block addresses (PBAs) in the physical NAND-flash memory space. This mapping takes the form of a table, which for any LBA gives the corresponding PBA.&lt;br /&gt;
&lt;br /&gt;
Wear leveling (also written as wear levelling) is a technique[1] for prolonging the service life of some kinds of erasable computer storage media, such as flash memory (used in solid-state drives (SSDs) and USB flash drives).&lt;br /&gt;
&lt;br /&gt;
The garbage collection process in the SSD controller ensures that “stale” pages are erased and restored into a “free” state so that the incoming write commands can be processed. If the data in a page has to be updated, the new version is written to a free page, and the page containing the previous version is marked as stale. When blocks contain stale pages, they need to be erased before they can be written to.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===What are difference between volatile/non-volatile, RAM, ROM, EEPROM and where are they used?===&lt;br /&gt;
&lt;br /&gt;
Volatile = does not hold data after power off.&lt;br /&gt;
Non-volatile = holds data even after power off.&lt;br /&gt;
&lt;br /&gt;
Random Access Memory or RAM is a form of data storage that can be accessed randomly at any time, in any order and from any physical location., allowing quick access and manipulation. RAM allows the computer to read data quickly to run applications. It allows reading and writing. It is volatile.&lt;br /&gt;
&lt;br /&gt;
Read-only memory or ROM is also a form of data storage that can not be easily altered or reprogrammed.Stores instuctions that are not nescesary for re-booting up to make the computer operate when it is switched off.They are hardwired. ROM stores the program required to initially boot the computer. It only allows reading. It is non-volatile.&lt;br /&gt;
&lt;br /&gt;
EEPROM (electrically erasable programmable read-only memory) is user-modifiable read-only memory (ROM) that can be erased and reprogrammed. Unlike EPROM chips, EEPROMs do not need to be removed from the computer to be modified. However, an EEPROM chip has to be erased and reprogrammed in its entirety, not selectively. It also has a limited life - that is, the number of times it can be reprogrammed is limited to tens or hundreds of thousands of times. BIOS of PCs are usually written to EEPROM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===What is data retention?===&lt;br /&gt;
It is how long a device can hold data before it becomes unreadable.&lt;br /&gt;
&lt;br /&gt;
===What are difference between asynchronous/synchronous, dynamic/static RAM and where are they used?===&lt;br /&gt;
The two main forms of modern RAM are static RAM (SRAM) and dynamic RAM (DRAM). In SRAM, a bit of data is stored using the state of a six transistor memory cell. This form of RAM is more expensive to produce, but is generally faster and requires less power than DRAM and, in modern computers, is often used as cache memory for the CPU. DRAM stores a bit of data using a transistor and capacitor pair, which together comprise a DRAM memory cell. The capacitor holds a high or low charge (1 or 0, respectively), and the transistor acts as a switch that lets the control circuitry on the chip read the capacitor&#039;s state of charge or change it. As this form of memory is less expensive to produce than static RAM, it is the predominant form of computer memory used in modern computers.&lt;br /&gt;
Dynamic RAM is used to create larger RAM space system, where Static RAM create speed- sensitive cache.&lt;br /&gt;
Dynamic RAM consumes less power than Static RAM.&lt;br /&gt;
&lt;br /&gt;
Asynchronous refers to the fact that the memory is not synchronized to the system clock. A memory access is begun, and a certain period of time later the memory value appears on the bus. The signals are not coordinated with the system clock at all, as described in the section discussing memory access. Asynchronous memory works fine in lower-speed memory bus systems but is not nearly as suitable for use in high-speed (&amp;gt;66 MHz) memory systems.&lt;br /&gt;
A newer type of DRAM, called &amp;quot;synchronous DRAM&amp;quot; or &amp;quot;SDRAM&amp;quot;, is synchronized to the system clock; all signals are tied to the clock so timing is much tighter and better controlled. This type of memory is much faster than asynchronous DRAM and can be used to improve the performance of the system. It is more suitable to the higher-speed memory systems of the newest PCs.&lt;br /&gt;
&lt;br /&gt;
===What is [https://compsci2014.wikispaces.com/2.1.3+Explain+the+use+of+cache+memory cache]? What is cache coherence?===&lt;br /&gt;
&lt;br /&gt;
Cache memory is used to reduce the average memory access times. This is done by storing the data that is frequently accessed in main memory addresses therefore allowing the CPU to access the data faster. This is due to the fact that cache memory can be read a lot faster than main memory.&lt;br /&gt;
 &lt;br /&gt;
Cache coherence is the consistency of shared resource data that ends up stored in multiple local caches. When clients in a system maintain caches of a common memory resource, problems may arise with inconsistent data, which is particularly the case with CPUs in a multiprocessing system.&lt;br /&gt;
&lt;br /&gt;
===What are differences between resistive and capacitive touchscreen?=== &lt;br /&gt;
Resistive touchscreen needs pressure to work by connecting to sheets of plastic and thus conducting electricity. Capacitive touchscreen works by conducting electricity from user&#039;s finger.&lt;br /&gt;
&lt;br /&gt;
Resistive touchscreens rely on the pressure of your fingertip—or any other object—to register input. They consist of two flexible layers with an air gap in-between. In order for the touchscreen to register input, you must press on the top layer using a small amount of pressure, in order to depress the top layer enough to make contact with the bottom layer. The touchscreen will then register the precise location of the touch. You can use anything you want on a resistive touchscreen to make the touch interface work; a gloved finger, a wooden rod, a fingernail – anything that creates enough pressure on the point of impact will activate the mechanism and the touch will be registered.&lt;br /&gt;
&lt;br /&gt;
Capacitive touchscreens instead sense conductivity to register input—usually from the skin on your fingertip. Because you don’t need to apply pressure, capacitive touchscreens are more responsive than resistive touchscreens. However, because they work by sensing conductivity, capacitive touchscreens can only be used with objects that have conductive properties, which includes your fingertip (which is most ideal), and special styluses designed with a conductive tip. This is the reason you cannot use a capacitive screen while wearing gloves – the gloves are not conductive, and the touch does not cause any change in the electrostatic field.&lt;br /&gt;
&lt;br /&gt;
[http://www.alphr.com/realworld/357325/capacitive-or-resistive-whats-the-best-type-of-touchscreen In-depth comparison of two]&lt;br /&gt;
&lt;br /&gt;
===Explain how [http://www.bidouille.org/hack/mousecam computer mouse] works?===&lt;br /&gt;
An optical computer mouse uses a light source, typically an LED, and a light detector, such as an array of photodiodes, to detect movement relative to a surface.&lt;br /&gt;
Modern surface-independent optical mice work by using an optoelectronic sensor (essentially, a tiny low-resolution video camera) to take successive images of the surface on which the mouse operates.&lt;br /&gt;
The technology underlying the modern optical computer mouse is known as digital image correlation.&lt;br /&gt;
To understand how optical mice work, imagine two photographs of the same object except slightly offset from each other. Place both photographs on a light table to make them transparent, and slide one across the other until their images line up. The amount that the edges of one photograph overhang the other represents the offset between the images, and in the case of an optical computer mouse the distance it has moved.&lt;br /&gt;
Optical mice capture one thousand successive images or more per second. Depending on how fast the mouse is moving, each image will be offset from the previous one by a fraction of a pixel or as many as several pixels. Optical mice mathematically process these images using cross correlation to calculate how much each successive image is offset from the previous one.&lt;br /&gt;
[http://www.topdesignmag.com/mouse-history-in-photos/ History of computer mouse].&lt;br /&gt;
&lt;br /&gt;
===Explain how [http://www.daskeyboard.com/blog/typing-through-time-the-history-of-the-keyboard/ computer keyboard] works?===&lt;br /&gt;
A keyboard is a lot like a miniature computer. It has its own processor and circuitry that carries information to and from that processor. A large part of this circuitry makes up the key matrix.&lt;br /&gt;
The key matrix is a grid of circuits underneath the keys. In all keyboards, each circuit is broken at a point below each key. When you press a key, it presses a switch, completing the circuit and allowing a tiny amount of current to flow through. The mechanical action of the switch causes some vibration, called bounce, which the processor filters out. If you press and hold a key, the processor recognizes it as the equivalent of pressing a key repeatedly.&lt;br /&gt;
When the processor finds a circuit that is closed, it compares the location of that circuit on the key matrix to the character map in its read-only memory (ROM). A character map is basically a comparison chart or lookup table. It tells the processor the position of each key in the matrix and what each keystroke or combination of keystrokes represents. For example, the character map lets the processor know that pressing the a key by itself corresponds to a small letter &amp;quot;a,&amp;quot; but the Shift and a keys pressed together correspond to a capital &amp;quot;A.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[http://computer.howstuffworks.com/keyboard.htm HowStuffworks article] &lt;br /&gt;
[http://www.explainthatstuff.com/computerkeyboards.html Explain that Stuff article] [http://www.daskeyboard.com/blog/typing-through-time-the-history-of-the-keyboard/ Keyboard History]&lt;br /&gt;
&lt;br /&gt;
===Explain how [https://en.wikipedia.org/wiki/Cathode_ray_tube cathode ray tube] (CRT) based screen technology works and name pros/cons.===&lt;br /&gt;
[https://www.youtube.com/watch?v=2czqYV3T_Kc]&lt;br /&gt;
The cathode ray tube (CRT) is a vacuum tube containing one or more electron guns, and a phosphorescent screen used to, It has a means to accelerate and deflect the electron beam(s) onto the screen to create the images. The images may represent electrical waveforms (oscilloscope), pictures (television, computer monitor), radar targets or others. CRTs have also been used as memory devices, in which case the visible light emitted from the fluorescent material (if any) is not intended to have significant meaning to a visual observer (though the visible pattern on the tube face may cryptically represent the stored data).&lt;br /&gt;
&lt;br /&gt;
The CRT uses an evacuated glass envelope which is large, deep (i.e. long from front screen face to rear end), fairly heavy, and relatively fragile. As a matter of safety, the face is typically made of thick lead glass so as to be highly shatter-resistant and to block most X-ray emissions, particularly if the CRT is used in a consumer product.&lt;br /&gt;
&lt;br /&gt;
===Explain how [https://en.wikipedia.org/wiki/Liquid-crystal_display liquid crystal displays] (LCD) work and name pros/cons.===&lt;br /&gt;
[https://www.youtube.com/watch?v=nCHgmCxGEzY]&lt;br /&gt;
&lt;br /&gt;
===Name screen technologies making use of thin film transistor (TFT) technology?===&lt;br /&gt;
[https://en.wikipedia.org/wiki/Thin-film_transistor]&lt;br /&gt;
&lt;br /&gt;
===Name uses for light polarization filters?===&lt;br /&gt;
A polarizer or polariser is an optical filter that passes light of a specific polarization and blocks waves of other polarizations. It can convert a beam of light of undefined or mixed polarization into a beam with well-defined polarization, polarized light. Polarizers are used in many optical techniques and instruments, and polarizing filters find applications in photography, liquid crystal display technology and 3D watching. Polarizers can also be made for other types of electromagnetic waves besides light, such as radio waves, microwaves, and X-rays.&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/Polarizing_filter_%28photography%29 Polarizer photo] [https://en.wikipedia.org/wiki/Polarized_3D_system Polarizer 3D]&lt;br /&gt;
&lt;br /&gt;
===What are the benefits of [https://en.wikipedia.org/wiki/Twisted_pair twisted pair cabling] and [https://en.wikipedia.org/wiki/Differential_signaling differential signalling]?===&lt;br /&gt;
&#039;&#039;&#039;Twisted pair&#039;&#039;&#039; cabling is a type of wiring in which two conductors of a single circuit are twisted together for the purposes of canceling out electromagnetic interference (EMI) from external sources; for instance, electromagnetic radiation from unshielded twisted pair (UTP) cables, and crosstalk between neighboring pairs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Differential signaling&#039;&#039;&#039; is a method for electrically transmitting information using two complementary signals. The technique sends the same electrical signal as a differential pair of signals, each in its own conductor. The pair of conductors can be wires (typically twisted together) or traces on a circuit board. The receiving circuit responds to the electrical difference between the two signals, rather than the difference between a single wire and ground. Since the receiving circuit only detects the difference between the wires, the technique resists electromagnetic noise compared to one conductor with an un-paired reference (ground). The technique works for both analog signaling and digital signaling.&lt;br /&gt;
&lt;br /&gt;
===[https://en.wikipedia.org/wiki/Active_matrix Active matrix] vs [https://en.wikipedia.org/wiki/Passive_matrix_addressing passive matrix] in display technology===&lt;br /&gt;
Active-matrix display : An active-matrix display, also known as a TFT (thin-film transistor) display, uses a separate transistor to apply charges to each liquid crystal cell and thus displays high-quality color that is viewable from all angles.&lt;br /&gt;
&lt;br /&gt;
Passive-matrix display : A passive-matrix display uses fewer transistors, requires less power, and is less expensive than an active-matrix display. The color on a passive-matrix display often is not as bright as an active-matrix display. Users view images on a passive-matrix display best when working directly in front of it.&lt;br /&gt;
&lt;br /&gt;
==Storage abstractions==&lt;br /&gt;
&lt;br /&gt;
===What is a [https://en.wikipedia.org/wiki/Block_%28data_storage%29 block device]?===&lt;br /&gt;
In computing (specifically data transmission and data storage), a block, sometimes called a physical record, is a sequence of bytes or bits, usually containing some whole number of records, having a maximum length, a block size.Data thus structured are said to be blocked. The process of putting data into blocks is called blocking. Most file systems are based on a block device, which is a level of abstraction for the hardware responsible for storing and retrieving specified blocks of data&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Logical_block_addressing logical block addressing] and what are the benefits compared to older [https://en.wikipedia.org/wiki/Cylinder-head-sector cylinder-head-sector addressing] method in terms of harddisks?===&lt;br /&gt;
Logical block addressing (LBA) is a common scheme used for specifying the location of blocks of data stored on computer storage devices, generally secondary storage systems such as hard disk drives. LBA is a particularly simple linear addressing scheme; blocks are located by an integer index, with the first block being LBA 0, the second LBA 1, and so on. &lt;br /&gt;
&lt;br /&gt;
Cylinder-head-sector, also known as CHS, is an early method for giving addresses to each physical block of data on a hard disk drive. CHS addressing is the process of identifying individual sectors on a disk by their position in a track, where the track is determined by the head and cylinder numbers.&lt;br /&gt;
&lt;br /&gt;
LBA allows a maximum addressing capacity of 2TB although CHS allows 8GB&lt;br /&gt;
&lt;br /&gt;
===What is a [https://en.wikipedia.org/wiki/Disk_partitioning disk partition]?===&lt;br /&gt;
Disk partitioning is the creation of one or more regions on a hard disk or other secondary storage, so that an operating system can manage information in each region separately. Partitioning is typically the first step of preparing a newly manufactured disk, before any files or directories have been created. The disk stores the information about the partitions&#039; locations and sizes in an area known as the partition table that the operating system reads before any other part of the disk. Each partition then appears in the operating system as a distinct &amp;quot;logical&amp;quot; disk that uses part of the actual disk.&lt;br /&gt;
&lt;br /&gt;
===What is a [https://en.wikipedia.org/wiki/File_system file system]?===&lt;br /&gt;
In computing, a file system (or filesystem) is used to control how data is stored and retrieved. Without a file system, information placed in a storage area would be one large body of data with no way to tell where one piece of information stops and the next begins. By separating the data into individual pieces, and giving each piece a name, the information is easily separated and identified. Taking its name from the way paper-based information systems are named, each group of data is called a &amp;quot;file&amp;quot;. The structure and logic rules used to manage the groups of information and their names is called a &amp;quot;file system&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Journaling_file_system#Write_hazards journaling] in terms of filesystems and what are the benefits? Name some journaled file systems in use nowadays.===&lt;br /&gt;
A journaling file system is a file system that keeps track of changes not yet committed to the file system&#039;s main part by recording the intentions of such changes in a data structure known as a &amp;quot;journal&amp;quot;, which is usually a circular log. In the event of a system crash or power failure, such file systems can be brought back online quicker with lower likelihood of becoming corrupted.&lt;br /&gt;
&lt;br /&gt;
Depending on the actual implementation, a journaling file system may only keep track of stored metadata, resulting in improved performance at the expense of increased possibility for data corruption. Alternatively, a journaling file system may track both stored data and related metadata, while some implementations allow selectable behavior in this regard&lt;br /&gt;
&lt;br /&gt;
==Bootloaders, kernels==&lt;br /&gt;
&lt;br /&gt;
===What is the role of BIOS/UEFI in x86-based machines?===&lt;br /&gt;
BIOS (Basic Input/Output System) performs during boot up process of a computer and prepares it for the OS and its&#039; programs.&lt;br /&gt;
&lt;br /&gt;
UEFI (Unified Extensible Firmware Interface) is a replacement for BIOS. It offers several advantages over previous firmware interface, like: &lt;br /&gt;
* Ability to boot from large disks (over 2 TB) with a GUID Partition Table (GPT)&lt;br /&gt;
* CPU-independent architecture&lt;br /&gt;
* CPU-independent drivers&lt;br /&gt;
* Flexible pre-OS environment, including network capability&lt;br /&gt;
* Modular design&lt;br /&gt;
&lt;br /&gt;
===Explain step by step how operating system is booted up, see slides for flowchart.===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. The first thing a computer has to do when it is turned on is start up a special program called an operating system. That process is called booting. The instructions for booting are built into BIOS (Basic input/output system).&lt;br /&gt;
&lt;br /&gt;
2. The BIOS will tell your computer to look into the boot disk (usually the lowest-numbered hard disk) for a boot loader and the boot loader will be pulled into memory and will be started.&lt;br /&gt;
 &lt;br /&gt;
3. The boot loader&#039;s job is to start the real operating system and it does it by looking for a kernel, loading it into memory and  starting it. &lt;br /&gt;
&lt;br /&gt;
5. Once the kernel starts, it has to look around to find the rest of the hardware and get ready to run programs ( It does this by poking not at ordinary memory locations but rather at I/O ports — special bus addresses that are likely to have device controller cards listening at them for commands). The kernel doesn&#039;t poke at random; it has a lot of built-in knowledge about what it&#039;s likely to find where, and how controllers will respond if they&#039;re present. This process is called autoprobing.&lt;br /&gt;
&lt;br /&gt;
6. After the kernel is up and running, it&#039;s the end of first stage. After the first stage, the kernel hands control to a special program called &amp;quot;init&amp;quot; which spawns housekeeping processes. The init&#039;s process&#039;s first task is to look that your hard disks are okay &lt;br /&gt;
&lt;br /&gt;
7. Init&#039;s next step is to start several daemons. A daemon is a program like a print spooler, a mail listener or a WWW server that lurks in the background, waiting for things to do. These special programs often have to coordinate several requests that could conflict. They are daemons because it&#039;s often easier to write one program that runs constantly and knows about all requests than it would be to try to make sure that a flock of copies (each processing one request and all running at the same time) don&#039;t step on each other.&lt;br /&gt;
&lt;br /&gt;
8. The next step is to prepare for users. Init starts a copy of a program called getty to watch your screen and keyboard (and maybe more copies to watch dial-in serial ports).&lt;br /&gt;
&lt;br /&gt;
9. The next step is to start up various daemons that support networking and other services. The most important of these is your X server. X is a daemon that manages your display, keyboard, and mouse. Its main job is to produce the color pixel graphics you normally see on your screen.&lt;br /&gt;
&lt;br /&gt;
10. When the X server comes up, during the last part of your machine&#039;s boot process, it effectively takes over the hardware from whatever virtual console was previously in control. That&#039;s when you&#039;ll see a graphical login screen, produced for you by a program called a display manager.&lt;br /&gt;
&lt;br /&gt;
===BIOS===&lt;br /&gt;
* Basic input and output system&lt;br /&gt;
* Located at memory location 0xFFFF0&lt;br /&gt;
* Boot firmware designed to be run at startup&lt;br /&gt;
* POST- power on self test &lt;br /&gt;
* Run-time service&lt;br /&gt;
  initial configuration &lt;br /&gt;
  selects which device to boot from&lt;br /&gt;
* Alternatively, Extensible Firmware Interface (EFI)&lt;br /&gt;
&lt;br /&gt;
===Describe the functionality provided by general purpose operating system.===&lt;br /&gt;
See architecture of [https://en.wikipedia.org/wiki/Architecture_of_Windows_NT Windows NT], [http://www.elinux.org/Android_Architecture Android], [https://en.wikipedia.org/wiki/Architecture_of_OS_X OS X].&lt;br /&gt;
&lt;br /&gt;
===What are the main differences between [https://en.wikipedia.org/wiki/Real_mode real mode] and [https://en.wikipedia.org/wiki/Protected_mode protected mode] of x86-based processor?===&lt;br /&gt;
&lt;br /&gt;
To preserve backward compatibility, all the further processors have had to include a Real mode. In the real mode, the memory addressability is limited to 1MB and it cannot take advantage of additional hardware support for virtual memory etc because interrupts are disabled.&lt;br /&gt;
&lt;br /&gt;
With the advent of the 286 processor, a new mode was included - that is the protected mode. The name &amp;quot;protected&amp;quot; actually derives from the fact that processes run in different address spaces and that they are essentially protected from one another. If a process tries to access another&#039;s address space, it traps to the MMU hardware. In this mode, the full hardware support is enabled, and the processor can address the entire 32 bit address space.&lt;br /&gt;
&lt;br /&gt;
===What happens during context switch?===&lt;br /&gt;
&lt;br /&gt;
During a context switch, the kernel will save the context of the old process in its PCB and then load the saved context of the new process scheduled to run.&lt;br /&gt;
&lt;br /&gt;
===What is the purpose of [https://en.wikipedia.org/wiki/Virtual_memory paged virtual memory]?===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Libraries, frameworks==&lt;br /&gt;
&lt;br /&gt;
==Programming languages==&lt;br /&gt;
&lt;br /&gt;
===What are the major steps of compilation?===&lt;br /&gt;
1. Lexer&lt;br /&gt;
The first phase of scanner works as a text scanner. This phase scans the source code as a stream of characters and converts it into meaningful lexemes. Lexical analyser represents these lexemes in the form of tokens as: &amp;lt;token-name, attribute-value&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Parser&lt;br /&gt;
The next phase is called the syntax analysis or parsing. It takes the token produced by lexical analysis as input and generates a parse tree (or syntax tree). In this phase, token arrangements are checked against the source code grammar, i.e. the parser checks if the expression made by the tokens is syntactically correct.&lt;br /&gt;
&lt;br /&gt;
3. Type checker&lt;br /&gt;
Semantic analysis checks whether the parse tree constructed follows the rules of language. For example, assignment of values is between compatible data types, and adding string to an integer. Also, the semantic analyser keeps track of identifiers, their types and expressions; whether identifiers are declared before use or not etc. The semantic analyser produces an annotated syntax tree as an output and an intermediate code is produced.&lt;br /&gt;
&lt;br /&gt;
4. Optimizer&lt;br /&gt;
The next phase does code optimization of the intermediate code. Optimization can be assumed as something that removes unnecessary code lines, and arranges the sequence of statements in order to speed up the program execution without wasting resources (CPU, memory).&lt;br /&gt;
&lt;br /&gt;
5. Code generator&lt;br /&gt;
In this phase, the code generator takes the optimized representation of the intermediate code and maps it to the target machine language. The code generator translates the intermediate code into a sequence of (generally) re-locatable machine code. Sequence of instructions of machine code performs the task as the intermediate code would do.&lt;br /&gt;
&lt;br /&gt;
===What are the differences between [https://en.wikipedia.org/wiki/Interpreted_language interpreted], [https://en.wikipedia.org/wiki/Just-in-time_compilation JIT-compilation] and [https://en.wikipedia.org/wiki/Compiler traditional compiling]?===&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Control_flow control flow]? Loops? Conditional statements?===&lt;br /&gt;
&lt;br /&gt;
==Data encoding==&lt;br /&gt;
&lt;br /&gt;
===What is bit? Nibble? Byte? Word?===&lt;br /&gt;
Bit is a basic unit of information that can hold either True or False value (1 or 0).&lt;br /&gt;
&lt;br /&gt;
Nibble is half of an octet.&lt;br /&gt;
&lt;br /&gt;
Byte is a unit of eight bits. Comes from the number of bits used to encode a single character of text in a computer&lt;br /&gt;
&lt;br /&gt;
Word is a length of bits the processor-architecture can process in bits (8-bit, 32-bit etc)&lt;br /&gt;
&lt;br /&gt;
===Write 9375 in binary, hexadecimal?===&lt;br /&gt;
&#039;&#039;&#039;Binary&#039;&#039;&#039; or base two counting system starts from right with 0 and continues left with each step being to the power of 2.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: right;&amp;quot;&lt;br /&gt;
| 13^2 &lt;br /&gt;
| 12^2 &lt;br /&gt;
| 11^2 &lt;br /&gt;
| 10^2 &lt;br /&gt;
| 9^2 &lt;br /&gt;
| 8^2 &lt;br /&gt;
| 7^2 &lt;br /&gt;
| 6^2 &lt;br /&gt;
| 5^2 &lt;br /&gt;
| 4^2 &lt;br /&gt;
| 3^2 &lt;br /&gt;
| 2^2 &lt;br /&gt;
| 1^2&lt;br /&gt;
| 0^1&lt;br /&gt;
|- &lt;br /&gt;
| 8192 &lt;br /&gt;
| 4096 &lt;br /&gt;
| 2048 &lt;br /&gt;
| 1024 &lt;br /&gt;
| 512 &lt;br /&gt;
| 256 &lt;br /&gt;
| 128 &lt;br /&gt;
|  64 &lt;br /&gt;
|  32 &lt;br /&gt;
|  16 &lt;br /&gt;
|   8 &lt;br /&gt;
|   4 &lt;br /&gt;
| 2&lt;br /&gt;
|   1&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To find out the decimal number (9375) in binary, look if it contains the number equal or smaller. 8192 is smaller than 9375, mark down 1. 9375-8192=1183 contains 1024, mark 1, etc. Number 9375 base ten is 0x10010010011111 in binary, where the &#039;0b&#039; represents base two. From binary to decimal conversion works the other way around. If perplexed, [https://www.khanacademy.org/math/pre-algebra/applying-math-reasoning-topic/alternate-number-bases/v/decimal-to-binary see the explanatory video on Khan academy].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hexadecimal&#039;&#039;&#039; or base 16 system goes from 0 until 9, then starts with A (10 base 10) until F (15 base 10).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: right;&amp;quot;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
|2&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|5&lt;br /&gt;
|6&lt;br /&gt;
|7&lt;br /&gt;
|8&lt;br /&gt;
|9&lt;br /&gt;
|10&lt;br /&gt;
|11&lt;br /&gt;
|12&lt;br /&gt;
|13&lt;br /&gt;
|14&lt;br /&gt;
|15&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|3&lt;br /&gt;
|4&lt;br /&gt;
|5&lt;br /&gt;
|6&lt;br /&gt;
|7&lt;br /&gt;
|8&lt;br /&gt;
|9&lt;br /&gt;
|A&lt;br /&gt;
|B&lt;br /&gt;
|C&lt;br /&gt;
|D&lt;br /&gt;
|E&lt;br /&gt;
|F&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Conversion from base two to hex is similar to decimal to base two conversion. First, we figure out the multiples of 16:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: right;&amp;quot;&lt;br /&gt;
|16^0&lt;br /&gt;
|16^1&lt;br /&gt;
|16^2&lt;br /&gt;
|16^3&lt;br /&gt;
|16^4&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|16&lt;br /&gt;
|256&lt;br /&gt;
|4096&lt;br /&gt;
|65 536&lt;br /&gt;
|-&lt;br /&gt;
|F&lt;br /&gt;
|9&lt;br /&gt;
|4&lt;br /&gt;
|2&lt;br /&gt;
|&amp;lt;-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
9375 has two multiples of 4096 (9375 - &#039;&#039;&#039;2&#039;&#039;&#039;*4096 = 9375 - 8192 = 1183), 1183 has &#039;&#039;&#039;4&#039;&#039;&#039; multiples of 256 (1183 - &#039;&#039;&#039;4&#039;&#039;&#039;*256 = 159), 159 has 159 - &#039;&#039;&#039;9&#039;&#039;&#039;*16 = 15 (15 in decimal is &#039;&#039;&#039;F&#039;&#039;&#039; in hex) and we come to 249F. As with base 2, you can convert this way from hex to decimal. If still don&#039;t get it, watch a [https://www.khanacademy.org/math/pre-algebra/applying-math-reasoning-topic/alternate-number-bases/v/decimal-to-hexadecimal video on Khan academy].&lt;br /&gt;
&lt;br /&gt;
===Write 0xDEADBEEF in decimal?===&lt;br /&gt;
Following the table above we calculate, 13x16^8 + 14x16^7 + 10x16^6 + 13x16^5 + 11x16^4 + 14x16^3 + 14x16^2 + 15x16^1 = A BIG NUMBER!&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Quantization_%28signal_processing%29 quantization] in terms of signal processing?===&lt;br /&gt;
Quantization, in mathematics and digital signal processing, is the process of mapping a large set of input values to a (countable) smaller set. Rounding and truncation are typical examples of quantization processes. Quantization is involved to some degree in nearly all digital signal processing, as the process of representing a signal in digital form ordinarily involves rounding. Quantization also forms the core of essentially all lossy compression algorithms. The difference between an input value and its quantized value (such as round-off error) is referred to as quantization error. A device or algorithmic function that performs quantization is called a quantizer. An analog-to-digital converter is an example of a quantizer.&lt;br /&gt;
&lt;br /&gt;
===How are [https://en.wikipedia.org/wiki/Integer_%28computer_science%29 integers] stored in binary? What integer range can be described using n bits? How many bits are required to describe integer range from n .. m.===&lt;br /&gt;
&lt;br /&gt;
===How are [https://en.wikipedia.org/wiki/Single-precision_floating-point_format single precision] and [https://en.wikipedia.org/wiki/Double-precision_floating-point_format double precision] floating point numbers stored in binary according to [https://en.wikipedia.org/wiki/IEEE_floating_point IEEE754 standard]?===&lt;br /&gt;
[http://lauri.vosandi.com/hdl/arithmetic/floating-point-representation.html Floating-point multiplication]&lt;br /&gt;
&lt;br /&gt;
===What is the difference between CMYK and RGB color models? How are YUV, HSV and HSL colorspaces related to RGB? What are sRGB and YCbCr and where are they used?===&lt;br /&gt;
&lt;br /&gt;
===How is data encoded on audio CD-s? What is the [http://lauri.vosandi.com/2013/07/audio-codecs.html capacity of an audio CD]?===&lt;br /&gt;
&lt;br /&gt;
===What is sampling rate? What is bit depth? What is resolution?===&lt;br /&gt;
&lt;br /&gt;
===What is bitrate?===&lt;br /&gt;
Bitrate is the number of bits that are conveyed or processed per unit of time.&lt;br /&gt;
&lt;br /&gt;
The bit rate is quantified using the bits per second unit (symbol: &amp;quot;bit/s&amp;quot;), often in conjunction with an SI prefix such as &amp;quot;kilo&amp;quot; (1 kbit/s = 1000 bit/s), &amp;quot;mega&amp;quot; (1 Mbit/s = 1000 kbit/s), &amp;quot;giga&amp;quot; (1 Gbit/s = 1000 Mbit/s) or &amp;quot;tera&amp;quot; (1 Tbit/s = 1000 Gbit/s).[2] The non-standard abbreviation &amp;quot;bps&amp;quot; is often used to replace the standard symbol &amp;quot;bit/s&amp;quot;, so that, for example, &amp;quot;1 Mbps&amp;quot; is used to mean one million bits per second.&lt;br /&gt;
&lt;br /&gt;
One byte per second (1 B/s) corresponds to 8 bit/s.&lt;br /&gt;
&lt;br /&gt;
===What is lossy/lossless compression?===&lt;br /&gt;
&lt;br /&gt;
===What is JPEG suitable for? Is JPEG lossy or lossless compression method?===&lt;br /&gt;
&lt;br /&gt;
===What is PNG suitable for? Does PNG support compression?===&lt;br /&gt;
&lt;br /&gt;
===How are time domain and frequency domain related in terms of signal processing? What is Fourier transform and where it is applied?===&lt;br /&gt;
&lt;br /&gt;
==Code execution in processor==&lt;br /&gt;
&lt;br /&gt;
===Given ~10 instructions and their explainations, follow the instructions and elaborate after every step what happened in the processor?===&lt;br /&gt;
&lt;br /&gt;
==Microcontrollers==&lt;br /&gt;
&lt;br /&gt;
===What distinguishes microcontroller from microprocessor?===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&#039;&#039;&#039;MICROPROCESSOR&#039;&#039;&#039;&lt;br /&gt;
|&#039;&#039;&#039;MICRO CONTROLLER&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|Microprocessor is heart of Computer system.	&lt;br /&gt;
|Micro Controller is a heart of embedded system.&lt;br /&gt;
|-&lt;br /&gt;
|It is just a processor. Memory and I/O components have to be connected externally	&lt;br /&gt;
|Micro controller has external processor along with internal memory and i/O components&lt;br /&gt;
|-&lt;br /&gt;
|Since memory and I/O has to be connected externally, the circuit becomes large.	&lt;br /&gt;
|Since memory and I/O are present internally, the circuit is small.&lt;br /&gt;
|-&lt;br /&gt;
|Cannot be used in compact systems and hence inefficient	&lt;br /&gt;
|Can be used in compact systems and hence it is an efficient technique&lt;br /&gt;
|-&lt;br /&gt;
|Cost of the entire system increases	&lt;br /&gt;
|Cost of the entire system is low&lt;br /&gt;
|-&lt;br /&gt;
|Due to external components, the entire power consumption is high. Hence it is not suitable to used with devices running on stored power like batteries.	&lt;br /&gt;
|Since external components are low, total power consumption is less and can be used with devices running on stored power like batteries.&lt;br /&gt;
|-&lt;br /&gt;
|Most of the microprocessors do not have power saving features.	&lt;br /&gt;
|Most of the micro controllers have power saving modes like idle mode and power saving mode. This helps to reduce power consumption even further.&lt;br /&gt;
|-&lt;br /&gt;
|Since memory and I/O components are all external, each instruction will need external operation, hence it is relatively slower.	&lt;br /&gt;
|Since components are internal, most of the operations are internal instruction, hence speed is fast.&lt;br /&gt;
|-&lt;br /&gt;
|Microprocessor have less number of registers, hence more operations are memory based.	&lt;br /&gt;
|Micro controller have more number of registers, hence the programs are easier to write.&lt;br /&gt;
|-&lt;br /&gt;
|Microprocessors are based on von Neumann model/architecture where program and data are stored in same memory module	&lt;br /&gt;
|Micro controllers are based on Harvard architecture where program memory and Data memory are separate&lt;br /&gt;
|-&lt;br /&gt;
|Mainly used in personal computers	&lt;br /&gt;
|Used mainly in washing machine, MP3 players&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===What are the differences between Harvard architecture and von Neumann architecture?===&lt;br /&gt;
Difference of von Neumann architecture from Harvard is that von Neumann can do a single operation at a time -- it cannot write while reading an instruction. A property that a computer with Harvard architecture can do.&lt;br /&gt;
&lt;br /&gt;
===What is an interrupt?===&lt;br /&gt;
Interrupt is a signal that there is something that requires immediate attention from the processing unit. Processor suspends its current activities, saves its state, deals with the temporary interrupt and returns itself to the previous state.&lt;br /&gt;
&lt;br /&gt;
===What is an timer?===&lt;br /&gt;
Timer is a line of code that tracks the passage of time based on the clock oscillator which is built in to the hardware where the software is running.&lt;br /&gt;
&lt;br /&gt;
==Introduction to Boole algebra==&lt;br /&gt;
&lt;br /&gt;
===Simplify A AND A OR B===&lt;br /&gt;
&lt;br /&gt;
===Show addition of X and Y in binary===&lt;br /&gt;
&lt;br /&gt;
===Show subtraction of X and Y  in binary===&lt;br /&gt;
&lt;br /&gt;
===Show multiplication of X and Y in binary===&lt;br /&gt;
&lt;br /&gt;
==Hardware description languages==&lt;br /&gt;
&lt;br /&gt;
===What are the uses for hardware description languages?===&lt;br /&gt;
In electronics, a hardware description language (HDL) is a specialized computer language used to program the structure, design and operation of electronic circuits, and most commonly, digital logic circuits.&lt;br /&gt;
&lt;br /&gt;
A hardware description language enables a precise, formal description of an electronic circuit that allows for the automated analysis, simulation, and simulated testing of an electronic circuit. It also allows for the compilation of an HDL program into a lower level specification of physical electronic components, such as the set of masks used to create an integrated circuit.&lt;br /&gt;
&lt;br /&gt;
A hardware description language looks much like a programming language such as C; it is a textual description consisting of expressions, statements and control structures. One important difference between most programming languages and HDLs is that HDLs explicitly include the notion of time.&lt;br /&gt;
&lt;br /&gt;
===What is latch?===&lt;br /&gt;
A latch is an example of a bistable multivibrator, that is, a device with exactly two stable states. These states are high-output and low-output. A latch has a feedback path, so information can be retained by the device. Therefore latches can be memory devices, and can store one bit of data for as long as the device is powered. As the name suggests, latches are used to &amp;quot;latch onto&amp;quot; information and hold in place. Latches are very similar to flip-flops, but are not synchronous devices, and do not operate on clock edges as flip-flops do.&lt;br /&gt;
&lt;br /&gt;
===What is flip-flop?===&lt;br /&gt;
A flip-flop is a device very like a latch in that it is a bistable multivibrator, having two states and a feedback path that allows it to store a bit of information. The difference between a latch and a flip-flop is that a latch is asynchronous, and the outputs can change as soon as the inputs do (or at least after a small propagation delay). A flip-flop, on the other hand, is edge-triggered and only changes state when a control signal goes from high to low or low to high. This distinction is relatively recent and is not formal, with many authorities still referring to flip-flops as latches and vice versa, but it is a helpful distinction to make for the sake of clarity.&lt;br /&gt;
&lt;br /&gt;
There are several different types of flip-flop each with its own uses and peculiarities. The four main types of flip-flop are : SR, JK, D, and T.&lt;br /&gt;
&lt;br /&gt;
===What is mux (multiplexer)?===&lt;br /&gt;
A multiplexer (or mux) is a device that selects one of several analog or digital input signals and forwards the selected input into a single line.[1] A multiplexer of 2n inputs has n select lines, which are used to select which input line to send to the output.[2] Multiplexers are mainly used to increase the amount of data that can be sent over the network within a certain amount of time and bandwidth.[1] A multiplexer is also called a data selector.&lt;br /&gt;
&lt;br /&gt;
An electronic multiplexer makes it possible for several signals to share one device or resource, for example one A/D converter or one communication line, instead of having one device per input signal.&lt;br /&gt;
&lt;br /&gt;
===What is register? Register file?===&lt;br /&gt;
&#039;&#039;&#039;Registers&#039;&#039;&#039; are a special, high-speed storage area within the CPU. All data must be represented in a register before it can be processed. For example, if two numbers are to be multiplied, both numbers must be in registers, and the result is also placed in a register. A register may hold a computer instruction , a storage address, or any kind of data (such as a bit sequence or individual characters). A register must be large enough to hold an instruction - for example, in a 32-bit instruction computer, a register must be 32 bits in length. In some computer designs, there are smaller registers - for example, half-registers - for shorter instructions. Depending on the processor design and language rules, registers may be numbered or have arbitrary names.&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;register file&#039;&#039;&#039; is an array of processor registers in a central processing unit (CPU). Modern integrated circuit-based register files are usually implemented by way of fast static RAMs with multiple ports. Such RAMs are distinguished by having dedicated read and write ports, whereas ordinary multiported SRAMs will usually read and write through the same ports.&lt;br /&gt;
&lt;br /&gt;
The instruction set architecture of a CPU will almost always define a set of registers which are used to stage data between memory and the functional units on the chip. In simpler CPUs, these architectural registers correspond one-for-one to the entries in a physical register file within the CPU. More complicated CPUs use register renaming, so that the mapping of which physical entry stores a particular architectural register changes dynamically during execution. The register file is part of the architecture and visible to the programmer, as opposed to the concept of transparent caches.&lt;br /&gt;
&lt;br /&gt;
===What is ALU?===&lt;br /&gt;
An arithmetic logic unit (ALU) is a digital electronic circuit that performs arithmetic and bitwise logical operations on integer binary numbers. This is in contrast to a floating-point unit (FPU), which operates on floating point numbers. An ALU is a fundamental building block of many types of computing circuits, including the central processing unit (CPU) of computers, FPUs, and graphics processing units (GPUs). A single CPU, FPU or GPU may contain multiple ALUs.&lt;br /&gt;
&lt;br /&gt;
The inputs to an ALU are the data to be operated on, called operands, and a code indicating the operation to be performed; the ALU&#039;s output is the result of the performed operation. In many designs, the ALU also exchanges additional information with a status register, which relates to the result of the current or previous operations.&lt;br /&gt;
&lt;br /&gt;
===What is floating-point unit?===&lt;br /&gt;
A floating-point unit (FPU) is a part of a computer system specially designed to carry out operations on floating point numbers. Typical operations are addition, subtraction, multiplication, division, square root, and bitshifting. Some systems (particularly older, microcode-based architectures) can also perform various transcendental functions such as exponential or trigonometric calculations, though in most modern processors these are done with software library routines.&lt;br /&gt;
&lt;br /&gt;
In general purpose computer architectures, one or more FPUs may be integrated with the central processing unit; however many embedded processors do not have hardware support for floating-point operations.&lt;br /&gt;
&lt;br /&gt;
===What is a cache?===&lt;br /&gt;
Clearing Computer Cache. The cache (pronounced &amp;quot;cash&amp;quot;) is a space in your computer&#039;s hard drive and in RAM memory where your browser saves copies of previously visited Web pages. Your browser uses the cache like a short-term memory&lt;br /&gt;
&lt;br /&gt;
===What is a bus?===&lt;br /&gt;
In computer architecture, a bus (related to the Latin &amp;quot;omnibus&amp;quot;, meaning &amp;quot;for all&amp;quot;) is a communication system that transfers data between components inside a computer, or between computers.&lt;br /&gt;
&lt;br /&gt;
===Show the circuit diagram for A OR B AND C, NOT A AND B, &amp;lt;insert some other Boole formula here&amp;gt;?===&lt;br /&gt;
&lt;br /&gt;
===Show the truth table for &amp;lt;insert Boole formula here&amp;gt;?===&lt;br /&gt;
&lt;br /&gt;
===Write the equivalent Boole formula of a circuit diagram.===&lt;br /&gt;
&lt;br /&gt;
==Publishing work==&lt;br /&gt;
&lt;br /&gt;
===What are the major implications of MIT, BSD and GPL licenses?===&lt;br /&gt;
&lt;br /&gt;
===What are the differences between copyright, trademark, trade secret?===&lt;br /&gt;
“Intellectual property is something that is created by the mind.”  Typically, we think of ideas as being created by the mind – but intellectual property does not protect bare ideas: rather, it is the expression or symbolic power/recognizability of the ideas that are protected. &lt;br /&gt;
Thus, it is the design of the rocket that is patented, not the idea of a rocket.  It is the painting of the lake that is copyrighted, not the idea of a lake.  And it is the consumer recognizable logo that is trademarked, not the idea of a logo.  Intellectual property protects how we express and identify ideas in concrete ways – not the idea itself.&lt;br /&gt;
&lt;br /&gt;
In particular:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Patents&#039;&#039;&#039;: protect functional expressions of an idea – not the idea itself.  A machines, method/process, manufacture, compositions of matter, and improvements of any of these items can be patented.  Thus, I can patent a design for the nozzle on a rocket, or the method of making the rocket, or the method of making the rocket fuel, or the metal in which the rocket fuel is stored, or a new way of transporting the rocket fuel to the rocket.  But I cannot patent the broad “idea” of a rocket.&lt;br /&gt;
     &lt;br /&gt;
&#039;&#039;&#039;Copyrights&#039;&#039;&#039;: protect the specific creative expression of an idea through any medium of artistic/creative expression – i.e., paintings, photographs, sculpture, writings, software, etc.   A copyright protects your painting of a haystack, but it would not prohibit another painter from expressing their artistry or viewpoint by also painting a haystack. Likewise, while Ian Fleming was able to receive a copyright on his particular expression of the idea of a secret agent (i.e., a debonair English secret agent), he could not prevent Rich Wilkes from receiving a copyright on his expression of the idea of a secret agent (i.e., a tattooed bald extreme athlete turned reluctant secret agent).  &lt;br /&gt;
     &lt;br /&gt;
&#039;&#039;&#039;Trademarks&#039;&#039;&#039;: protect any symbol that indicates the source or origin of the goods or services to which it is affixed.  While a trademark can be extremely valuable to its owner, the ultimate purpose of a trademark is to protect consumers – that is, the function of a trademark is to inform the consumer where the goods or services originate.  The consumer, knowing the origin of the goods, can make purchasing decisions based on prior knowledge, reputation or marketing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Trade secret&#039;&#039;&#039;: is a formula, practice, process, design, instrument, pattern, commercial method, or compilation of information which is not generally known or reasonably ascertainable by others, and by which a business can obtain an economic advantage over competitors or customers.[&lt;br /&gt;
&lt;br /&gt;
While each category is distinct, a product (or components/aspects of a product) may fall into one or more of the categories.  For example, software can be protected by both patents and copyrights.  The copyright would protect the artistic expression of the idea – i.e., the code itself – while the patent would protect the functional expression of the idea – e.g., using a single click to purchase a book online.  Likewise, it is likely that the software company will use a trademark to indicate who made the software. &lt;br /&gt;
&lt;br /&gt;
An additional example would be a logo for a company.  The logo may serve as a trademark indicating that all products affixed with the logo are from the same source.  The creative and artistic aspects of the logo may also be protected by a copyright.&lt;br /&gt;
&lt;br /&gt;
===Where would you use waterfall software development model? Where would you use agile?===&lt;br /&gt;
&lt;br /&gt;
===What is the purpose of a version control system?===&lt;br /&gt;
&lt;br /&gt;
===What would you store in a version control system?===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Algorithms and data structures==&lt;br /&gt;
&lt;br /&gt;
===What is time complexity of algorithm?===&lt;br /&gt;
In computer science, the time complexity of an algorithm quantifies the amount of time taken by an algorithm to run as a function of the length of the string representing the input. Time complexity is commonly estimated by counting the number of elementary operations performed by the algorithm, where an elementary operation takes a fixed amount of time to perform.&lt;br /&gt;
&lt;br /&gt;
===What is space complexity of algorithm?===&lt;br /&gt;
Space complexity is a measure of the amount of working storage an algorithm needs. That means how much memory, in the worst case, is needed at any point in the algorithm.&lt;br /&gt;
It represents the total amount of memory space that a &amp;quot;normal&amp;quot; physical computer would need to solve a given computational problem with a given algorithm.&lt;br /&gt;
&lt;br /&gt;
===What&#039;s a good algorithm?===&lt;br /&gt;
It executes as fast as possible.&lt;br /&gt;
It takes as less space as possible.&lt;br /&gt;
It is adaptable to computers.&lt;br /&gt;
It is simple.&lt;br /&gt;
It is elegant (well written).&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Moore&#039;s_law Moore&#039;s law]? What is [https://en.wikipedia.org/wiki/Rock&#039;s_law Rock&#039;s law]?===&lt;br /&gt;
Moore&#039;s law is the observation that the number of transistors in a dense integrated circuit doubles approximately every two years. The observation is named after Gordon E. Moore, the co-founder of Intel and Fairchild Semiconductor, whose 1965 paper described a doubling every year in the number of components per integrated circuit, and projected this rate of growth would continue for at least another decade. In 1975, looking forward to the next decade, he revised the forecast to doubling every two years.&lt;br /&gt;
Rock&#039;s law or Moore&#039;s second law, named for Arthur Rock or Gordon Moore, says that the cost of a semiconductor chip fabrication plant doubles every four years. As of 2015, the price had already reached about 14 billion US dollars.&lt;br /&gt;
&lt;br /&gt;
===What were the major contributing factors for success of Microsoft, Apple, Google, &amp;lt;your favourite company&amp;gt;?===&lt;br /&gt;
&lt;br /&gt;
===What were the major contributing factors to the success of Silicon Valley?===&lt;/div&gt;</summary>
		<author><name>Smets</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Exam_help&amp;diff=100290</id>
		<title>Exam help</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Exam_help&amp;diff=100290"/>
		<updated>2016-01-11T17:15:20Z</updated>

		<summary type="html">&lt;p&gt;Smets: /* What are the main differences between real mode and protected mode of x86-based processor? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Computer hardware==&lt;br /&gt;
&lt;br /&gt;
=== Different buses and their uses===&lt;br /&gt;
In computer architecture, a bus is a communication system that transfers data between components inside a computer, or between computers. This expression covers all related hardware components (wire, optical fiber, etc.) and software, including communication protocols.&lt;br /&gt;
&lt;br /&gt;
The internal bus, also known as internal data bus, memory bus, system bus or Front-Side-Bus, connects all the internal components of a computer, such as CPU and memory, to the motherboard. Internal data buses are also referred to as a local bus, because they are intended to connect to local devices. This bus is typically rather quick and is independent of the rest of the computer operations.&lt;br /&gt;
&lt;br /&gt;
The external bus, or expansion bus, is made up of the electronic pathways that connect the different external devices, such as printer etc., to the computer.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Types and uses:&#039;&#039;&#039;&lt;br /&gt;
;USB&lt;br /&gt;
:Universal Serial Bus. Designed for: input devices, digital cameras, printers, media players...&lt;br /&gt;
&lt;br /&gt;
;Serial ATA&lt;br /&gt;
:Used by internal storage devices (hard disk). They replace the old ATA connectors.&lt;br /&gt;
&lt;br /&gt;
;PCI&lt;br /&gt;
:Peripheral Component Interconnect, is a local computer bus for attaching hardware devices in a computer. Attached devices can take either the form of an integrated circuit fitted onto the motherboard itself or an expansion card that fits into a slot. Typical PCI cards used in PCs include: network cards, sound cards, modems, extra ports such as USB or serial, TV tuner cards and disk controllers.&lt;br /&gt;
&lt;br /&gt;
;PCI Express&lt;br /&gt;
:Peripheral Component Interconnect Express (also called PCIe), is a high-speed serial computer expansion bus standard designed to replace the older PCI, PCI-X, and AGP bus standards. PCIe has numerous improvements over the older standards, including higher maximum system bus throughput, lower I/O pin count and smaller physical footprint, better performance scaling for bus devices, a more detailed error detection and reporting mechanism, and native hot-plug functionality. More recent revisions of the PCIe standard provide hardware support for I/O virtualization.&lt;br /&gt;
&lt;br /&gt;
;Mini PCIe&lt;br /&gt;
:It is based on PCI Express technoogy. Main point is its small size and its large variety of connectors makes it used for USB2.0 cards, SIM card, Wifi and Bluetooth cards, 3G and GPS cards.&lt;br /&gt;
&lt;br /&gt;
;ExpressCard&lt;br /&gt;
:It is an interface to connect peripheral devices to a computer, usually a laptop computer. ExpressCards can connect a variety of devices to a computer including mobile broadband modems, IEEE 1394 (FireWire) connectors, USB connectors, Ethernet network ports, Serial ATA storage devices, solid-state drives, external enclosures for desktop-size PCI Express graphics cards and other peripheral devices, wireless network interface controllers (NIC), TV tuner cards, Common Access Card (CAC) readers, and sound cards.&lt;br /&gt;
&lt;br /&gt;
===What are the differences between hard disk drive (HDD) and solid state drive (SSD)?=== &lt;br /&gt;
The traditional spinning hard drive (HDD) is the basic nonvolatile storage on a computer. Hard drives are essentially metal platters with a magnetic coating which stores the data. A read/write head on an arm accesses the data while the platters are spinning in a hard drive enclosure.&lt;br /&gt;
An SSD does same jobas an HDD, but instead of a magnetic coating on top of platters, the data is stored on interconnected flash memory chips that retain the data even when there&#039;s no power present. HDDs have spinning plates with magnetic coating, while SSDs have no moving parts and instead are using flash memory.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribute&lt;br /&gt;
!SSD (Solid State Drive)&lt;br /&gt;
!HDD (Hard Disk Drive)&lt;br /&gt;
|-&lt;br /&gt;
|Power Draw / Battery Life 	&lt;br /&gt;
|Less power draw, averages 2 – 3 watts, resulting in 30+ minute battery boost 	&lt;br /&gt;
|More power draw, averages 6 – 7 watts and therefore uses more battery&lt;br /&gt;
|-&lt;br /&gt;
|Cost 	&lt;br /&gt;
|Expensive, roughly $0.10 per gigabyte (based on buying a 1TB drive)&lt;br /&gt;
|Only around $0.06 per gigabyte, very cheap (buying a 4TB model)&lt;br /&gt;
|-&lt;br /&gt;
|Capacity 	&lt;br /&gt;
|Typically not larger than 1TB for notebook size drives; 1TB max for desktops 	&lt;br /&gt;
|Typically around 500GB and 2TB maximum for notebook size drives; 6TB max for desktops&lt;br /&gt;
|-&lt;br /&gt;
|Operating System Boot Time 	&lt;br /&gt;
|Around 10-13 seconds average bootup time 	&lt;br /&gt;
|Around 30-40 seconds average bootup time&lt;br /&gt;
|-&lt;br /&gt;
|Noise 	&lt;br /&gt;
|There are no moving parts and as such no sound 	&lt;br /&gt;
|Audible clicks and spinning can be heard&lt;br /&gt;
|-&lt;br /&gt;
|Vibration 	&lt;br /&gt;
|No vibration as there are no moving parts 	&lt;br /&gt;
|The spinning of the platters can sometimes result in vibration&lt;br /&gt;
|-&lt;br /&gt;
|Heat Produced 	&lt;br /&gt;
|Lower power draw and no moving parts so little heat is produced 	&lt;br /&gt;
|HDD doesn’t produce much heat, but it will have a measurable amount more heat than an SSD due to moving parts and higher power draw&lt;br /&gt;
|-&lt;br /&gt;
|Failure Rate 	&lt;br /&gt;
|Mean time between failure rate of 2.0 million hours 	&lt;br /&gt;
|Mean time between failure rate of 1.5 million hours&lt;br /&gt;
|-&lt;br /&gt;
|File Copy / Write Speed 	&lt;br /&gt;
|Generally above 200 MB/s and up to 550 MB/s for cutting edge drives 	&lt;br /&gt;
|The range can be anywhere from 50 – 120MB / s&lt;br /&gt;
|-&lt;br /&gt;
|Encryption 	&lt;br /&gt;
|Full Disk Encryption (FDE) Supported on some models 	&lt;br /&gt;
|Full Disk Encryption (FDE) Supported on some models&lt;br /&gt;
|-&lt;br /&gt;
|File Opening Speed 	&lt;br /&gt;
|Up to 30% faster than HDD 	&lt;br /&gt;
|Slower than SSD&lt;br /&gt;
|-&lt;br /&gt;
|Magnetism Affected? 	&lt;br /&gt;
|An SSD is safe from any effects of magnetism 	&lt;br /&gt;
|Magnets can erase data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===What is the purpose of Flash Translation Layer in terms of solid state drives?===&lt;br /&gt;
Flash drives have limited lifespan due to write cycles (or rather program-erase (PE) cycles) and to exhaust the drive equally, FTL layer is utilised.&lt;br /&gt;
&lt;br /&gt;
Although presenting an array of Logical Block Addresses (LBA) makes sense for HDDs as their sectors can be overwritten, it is not fully suited to the way flash memory works. For this reason, an additional component is required to hide the inner characteristics of NAND flash memory and expose only an array of LBAs to the host. This component is called the Flash Translation Layer (FTL), and resides in the SSD controller. The FTL is critical and has three main purposes: logical block mapping, wear leveling and garbage collection.&lt;br /&gt;
&lt;br /&gt;
The logical block mapping translates logical block addresses (LBAs) from the host space into physical block addresses (PBAs) in the physical NAND-flash memory space. This mapping takes the form of a table, which for any LBA gives the corresponding PBA.&lt;br /&gt;
&lt;br /&gt;
Wear leveling (also written as wear levelling) is a technique[1] for prolonging the service life of some kinds of erasable computer storage media, such as flash memory (used in solid-state drives (SSDs) and USB flash drives).&lt;br /&gt;
&lt;br /&gt;
The garbage collection process in the SSD controller ensures that “stale” pages are erased and restored into a “free” state so that the incoming write commands can be processed. If the data in a page has to be updated, the new version is written to a free page, and the page containing the previous version is marked as stale. When blocks contain stale pages, they need to be erased before they can be written to.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===What are difference between volatile/non-volatile, RAM, ROM, EEPROM and where are they used?===&lt;br /&gt;
&lt;br /&gt;
Volatile = does not hold data after power off.&lt;br /&gt;
Non-volatile = holds data even after power off.&lt;br /&gt;
&lt;br /&gt;
Random Access Memory or RAM is a form of data storage that can be accessed randomly at any time, in any order and from any physical location., allowing quick access and manipulation. RAM allows the computer to read data quickly to run applications. It allows reading and writing. It is volatile.&lt;br /&gt;
&lt;br /&gt;
Read-only memory or ROM is also a form of data storage that can not be easily altered or reprogrammed.Stores instuctions that are not nescesary for re-booting up to make the computer operate when it is switched off.They are hardwired. ROM stores the program required to initially boot the computer. It only allows reading. It is non-volatile.&lt;br /&gt;
&lt;br /&gt;
EEPROM (electrically erasable programmable read-only memory) is user-modifiable read-only memory (ROM) that can be erased and reprogrammed. Unlike EPROM chips, EEPROMs do not need to be removed from the computer to be modified. However, an EEPROM chip has to be erased and reprogrammed in its entirety, not selectively. It also has a limited life - that is, the number of times it can be reprogrammed is limited to tens or hundreds of thousands of times. BIOS of PCs are usually written to EEPROM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===What is data retention?===&lt;br /&gt;
It is how long a device can hold data before it becomes unreadable.&lt;br /&gt;
&lt;br /&gt;
===What are difference between asynchronous/synchronous, dynamic/static RAM and where are they used?===&lt;br /&gt;
The two main forms of modern RAM are static RAM (SRAM) and dynamic RAM (DRAM). In SRAM, a bit of data is stored using the state of a six transistor memory cell. This form of RAM is more expensive to produce, but is generally faster and requires less power than DRAM and, in modern computers, is often used as cache memory for the CPU. DRAM stores a bit of data using a transistor and capacitor pair, which together comprise a DRAM memory cell. The capacitor holds a high or low charge (1 or 0, respectively), and the transistor acts as a switch that lets the control circuitry on the chip read the capacitor&#039;s state of charge or change it. As this form of memory is less expensive to produce than static RAM, it is the predominant form of computer memory used in modern computers.&lt;br /&gt;
Dynamic RAM is used to create larger RAM space system, where Static RAM create speed- sensitive cache.&lt;br /&gt;
Dynamic RAM consumes less power than Static RAM.&lt;br /&gt;
&lt;br /&gt;
Asynchronous refers to the fact that the memory is not synchronized to the system clock. A memory access is begun, and a certain period of time later the memory value appears on the bus. The signals are not coordinated with the system clock at all, as described in the section discussing memory access. Asynchronous memory works fine in lower-speed memory bus systems but is not nearly as suitable for use in high-speed (&amp;gt;66 MHz) memory systems.&lt;br /&gt;
A newer type of DRAM, called &amp;quot;synchronous DRAM&amp;quot; or &amp;quot;SDRAM&amp;quot;, is synchronized to the system clock; all signals are tied to the clock so timing is much tighter and better controlled. This type of memory is much faster than asynchronous DRAM and can be used to improve the performance of the system. It is more suitable to the higher-speed memory systems of the newest PCs.&lt;br /&gt;
&lt;br /&gt;
===What is [https://compsci2014.wikispaces.com/2.1.3+Explain+the+use+of+cache+memory cache]? What is cache coherence?===&lt;br /&gt;
&lt;br /&gt;
Cache memory is used to reduce the average memory access times. This is done by storing the data that is frequently accessed in main memory addresses therefore allowing the CPU to access the data faster. This is due to the fact that cache memory can be read a lot faster than main memory.&lt;br /&gt;
 &lt;br /&gt;
Cache coherence is the consistency of shared resource data that ends up stored in multiple local caches. When clients in a system maintain caches of a common memory resource, problems may arise with inconsistent data, which is particularly the case with CPUs in a multiprocessing system.&lt;br /&gt;
&lt;br /&gt;
===What are differences between resistive and capacitive touchscreen?=== &lt;br /&gt;
Resistive touchscreen needs pressure to work by connecting to sheets of plastic and thus conducting electricity. Capacitive touchscreen works by conducting electricity from user&#039;s finger.&lt;br /&gt;
&lt;br /&gt;
Resistive touchscreens rely on the pressure of your fingertip—or any other object—to register input. They consist of two flexible layers with an air gap in-between. In order for the touchscreen to register input, you must press on the top layer using a small amount of pressure, in order to depress the top layer enough to make contact with the bottom layer. The touchscreen will then register the precise location of the touch. You can use anything you want on a resistive touchscreen to make the touch interface work; a gloved finger, a wooden rod, a fingernail – anything that creates enough pressure on the point of impact will activate the mechanism and the touch will be registered.&lt;br /&gt;
&lt;br /&gt;
Capacitive touchscreens instead sense conductivity to register input—usually from the skin on your fingertip. Because you don’t need to apply pressure, capacitive touchscreens are more responsive than resistive touchscreens. However, because they work by sensing conductivity, capacitive touchscreens can only be used with objects that have conductive properties, which includes your fingertip (which is most ideal), and special styluses designed with a conductive tip. This is the reason you cannot use a capacitive screen while wearing gloves – the gloves are not conductive, and the touch does not cause any change in the electrostatic field.&lt;br /&gt;
&lt;br /&gt;
[http://www.alphr.com/realworld/357325/capacitive-or-resistive-whats-the-best-type-of-touchscreen In-depth comparison of two]&lt;br /&gt;
&lt;br /&gt;
===Explain how [http://www.bidouille.org/hack/mousecam computer mouse] works?===&lt;br /&gt;
An optical computer mouse uses a light source, typically an LED, and a light detector, such as an array of photodiodes, to detect movement relative to a surface.&lt;br /&gt;
Modern surface-independent optical mice work by using an optoelectronic sensor (essentially, a tiny low-resolution video camera) to take successive images of the surface on which the mouse operates.&lt;br /&gt;
The technology underlying the modern optical computer mouse is known as digital image correlation.&lt;br /&gt;
To understand how optical mice work, imagine two photographs of the same object except slightly offset from each other. Place both photographs on a light table to make them transparent, and slide one across the other until their images line up. The amount that the edges of one photograph overhang the other represents the offset between the images, and in the case of an optical computer mouse the distance it has moved.&lt;br /&gt;
Optical mice capture one thousand successive images or more per second. Depending on how fast the mouse is moving, each image will be offset from the previous one by a fraction of a pixel or as many as several pixels. Optical mice mathematically process these images using cross correlation to calculate how much each successive image is offset from the previous one.&lt;br /&gt;
[http://www.topdesignmag.com/mouse-history-in-photos/ History of computer mouse].&lt;br /&gt;
&lt;br /&gt;
===Explain how [http://www.daskeyboard.com/blog/typing-through-time-the-history-of-the-keyboard/ computer keyboard] works?===&lt;br /&gt;
A keyboard is a lot like a miniature computer. It has its own processor and circuitry that carries information to and from that processor. A large part of this circuitry makes up the key matrix.&lt;br /&gt;
The key matrix is a grid of circuits underneath the keys. In all keyboards, each circuit is broken at a point below each key. When you press a key, it presses a switch, completing the circuit and allowing a tiny amount of current to flow through. The mechanical action of the switch causes some vibration, called bounce, which the processor filters out. If you press and hold a key, the processor recognizes it as the equivalent of pressing a key repeatedly.&lt;br /&gt;
When the processor finds a circuit that is closed, it compares the location of that circuit on the key matrix to the character map in its read-only memory (ROM). A character map is basically a comparison chart or lookup table. It tells the processor the position of each key in the matrix and what each keystroke or combination of keystrokes represents. For example, the character map lets the processor know that pressing the a key by itself corresponds to a small letter &amp;quot;a,&amp;quot; but the Shift and a keys pressed together correspond to a capital &amp;quot;A.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[http://computer.howstuffworks.com/keyboard.htm HowStuffworks article] &lt;br /&gt;
[http://www.explainthatstuff.com/computerkeyboards.html Explain that Stuff article] [http://www.daskeyboard.com/blog/typing-through-time-the-history-of-the-keyboard/ Keyboard History]&lt;br /&gt;
&lt;br /&gt;
===Explain how [https://en.wikipedia.org/wiki/Cathode_ray_tube cathode ray tube] (CRT) based screen technology works and name pros/cons.===&lt;br /&gt;
[https://www.youtube.com/watch?v=2czqYV3T_Kc]&lt;br /&gt;
The cathode ray tube (CRT) is a vacuum tube containing one or more electron guns, and a phosphorescent screen used to, It has a means to accelerate and deflect the electron beam(s) onto the screen to create the images. The images may represent electrical waveforms (oscilloscope), pictures (television, computer monitor), radar targets or others. CRTs have also been used as memory devices, in which case the visible light emitted from the fluorescent material (if any) is not intended to have significant meaning to a visual observer (though the visible pattern on the tube face may cryptically represent the stored data).&lt;br /&gt;
&lt;br /&gt;
The CRT uses an evacuated glass envelope which is large, deep (i.e. long from front screen face to rear end), fairly heavy, and relatively fragile. As a matter of safety, the face is typically made of thick lead glass so as to be highly shatter-resistant and to block most X-ray emissions, particularly if the CRT is used in a consumer product.&lt;br /&gt;
&lt;br /&gt;
===Explain how [https://en.wikipedia.org/wiki/Liquid-crystal_display liquid crystal displays] (LCD) work and name pros/cons.===&lt;br /&gt;
[https://www.youtube.com/watch?v=nCHgmCxGEzY]&lt;br /&gt;
&lt;br /&gt;
===Name screen technologies making use of thin film transistor (TFT) technology?===&lt;br /&gt;
[https://en.wikipedia.org/wiki/Thin-film_transistor]&lt;br /&gt;
&lt;br /&gt;
===Name uses for light polarization filters?===&lt;br /&gt;
A polarizer or polariser is an optical filter that passes light of a specific polarization and blocks waves of other polarizations. It can convert a beam of light of undefined or mixed polarization into a beam with well-defined polarization, polarized light. Polarizers are used in many optical techniques and instruments, and polarizing filters find applications in photography, liquid crystal display technology and 3D watching. Polarizers can also be made for other types of electromagnetic waves besides light, such as radio waves, microwaves, and X-rays.&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/Polarizing_filter_%28photography%29 Polarizer photo] [https://en.wikipedia.org/wiki/Polarized_3D_system Polarizer 3D]&lt;br /&gt;
&lt;br /&gt;
===What are the benefits of [https://en.wikipedia.org/wiki/Twisted_pair twisted pair cabling] and [https://en.wikipedia.org/wiki/Differential_signaling differential signalling]?===&lt;br /&gt;
&#039;&#039;&#039;Twisted pair&#039;&#039;&#039; cabling is a type of wiring in which two conductors of a single circuit are twisted together for the purposes of canceling out electromagnetic interference (EMI) from external sources; for instance, electromagnetic radiation from unshielded twisted pair (UTP) cables, and crosstalk between neighboring pairs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Differential signaling&#039;&#039;&#039; is a method for electrically transmitting information using two complementary signals. The technique sends the same electrical signal as a differential pair of signals, each in its own conductor. The pair of conductors can be wires (typically twisted together) or traces on a circuit board. The receiving circuit responds to the electrical difference between the two signals, rather than the difference between a single wire and ground. Since the receiving circuit only detects the difference between the wires, the technique resists electromagnetic noise compared to one conductor with an un-paired reference (ground). The technique works for both analog signaling and digital signaling.&lt;br /&gt;
&lt;br /&gt;
===[https://en.wikipedia.org/wiki/Active_matrix Active matrix] vs [https://en.wikipedia.org/wiki/Passive_matrix_addressing passive matrix] in display technology===&lt;br /&gt;
Active-matrix display : An active-matrix display, also known as a TFT (thin-film transistor) display, uses a separate transistor to apply charges to each liquid crystal cell and thus displays high-quality color that is viewable from all angles.&lt;br /&gt;
&lt;br /&gt;
Passive-matrix display : A passive-matrix display uses fewer transistors, requires less power, and is less expensive than an active-matrix display. The color on a passive-matrix display often is not as bright as an active-matrix display. Users view images on a passive-matrix display best when working directly in front of it.&lt;br /&gt;
&lt;br /&gt;
==Storage abstractions==&lt;br /&gt;
&lt;br /&gt;
===What is a [https://en.wikipedia.org/wiki/Block_%28data_storage%29 block device]?===&lt;br /&gt;
In computing (specifically data transmission and data storage), a block, sometimes called a physical record, is a sequence of bytes or bits, usually containing some whole number of records, having a maximum length, a block size.Data thus structured are said to be blocked. The process of putting data into blocks is called blocking. Most file systems are based on a block device, which is a level of abstraction for the hardware responsible for storing and retrieving specified blocks of data&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Logical_block_addressing logical block addressing] and what are the benefits compared to older [https://en.wikipedia.org/wiki/Cylinder-head-sector cylinder-head-sector addressing] method in terms of harddisks?===&lt;br /&gt;
Logical block addressing (LBA) is a common scheme used for specifying the location of blocks of data stored on computer storage devices, generally secondary storage systems such as hard disk drives. LBA is a particularly simple linear addressing scheme; blocks are located by an integer index, with the first block being LBA 0, the second LBA 1, and so on. &lt;br /&gt;
&lt;br /&gt;
Cylinder-head-sector, also known as CHS, is an early method for giving addresses to each physical block of data on a hard disk drive. CHS addressing is the process of identifying individual sectors on a disk by their position in a track, where the track is determined by the head and cylinder numbers.&lt;br /&gt;
&lt;br /&gt;
LBA allows a maximum addressing capacity of 2TB although CHS allows 8GB&lt;br /&gt;
&lt;br /&gt;
===What is a [https://en.wikipedia.org/wiki/Disk_partitioning disk partition]?===&lt;br /&gt;
Disk partitioning is the creation of one or more regions on a hard disk or other secondary storage, so that an operating system can manage information in each region separately. Partitioning is typically the first step of preparing a newly manufactured disk, before any files or directories have been created. The disk stores the information about the partitions&#039; locations and sizes in an area known as the partition table that the operating system reads before any other part of the disk. Each partition then appears in the operating system as a distinct &amp;quot;logical&amp;quot; disk that uses part of the actual disk.&lt;br /&gt;
&lt;br /&gt;
===What is a [https://en.wikipedia.org/wiki/File_system file system]?===&lt;br /&gt;
In computing, a file system (or filesystem) is used to control how data is stored and retrieved. Without a file system, information placed in a storage area would be one large body of data with no way to tell where one piece of information stops and the next begins. By separating the data into individual pieces, and giving each piece a name, the information is easily separated and identified. Taking its name from the way paper-based information systems are named, each group of data is called a &amp;quot;file&amp;quot;. The structure and logic rules used to manage the groups of information and their names is called a &amp;quot;file system&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Journaling_file_system#Write_hazards journaling] in terms of filesystems and what are the benefits? Name some journaled file systems in use nowadays.===&lt;br /&gt;
A journaling file system is a file system that keeps track of changes not yet committed to the file system&#039;s main part by recording the intentions of such changes in a data structure known as a &amp;quot;journal&amp;quot;, which is usually a circular log. In the event of a system crash or power failure, such file systems can be brought back online quicker with lower likelihood of becoming corrupted.&lt;br /&gt;
&lt;br /&gt;
Depending on the actual implementation, a journaling file system may only keep track of stored metadata, resulting in improved performance at the expense of increased possibility for data corruption. Alternatively, a journaling file system may track both stored data and related metadata, while some implementations allow selectable behavior in this regard&lt;br /&gt;
&lt;br /&gt;
==Bootloaders, kernels==&lt;br /&gt;
&lt;br /&gt;
===What is the role of BIOS/UEFI in x86-based machines?===&lt;br /&gt;
BIOS (Basic Input/Output System) performs during boot up process of a computer and prepares it for the OS and its&#039; programs.&lt;br /&gt;
&lt;br /&gt;
UEFI (Unified Extensible Firmware Interface) is a replacement for BIOS. It offers several advantages over previous firmware interface, like: &lt;br /&gt;
* Ability to boot from large disks (over 2 TB) with a GUID Partition Table (GPT)&lt;br /&gt;
* CPU-independent architecture&lt;br /&gt;
* CPU-independent drivers&lt;br /&gt;
* Flexible pre-OS environment, including network capability&lt;br /&gt;
* Modular design&lt;br /&gt;
&lt;br /&gt;
===Explain step by step how operating system is booted up, see slides for flowchart.===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. The first thing a computer has to do when it is turned on is start up a special program called an operating system. That process is called booting. The instructions for booting are built into BIOS (Basic input/output system).&lt;br /&gt;
&lt;br /&gt;
2. The BIOS will tell your computer to look into the boot disk (usually the lowest-numbered hard disk) for a boot loader and the boot loader will be pulled into memory and will be started.&lt;br /&gt;
 &lt;br /&gt;
3. The boot loader&#039;s job is to start the real operating system and it does it by looking for a kernel, loading it into memory and  starting it. &lt;br /&gt;
&lt;br /&gt;
5. Once the kernel starts, it has to look around to find the rest of the hardware and get ready to run programs ( It does this by poking not at ordinary memory locations but rather at I/O ports — special bus addresses that are likely to have device controller cards listening at them for commands). The kernel doesn&#039;t poke at random; it has a lot of built-in knowledge about what it&#039;s likely to find where, and how controllers will respond if they&#039;re present. This process is called autoprobing.&lt;br /&gt;
&lt;br /&gt;
6. After the kernel is up and running, it&#039;s the end of first stage. After the first stage, the kernel hands control to a special program called &amp;quot;init&amp;quot; which spawns housekeeping processes. The init&#039;s process&#039;s first task is to look that your hard disks are okay &lt;br /&gt;
&lt;br /&gt;
7. Init&#039;s next step is to start several daemons. A daemon is a program like a print spooler, a mail listener or a WWW server that lurks in the background, waiting for things to do. These special programs often have to coordinate several requests that could conflict. They are daemons because it&#039;s often easier to write one program that runs constantly and knows about all requests than it would be to try to make sure that a flock of copies (each processing one request and all running at the same time) don&#039;t step on each other.&lt;br /&gt;
&lt;br /&gt;
8. The next step is to prepare for users. Init starts a copy of a program called getty to watch your screen and keyboard (and maybe more copies to watch dial-in serial ports).&lt;br /&gt;
&lt;br /&gt;
9. The next step is to start up various daemons that support networking and other services. The most important of these is your X server. X is a daemon that manages your display, keyboard, and mouse. Its main job is to produce the color pixel graphics you normally see on your screen.&lt;br /&gt;
&lt;br /&gt;
10. When the X server comes up, during the last part of your machine&#039;s boot process, it effectively takes over the hardware from whatever virtual console was previously in control. That&#039;s when you&#039;ll see a graphical login screen, produced for you by a program called a display manager.&lt;br /&gt;
&lt;br /&gt;
===BIOS===&lt;br /&gt;
* Basic input and output system&lt;br /&gt;
* Located at memory location 0xFFFF0&lt;br /&gt;
* Boot firmware designed to be run at startup&lt;br /&gt;
* POST- power on self test &lt;br /&gt;
* Run-time service&lt;br /&gt;
  initial configuration &lt;br /&gt;
  selects which device to boot from&lt;br /&gt;
* Alternatively, Extensible Firmware Interface (EFI)&lt;br /&gt;
&lt;br /&gt;
===Describe the functionality provided by general purpose operating system.===&lt;br /&gt;
See architecture of [https://en.wikipedia.org/wiki/Architecture_of_Windows_NT Windows NT], [http://www.elinux.org/Android_Architecture Android], [https://en.wikipedia.org/wiki/Architecture_of_OS_X OS X].&lt;br /&gt;
&lt;br /&gt;
===What are the main differences between [https://en.wikipedia.org/wiki/Real_mode real mode] and [https://en.wikipedia.org/wiki/Protected_mode protected mode] of x86-based processor?===&lt;br /&gt;
&lt;br /&gt;
To preserve backward compatibility, all the further processors have had to include a Real mode. In the real mode, the memory addressability is limited to 1MB and it cannot take advantage of additional hardware support for virtual memory etc because interrupts are disabled.&lt;br /&gt;
&lt;br /&gt;
With the advent of the 286 processor, a new mode was included - that is the protected mode. The name &amp;quot;protected&amp;quot; actually derives from the fact that processes run in different address spaces and that they are essentially protected from one another. If a process tries to access another&#039;s address space, it traps to the MMU hardware. In this mode, the full hardware support is enabled, and the processor can address the entire 32 bit address space.&lt;br /&gt;
&lt;br /&gt;
===What happens during context switch?===&lt;br /&gt;
&lt;br /&gt;
===What is the purpose of [https://en.wikipedia.org/wiki/Virtual_memory paged virtual memory]?===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Libraries, frameworks==&lt;br /&gt;
&lt;br /&gt;
==Programming languages==&lt;br /&gt;
&lt;br /&gt;
===What are the major steps of compilation?===&lt;br /&gt;
===What are the differences between [https://en.wikipedia.org/wiki/Interpreted_language interpreted], [https://en.wikipedia.org/wiki/Just-in-time_compilation JIT-compilation] and [https://en.wikipedia.org/wiki/Compiler traditional compiling]?===&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Control_flow control flow]? Loops? Conditional statements?===&lt;br /&gt;
&lt;br /&gt;
==Data encoding==&lt;br /&gt;
&lt;br /&gt;
===What is bit? Nibble? Byte? Word?===&lt;br /&gt;
Bit is a basic unit of information that can hold either True or False value (1 or 0).&lt;br /&gt;
&lt;br /&gt;
Nibble is half of an octet.&lt;br /&gt;
&lt;br /&gt;
Byte is a unit of eight bits. Comes from the number of bits used to encode a single character of text in a computer&lt;br /&gt;
&lt;br /&gt;
Word is a length of bits the processor-architecture can process in bits (8-bit, 32-bit etc)&lt;br /&gt;
&lt;br /&gt;
===Write 9375 in binary, hexadecimal?===&lt;br /&gt;
&lt;br /&gt;
===Write 0xDEADBEEF in decimal?===&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Quantization_%28signal_processing%29 quantization] in terms of signal processing?===&lt;br /&gt;
&lt;br /&gt;
===How are [https://en.wikipedia.org/wiki/Integer_%28computer_science%29 integers] stored in binary? What integer range can be described using n bits? How many bits are required to describe integer range from n .. m.===&lt;br /&gt;
&lt;br /&gt;
===How are [https://en.wikipedia.org/wiki/Single-precision_floating-point_format single precision] and [https://en.wikipedia.org/wiki/Double-precision_floating-point_format double precision] floating point numbers stored in binary according to [https://en.wikipedia.org/wiki/IEEE_floating_point IEEE754 standard]?===&lt;br /&gt;
[http://lauri.vosandi.com/hdl/arithmetic/floating-point-representation.html Floating-point multiplication]&lt;br /&gt;
&lt;br /&gt;
===What is the difference between CMYK and RGB color models? How are YUV, HSV and HSL colorspaces related to RGB? What are sRGB and YCbCr and where are they used?===&lt;br /&gt;
&lt;br /&gt;
===How is data encoded on audio CD-s? What is the [http://lauri.vosandi.com/2013/07/audio-codecs.html capacity of an audio CD]?===&lt;br /&gt;
&lt;br /&gt;
===What is sampling rate? What is bit depth? What is resolution?===&lt;br /&gt;
&lt;br /&gt;
===What is bitrate?===&lt;br /&gt;
&lt;br /&gt;
===What is lossy/lossless compression?===&lt;br /&gt;
&lt;br /&gt;
===What is JPEG suitable for? Is JPEG lossy or lossless compression method?===&lt;br /&gt;
&lt;br /&gt;
===What is PNG suitable for? Does PNG support compression?===&lt;br /&gt;
&lt;br /&gt;
===How are time domain and frequency domain related in terms of signal processing? What is Fourier transform and where it is applied?===&lt;br /&gt;
&lt;br /&gt;
==Code execution in processor==&lt;br /&gt;
&lt;br /&gt;
===Given ~10 instructions and their explainations, follow the instructions and elaborate after every step what happened in the processor?===&lt;br /&gt;
&lt;br /&gt;
==Microcontrollers==&lt;br /&gt;
&lt;br /&gt;
===What distinguishes microcontroller from microprocessor?===&lt;br /&gt;
&lt;br /&gt;
===What are the differences between Hardvard architecture and von Neumann architecture?===&lt;br /&gt;
&lt;br /&gt;
===What is an interrupt?===&lt;br /&gt;
&lt;br /&gt;
===What is an timer?===&lt;br /&gt;
&lt;br /&gt;
==Introduction to Boole algebra==&lt;br /&gt;
&lt;br /&gt;
===Simplify A AND A OR B===&lt;br /&gt;
&lt;br /&gt;
===Show addition of X and Y in binary===&lt;br /&gt;
&lt;br /&gt;
===Show subtraction of X and Y  in binary===&lt;br /&gt;
&lt;br /&gt;
===Show multiplication of X and Y in binary===&lt;br /&gt;
&lt;br /&gt;
==Hardware description languages==&lt;br /&gt;
&lt;br /&gt;
===What are the uses for hardware description languages?===&lt;br /&gt;
In electronics, a hardware description language (HDL) is a specialized computer language used to program the structure, design and operation of electronic circuits, and most commonly, digital logic circuits.&lt;br /&gt;
&lt;br /&gt;
A hardware description language enables a precise, formal description of an electronic circuit that allows for the automated analysis, simulation, and simulated testing of an electronic circuit. It also allows for the compilation of an HDL program into a lower level specification of physical electronic components, such as the set of masks used to create an integrated circuit.&lt;br /&gt;
&lt;br /&gt;
A hardware description language looks much like a programming language such as C; it is a textual description consisting of expressions, statements and control structures. One important difference between most programming languages and HDLs is that HDLs explicitly include the notion of time.&lt;br /&gt;
&lt;br /&gt;
===What is latch?===&lt;br /&gt;
A latch is an example of a bistable multivibrator, that is, a device with exactly two stable states. These states are high-output and low-output. A latch has a feedback path, so information can be retained by the device. Therefore latches can be memory devices, and can store one bit of data for as long as the device is powered. As the name suggests, latches are used to &amp;quot;latch onto&amp;quot; information and hold in place. Latches are very similar to flip-flops, but are not synchronous devices, and do not operate on clock edges as flip-flops do.&lt;br /&gt;
&lt;br /&gt;
===What is flip-flop?===&lt;br /&gt;
A flip-flop is a device very like a latch in that it is a bistable multivibrator, having two states and a feedback path that allows it to store a bit of information. The difference between a latch and a flip-flop is that a latch is asynchronous, and the outputs can change as soon as the inputs do (or at least after a small propagation delay). A flip-flop, on the other hand, is edge-triggered and only changes state when a control signal goes from high to low or low to high. This distinction is relatively recent and is not formal, with many authorities still referring to flip-flops as latches and vice versa, but it is a helpful distinction to make for the sake of clarity.&lt;br /&gt;
&lt;br /&gt;
There are several different types of flip-flop each with its own uses and peculiarities. The four main types of flip-flop are : SR, JK, D, and T.&lt;br /&gt;
&lt;br /&gt;
===What is mux (multiplexer)?===&lt;br /&gt;
A multiplexer (or mux) is a device that selects one of several analog or digital input signals and forwards the selected input into a single line.[1] A multiplexer of 2n inputs has n select lines, which are used to select which input line to send to the output.[2] Multiplexers are mainly used to increase the amount of data that can be sent over the network within a certain amount of time and bandwidth.[1] A multiplexer is also called a data selector.&lt;br /&gt;
&lt;br /&gt;
An electronic multiplexer makes it possible for several signals to share one device or resource, for example one A/D converter or one communication line, instead of having one device per input signal.&lt;br /&gt;
&lt;br /&gt;
===What is register? Register file?===&lt;br /&gt;
&#039;&#039;&#039;Registers&#039;&#039;&#039; are a special, high-speed storage area within the CPU. All data must be represented in a register before it can be processed. For example, if two numbers are to be multiplied, both numbers must be in registers, and the result is also placed in a register. A register may hold a computer instruction , a storage address, or any kind of data (such as a bit sequence or individual characters). A register must be large enough to hold an instruction - for example, in a 32-bit instruction computer, a register must be 32 bits in length. In some computer designs, there are smaller registers - for example, half-registers - for shorter instructions. Depending on the processor design and language rules, registers may be numbered or have arbitrary names.&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;register file&#039;&#039;&#039; is an array of processor registers in a central processing unit (CPU). Modern integrated circuit-based register files are usually implemented by way of fast static RAMs with multiple ports. Such RAMs are distinguished by having dedicated read and write ports, whereas ordinary multiported SRAMs will usually read and write through the same ports.&lt;br /&gt;
&lt;br /&gt;
The instruction set architecture of a CPU will almost always define a set of registers which are used to stage data between memory and the functional units on the chip. In simpler CPUs, these architectural registers correspond one-for-one to the entries in a physical register file within the CPU. More complicated CPUs use register renaming, so that the mapping of which physical entry stores a particular architectural register changes dynamically during execution. The register file is part of the architecture and visible to the programmer, as opposed to the concept of transparent caches.&lt;br /&gt;
&lt;br /&gt;
===What is ALU?===&lt;br /&gt;
An arithmetic logic unit (ALU) is a digital electronic circuit that performs arithmetic and bitwise logical operations on integer binary numbers. This is in contrast to a floating-point unit (FPU), which operates on floating point numbers. An ALU is a fundamental building block of many types of computing circuits, including the central processing unit (CPU) of computers, FPUs, and graphics processing units (GPUs). A single CPU, FPU or GPU may contain multiple ALUs.&lt;br /&gt;
&lt;br /&gt;
The inputs to an ALU are the data to be operated on, called operands, and a code indicating the operation to be performed; the ALU&#039;s output is the result of the performed operation. In many designs, the ALU also exchanges additional information with a status register, which relates to the result of the current or previous operations.&lt;br /&gt;
&lt;br /&gt;
===What is floating-point unit?===&lt;br /&gt;
A floating-point unit (FPU) is a part of a computer system specially designed to carry out operations on floating point numbers. Typical operations are addition, subtraction, multiplication, division, square root, and bitshifting. Some systems (particularly older, microcode-based architectures) can also perform various transcendental functions such as exponential or trigonometric calculations, though in most modern processors these are done with software library routines.&lt;br /&gt;
&lt;br /&gt;
In general purpose computer architectures, one or more FPUs may be integrated with the central processing unit; however many embedded processors do not have hardware support for floating-point operations.&lt;br /&gt;
&lt;br /&gt;
===What is a cache?===&lt;br /&gt;
Clearing Computer Cache. The cache (pronounced &amp;quot;cash&amp;quot;) is a space in your computer&#039;s hard drive and in RAM memory where your browser saves copies of previously visited Web pages. Your browser uses the cache like a short-term memory&lt;br /&gt;
&lt;br /&gt;
===What is a bus?===&lt;br /&gt;
&lt;br /&gt;
===Show the circuit diagram for A OR B AND C, NOT A AND B, &amp;lt;insert some other Boole formula here&amp;gt;?===&lt;br /&gt;
&lt;br /&gt;
===Show the truth table for &amp;lt;insert Boole formula here&amp;gt;?===&lt;br /&gt;
&lt;br /&gt;
===Write the equivalent Boole formula of a circuit diagram.===&lt;br /&gt;
&lt;br /&gt;
==Publishing work==&lt;br /&gt;
&lt;br /&gt;
===What are the major implications of MIT, BSD and GPL licenses?===&lt;br /&gt;
&lt;br /&gt;
===What are the differences between copyright, trademark, trade secret?===&lt;br /&gt;
“Intellectual property is something that is created by the mind.”  Typically, we think of ideas as being created by the mind – but intellectual property does not protect bare ideas: rather, it is the expression or symbolic power/recognizability of the ideas that are protected. &lt;br /&gt;
Thus, it is the design of the rocket that is patented, not the idea of a rocket.  It is the painting of the lake that is copyrighted, not the idea of a lake.  And it is the consumer recognizable logo that is trademarked, not the idea of a logo.  Intellectual property protects how we express and identify ideas in concrete ways – not the idea itself.&lt;br /&gt;
&lt;br /&gt;
In particular:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Patents&#039;&#039;&#039;: protect functional expressions of an idea – not the idea itself.  A machines, method/process, manufacture, compositions of matter, and improvements of any of these items can be patented.  Thus, I can patent a design for the nozzle on a rocket, or the method of making the rocket, or the method of making the rocket fuel, or the metal in which the rocket fuel is stored, or a new way of transporting the rocket fuel to the rocket.  But I cannot patent the broad “idea” of a rocket.&lt;br /&gt;
     &lt;br /&gt;
&#039;&#039;&#039;Copyrights&#039;&#039;&#039;: protect the specific creative expression of an idea through any medium of artistic/creative expression – i.e., paintings, photographs, sculpture, writings, software, etc.   A copyright protects your painting of a haystack, but it would not prohibit another painter from expressing their artistry or viewpoint by also painting a haystack. Likewise, while Ian Fleming was able to receive a copyright on his particular expression of the idea of a secret agent (i.e., a debonair English secret agent), he could not prevent Rich Wilkes from receiving a copyright on his expression of the idea of a secret agent (i.e., a tattooed bald extreme athlete turned reluctant secret agent).  &lt;br /&gt;
     &lt;br /&gt;
&#039;&#039;&#039;Trademarks&#039;&#039;&#039;: protect any symbol that indicates the source or origin of the goods or services to which it is affixed.  While a trademark can be extremely valuable to its owner, the ultimate purpose of a trademark is to protect consumers – that is, the function of a trademark is to inform the consumer where the goods or services originate.  The consumer, knowing the origin of the goods, can make purchasing decisions based on prior knowledge, reputation or marketing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Trade secret&#039;&#039;&#039;: is a formula, practice, process, design, instrument, pattern, commercial method, or compilation of information which is not generally known or reasonably ascertainable by others, and by which a business can obtain an economic advantage over competitors or customers.[&lt;br /&gt;
&lt;br /&gt;
While each category is distinct, a product (or components/aspects of a product) may fall into one or more of the categories.  For example, software can be protected by both patents and copyrights.  The copyright would protect the artistic expression of the idea – i.e., the code itself – while the patent would protect the functional expression of the idea – e.g., using a single click to purchase a book online.  Likewise, it is likely that the software company will use a trademark to indicate who made the software. &lt;br /&gt;
&lt;br /&gt;
An additional example would be a logo for a company.  The logo may serve as a trademark indicating that all products affixed with the logo are from the same source.  The creative and artistic aspects of the logo may also be protected by a copyright.&lt;br /&gt;
&lt;br /&gt;
===Where would you use waterfall software development model? Where would you use agile?===&lt;br /&gt;
&lt;br /&gt;
===What is the purpose of a version control system?===&lt;br /&gt;
&lt;br /&gt;
===What would you store in a version control system?===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Algorithms and data structures==&lt;br /&gt;
&lt;br /&gt;
===What is time complexity of algorithm?===&lt;br /&gt;
In computer science, the time complexity of an algorithm quantifies the amount of time taken by an algorithm to run as a function of the length of the string representing the input. Time complexity is commonly estimated by counting the number of elementary operations performed by the algorithm, where an elementary operation takes a fixed amount of time to perform.&lt;br /&gt;
&lt;br /&gt;
===What is space complexity of algorithm?===&lt;br /&gt;
Space complexity is a measure of the amount of working storage an algorithm needs. That means how much memory, in the worst case, is needed at any point in the algorithm.&lt;br /&gt;
It represents the total amount of memory space that a &amp;quot;normal&amp;quot; physical computer would need to solve a given computational problem with a given algorithm.&lt;br /&gt;
&lt;br /&gt;
===What&#039;s a good algorithm?===&lt;br /&gt;
It executes as fast as possible.&lt;br /&gt;
It takes as less space as possible.&lt;br /&gt;
It is adaptable to computers.&lt;br /&gt;
It is simple.&lt;br /&gt;
It is elegant (well written).&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Moore&#039;s_law Moore&#039;s law]? What is [https://en.wikipedia.org/wiki/Rock&#039;s_law Rock&#039;s law]?===&lt;br /&gt;
Moore&#039;s law is the observation that the number of transistors in a dense integrated circuit doubles approximately every two years. The observation is named after Gordon E. Moore, the co-founder of Intel and Fairchild Semiconductor, whose 1965 paper described a doubling every year in the number of components per integrated circuit, and projected this rate of growth would continue for at least another decade. In 1975, looking forward to the next decade, he revised the forecast to doubling every two years.&lt;br /&gt;
Rock&#039;s law or Moore&#039;s second law, named for Arthur Rock or Gordon Moore, says that the cost of a semiconductor chip fabrication plant doubles every four years. As of 2015, the price had already reached about 14 billion US dollars.&lt;br /&gt;
&lt;br /&gt;
===What were the major contributing factors for success of Microsoft, Apple, Google, &amp;lt;your favourite company&amp;gt;?===&lt;br /&gt;
&lt;br /&gt;
===What were the major contributing factors to the success of Silicon Valley?===&lt;/div&gt;</summary>
		<author><name>Smets</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Exam_help&amp;diff=100284</id>
		<title>Exam help</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Exam_help&amp;diff=100284"/>
		<updated>2016-01-11T17:04:30Z</updated>

		<summary type="html">&lt;p&gt;Smets: /* Explain step by step how operating system is booted up, see slides for flowchart. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Computer hardware==&lt;br /&gt;
&lt;br /&gt;
=== Different buses and their uses===&lt;br /&gt;
In computer architecture, a bus is a communication system that transfers data between components inside a computer, or between computers. This expression covers all related hardware components (wire, optical fiber, etc.) and software, including communication protocols.&lt;br /&gt;
&lt;br /&gt;
The internal bus, also known as internal data bus, memory bus, system bus or Front-Side-Bus, connects all the internal components of a computer, such as CPU and memory, to the motherboard. Internal data buses are also referred to as a local bus, because they are intended to connect to local devices. This bus is typically rather quick and is independent of the rest of the computer operations.&lt;br /&gt;
&lt;br /&gt;
The external bus, or expansion bus, is made up of the electronic pathways that connect the different external devices, such as printer etc., to the computer.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Types and uses:&#039;&#039;&#039;&lt;br /&gt;
;USB&lt;br /&gt;
:Universal Serial Bus. Designed for: input devices, digital cameras, printers, media players...&lt;br /&gt;
&lt;br /&gt;
;Serial ATA&lt;br /&gt;
:Used by internal storage devices (hard disk). They replace the old ATA connectors.&lt;br /&gt;
&lt;br /&gt;
;PCI&lt;br /&gt;
:Peripheral Component Interconnect, is a local computer bus for attaching hardware devices in a computer. Attached devices can take either the form of an integrated circuit fitted onto the motherboard itself or an expansion card that fits into a slot. Typical PCI cards used in PCs include: network cards, sound cards, modems, extra ports such as USB or serial, TV tuner cards and disk controllers.&lt;br /&gt;
&lt;br /&gt;
;PCI Express&lt;br /&gt;
:Peripheral Component Interconnect Express (also called PCIe), is a high-speed serial computer expansion bus standard designed to replace the older PCI, PCI-X, and AGP bus standards. PCIe has numerous improvements over the older standards, including higher maximum system bus throughput, lower I/O pin count and smaller physical footprint, better performance scaling for bus devices, a more detailed error detection and reporting mechanism, and native hot-plug functionality. More recent revisions of the PCIe standard provide hardware support for I/O virtualization.&lt;br /&gt;
&lt;br /&gt;
;Mini PCIe&lt;br /&gt;
:It is based on PCI Express technoogy. Main point is its small size and its large variety of connectors makes it used for USB2.0 cards, SIM card, Wifi and Bluetooth cards, 3G and GPS cards.&lt;br /&gt;
&lt;br /&gt;
;ExpressCard&lt;br /&gt;
:It is an interface to connect peripheral devices to a computer, usually a laptop computer. ExpressCards can connect a variety of devices to a computer including mobile broadband modems, IEEE 1394 (FireWire) connectors, USB connectors, Ethernet network ports, Serial ATA storage devices, solid-state drives, external enclosures for desktop-size PCI Express graphics cards and other peripheral devices, wireless network interface controllers (NIC), TV tuner cards, Common Access Card (CAC) readers, and sound cards.&lt;br /&gt;
&lt;br /&gt;
===What are the differences between hard disk drive (HDD) and solid state drive (SSD)?=== &lt;br /&gt;
The traditional spinning hard drive (HDD) is the basic nonvolatile storage on a computer. Hard drives are essentially metal platters with a magnetic coating which stores the data. A read/write head on an arm accesses the data while the platters are spinning in a hard drive enclosure.&lt;br /&gt;
An SSD does same jobas an HDD, but instead of a magnetic coating on top of platters, the data is stored on interconnected flash memory chips that retain the data even when there&#039;s no power present. HDDs have spinning plates with magnetic coating, while SSDs have no moving parts and instead are using flash memory.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribute&lt;br /&gt;
!SSD (Solid State Drive)&lt;br /&gt;
!HDD (Hard Disk Drive)&lt;br /&gt;
|-&lt;br /&gt;
|Power Draw / Battery Life 	&lt;br /&gt;
|Less power draw, averages 2 – 3 watts, resulting in 30+ minute battery boost 	&lt;br /&gt;
|More power draw, averages 6 – 7 watts and therefore uses more battery&lt;br /&gt;
|-&lt;br /&gt;
|Cost 	&lt;br /&gt;
|Expensive, roughly $0.10 per gigabyte (based on buying a 1TB drive)&lt;br /&gt;
|Only around $0.06 per gigabyte, very cheap (buying a 4TB model)&lt;br /&gt;
|-&lt;br /&gt;
|Capacity 	&lt;br /&gt;
|Typically not larger than 1TB for notebook size drives; 1TB max for desktops 	&lt;br /&gt;
|Typically around 500GB and 2TB maximum for notebook size drives; 6TB max for desktops&lt;br /&gt;
|-&lt;br /&gt;
|Operating System Boot Time 	&lt;br /&gt;
|Around 10-13 seconds average bootup time 	&lt;br /&gt;
|Around 30-40 seconds average bootup time&lt;br /&gt;
|-&lt;br /&gt;
|Noise 	&lt;br /&gt;
|There are no moving parts and as such no sound 	&lt;br /&gt;
|Audible clicks and spinning can be heard&lt;br /&gt;
|-&lt;br /&gt;
|Vibration 	&lt;br /&gt;
|No vibration as there are no moving parts 	&lt;br /&gt;
|The spinning of the platters can sometimes result in vibration&lt;br /&gt;
|-&lt;br /&gt;
|Heat Produced 	&lt;br /&gt;
|Lower power draw and no moving parts so little heat is produced 	&lt;br /&gt;
|HDD doesn’t produce much heat, but it will have a measurable amount more heat than an SSD due to moving parts and higher power draw&lt;br /&gt;
|-&lt;br /&gt;
|Failure Rate 	&lt;br /&gt;
|Mean time between failure rate of 2.0 million hours 	&lt;br /&gt;
|Mean time between failure rate of 1.5 million hours&lt;br /&gt;
|-&lt;br /&gt;
|File Copy / Write Speed 	&lt;br /&gt;
|Generally above 200 MB/s and up to 550 MB/s for cutting edge drives 	&lt;br /&gt;
|The range can be anywhere from 50 – 120MB / s&lt;br /&gt;
|-&lt;br /&gt;
|Encryption 	&lt;br /&gt;
|Full Disk Encryption (FDE) Supported on some models 	&lt;br /&gt;
|Full Disk Encryption (FDE) Supported on some models&lt;br /&gt;
|-&lt;br /&gt;
|File Opening Speed 	&lt;br /&gt;
|Up to 30% faster than HDD 	&lt;br /&gt;
|Slower than SSD&lt;br /&gt;
|-&lt;br /&gt;
|Magnetism Affected? 	&lt;br /&gt;
|An SSD is safe from any effects of magnetism 	&lt;br /&gt;
|Magnets can erase data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===What is the purpose of Flash Translation Layer in terms of solid state drives?===&lt;br /&gt;
Flash drives have limited lifespan due to write cycles (or rather program-erase (PE) cycles) and to exhaust the drive equally, FTL layer is utilised.&lt;br /&gt;
&lt;br /&gt;
Although presenting an array of Logical Block Addresses (LBA) makes sense for HDDs as their sectors can be overwritten, it is not fully suited to the way flash memory works. For this reason, an additional component is required to hide the inner characteristics of NAND flash memory and expose only an array of LBAs to the host. This component is called the Flash Translation Layer (FTL), and resides in the SSD controller. The FTL is critical and has three main purposes: logical block mapping, wear leveling and garbage collection.&lt;br /&gt;
&lt;br /&gt;
The logical block mapping translates logical block addresses (LBAs) from the host space into physical block addresses (PBAs) in the physical NAND-flash memory space. This mapping takes the form of a table, which for any LBA gives the corresponding PBA.&lt;br /&gt;
&lt;br /&gt;
Wear leveling (also written as wear levelling) is a technique[1] for prolonging the service life of some kinds of erasable computer storage media, such as flash memory (used in solid-state drives (SSDs) and USB flash drives).&lt;br /&gt;
&lt;br /&gt;
The garbage collection process in the SSD controller ensures that “stale” pages are erased and restored into a “free” state so that the incoming write commands can be processed. If the data in a page has to be updated, the new version is written to a free page, and the page containing the previous version is marked as stale. When blocks contain stale pages, they need to be erased before they can be written to.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===What are difference between volatile/non-volatile, RAM, ROM, EEPROM and where are they used?===&lt;br /&gt;
&lt;br /&gt;
Volatile = does not hold data after power off.&lt;br /&gt;
Non-volatile = holds data even after power off.&lt;br /&gt;
&lt;br /&gt;
Random Access Memory or RAM is a form of data storage that can be accessed randomly at any time, in any order and from any physical location., allowing quick access and manipulation. RAM allows the computer to read data quickly to run applications. It allows reading and writing. It is volatile.&lt;br /&gt;
&lt;br /&gt;
Read-only memory or ROM is also a form of data storage that can not be easily altered or reprogrammed.Stores instuctions that are not nescesary for re-booting up to make the computer operate when it is switched off.They are hardwired. ROM stores the program required to initially boot the computer. It only allows reading. It is non-volatile.&lt;br /&gt;
&lt;br /&gt;
EEPROM (electrically erasable programmable read-only memory) is user-modifiable read-only memory (ROM) that can be erased and reprogrammed. Unlike EPROM chips, EEPROMs do not need to be removed from the computer to be modified. However, an EEPROM chip has to be erased and reprogrammed in its entirety, not selectively. It also has a limited life - that is, the number of times it can be reprogrammed is limited to tens or hundreds of thousands of times. BIOS of PCs are usually written to EEPROM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===What is data retention?===&lt;br /&gt;
It is how long a device can hold data before it becomes unreadable.&lt;br /&gt;
&lt;br /&gt;
===What are difference between asynchronous/synchronous, dynamic/static RAM and where are they used?===&lt;br /&gt;
The two main forms of modern RAM are static RAM (SRAM) and dynamic RAM (DRAM). In SRAM, a bit of data is stored using the state of a six transistor memory cell. This form of RAM is more expensive to produce, but is generally faster and requires less power than DRAM and, in modern computers, is often used as cache memory for the CPU. DRAM stores a bit of data using a transistor and capacitor pair, which together comprise a DRAM memory cell. The capacitor holds a high or low charge (1 or 0, respectively), and the transistor acts as a switch that lets the control circuitry on the chip read the capacitor&#039;s state of charge or change it. As this form of memory is less expensive to produce than static RAM, it is the predominant form of computer memory used in modern computers.&lt;br /&gt;
Dynamic RAM is used to create larger RAM space system, where Static RAM create speed- sensitive cache.&lt;br /&gt;
Dynamic RAM consumes less power than Static RAM.&lt;br /&gt;
&lt;br /&gt;
Asynchronous refers to the fact that the memory is not synchronized to the system clock. A memory access is begun, and a certain period of time later the memory value appears on the bus. The signals are not coordinated with the system clock at all, as described in the section discussing memory access. Asynchronous memory works fine in lower-speed memory bus systems but is not nearly as suitable for use in high-speed (&amp;gt;66 MHz) memory systems.&lt;br /&gt;
A newer type of DRAM, called &amp;quot;synchronous DRAM&amp;quot; or &amp;quot;SDRAM&amp;quot;, is synchronized to the system clock; all signals are tied to the clock so timing is much tighter and better controlled. This type of memory is much faster than asynchronous DRAM and can be used to improve the performance of the system. It is more suitable to the higher-speed memory systems of the newest PCs.&lt;br /&gt;
&lt;br /&gt;
===What is [https://compsci2014.wikispaces.com/2.1.3+Explain+the+use+of+cache+memory cache]? What is cache coherence?===&lt;br /&gt;
&lt;br /&gt;
Cache memory is used to reduce the average memory access times. This is done by storing the data that is frequently accessed in main memory addresses therefore allowing the CPU to access the data faster. This is due to the fact that cache memory can be read a lot faster than main memory.&lt;br /&gt;
 &lt;br /&gt;
Cache coherence is the consistency of shared resource data that ends up stored in multiple local caches. When clients in a system maintain caches of a common memory resource, problems may arise with inconsistent data, which is particularly the case with CPUs in a multiprocessing system.&lt;br /&gt;
&lt;br /&gt;
===What are differences between resistive and capacitive touchscreen?=== &lt;br /&gt;
Resistive touchscreen needs pressure to work by connecting to sheets of plastic and thus conducting electricity. Capacitive touchscreen works by conducting electricity from user&#039;s finger.&lt;br /&gt;
&lt;br /&gt;
Resistive touchscreens rely on the pressure of your fingertip—or any other object—to register input. They consist of two flexible layers with an air gap in-between. In order for the touchscreen to register input, you must press on the top layer using a small amount of pressure, in order to depress the top layer enough to make contact with the bottom layer. The touchscreen will then register the precise location of the touch. You can use anything you want on a resistive touchscreen to make the touch interface work; a gloved finger, a wooden rod, a fingernail – anything that creates enough pressure on the point of impact will activate the mechanism and the touch will be registered.&lt;br /&gt;
&lt;br /&gt;
Capacitive touchscreens instead sense conductivity to register input—usually from the skin on your fingertip. Because you don’t need to apply pressure, capacitive touchscreens are more responsive than resistive touchscreens. However, because they work by sensing conductivity, capacitive touchscreens can only be used with objects that have conductive properties, which includes your fingertip (which is most ideal), and special styluses designed with a conductive tip. This is the reason you cannot use a capacitive screen while wearing gloves – the gloves are not conductive, and the touch does not cause any change in the electrostatic field.&lt;br /&gt;
&lt;br /&gt;
[http://www.alphr.com/realworld/357325/capacitive-or-resistive-whats-the-best-type-of-touchscreen In-depth comparison of two]&lt;br /&gt;
&lt;br /&gt;
===Explain how [http://www.bidouille.org/hack/mousecam computer mouse] works?===&lt;br /&gt;
An optical computer mouse uses a light source, typically an LED, and a light detector, such as an array of photodiodes, to detect movement relative to a surface.&lt;br /&gt;
Modern surface-independent optical mice work by using an optoelectronic sensor (essentially, a tiny low-resolution video camera) to take successive images of the surface on which the mouse operates.&lt;br /&gt;
The technology underlying the modern optical computer mouse is known as digital image correlation.&lt;br /&gt;
To understand how optical mice work, imagine two photographs of the same object except slightly offset from each other. Place both photographs on a light table to make them transparent, and slide one across the other until their images line up. The amount that the edges of one photograph overhang the other represents the offset between the images, and in the case of an optical computer mouse the distance it has moved.&lt;br /&gt;
Optical mice capture one thousand successive images or more per second. Depending on how fast the mouse is moving, each image will be offset from the previous one by a fraction of a pixel or as many as several pixels. Optical mice mathematically process these images using cross correlation to calculate how much each successive image is offset from the previous one.&lt;br /&gt;
[http://www.topdesignmag.com/mouse-history-in-photos/ History of computer mouse].&lt;br /&gt;
&lt;br /&gt;
===Explain how [http://www.daskeyboard.com/blog/typing-through-time-the-history-of-the-keyboard/ computer keyboard] works?===&lt;br /&gt;
[http://computer.howstuffworks.com/keyboard.htm HowStuffworks article] [http://www.explainthatstuff.com/computerkeyboards.html Explain that Stuff article] [http://www.daskeyboard.com/blog/typing-through-time-the-history-of-the-keyboard/ Keyboard History]&lt;br /&gt;
&lt;br /&gt;
===Explain how [https://en.wikipedia.org/wiki/Cathode_ray_tube cathode ray tube] (CRT) based screen technology works and name pros/cons.===&lt;br /&gt;
[https://www.youtube.com/watch?v=2czqYV3T_Kc]&lt;br /&gt;
The cathode ray tube (CRT) is a vacuum tube containing one or more electron guns, and a phosphorescent screen used to, It has a means to accelerate and deflect the electron beam(s) onto the screen to create the images. The images may represent electrical waveforms (oscilloscope), pictures (television, computer monitor), radar targets or others. CRTs have also been used as memory devices, in which case the visible light emitted from the fluorescent material (if any) is not intended to have significant meaning to a visual observer (though the visible pattern on the tube face may cryptically represent the stored data).&lt;br /&gt;
&lt;br /&gt;
The CRT uses an evacuated glass envelope which is large, deep (i.e. long from front screen face to rear end), fairly heavy, and relatively fragile. As a matter of safety, the face is typically made of thick lead glass so as to be highly shatter-resistant and to block most X-ray emissions, particularly if the CRT is used in a consumer product.&lt;br /&gt;
&lt;br /&gt;
===Explain how [https://en.wikipedia.org/wiki/Liquid-crystal_display liquid crystal displays] (LCD) work and name pros/cons.===&lt;br /&gt;
[https://www.youtube.com/watch?v=nCHgmCxGEzY]&lt;br /&gt;
&lt;br /&gt;
===Name screen technologies making use of thin film transistor (TFT) technology?===&lt;br /&gt;
[https://en.wikipedia.org/wiki/Thin-film_transistor]&lt;br /&gt;
&lt;br /&gt;
===Name uses for light polarization filters?===&lt;br /&gt;
A polarizer or polariser is an optical filter that passes light of a specific polarization and blocks waves of other polarizations. It can convert a beam of light of undefined or mixed polarization into a beam with well-defined polarization, polarized light. Polarizers are used in many optical techniques and instruments, and polarizing filters find applications in photography, liquid crystal display technology and 3D watching. Polarizers can also be made for other types of electromagnetic waves besides light, such as radio waves, microwaves, and X-rays.&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/Polarizing_filter_%28photography%29 Polarizer photo] [https://en.wikipedia.org/wiki/Polarized_3D_system Polarizer 3D]&lt;br /&gt;
&lt;br /&gt;
===What are the benefits of [https://en.wikipedia.org/wiki/Twisted_pair twisted pair cabling] and [https://en.wikipedia.org/wiki/Differential_signaling differential signalling]?===&lt;br /&gt;
&#039;&#039;&#039;Twisted pair&#039;&#039;&#039; cabling is a type of wiring in which two conductors of a single circuit are twisted together for the purposes of canceling out electromagnetic interference (EMI) from external sources; for instance, electromagnetic radiation from unshielded twisted pair (UTP) cables, and crosstalk between neighboring pairs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Differential signaling&#039;&#039;&#039; is a method for electrically transmitting information using two complementary signals. The technique sends the same electrical signal as a differential pair of signals, each in its own conductor. The pair of conductors can be wires (typically twisted together) or traces on a circuit board. The receiving circuit responds to the electrical difference between the two signals, rather than the difference between a single wire and ground. Since the receiving circuit only detects the difference between the wires, the technique resists electromagnetic noise compared to one conductor with an un-paired reference (ground). The technique works for both analog signaling and digital signaling.&lt;br /&gt;
&lt;br /&gt;
===[https://en.wikipedia.org/wiki/Active_matrix Active matrix] vs [https://en.wikipedia.org/wiki/Passive_matrix_addressing passive matrix] in display technology===&lt;br /&gt;
Active-matrix display : An active-matrix display, also known as a TFT (thin-film transistor) display, uses a separate transistor to apply charges to each liquid crystal cell and thus displays high-quality color that is viewable from all angles.&lt;br /&gt;
&lt;br /&gt;
Passive-matrix display : A passive-matrix display uses fewer transistors, requires less power, and is less expensive than an active-matrix display. The color on a passive-matrix display often is not as bright as an active-matrix display. Users view images on a passive-matrix display best when working directly in front of it.&lt;br /&gt;
&lt;br /&gt;
==Storage abstractions==&lt;br /&gt;
&lt;br /&gt;
===What is a [https://en.wikipedia.org/wiki/Block_%28data_storage%29 block device]?===&lt;br /&gt;
In computing (specifically data transmission and data storage), a block, sometimes called a physical record, is a sequence of bytes or bits, usually containing some whole number of records, having a maximum length, a block size.Data thus structured are said to be blocked. The process of putting data into blocks is called blocking. Most file systems are based on a block device, which is a level of abstraction for the hardware responsible for storing and retrieving specified blocks of data&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Logical_block_addressing logical block addressing] and what are the benefits compared to older [https://en.wikipedia.org/wiki/Cylinder-head-sector cylinder-head-sector addressing] method in terms of harddisks?===&lt;br /&gt;
Logical block addressing (LBA) is a common scheme used for specifying the location of blocks of data stored on computer storage devices, generally secondary storage systems such as hard disk drives. LBA is a particularly simple linear addressing scheme; blocks are located by an integer index, with the first block being LBA 0, the second LBA 1, and so on. &lt;br /&gt;
&lt;br /&gt;
Cylinder-head-sector, also known as CHS, is an early method for giving addresses to each physical block of data on a hard disk drive. CHS addressing is the process of identifying individual sectors on a disk by their position in a track, where the track is determined by the head and cylinder numbers.&lt;br /&gt;
&lt;br /&gt;
LBA allows a maximum addressing capacity of 2TB although CHS allows 8GB&lt;br /&gt;
&lt;br /&gt;
===What is a [https://en.wikipedia.org/wiki/Disk_partitioning disk partition]?===&lt;br /&gt;
Disk partitioning is the creation of one or more regions on a hard disk or other secondary storage, so that an operating system can manage information in each region separately. Partitioning is typically the first step of preparing a newly manufactured disk, before any files or directories have been created. The disk stores the information about the partitions&#039; locations and sizes in an area known as the partition table that the operating system reads before any other part of the disk. Each partition then appears in the operating system as a distinct &amp;quot;logical&amp;quot; disk that uses part of the actual disk.&lt;br /&gt;
&lt;br /&gt;
===What is a [https://en.wikipedia.org/wiki/File_system file system]?===&lt;br /&gt;
In computing, a file system (or filesystem) is used to control how data is stored and retrieved. Without a file system, information placed in a storage area would be one large body of data with no way to tell where one piece of information stops and the next begins. By separating the data into individual pieces, and giving each piece a name, the information is easily separated and identified. Taking its name from the way paper-based information systems are named, each group of data is called a &amp;quot;file&amp;quot;. The structure and logic rules used to manage the groups of information and their names is called a &amp;quot;file system&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Journaling_file_system#Write_hazards journaling] in terms of filesystems and what are the benefits? Name some journaled file systems in use nowadays.===&lt;br /&gt;
A journaling file system is a file system that keeps track of changes not yet committed to the file system&#039;s main part by recording the intentions of such changes in a data structure known as a &amp;quot;journal&amp;quot;, which is usually a circular log. In the event of a system crash or power failure, such file systems can be brought back online quicker with lower likelihood of becoming corrupted.&lt;br /&gt;
&lt;br /&gt;
Depending on the actual implementation, a journaling file system may only keep track of stored metadata, resulting in improved performance at the expense of increased possibility for data corruption. Alternatively, a journaling file system may track both stored data and related metadata, while some implementations allow selectable behavior in this regard&lt;br /&gt;
&lt;br /&gt;
==Bootloaders, kernels==&lt;br /&gt;
&lt;br /&gt;
===What is the role of BIOS/UEFI in x86-based machines?===&lt;br /&gt;
BIOS (Basic Input/Output System) performs during boot up process of a computer and prepares it for the OS and its&#039; programs.&lt;br /&gt;
&lt;br /&gt;
UEFI (Unified Extensible Firmware Interface) is a replacement for BIOS. It offers several advantages over previous firmware interface, like: &lt;br /&gt;
* Ability to boot from large disks (over 2 TB) with a GUID Partition Table (GPT)&lt;br /&gt;
* CPU-independent architecture&lt;br /&gt;
* CPU-independent drivers&lt;br /&gt;
* Flexible pre-OS environment, including network capability&lt;br /&gt;
* Modular design&lt;br /&gt;
&lt;br /&gt;
===Explain step by step how operating system is booted up, see slides for flowchart.===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. The first thing a computer has to do when it is turned on is start up a special program called an operating system. That process is called booting. The instructions for booting are built into BIOS (Basic input/output system).&lt;br /&gt;
&lt;br /&gt;
2. The BIOS will tell your computer to look into the boot disk (usually the lowest-numbered hard disk) for a boot loader and the boot loader will be pulled into memory and will be started.&lt;br /&gt;
 &lt;br /&gt;
3. The boot loader&#039;s job is to start the real operating system and it does it by looking for a kernel, loading it into memory and  starting it. &lt;br /&gt;
&lt;br /&gt;
5. Once the kernel starts, it has to look around to find the rest of the hardware and get ready to run programs ( It does this by poking not at ordinary memory locations but rather at I/O ports — special bus addresses that are likely to have device controller cards listening at them for commands). The kernel doesn&#039;t poke at random; it has a lot of built-in knowledge about what it&#039;s likely to find where, and how controllers will respond if they&#039;re present. This process is called autoprobing.&lt;br /&gt;
&lt;br /&gt;
6. After the kernel is up and running, it&#039;s the end of first stage. After the first stage, the kernel hands control to a special program called &amp;quot;init&amp;quot; which spawns housekeeping processes. The init&#039;s process&#039;s first task is to look that your hard disks are okay &lt;br /&gt;
&lt;br /&gt;
7. Init&#039;s next step is to start several daemons. A daemon is a program like a print spooler, a mail listener or a WWW server that lurks in the background, waiting for things to do. These special programs often have to coordinate several requests that could conflict. They are daemons because it&#039;s often easier to write one program that runs constantly and knows about all requests than it would be to try to make sure that a flock of copies (each processing one request and all running at the same time) don&#039;t step on each other.&lt;br /&gt;
&lt;br /&gt;
8. The next step is to prepare for users. Init starts a copy of a program called getty to watch your screen and keyboard (and maybe more copies to watch dial-in serial ports).&lt;br /&gt;
&lt;br /&gt;
9. The next step is to start up various daemons that support networking and other services. The most important of these is your X server. X is a daemon that manages your display, keyboard, and mouse. Its main job is to produce the color pixel graphics you normally see on your screen.&lt;br /&gt;
&lt;br /&gt;
10. When the X server comes up, during the last part of your machine&#039;s boot process, it effectively takes over the hardware from whatever virtual console was previously in control. That&#039;s when you&#039;ll see a graphical login screen, produced for you by a program called a display manager.&lt;br /&gt;
&lt;br /&gt;
===BIOS===&lt;br /&gt;
=Basic input and output system&lt;br /&gt;
Located at memory location 0xFFFF0&lt;br /&gt;
bo&lt;br /&gt;
&lt;br /&gt;
===Describe the functionality provided by general purpose operating system.===&lt;br /&gt;
See architecture of [https://en.wikipedia.org/wiki/Architecture_of_Windows_NT Windows NT], [http://www.elinux.org/Android_Architecture Android], [https://en.wikipedia.org/wiki/Architecture_of_OS_X OS X].&lt;br /&gt;
&lt;br /&gt;
===What are the main differences between [https://en.wikipedia.org/wiki/Real_mode real mode] and [https://en.wikipedia.org/wiki/Protected_mode protected mode] of x86-based processor?===&lt;br /&gt;
&lt;br /&gt;
===What happens during context switch?===&lt;br /&gt;
&lt;br /&gt;
===What is the purpose of [https://en.wikipedia.org/wiki/Virtual_memory paged virtual memory]?===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Libraries, frameworks==&lt;br /&gt;
&lt;br /&gt;
==Programming languages==&lt;br /&gt;
&lt;br /&gt;
===What are the major steps of compilation?===&lt;br /&gt;
===What are the differences between [https://en.wikipedia.org/wiki/Interpreted_language interpreted], [https://en.wikipedia.org/wiki/Just-in-time_compilation JIT-compilation] and [https://en.wikipedia.org/wiki/Compiler traditional compiling]?===&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Control_flow control flow]? Loops? Conditional statements?===&lt;br /&gt;
&lt;br /&gt;
==Data encoding==&lt;br /&gt;
&lt;br /&gt;
===What is bit? Nibble? Byte? Word?===&lt;br /&gt;
Bit is a basic unit of information that can hold either True or False value (1 or 0).&lt;br /&gt;
&lt;br /&gt;
Nibble is half of an octet.&lt;br /&gt;
&lt;br /&gt;
Byte is a unit of eight bits. Comes from the number of bits used to encode a single character of text in a computer&lt;br /&gt;
&lt;br /&gt;
Word is a length of bits the processor-architecture can process in bits (8-bit, 32-bit etc)&lt;br /&gt;
&lt;br /&gt;
===Write 9375 in binary, hexadecimal?===&lt;br /&gt;
&lt;br /&gt;
===Write 0xDEADBEEF in decimal?===&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Quantization_%28signal_processing%29 quantization] in terms of signal processing?===&lt;br /&gt;
&lt;br /&gt;
===How are [https://en.wikipedia.org/wiki/Integer_%28computer_science%29 integers] stored in binary? What integer range can be described using n bits? How many bits are required to describe integer range from n .. m.===&lt;br /&gt;
&lt;br /&gt;
===How are [https://en.wikipedia.org/wiki/Single-precision_floating-point_format single precision] and [https://en.wikipedia.org/wiki/Double-precision_floating-point_format double precision] floating point numbers stored in binary according to [https://en.wikipedia.org/wiki/IEEE_floating_point IEEE754 standard]?===&lt;br /&gt;
[http://lauri.vosandi.com/hdl/arithmetic/floating-point-representation.html Floating-point multiplication]&lt;br /&gt;
&lt;br /&gt;
===What is the difference between CMYK and RGB color models? How are YUV, HSV and HSL colorspaces related to RGB? What are sRGB and YCbCr and where are they used?===&lt;br /&gt;
&lt;br /&gt;
===How is data encoded on audio CD-s? What is the [http://lauri.vosandi.com/2013/07/audio-codecs.html capacity of an audio CD]?===&lt;br /&gt;
&lt;br /&gt;
===What is sampling rate? What is bit depth? What is resolution?===&lt;br /&gt;
&lt;br /&gt;
===What is bitrate?===&lt;br /&gt;
&lt;br /&gt;
===What is lossy/lossless compression?===&lt;br /&gt;
&lt;br /&gt;
===What is JPEG suitable for? Is JPEG lossy or lossless compression method?===&lt;br /&gt;
&lt;br /&gt;
===What is PNG suitable for? Does PNG support compression?===&lt;br /&gt;
&lt;br /&gt;
===How are time domain and frequency domain related in terms of signal processing? What is Fourier transform and where it is applied?===&lt;br /&gt;
&lt;br /&gt;
==Code execution in processor==&lt;br /&gt;
&lt;br /&gt;
===Given ~10 instructions and their explainations, follow the instructions and elaborate after every step what happened in the processor?===&lt;br /&gt;
&lt;br /&gt;
==Microcontrollers==&lt;br /&gt;
&lt;br /&gt;
===What distinguishes microcontroller from microprocessor?===&lt;br /&gt;
&lt;br /&gt;
===What are the differences between Hardvard architecture and von Neumann architecture?===&lt;br /&gt;
&lt;br /&gt;
===What is an interrupt?===&lt;br /&gt;
&lt;br /&gt;
===What is an timer?===&lt;br /&gt;
&lt;br /&gt;
==Introduction to Boole algebra==&lt;br /&gt;
&lt;br /&gt;
===Simplify A AND A OR B===&lt;br /&gt;
&lt;br /&gt;
===Show addition of X and Y in binary===&lt;br /&gt;
&lt;br /&gt;
===Show subtraction of X and Y  in binary===&lt;br /&gt;
&lt;br /&gt;
===Show multiplication of X and Y in binary===&lt;br /&gt;
&lt;br /&gt;
==Hardware description languages==&lt;br /&gt;
&lt;br /&gt;
===What are the uses for hardware description languages?===&lt;br /&gt;
In electronics, a hardware description language (HDL) is a specialized computer language used to program the structure, design and operation of electronic circuits, and most commonly, digital logic circuits.&lt;br /&gt;
&lt;br /&gt;
A hardware description language enables a precise, formal description of an electronic circuit that allows for the automated analysis, simulation, and simulated testing of an electronic circuit. It also allows for the compilation of an HDL program into a lower level specification of physical electronic components, such as the set of masks used to create an integrated circuit.&lt;br /&gt;
&lt;br /&gt;
A hardware description language looks much like a programming language such as C; it is a textual description consisting of expressions, statements and control structures. One important difference between most programming languages and HDLs is that HDLs explicitly include the notion of time.&lt;br /&gt;
&lt;br /&gt;
===What is latch?===&lt;br /&gt;
A latch is an example of a bistable multivibrator, that is, a device with exactly two stable states. These states are high-output and low-output. A latch has a feedback path, so information can be retained by the device. Therefore latches can be memory devices, and can store one bit of data for as long as the device is powered. As the name suggests, latches are used to &amp;quot;latch onto&amp;quot; information and hold in place. Latches are very similar to flip-flops, but are not synchronous devices, and do not operate on clock edges as flip-flops do.&lt;br /&gt;
&lt;br /&gt;
===What is flip-flop?===&lt;br /&gt;
A flip-flop is a device very like a latch in that it is a bistable multivibrator, having two states and a feedback path that allows it to store a bit of information. The difference between a latch and a flip-flop is that a latch is asynchronous, and the outputs can change as soon as the inputs do (or at least after a small propagation delay). A flip-flop, on the other hand, is edge-triggered and only changes state when a control signal goes from high to low or low to high. This distinction is relatively recent and is not formal, with many authorities still referring to flip-flops as latches and vice versa, but it is a helpful distinction to make for the sake of clarity.&lt;br /&gt;
&lt;br /&gt;
There are several different types of flip-flop each with its own uses and peculiarities. The four main types of flip-flop are : SR, JK, D, and T.&lt;br /&gt;
&lt;br /&gt;
===What is mux (multiplexer)?===&lt;br /&gt;
A multiplexer (or mux) is a device that selects one of several analog or digital input signals and forwards the selected input into a single line.[1] A multiplexer of 2n inputs has n select lines, which are used to select which input line to send to the output.[2] Multiplexers are mainly used to increase the amount of data that can be sent over the network within a certain amount of time and bandwidth.[1] A multiplexer is also called a data selector.&lt;br /&gt;
&lt;br /&gt;
An electronic multiplexer makes it possible for several signals to share one device or resource, for example one A/D converter or one communication line, instead of having one device per input signal.&lt;br /&gt;
&lt;br /&gt;
===What is register? Register file?===&lt;br /&gt;
&#039;&#039;&#039;Registers&#039;&#039;&#039; are a special, high-speed storage area within the CPU. All data must be represented in a register before it can be processed. For example, if two numbers are to be multiplied, both numbers must be in registers, and the result is also placed in a register. A register may hold a computer instruction , a storage address, or any kind of data (such as a bit sequence or individual characters). A register must be large enough to hold an instruction - for example, in a 32-bit instruction computer, a register must be 32 bits in length. In some computer designs, there are smaller registers - for example, half-registers - for shorter instructions. Depending on the processor design and language rules, registers may be numbered or have arbitrary names.&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;register file&#039;&#039;&#039; is an array of processor registers in a central processing unit (CPU). Modern integrated circuit-based register files are usually implemented by way of fast static RAMs with multiple ports. Such RAMs are distinguished by having dedicated read and write ports, whereas ordinary multiported SRAMs will usually read and write through the same ports.&lt;br /&gt;
&lt;br /&gt;
The instruction set architecture of a CPU will almost always define a set of registers which are used to stage data between memory and the functional units on the chip. In simpler CPUs, these architectural registers correspond one-for-one to the entries in a physical register file within the CPU. More complicated CPUs use register renaming, so that the mapping of which physical entry stores a particular architectural register changes dynamically during execution. The register file is part of the architecture and visible to the programmer, as opposed to the concept of transparent caches.&lt;br /&gt;
&lt;br /&gt;
===What is ALU?===&lt;br /&gt;
An arithmetic logic unit (ALU) is a digital electronic circuit that performs arithmetic and bitwise logical operations on integer binary numbers. This is in contrast to a floating-point unit (FPU), which operates on floating point numbers. An ALU is a fundamental building block of many types of computing circuits, including the central processing unit (CPU) of computers, FPUs, and graphics processing units (GPUs). A single CPU, FPU or GPU may contain multiple ALUs.&lt;br /&gt;
&lt;br /&gt;
The inputs to an ALU are the data to be operated on, called operands, and a code indicating the operation to be performed; the ALU&#039;s output is the result of the performed operation. In many designs, the ALU also exchanges additional information with a status register, which relates to the result of the current or previous operations.&lt;br /&gt;
&lt;br /&gt;
===What is floating-point unit?===&lt;br /&gt;
A floating-point unit (FPU) is a part of a computer system specially designed to carry out operations on floating point numbers. Typical operations are addition, subtraction, multiplication, division, square root, and bitshifting. Some systems (particularly older, microcode-based architectures) can also perform various transcendental functions such as exponential or trigonometric calculations, though in most modern processors these are done with software library routines.&lt;br /&gt;
&lt;br /&gt;
In general purpose computer architectures, one or more FPUs may be integrated with the central processing unit; however many embedded processors do not have hardware support for floating-point operations.&lt;br /&gt;
&lt;br /&gt;
===What is a cache?===&lt;br /&gt;
&lt;br /&gt;
===What is a bus?===&lt;br /&gt;
&lt;br /&gt;
===Show the circuit diagram for A OR B AND C, NOT A AND B, &amp;lt;insert some other Boole formula here&amp;gt;?===&lt;br /&gt;
&lt;br /&gt;
===Show the truth table for &amp;lt;insert Boole formula here&amp;gt;?===&lt;br /&gt;
&lt;br /&gt;
===Write the equivalent Boole formula of a circuit diagram.===&lt;br /&gt;
&lt;br /&gt;
==Publishing work==&lt;br /&gt;
&lt;br /&gt;
===What are the major implications of MIT, BSD and GPL licenses?===&lt;br /&gt;
&lt;br /&gt;
===What are the differences between copyright, trademark, trade secret?===&lt;br /&gt;
“Intellectual property is something that is created by the mind.”  Typically, we think of ideas as being created by the mind – but intellectual property does not protect bare ideas: rather, it is the expression or symbolic power/recognizability of the ideas that are protected. &lt;br /&gt;
Thus, it is the design of the rocket that is patented, not the idea of a rocket.  It is the painting of the lake that is copyrighted, not the idea of a lake.  And it is the consumer recognizable logo that is trademarked, not the idea of a logo.  Intellectual property protects how we express and identify ideas in concrete ways – not the idea itself.&lt;br /&gt;
&lt;br /&gt;
In particular:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Patents&#039;&#039;&#039;: protect functional expressions of an idea – not the idea itself.  A machines, method/process, manufacture, compositions of matter, and improvements of any of these items can be patented.  Thus, I can patent a design for the nozzle on a rocket, or the method of making the rocket, or the method of making the rocket fuel, or the metal in which the rocket fuel is stored, or a new way of transporting the rocket fuel to the rocket.  But I cannot patent the broad “idea” of a rocket.&lt;br /&gt;
     &lt;br /&gt;
&#039;&#039;&#039;Copyrights&#039;&#039;&#039;: protect the specific creative expression of an idea through any medium of artistic/creative expression – i.e., paintings, photographs, sculpture, writings, software, etc.   A copyright protects your painting of a haystack, but it would not prohibit another painter from expressing their artistry or viewpoint by also painting a haystack. Likewise, while Ian Fleming was able to receive a copyright on his particular expression of the idea of a secret agent (i.e., a debonair English secret agent), he could not prevent Rich Wilkes from receiving a copyright on his expression of the idea of a secret agent (i.e., a tattooed bald extreme athlete turned reluctant secret agent).  &lt;br /&gt;
     &lt;br /&gt;
&#039;&#039;&#039;Trademarks&#039;&#039;&#039;: protect any symbol that indicates the source or origin of the goods or services to which it is affixed.  While a trademark can be extremely valuable to its owner, the ultimate purpose of a trademark is to protect consumers – that is, the function of a trademark is to inform the consumer where the goods or services originate.  The consumer, knowing the origin of the goods, can make purchasing decisions based on prior knowledge, reputation or marketing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Trade secret&#039;&#039;&#039;: is a formula, practice, process, design, instrument, pattern, commercial method, or compilation of information which is not generally known or reasonably ascertainable by others, and by which a business can obtain an economic advantage over competitors or customers.[&lt;br /&gt;
&lt;br /&gt;
While each category is distinct, a product (or components/aspects of a product) may fall into one or more of the categories.  For example, software can be protected by both patents and copyrights.  The copyright would protect the artistic expression of the idea – i.e., the code itself – while the patent would protect the functional expression of the idea – e.g., using a single click to purchase a book online.  Likewise, it is likely that the software company will use a trademark to indicate who made the software. &lt;br /&gt;
&lt;br /&gt;
An additional example would be a logo for a company.  The logo may serve as a trademark indicating that all products affixed with the logo are from the same source.  The creative and artistic aspects of the logo may also be protected by a copyright.&lt;br /&gt;
&lt;br /&gt;
===Where would you use waterfall software development model? Where would you use agile?===&lt;br /&gt;
&lt;br /&gt;
===What is the purpose of a version control system?===&lt;br /&gt;
&lt;br /&gt;
===What would you store in a version control system?===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Algorithms and data structures==&lt;br /&gt;
&lt;br /&gt;
===What is time complexity of algorithm?===&lt;br /&gt;
In computer science, the time complexity of an algorithm quantifies the amount of time taken by an algorithm to run as a function of the length of the string representing the input. Time complexity is commonly estimated by counting the number of elementary operations performed by the algorithm, where an elementary operation takes a fixed amount of time to perform.&lt;br /&gt;
&lt;br /&gt;
===What is space complexity of algorithm?===&lt;br /&gt;
Space complexity is a measure of the amount of working storage an algorithm needs. That means how much memory, in the worst case, is needed at any point in the algorithm.&lt;br /&gt;
It represents the total amount of memory space that a &amp;quot;normal&amp;quot; physical computer would need to solve a given computational problem with a given algorithm.&lt;br /&gt;
&lt;br /&gt;
===What&#039;s a good algorithm?===&lt;br /&gt;
It executes as fast as possible.&lt;br /&gt;
It takes as less space as possible.&lt;br /&gt;
It is adaptable to computers.&lt;br /&gt;
It is simple.&lt;br /&gt;
It is elegant (well written).&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Moore&#039;s_law Moore&#039;s law]? What is [https://en.wikipedia.org/wiki/Rock&#039;s_law Rock&#039;s law]?===&lt;br /&gt;
Moore&#039;s law is the observation that the number of transistors in a dense integrated circuit doubles approximately every two years. The observation is named after Gordon E. Moore, the co-founder of Intel and Fairchild Semiconductor, whose 1965 paper described a doubling every year in the number of components per integrated circuit, and projected this rate of growth would continue for at least another decade. In 1975, looking forward to the next decade, he revised the forecast to doubling every two years.&lt;br /&gt;
Rock&#039;s law or Moore&#039;s second law, named for Arthur Rock or Gordon Moore, says that the cost of a semiconductor chip fabrication plant doubles every four years. As of 2015, the price had already reached about 14 billion US dollars.&lt;br /&gt;
&lt;br /&gt;
===What were the major contributing factors for success of Microsoft, Apple, Google, &amp;lt;your favourite company&amp;gt;?===&lt;br /&gt;
&lt;br /&gt;
===What were the major contributing factors to the success of Silicon Valley?===&lt;/div&gt;</summary>
		<author><name>Smets</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Exam_help&amp;diff=100283</id>
		<title>Exam help</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Exam_help&amp;diff=100283"/>
		<updated>2016-01-11T17:03:17Z</updated>

		<summary type="html">&lt;p&gt;Smets: /* BIOS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Computer hardware==&lt;br /&gt;
&lt;br /&gt;
=== Different buses and their uses===&lt;br /&gt;
In computer architecture, a bus is a communication system that transfers data between components inside a computer, or between computers. This expression covers all related hardware components (wire, optical fiber, etc.) and software, including communication protocols.&lt;br /&gt;
&lt;br /&gt;
The internal bus, also known as internal data bus, memory bus, system bus or Front-Side-Bus, connects all the internal components of a computer, such as CPU and memory, to the motherboard. Internal data buses are also referred to as a local bus, because they are intended to connect to local devices. This bus is typically rather quick and is independent of the rest of the computer operations.&lt;br /&gt;
&lt;br /&gt;
The external bus, or expansion bus, is made up of the electronic pathways that connect the different external devices, such as printer etc., to the computer.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Types and uses:&#039;&#039;&#039;&lt;br /&gt;
;USB&lt;br /&gt;
:Universal Serial Bus. Designed for: input devices, digital cameras, printers, media players...&lt;br /&gt;
&lt;br /&gt;
;Serial ATA&lt;br /&gt;
:Used by internal storage devices (hard disk). They replace the old ATA connectors.&lt;br /&gt;
&lt;br /&gt;
;PCI&lt;br /&gt;
:Peripheral Component Interconnect, is a local computer bus for attaching hardware devices in a computer. Attached devices can take either the form of an integrated circuit fitted onto the motherboard itself or an expansion card that fits into a slot. Typical PCI cards used in PCs include: network cards, sound cards, modems, extra ports such as USB or serial, TV tuner cards and disk controllers.&lt;br /&gt;
&lt;br /&gt;
;PCI Express&lt;br /&gt;
:Peripheral Component Interconnect Express (also called PCIe), is a high-speed serial computer expansion bus standard designed to replace the older PCI, PCI-X, and AGP bus standards. PCIe has numerous improvements over the older standards, including higher maximum system bus throughput, lower I/O pin count and smaller physical footprint, better performance scaling for bus devices, a more detailed error detection and reporting mechanism, and native hot-plug functionality. More recent revisions of the PCIe standard provide hardware support for I/O virtualization.&lt;br /&gt;
&lt;br /&gt;
;Mini PCIe&lt;br /&gt;
:It is based on PCI Express technoogy. Main point is its small size and its large variety of connectors makes it used for USB2.0 cards, SIM card, Wifi and Bluetooth cards, 3G and GPS cards.&lt;br /&gt;
&lt;br /&gt;
;ExpressCard&lt;br /&gt;
:It is an interface to connect peripheral devices to a computer, usually a laptop computer. ExpressCards can connect a variety of devices to a computer including mobile broadband modems, IEEE 1394 (FireWire) connectors, USB connectors, Ethernet network ports, Serial ATA storage devices, solid-state drives, external enclosures for desktop-size PCI Express graphics cards and other peripheral devices, wireless network interface controllers (NIC), TV tuner cards, Common Access Card (CAC) readers, and sound cards.&lt;br /&gt;
&lt;br /&gt;
===What are the differences between hard disk drive (HDD) and solid state drive (SSD)?=== &lt;br /&gt;
The traditional spinning hard drive (HDD) is the basic nonvolatile storage on a computer. Hard drives are essentially metal platters with a magnetic coating which stores the data. A read/write head on an arm accesses the data while the platters are spinning in a hard drive enclosure.&lt;br /&gt;
An SSD does same jobas an HDD, but instead of a magnetic coating on top of platters, the data is stored on interconnected flash memory chips that retain the data even when there&#039;s no power present. HDDs have spinning plates with magnetic coating, while SSDs have no moving parts and instead are using flash memory.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribute&lt;br /&gt;
!SSD (Solid State Drive)&lt;br /&gt;
!HDD (Hard Disk Drive)&lt;br /&gt;
|-&lt;br /&gt;
|Power Draw / Battery Life 	&lt;br /&gt;
|Less power draw, averages 2 – 3 watts, resulting in 30+ minute battery boost 	&lt;br /&gt;
|More power draw, averages 6 – 7 watts and therefore uses more battery&lt;br /&gt;
|-&lt;br /&gt;
|Cost 	&lt;br /&gt;
|Expensive, roughly $0.10 per gigabyte (based on buying a 1TB drive)&lt;br /&gt;
|Only around $0.06 per gigabyte, very cheap (buying a 4TB model)&lt;br /&gt;
|-&lt;br /&gt;
|Capacity 	&lt;br /&gt;
|Typically not larger than 1TB for notebook size drives; 1TB max for desktops 	&lt;br /&gt;
|Typically around 500GB and 2TB maximum for notebook size drives; 6TB max for desktops&lt;br /&gt;
|-&lt;br /&gt;
|Operating System Boot Time 	&lt;br /&gt;
|Around 10-13 seconds average bootup time 	&lt;br /&gt;
|Around 30-40 seconds average bootup time&lt;br /&gt;
|-&lt;br /&gt;
|Noise 	&lt;br /&gt;
|There are no moving parts and as such no sound 	&lt;br /&gt;
|Audible clicks and spinning can be heard&lt;br /&gt;
|-&lt;br /&gt;
|Vibration 	&lt;br /&gt;
|No vibration as there are no moving parts 	&lt;br /&gt;
|The spinning of the platters can sometimes result in vibration&lt;br /&gt;
|-&lt;br /&gt;
|Heat Produced 	&lt;br /&gt;
|Lower power draw and no moving parts so little heat is produced 	&lt;br /&gt;
|HDD doesn’t produce much heat, but it will have a measurable amount more heat than an SSD due to moving parts and higher power draw&lt;br /&gt;
|-&lt;br /&gt;
|Failure Rate 	&lt;br /&gt;
|Mean time between failure rate of 2.0 million hours 	&lt;br /&gt;
|Mean time between failure rate of 1.5 million hours&lt;br /&gt;
|-&lt;br /&gt;
|File Copy / Write Speed 	&lt;br /&gt;
|Generally above 200 MB/s and up to 550 MB/s for cutting edge drives 	&lt;br /&gt;
|The range can be anywhere from 50 – 120MB / s&lt;br /&gt;
|-&lt;br /&gt;
|Encryption 	&lt;br /&gt;
|Full Disk Encryption (FDE) Supported on some models 	&lt;br /&gt;
|Full Disk Encryption (FDE) Supported on some models&lt;br /&gt;
|-&lt;br /&gt;
|File Opening Speed 	&lt;br /&gt;
|Up to 30% faster than HDD 	&lt;br /&gt;
|Slower than SSD&lt;br /&gt;
|-&lt;br /&gt;
|Magnetism Affected? 	&lt;br /&gt;
|An SSD is safe from any effects of magnetism 	&lt;br /&gt;
|Magnets can erase data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===What is the purpose of Flash Translation Layer in terms of solid state drives?===&lt;br /&gt;
Flash drives have limited lifespan due to write cycles (or rather program-erase (PE) cycles) and to exhaust the drive equally, FTL layer is utilised.&lt;br /&gt;
&lt;br /&gt;
Although presenting an array of Logical Block Addresses (LBA) makes sense for HDDs as their sectors can be overwritten, it is not fully suited to the way flash memory works. For this reason, an additional component is required to hide the inner characteristics of NAND flash memory and expose only an array of LBAs to the host. This component is called the Flash Translation Layer (FTL), and resides in the SSD controller. The FTL is critical and has three main purposes: logical block mapping, wear leveling and garbage collection.&lt;br /&gt;
&lt;br /&gt;
The logical block mapping translates logical block addresses (LBAs) from the host space into physical block addresses (PBAs) in the physical NAND-flash memory space. This mapping takes the form of a table, which for any LBA gives the corresponding PBA.&lt;br /&gt;
&lt;br /&gt;
Wear leveling (also written as wear levelling) is a technique[1] for prolonging the service life of some kinds of erasable computer storage media, such as flash memory (used in solid-state drives (SSDs) and USB flash drives).&lt;br /&gt;
&lt;br /&gt;
The garbage collection process in the SSD controller ensures that “stale” pages are erased and restored into a “free” state so that the incoming write commands can be processed. If the data in a page has to be updated, the new version is written to a free page, and the page containing the previous version is marked as stale. When blocks contain stale pages, they need to be erased before they can be written to.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===What are difference between volatile/non-volatile, RAM, ROM, EEPROM and where are they used?===&lt;br /&gt;
&lt;br /&gt;
Volatile = does not hold data after power off.&lt;br /&gt;
Non-volatile = holds data even after power off.&lt;br /&gt;
&lt;br /&gt;
Random Access Memory or RAM is a form of data storage that can be accessed randomly at any time, in any order and from any physical location., allowing quick access and manipulation. RAM allows the computer to read data quickly to run applications. It allows reading and writing. It is volatile.&lt;br /&gt;
&lt;br /&gt;
Read-only memory or ROM is also a form of data storage that can not be easily altered or reprogrammed.Stores instuctions that are not nescesary for re-booting up to make the computer operate when it is switched off.They are hardwired. ROM stores the program required to initially boot the computer. It only allows reading. It is non-volatile.&lt;br /&gt;
&lt;br /&gt;
EEPROM (electrically erasable programmable read-only memory) is user-modifiable read-only memory (ROM) that can be erased and reprogrammed. Unlike EPROM chips, EEPROMs do not need to be removed from the computer to be modified. However, an EEPROM chip has to be erased and reprogrammed in its entirety, not selectively. It also has a limited life - that is, the number of times it can be reprogrammed is limited to tens or hundreds of thousands of times. BIOS of PCs are usually written to EEPROM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===What is data retention?===&lt;br /&gt;
It is how long a device can hold data before it becomes unreadable.&lt;br /&gt;
&lt;br /&gt;
===What are difference between asynchronous/synchronous, dynamic/static RAM and where are they used?===&lt;br /&gt;
The two main forms of modern RAM are static RAM (SRAM) and dynamic RAM (DRAM). In SRAM, a bit of data is stored using the state of a six transistor memory cell. This form of RAM is more expensive to produce, but is generally faster and requires less power than DRAM and, in modern computers, is often used as cache memory for the CPU. DRAM stores a bit of data using a transistor and capacitor pair, which together comprise a DRAM memory cell. The capacitor holds a high or low charge (1 or 0, respectively), and the transistor acts as a switch that lets the control circuitry on the chip read the capacitor&#039;s state of charge or change it. As this form of memory is less expensive to produce than static RAM, it is the predominant form of computer memory used in modern computers.&lt;br /&gt;
Dynamic RAM is used to create larger RAM space system, where Static RAM create speed- sensitive cache.&lt;br /&gt;
Dynamic RAM consumes less power than Static RAM.&lt;br /&gt;
&lt;br /&gt;
Asynchronous refers to the fact that the memory is not synchronized to the system clock. A memory access is begun, and a certain period of time later the memory value appears on the bus. The signals are not coordinated with the system clock at all, as described in the section discussing memory access. Asynchronous memory works fine in lower-speed memory bus systems but is not nearly as suitable for use in high-speed (&amp;gt;66 MHz) memory systems.&lt;br /&gt;
A newer type of DRAM, called &amp;quot;synchronous DRAM&amp;quot; or &amp;quot;SDRAM&amp;quot;, is synchronized to the system clock; all signals are tied to the clock so timing is much tighter and better controlled. This type of memory is much faster than asynchronous DRAM and can be used to improve the performance of the system. It is more suitable to the higher-speed memory systems of the newest PCs.&lt;br /&gt;
&lt;br /&gt;
===What is [https://compsci2014.wikispaces.com/2.1.3+Explain+the+use+of+cache+memory cache]? What is cache coherence?===&lt;br /&gt;
&lt;br /&gt;
Cache memory is used to reduce the average memory access times. This is done by storing the data that is frequently accessed in main memory addresses therefore allowing the CPU to access the data faster. This is due to the fact that cache memory can be read a lot faster than main memory.&lt;br /&gt;
 &lt;br /&gt;
Cache coherence is the consistency of shared resource data that ends up stored in multiple local caches. When clients in a system maintain caches of a common memory resource, problems may arise with inconsistent data, which is particularly the case with CPUs in a multiprocessing system.&lt;br /&gt;
&lt;br /&gt;
===What are differences between resistive and capacitive touchscreen?=== &lt;br /&gt;
Resistive touchscreen needs pressure to work by connecting to sheets of plastic and thus conducting electricity. Capacitive touchscreen works by conducting electricity from user&#039;s finger.&lt;br /&gt;
&lt;br /&gt;
Resistive touchscreens rely on the pressure of your fingertip—or any other object—to register input. They consist of two flexible layers with an air gap in-between. In order for the touchscreen to register input, you must press on the top layer using a small amount of pressure, in order to depress the top layer enough to make contact with the bottom layer. The touchscreen will then register the precise location of the touch. You can use anything you want on a resistive touchscreen to make the touch interface work; a gloved finger, a wooden rod, a fingernail – anything that creates enough pressure on the point of impact will activate the mechanism and the touch will be registered.&lt;br /&gt;
&lt;br /&gt;
Capacitive touchscreens instead sense conductivity to register input—usually from the skin on your fingertip. Because you don’t need to apply pressure, capacitive touchscreens are more responsive than resistive touchscreens. However, because they work by sensing conductivity, capacitive touchscreens can only be used with objects that have conductive properties, which includes your fingertip (which is most ideal), and special styluses designed with a conductive tip. This is the reason you cannot use a capacitive screen while wearing gloves – the gloves are not conductive, and the touch does not cause any change in the electrostatic field.&lt;br /&gt;
&lt;br /&gt;
[http://www.alphr.com/realworld/357325/capacitive-or-resistive-whats-the-best-type-of-touchscreen In-depth comparison of two]&lt;br /&gt;
&lt;br /&gt;
===Explain how [http://www.bidouille.org/hack/mousecam computer mouse] works?===&lt;br /&gt;
An optical computer mouse uses a light source, typically an LED, and a light detector, such as an array of photodiodes, to detect movement relative to a surface.&lt;br /&gt;
Modern surface-independent optical mice work by using an optoelectronic sensor (essentially, a tiny low-resolution video camera) to take successive images of the surface on which the mouse operates.&lt;br /&gt;
The technology underlying the modern optical computer mouse is known as digital image correlation.&lt;br /&gt;
To understand how optical mice work, imagine two photographs of the same object except slightly offset from each other. Place both photographs on a light table to make them transparent, and slide one across the other until their images line up. The amount that the edges of one photograph overhang the other represents the offset between the images, and in the case of an optical computer mouse the distance it has moved.&lt;br /&gt;
Optical mice capture one thousand successive images or more per second. Depending on how fast the mouse is moving, each image will be offset from the previous one by a fraction of a pixel or as many as several pixels. Optical mice mathematically process these images using cross correlation to calculate how much each successive image is offset from the previous one.&lt;br /&gt;
[http://www.topdesignmag.com/mouse-history-in-photos/ History of computer mouse].&lt;br /&gt;
&lt;br /&gt;
===Explain how [http://www.daskeyboard.com/blog/typing-through-time-the-history-of-the-keyboard/ computer keyboard] works?===&lt;br /&gt;
[http://computer.howstuffworks.com/keyboard.htm HowStuffworks article] [http://www.explainthatstuff.com/computerkeyboards.html Explain that Stuff article] [http://www.daskeyboard.com/blog/typing-through-time-the-history-of-the-keyboard/ Keyboard History]&lt;br /&gt;
&lt;br /&gt;
===Explain how [https://en.wikipedia.org/wiki/Cathode_ray_tube cathode ray tube] (CRT) based screen technology works and name pros/cons.===&lt;br /&gt;
[https://www.youtube.com/watch?v=2czqYV3T_Kc]&lt;br /&gt;
The cathode ray tube (CRT) is a vacuum tube containing one or more electron guns, and a phosphorescent screen used to, It has a means to accelerate and deflect the electron beam(s) onto the screen to create the images. The images may represent electrical waveforms (oscilloscope), pictures (television, computer monitor), radar targets or others. CRTs have also been used as memory devices, in which case the visible light emitted from the fluorescent material (if any) is not intended to have significant meaning to a visual observer (though the visible pattern on the tube face may cryptically represent the stored data).&lt;br /&gt;
&lt;br /&gt;
The CRT uses an evacuated glass envelope which is large, deep (i.e. long from front screen face to rear end), fairly heavy, and relatively fragile. As a matter of safety, the face is typically made of thick lead glass so as to be highly shatter-resistant and to block most X-ray emissions, particularly if the CRT is used in a consumer product.&lt;br /&gt;
&lt;br /&gt;
===Explain how [https://en.wikipedia.org/wiki/Liquid-crystal_display liquid crystal displays] (LCD) work and name pros/cons.===&lt;br /&gt;
[https://www.youtube.com/watch?v=nCHgmCxGEzY]&lt;br /&gt;
&lt;br /&gt;
===Name screen technologies making use of thin film transistor (TFT) technology?===&lt;br /&gt;
[https://en.wikipedia.org/wiki/Thin-film_transistor]&lt;br /&gt;
&lt;br /&gt;
===Name uses for light polarization filters?===&lt;br /&gt;
A polarizer or polariser is an optical filter that passes light of a specific polarization and blocks waves of other polarizations. It can convert a beam of light of undefined or mixed polarization into a beam with well-defined polarization, polarized light. Polarizers are used in many optical techniques and instruments, and polarizing filters find applications in photography, liquid crystal display technology and 3D watching. Polarizers can also be made for other types of electromagnetic waves besides light, such as radio waves, microwaves, and X-rays.&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/Polarizing_filter_%28photography%29 Polarizer photo] [https://en.wikipedia.org/wiki/Polarized_3D_system Polarizer 3D]&lt;br /&gt;
&lt;br /&gt;
===What are the benefits of [https://en.wikipedia.org/wiki/Twisted_pair twisted pair cabling] and [https://en.wikipedia.org/wiki/Differential_signaling differential signalling]?===&lt;br /&gt;
&#039;&#039;&#039;Twisted pair&#039;&#039;&#039; cabling is a type of wiring in which two conductors of a single circuit are twisted together for the purposes of canceling out electromagnetic interference (EMI) from external sources; for instance, electromagnetic radiation from unshielded twisted pair (UTP) cables, and crosstalk between neighboring pairs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Differential signaling&#039;&#039;&#039; is a method for electrically transmitting information using two complementary signals. The technique sends the same electrical signal as a differential pair of signals, each in its own conductor. The pair of conductors can be wires (typically twisted together) or traces on a circuit board. The receiving circuit responds to the electrical difference between the two signals, rather than the difference between a single wire and ground. Since the receiving circuit only detects the difference between the wires, the technique resists electromagnetic noise compared to one conductor with an un-paired reference (ground). The technique works for both analog signaling and digital signaling.&lt;br /&gt;
&lt;br /&gt;
===[https://en.wikipedia.org/wiki/Active_matrix Active matrix] vs [https://en.wikipedia.org/wiki/Passive_matrix_addressing passive matrix] in display technology===&lt;br /&gt;
Active-matrix display : An active-matrix display, also known as a TFT (thin-film transistor) display, uses a separate transistor to apply charges to each liquid crystal cell and thus displays high-quality color that is viewable from all angles.&lt;br /&gt;
&lt;br /&gt;
Passive-matrix display : A passive-matrix display uses fewer transistors, requires less power, and is less expensive than an active-matrix display. The color on a passive-matrix display often is not as bright as an active-matrix display. Users view images on a passive-matrix display best when working directly in front of it.&lt;br /&gt;
&lt;br /&gt;
==Storage abstractions==&lt;br /&gt;
&lt;br /&gt;
===What is a [https://en.wikipedia.org/wiki/Block_%28data_storage%29 block device]?===&lt;br /&gt;
In computing (specifically data transmission and data storage), a block, sometimes called a physical record, is a sequence of bytes or bits, usually containing some whole number of records, having a maximum length, a block size.Data thus structured are said to be blocked. The process of putting data into blocks is called blocking. Most file systems are based on a block device, which is a level of abstraction for the hardware responsible for storing and retrieving specified blocks of data&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Logical_block_addressing logical block addressing] and what are the benefits compared to older [https://en.wikipedia.org/wiki/Cylinder-head-sector cylinder-head-sector addressing] method in terms of harddisks?===&lt;br /&gt;
Logical block addressing (LBA) is a common scheme used for specifying the location of blocks of data stored on computer storage devices, generally secondary storage systems such as hard disk drives. LBA is a particularly simple linear addressing scheme; blocks are located by an integer index, with the first block being LBA 0, the second LBA 1, and so on. &lt;br /&gt;
&lt;br /&gt;
Cylinder-head-sector, also known as CHS, is an early method for giving addresses to each physical block of data on a hard disk drive. CHS addressing is the process of identifying individual sectors on a disk by their position in a track, where the track is determined by the head and cylinder numbers.&lt;br /&gt;
&lt;br /&gt;
LBA allows a maximum addressing capacity of 2TB although CHS allows 8GB&lt;br /&gt;
&lt;br /&gt;
===What is a [https://en.wikipedia.org/wiki/Disk_partitioning disk partition]?===&lt;br /&gt;
Disk partitioning is the creation of one or more regions on a hard disk or other secondary storage, so that an operating system can manage information in each region separately. Partitioning is typically the first step of preparing a newly manufactured disk, before any files or directories have been created. The disk stores the information about the partitions&#039; locations and sizes in an area known as the partition table that the operating system reads before any other part of the disk. Each partition then appears in the operating system as a distinct &amp;quot;logical&amp;quot; disk that uses part of the actual disk.&lt;br /&gt;
&lt;br /&gt;
===What is a [https://en.wikipedia.org/wiki/File_system file system]?===&lt;br /&gt;
In computing, a file system (or filesystem) is used to control how data is stored and retrieved. Without a file system, information placed in a storage area would be one large body of data with no way to tell where one piece of information stops and the next begins. By separating the data into individual pieces, and giving each piece a name, the information is easily separated and identified. Taking its name from the way paper-based information systems are named, each group of data is called a &amp;quot;file&amp;quot;. The structure and logic rules used to manage the groups of information and their names is called a &amp;quot;file system&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Journaling_file_system#Write_hazards journaling] in terms of filesystems and what are the benefits? Name some journaled file systems in use nowadays.===&lt;br /&gt;
A journaling file system is a file system that keeps track of changes not yet committed to the file system&#039;s main part by recording the intentions of such changes in a data structure known as a &amp;quot;journal&amp;quot;, which is usually a circular log. In the event of a system crash or power failure, such file systems can be brought back online quicker with lower likelihood of becoming corrupted.&lt;br /&gt;
&lt;br /&gt;
Depending on the actual implementation, a journaling file system may only keep track of stored metadata, resulting in improved performance at the expense of increased possibility for data corruption. Alternatively, a journaling file system may track both stored data and related metadata, while some implementations allow selectable behavior in this regard&lt;br /&gt;
&lt;br /&gt;
==Bootloaders, kernels==&lt;br /&gt;
&lt;br /&gt;
===What is the role of BIOS/UEFI in x86-based machines?===&lt;br /&gt;
BIOS (Basic Input/Output System) performs during boot up process of a computer and prepares it for the OS and its&#039; programs.&lt;br /&gt;
&lt;br /&gt;
UEFI (Unified Extensible Firmware Interface) is a replacement for BIOS. It offers several advantages over previous firmware interface, like: &lt;br /&gt;
* Ability to boot from large disks (over 2 TB) with a GUID Partition Table (GPT)&lt;br /&gt;
* CPU-independent architecture&lt;br /&gt;
* CPU-independent drivers&lt;br /&gt;
* Flexible pre-OS environment, including network capability&lt;br /&gt;
* Modular design&lt;br /&gt;
&lt;br /&gt;
===Explain step by step how operating system is booted up, see slides for flowchart.===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. The first thing a computer has to do when it is turned on is start up a special program called an operating system. That process is called booting. The instructions for booting are built into BIOS (Basic input/output system).&lt;br /&gt;
2. The BIOS will tell your computer to look into the boot disk (usually the lowest-numbered hard disk) for a boot loader and the boot loader will be pulled into memory and will be started. &lt;br /&gt;
3. The boot loader&#039;s job is to start the real operating system and it does it by looking for a kernel, loading it into memory and  starting it. &lt;br /&gt;
5. Once the kernel starts, it has to look around to find the rest of the hardware and get ready to run programs ( It does this by poking not at ordinary memory locations but rather at I/O ports — special bus addresses that are likely to have device controller cards listening at them for commands). The kernel doesn&#039;t poke at random; it has a lot of built-in knowledge about what it&#039;s likely to find where, and how controllers will respond if they&#039;re present. This process is called autoprobing.&lt;br /&gt;
&lt;br /&gt;
6. After the kernel is up and running, it&#039;s the end of first stage. After the first stage, the kernel hands control to a special program called &amp;quot;init&amp;quot; which spawns housekeeping processes. The init&#039;s process&#039;s first task is to look that your hard disks are okay &lt;br /&gt;
&lt;br /&gt;
7. Init&#039;s next step is to start several daemons. A daemon is a program like a print spooler, a mail listener or a WWW server that lurks in the background, waiting for things to do. These special programs often have to coordinate several requests that could conflict. They are daemons because it&#039;s often easier to write one program that runs constantly and knows about all requests than it would be to try to make sure that a flock of copies (each processing one request and all running at the same time) don&#039;t step on each other.&lt;br /&gt;
&lt;br /&gt;
8. The next step is to prepare for users. Init starts a copy of a program called getty to watch your screen and keyboard (and maybe more copies to watch dial-in serial ports).&lt;br /&gt;
&lt;br /&gt;
9. The next step is to start up various daemons that support networking and other services. The most important of these is your X server. X is a daemon that manages your display, keyboard, and mouse. Its main job is to produce the color pixel graphics you normally see on your screen.&lt;br /&gt;
&lt;br /&gt;
10. When the X server comes up, during the last part of your machine&#039;s boot process, it effectively takes over the hardware from whatever virtual console was previously in control. That&#039;s when you&#039;ll see a graphical login screen, produced for you by a program called a display manager.&lt;br /&gt;
&lt;br /&gt;
===BIOS===&lt;br /&gt;
=Basic input and output system&lt;br /&gt;
Located at memory location 0xFFFF0&lt;br /&gt;
bo&lt;br /&gt;
&lt;br /&gt;
===Describe the functionality provided by general purpose operating system.===&lt;br /&gt;
See architecture of [https://en.wikipedia.org/wiki/Architecture_of_Windows_NT Windows NT], [http://www.elinux.org/Android_Architecture Android], [https://en.wikipedia.org/wiki/Architecture_of_OS_X OS X].&lt;br /&gt;
&lt;br /&gt;
===What are the main differences between [https://en.wikipedia.org/wiki/Real_mode real mode] and [https://en.wikipedia.org/wiki/Protected_mode protected mode] of x86-based processor?===&lt;br /&gt;
&lt;br /&gt;
===What happens during context switch?===&lt;br /&gt;
&lt;br /&gt;
===What is the purpose of [https://en.wikipedia.org/wiki/Virtual_memory paged virtual memory]?===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Libraries, frameworks==&lt;br /&gt;
&lt;br /&gt;
==Programming languages==&lt;br /&gt;
&lt;br /&gt;
===What are the major steps of compilation?===&lt;br /&gt;
===What are the differences between [https://en.wikipedia.org/wiki/Interpreted_language interpreted], [https://en.wikipedia.org/wiki/Just-in-time_compilation JIT-compilation] and [https://en.wikipedia.org/wiki/Compiler traditional compiling]?===&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Control_flow control flow]? Loops? Conditional statements?===&lt;br /&gt;
&lt;br /&gt;
==Data encoding==&lt;br /&gt;
&lt;br /&gt;
===What is bit? Nibble? Byte? Word?===&lt;br /&gt;
Bit is a basic unit of information that can hold either True or False value (1 or 0).&lt;br /&gt;
&lt;br /&gt;
Nibble is half of an octet.&lt;br /&gt;
&lt;br /&gt;
Byte is a unit of eight bits. Comes from the number of bits used to encode a single character of text in a computer&lt;br /&gt;
&lt;br /&gt;
Word is a length of bits the processor-architecture can process in bits (8-bit, 32-bit etc)&lt;br /&gt;
&lt;br /&gt;
===Write 9375 in binary, hexadecimal?===&lt;br /&gt;
&lt;br /&gt;
===Write 0xDEADBEEF in decimal?===&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Quantization_%28signal_processing%29 quantization] in terms of signal processing?===&lt;br /&gt;
&lt;br /&gt;
===How are [https://en.wikipedia.org/wiki/Integer_%28computer_science%29 integers] stored in binary? What integer range can be described using n bits? How many bits are required to describe integer range from n .. m.===&lt;br /&gt;
&lt;br /&gt;
===How are [https://en.wikipedia.org/wiki/Single-precision_floating-point_format single precision] and [https://en.wikipedia.org/wiki/Double-precision_floating-point_format double precision] floating point numbers stored in binary according to [https://en.wikipedia.org/wiki/IEEE_floating_point IEEE754 standard]?===&lt;br /&gt;
[http://lauri.vosandi.com/hdl/arithmetic/floating-point-representation.html Floating-point multiplication]&lt;br /&gt;
&lt;br /&gt;
===What is the difference between CMYK and RGB color models? How are YUV, HSV and HSL colorspaces related to RGB? What are sRGB and YCbCr and where are they used?===&lt;br /&gt;
&lt;br /&gt;
===How is data encoded on audio CD-s? What is the [http://lauri.vosandi.com/2013/07/audio-codecs.html capacity of an audio CD]?===&lt;br /&gt;
&lt;br /&gt;
===What is sampling rate? What is bit depth? What is resolution?===&lt;br /&gt;
&lt;br /&gt;
===What is bitrate?===&lt;br /&gt;
&lt;br /&gt;
===What is lossy/lossless compression?===&lt;br /&gt;
&lt;br /&gt;
===What is JPEG suitable for? Is JPEG lossy or lossless compression method?===&lt;br /&gt;
&lt;br /&gt;
===What is PNG suitable for? Does PNG support compression?===&lt;br /&gt;
&lt;br /&gt;
===How are time domain and frequency domain related in terms of signal processing? What is Fourier transform and where it is applied?===&lt;br /&gt;
&lt;br /&gt;
==Code execution in processor==&lt;br /&gt;
&lt;br /&gt;
===Given ~10 instructions and their explainations, follow the instructions and elaborate after every step what happened in the processor?===&lt;br /&gt;
&lt;br /&gt;
==Microcontrollers==&lt;br /&gt;
&lt;br /&gt;
===What distinguishes microcontroller from microprocessor?===&lt;br /&gt;
&lt;br /&gt;
===What are the differences between Hardvard architecture and von Neumann architecture?===&lt;br /&gt;
&lt;br /&gt;
===What is an interrupt?===&lt;br /&gt;
&lt;br /&gt;
===What is an timer?===&lt;br /&gt;
&lt;br /&gt;
==Introduction to Boole algebra==&lt;br /&gt;
&lt;br /&gt;
===Simplify A AND A OR B===&lt;br /&gt;
&lt;br /&gt;
===Show addition of X and Y in binary===&lt;br /&gt;
&lt;br /&gt;
===Show subtraction of X and Y  in binary===&lt;br /&gt;
&lt;br /&gt;
===Show multiplication of X and Y in binary===&lt;br /&gt;
&lt;br /&gt;
==Hardware description languages==&lt;br /&gt;
&lt;br /&gt;
===What are the uses for hardware description languages?===&lt;br /&gt;
In electronics, a hardware description language (HDL) is a specialized computer language used to program the structure, design and operation of electronic circuits, and most commonly, digital logic circuits.&lt;br /&gt;
&lt;br /&gt;
A hardware description language enables a precise, formal description of an electronic circuit that allows for the automated analysis, simulation, and simulated testing of an electronic circuit. It also allows for the compilation of an HDL program into a lower level specification of physical electronic components, such as the set of masks used to create an integrated circuit.&lt;br /&gt;
&lt;br /&gt;
A hardware description language looks much like a programming language such as C; it is a textual description consisting of expressions, statements and control structures. One important difference between most programming languages and HDLs is that HDLs explicitly include the notion of time.&lt;br /&gt;
&lt;br /&gt;
===What is latch?===&lt;br /&gt;
A latch is an example of a bistable multivibrator, that is, a device with exactly two stable states. These states are high-output and low-output. A latch has a feedback path, so information can be retained by the device. Therefore latches can be memory devices, and can store one bit of data for as long as the device is powered. As the name suggests, latches are used to &amp;quot;latch onto&amp;quot; information and hold in place. Latches are very similar to flip-flops, but are not synchronous devices, and do not operate on clock edges as flip-flops do.&lt;br /&gt;
&lt;br /&gt;
===What is flip-flop?===&lt;br /&gt;
A flip-flop is a device very like a latch in that it is a bistable multivibrator, having two states and a feedback path that allows it to store a bit of information. The difference between a latch and a flip-flop is that a latch is asynchronous, and the outputs can change as soon as the inputs do (or at least after a small propagation delay). A flip-flop, on the other hand, is edge-triggered and only changes state when a control signal goes from high to low or low to high. This distinction is relatively recent and is not formal, with many authorities still referring to flip-flops as latches and vice versa, but it is a helpful distinction to make for the sake of clarity.&lt;br /&gt;
&lt;br /&gt;
There are several different types of flip-flop each with its own uses and peculiarities. The four main types of flip-flop are : SR, JK, D, and T.&lt;br /&gt;
&lt;br /&gt;
===What is mux (multiplexer)?===&lt;br /&gt;
A multiplexer (or mux) is a device that selects one of several analog or digital input signals and forwards the selected input into a single line.[1] A multiplexer of 2n inputs has n select lines, which are used to select which input line to send to the output.[2] Multiplexers are mainly used to increase the amount of data that can be sent over the network within a certain amount of time and bandwidth.[1] A multiplexer is also called a data selector.&lt;br /&gt;
&lt;br /&gt;
An electronic multiplexer makes it possible for several signals to share one device or resource, for example one A/D converter or one communication line, instead of having one device per input signal.&lt;br /&gt;
&lt;br /&gt;
===What is register? Register file?===&lt;br /&gt;
&#039;&#039;&#039;Registers&#039;&#039;&#039; are a special, high-speed storage area within the CPU. All data must be represented in a register before it can be processed. For example, if two numbers are to be multiplied, both numbers must be in registers, and the result is also placed in a register. A register may hold a computer instruction , a storage address, or any kind of data (such as a bit sequence or individual characters). A register must be large enough to hold an instruction - for example, in a 32-bit instruction computer, a register must be 32 bits in length. In some computer designs, there are smaller registers - for example, half-registers - for shorter instructions. Depending on the processor design and language rules, registers may be numbered or have arbitrary names.&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;register file&#039;&#039;&#039; is an array of processor registers in a central processing unit (CPU). Modern integrated circuit-based register files are usually implemented by way of fast static RAMs with multiple ports. Such RAMs are distinguished by having dedicated read and write ports, whereas ordinary multiported SRAMs will usually read and write through the same ports.&lt;br /&gt;
&lt;br /&gt;
The instruction set architecture of a CPU will almost always define a set of registers which are used to stage data between memory and the functional units on the chip. In simpler CPUs, these architectural registers correspond one-for-one to the entries in a physical register file within the CPU. More complicated CPUs use register renaming, so that the mapping of which physical entry stores a particular architectural register changes dynamically during execution. The register file is part of the architecture and visible to the programmer, as opposed to the concept of transparent caches.&lt;br /&gt;
&lt;br /&gt;
===What is ALU?===&lt;br /&gt;
An arithmetic logic unit (ALU) is a digital electronic circuit that performs arithmetic and bitwise logical operations on integer binary numbers. This is in contrast to a floating-point unit (FPU), which operates on floating point numbers. An ALU is a fundamental building block of many types of computing circuits, including the central processing unit (CPU) of computers, FPUs, and graphics processing units (GPUs). A single CPU, FPU or GPU may contain multiple ALUs.&lt;br /&gt;
&lt;br /&gt;
The inputs to an ALU are the data to be operated on, called operands, and a code indicating the operation to be performed; the ALU&#039;s output is the result of the performed operation. In many designs, the ALU also exchanges additional information with a status register, which relates to the result of the current or previous operations.&lt;br /&gt;
&lt;br /&gt;
===What is floating-point unit?===&lt;br /&gt;
A floating-point unit (FPU) is a part of a computer system specially designed to carry out operations on floating point numbers. Typical operations are addition, subtraction, multiplication, division, square root, and bitshifting. Some systems (particularly older, microcode-based architectures) can also perform various transcendental functions such as exponential or trigonometric calculations, though in most modern processors these are done with software library routines.&lt;br /&gt;
&lt;br /&gt;
In general purpose computer architectures, one or more FPUs may be integrated with the central processing unit; however many embedded processors do not have hardware support for floating-point operations.&lt;br /&gt;
&lt;br /&gt;
===What is a cache?===&lt;br /&gt;
&lt;br /&gt;
===What is a bus?===&lt;br /&gt;
&lt;br /&gt;
===Show the circuit diagram for A OR B AND C, NOT A AND B, &amp;lt;insert some other Boole formula here&amp;gt;?===&lt;br /&gt;
&lt;br /&gt;
===Show the truth table for &amp;lt;insert Boole formula here&amp;gt;?===&lt;br /&gt;
&lt;br /&gt;
===Write the equivalent Boole formula of a circuit diagram.===&lt;br /&gt;
&lt;br /&gt;
==Publishing work==&lt;br /&gt;
&lt;br /&gt;
===What are the major implications of MIT, BSD and GPL licenses?===&lt;br /&gt;
&lt;br /&gt;
===What are the differences between copyright, trademark, trade secret?===&lt;br /&gt;
“Intellectual property is something that is created by the mind.”  Typically, we think of ideas as being created by the mind – but intellectual property does not protect bare ideas: rather, it is the expression or symbolic power/recognizability of the ideas that are protected. &lt;br /&gt;
Thus, it is the design of the rocket that is patented, not the idea of a rocket.  It is the painting of the lake that is copyrighted, not the idea of a lake.  And it is the consumer recognizable logo that is trademarked, not the idea of a logo.  Intellectual property protects how we express and identify ideas in concrete ways – not the idea itself.&lt;br /&gt;
&lt;br /&gt;
In particular:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Patents&#039;&#039;&#039;: protect functional expressions of an idea – not the idea itself.  A machines, method/process, manufacture, compositions of matter, and improvements of any of these items can be patented.  Thus, I can patent a design for the nozzle on a rocket, or the method of making the rocket, or the method of making the rocket fuel, or the metal in which the rocket fuel is stored, or a new way of transporting the rocket fuel to the rocket.  But I cannot patent the broad “idea” of a rocket.&lt;br /&gt;
     &lt;br /&gt;
&#039;&#039;&#039;Copyrights&#039;&#039;&#039;: protect the specific creative expression of an idea through any medium of artistic/creative expression – i.e., paintings, photographs, sculpture, writings, software, etc.   A copyright protects your painting of a haystack, but it would not prohibit another painter from expressing their artistry or viewpoint by also painting a haystack. Likewise, while Ian Fleming was able to receive a copyright on his particular expression of the idea of a secret agent (i.e., a debonair English secret agent), he could not prevent Rich Wilkes from receiving a copyright on his expression of the idea of a secret agent (i.e., a tattooed bald extreme athlete turned reluctant secret agent).  &lt;br /&gt;
     &lt;br /&gt;
&#039;&#039;&#039;Trademarks&#039;&#039;&#039;: protect any symbol that indicates the source or origin of the goods or services to which it is affixed.  While a trademark can be extremely valuable to its owner, the ultimate purpose of a trademark is to protect consumers – that is, the function of a trademark is to inform the consumer where the goods or services originate.  The consumer, knowing the origin of the goods, can make purchasing decisions based on prior knowledge, reputation or marketing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Trade secret&#039;&#039;&#039;: is a formula, practice, process, design, instrument, pattern, commercial method, or compilation of information which is not generally known or reasonably ascertainable by others, and by which a business can obtain an economic advantage over competitors or customers.[&lt;br /&gt;
&lt;br /&gt;
While each category is distinct, a product (or components/aspects of a product) may fall into one or more of the categories.  For example, software can be protected by both patents and copyrights.  The copyright would protect the artistic expression of the idea – i.e., the code itself – while the patent would protect the functional expression of the idea – e.g., using a single click to purchase a book online.  Likewise, it is likely that the software company will use a trademark to indicate who made the software. &lt;br /&gt;
&lt;br /&gt;
An additional example would be a logo for a company.  The logo may serve as a trademark indicating that all products affixed with the logo are from the same source.  The creative and artistic aspects of the logo may also be protected by a copyright.&lt;br /&gt;
&lt;br /&gt;
===Where would you use waterfall software development model? Where would you use agile?===&lt;br /&gt;
&lt;br /&gt;
===What is the purpose of a version control system?===&lt;br /&gt;
&lt;br /&gt;
===What would you store in a version control system?===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Algorithms and data structures==&lt;br /&gt;
&lt;br /&gt;
===What is time complexity of algorithm?===&lt;br /&gt;
In computer science, the time complexity of an algorithm quantifies the amount of time taken by an algorithm to run as a function of the length of the string representing the input. Time complexity is commonly estimated by counting the number of elementary operations performed by the algorithm, where an elementary operation takes a fixed amount of time to perform.&lt;br /&gt;
&lt;br /&gt;
===What is space complexity of algorithm?===&lt;br /&gt;
Space complexity is a measure of the amount of working storage an algorithm needs. That means how much memory, in the worst case, is needed at any point in the algorithm.&lt;br /&gt;
It represents the total amount of memory space that a &amp;quot;normal&amp;quot; physical computer would need to solve a given computational problem with a given algorithm.&lt;br /&gt;
&lt;br /&gt;
===What&#039;s a good algorithm?===&lt;br /&gt;
It executes as fast as possible.&lt;br /&gt;
It takes as less space as possible.&lt;br /&gt;
It is adaptable to computers.&lt;br /&gt;
It is simple.&lt;br /&gt;
It is elegant (well written).&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Moore&#039;s_law Moore&#039;s law]? What is [https://en.wikipedia.org/wiki/Rock&#039;s_law Rock&#039;s law]?===&lt;br /&gt;
Moore&#039;s law is the observation that the number of transistors in a dense integrated circuit doubles approximately every two years. The observation is named after Gordon E. Moore, the co-founder of Intel and Fairchild Semiconductor, whose 1965 paper described a doubling every year in the number of components per integrated circuit, and projected this rate of growth would continue for at least another decade. In 1975, looking forward to the next decade, he revised the forecast to doubling every two years.&lt;br /&gt;
Rock&#039;s law or Moore&#039;s second law, named for Arthur Rock or Gordon Moore, says that the cost of a semiconductor chip fabrication plant doubles every four years. As of 2015, the price had already reached about 14 billion US dollars.&lt;br /&gt;
&lt;br /&gt;
===What were the major contributing factors for success of Microsoft, Apple, Google, &amp;lt;your favourite company&amp;gt;?===&lt;br /&gt;
&lt;br /&gt;
===What were the major contributing factors to the success of Silicon Valley?===&lt;/div&gt;</summary>
		<author><name>Smets</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Exam_help&amp;diff=100282</id>
		<title>Exam help</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Exam_help&amp;diff=100282"/>
		<updated>2016-01-11T17:02:54Z</updated>

		<summary type="html">&lt;p&gt;Smets: /* Explain step by step how operating system is booted up, see slides for flowchart. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Computer hardware==&lt;br /&gt;
&lt;br /&gt;
=== Different buses and their uses===&lt;br /&gt;
In computer architecture, a bus is a communication system that transfers data between components inside a computer, or between computers. This expression covers all related hardware components (wire, optical fiber, etc.) and software, including communication protocols.&lt;br /&gt;
&lt;br /&gt;
The internal bus, also known as internal data bus, memory bus, system bus or Front-Side-Bus, connects all the internal components of a computer, such as CPU and memory, to the motherboard. Internal data buses are also referred to as a local bus, because they are intended to connect to local devices. This bus is typically rather quick and is independent of the rest of the computer operations.&lt;br /&gt;
&lt;br /&gt;
The external bus, or expansion bus, is made up of the electronic pathways that connect the different external devices, such as printer etc., to the computer.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Types and uses:&#039;&#039;&#039;&lt;br /&gt;
;USB&lt;br /&gt;
:Universal Serial Bus. Designed for: input devices, digital cameras, printers, media players...&lt;br /&gt;
&lt;br /&gt;
;Serial ATA&lt;br /&gt;
:Used by internal storage devices (hard disk). They replace the old ATA connectors.&lt;br /&gt;
&lt;br /&gt;
;PCI&lt;br /&gt;
:Peripheral Component Interconnect, is a local computer bus for attaching hardware devices in a computer. Attached devices can take either the form of an integrated circuit fitted onto the motherboard itself or an expansion card that fits into a slot. Typical PCI cards used in PCs include: network cards, sound cards, modems, extra ports such as USB or serial, TV tuner cards and disk controllers.&lt;br /&gt;
&lt;br /&gt;
;PCI Express&lt;br /&gt;
:Peripheral Component Interconnect Express (also called PCIe), is a high-speed serial computer expansion bus standard designed to replace the older PCI, PCI-X, and AGP bus standards. PCIe has numerous improvements over the older standards, including higher maximum system bus throughput, lower I/O pin count and smaller physical footprint, better performance scaling for bus devices, a more detailed error detection and reporting mechanism, and native hot-plug functionality. More recent revisions of the PCIe standard provide hardware support for I/O virtualization.&lt;br /&gt;
&lt;br /&gt;
;Mini PCIe&lt;br /&gt;
:It is based on PCI Express technoogy. Main point is its small size and its large variety of connectors makes it used for USB2.0 cards, SIM card, Wifi and Bluetooth cards, 3G and GPS cards.&lt;br /&gt;
&lt;br /&gt;
;ExpressCard&lt;br /&gt;
:It is an interface to connect peripheral devices to a computer, usually a laptop computer. ExpressCards can connect a variety of devices to a computer including mobile broadband modems, IEEE 1394 (FireWire) connectors, USB connectors, Ethernet network ports, Serial ATA storage devices, solid-state drives, external enclosures for desktop-size PCI Express graphics cards and other peripheral devices, wireless network interface controllers (NIC), TV tuner cards, Common Access Card (CAC) readers, and sound cards.&lt;br /&gt;
&lt;br /&gt;
===What are the differences between hard disk drive (HDD) and solid state drive (SSD)?=== &lt;br /&gt;
The traditional spinning hard drive (HDD) is the basic nonvolatile storage on a computer. Hard drives are essentially metal platters with a magnetic coating which stores the data. A read/write head on an arm accesses the data while the platters are spinning in a hard drive enclosure.&lt;br /&gt;
An SSD does same jobas an HDD, but instead of a magnetic coating on top of platters, the data is stored on interconnected flash memory chips that retain the data even when there&#039;s no power present. HDDs have spinning plates with magnetic coating, while SSDs have no moving parts and instead are using flash memory.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribute&lt;br /&gt;
!SSD (Solid State Drive)&lt;br /&gt;
!HDD (Hard Disk Drive)&lt;br /&gt;
|-&lt;br /&gt;
|Power Draw / Battery Life 	&lt;br /&gt;
|Less power draw, averages 2 – 3 watts, resulting in 30+ minute battery boost 	&lt;br /&gt;
|More power draw, averages 6 – 7 watts and therefore uses more battery&lt;br /&gt;
|-&lt;br /&gt;
|Cost 	&lt;br /&gt;
|Expensive, roughly $0.10 per gigabyte (based on buying a 1TB drive)&lt;br /&gt;
|Only around $0.06 per gigabyte, very cheap (buying a 4TB model)&lt;br /&gt;
|-&lt;br /&gt;
|Capacity 	&lt;br /&gt;
|Typically not larger than 1TB for notebook size drives; 1TB max for desktops 	&lt;br /&gt;
|Typically around 500GB and 2TB maximum for notebook size drives; 6TB max for desktops&lt;br /&gt;
|-&lt;br /&gt;
|Operating System Boot Time 	&lt;br /&gt;
|Around 10-13 seconds average bootup time 	&lt;br /&gt;
|Around 30-40 seconds average bootup time&lt;br /&gt;
|-&lt;br /&gt;
|Noise 	&lt;br /&gt;
|There are no moving parts and as such no sound 	&lt;br /&gt;
|Audible clicks and spinning can be heard&lt;br /&gt;
|-&lt;br /&gt;
|Vibration 	&lt;br /&gt;
|No vibration as there are no moving parts 	&lt;br /&gt;
|The spinning of the platters can sometimes result in vibration&lt;br /&gt;
|-&lt;br /&gt;
|Heat Produced 	&lt;br /&gt;
|Lower power draw and no moving parts so little heat is produced 	&lt;br /&gt;
|HDD doesn’t produce much heat, but it will have a measurable amount more heat than an SSD due to moving parts and higher power draw&lt;br /&gt;
|-&lt;br /&gt;
|Failure Rate 	&lt;br /&gt;
|Mean time between failure rate of 2.0 million hours 	&lt;br /&gt;
|Mean time between failure rate of 1.5 million hours&lt;br /&gt;
|-&lt;br /&gt;
|File Copy / Write Speed 	&lt;br /&gt;
|Generally above 200 MB/s and up to 550 MB/s for cutting edge drives 	&lt;br /&gt;
|The range can be anywhere from 50 – 120MB / s&lt;br /&gt;
|-&lt;br /&gt;
|Encryption 	&lt;br /&gt;
|Full Disk Encryption (FDE) Supported on some models 	&lt;br /&gt;
|Full Disk Encryption (FDE) Supported on some models&lt;br /&gt;
|-&lt;br /&gt;
|File Opening Speed 	&lt;br /&gt;
|Up to 30% faster than HDD 	&lt;br /&gt;
|Slower than SSD&lt;br /&gt;
|-&lt;br /&gt;
|Magnetism Affected? 	&lt;br /&gt;
|An SSD is safe from any effects of magnetism 	&lt;br /&gt;
|Magnets can erase data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===What is the purpose of Flash Translation Layer in terms of solid state drives?===&lt;br /&gt;
Flash drives have limited lifespan due to write cycles (or rather program-erase (PE) cycles) and to exhaust the drive equally, FTL layer is utilised.&lt;br /&gt;
&lt;br /&gt;
Although presenting an array of Logical Block Addresses (LBA) makes sense for HDDs as their sectors can be overwritten, it is not fully suited to the way flash memory works. For this reason, an additional component is required to hide the inner characteristics of NAND flash memory and expose only an array of LBAs to the host. This component is called the Flash Translation Layer (FTL), and resides in the SSD controller. The FTL is critical and has three main purposes: logical block mapping, wear leveling and garbage collection.&lt;br /&gt;
&lt;br /&gt;
The logical block mapping translates logical block addresses (LBAs) from the host space into physical block addresses (PBAs) in the physical NAND-flash memory space. This mapping takes the form of a table, which for any LBA gives the corresponding PBA.&lt;br /&gt;
&lt;br /&gt;
Wear leveling (also written as wear levelling) is a technique[1] for prolonging the service life of some kinds of erasable computer storage media, such as flash memory (used in solid-state drives (SSDs) and USB flash drives).&lt;br /&gt;
&lt;br /&gt;
The garbage collection process in the SSD controller ensures that “stale” pages are erased and restored into a “free” state so that the incoming write commands can be processed. If the data in a page has to be updated, the new version is written to a free page, and the page containing the previous version is marked as stale. When blocks contain stale pages, they need to be erased before they can be written to.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===What are difference between volatile/non-volatile, RAM, ROM, EEPROM and where are they used?===&lt;br /&gt;
&lt;br /&gt;
Volatile = does not hold data after power off.&lt;br /&gt;
Non-volatile = holds data even after power off.&lt;br /&gt;
&lt;br /&gt;
Random Access Memory or RAM is a form of data storage that can be accessed randomly at any time, in any order and from any physical location., allowing quick access and manipulation. RAM allows the computer to read data quickly to run applications. It allows reading and writing. It is volatile.&lt;br /&gt;
&lt;br /&gt;
Read-only memory or ROM is also a form of data storage that can not be easily altered or reprogrammed.Stores instuctions that are not nescesary for re-booting up to make the computer operate when it is switched off.They are hardwired. ROM stores the program required to initially boot the computer. It only allows reading. It is non-volatile.&lt;br /&gt;
&lt;br /&gt;
EEPROM (electrically erasable programmable read-only memory) is user-modifiable read-only memory (ROM) that can be erased and reprogrammed. Unlike EPROM chips, EEPROMs do not need to be removed from the computer to be modified. However, an EEPROM chip has to be erased and reprogrammed in its entirety, not selectively. It also has a limited life - that is, the number of times it can be reprogrammed is limited to tens or hundreds of thousands of times. BIOS of PCs are usually written to EEPROM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===What is data retention?===&lt;br /&gt;
It is how long a device can hold data before it becomes unreadable.&lt;br /&gt;
&lt;br /&gt;
===What are difference between asynchronous/synchronous, dynamic/static RAM and where are they used?===&lt;br /&gt;
The two main forms of modern RAM are static RAM (SRAM) and dynamic RAM (DRAM). In SRAM, a bit of data is stored using the state of a six transistor memory cell. This form of RAM is more expensive to produce, but is generally faster and requires less power than DRAM and, in modern computers, is often used as cache memory for the CPU. DRAM stores a bit of data using a transistor and capacitor pair, which together comprise a DRAM memory cell. The capacitor holds a high or low charge (1 or 0, respectively), and the transistor acts as a switch that lets the control circuitry on the chip read the capacitor&#039;s state of charge or change it. As this form of memory is less expensive to produce than static RAM, it is the predominant form of computer memory used in modern computers.&lt;br /&gt;
Dynamic RAM is used to create larger RAM space system, where Static RAM create speed- sensitive cache.&lt;br /&gt;
Dynamic RAM consumes less power than Static RAM.&lt;br /&gt;
&lt;br /&gt;
Asynchronous refers to the fact that the memory is not synchronized to the system clock. A memory access is begun, and a certain period of time later the memory value appears on the bus. The signals are not coordinated with the system clock at all, as described in the section discussing memory access. Asynchronous memory works fine in lower-speed memory bus systems but is not nearly as suitable for use in high-speed (&amp;gt;66 MHz) memory systems.&lt;br /&gt;
A newer type of DRAM, called &amp;quot;synchronous DRAM&amp;quot; or &amp;quot;SDRAM&amp;quot;, is synchronized to the system clock; all signals are tied to the clock so timing is much tighter and better controlled. This type of memory is much faster than asynchronous DRAM and can be used to improve the performance of the system. It is more suitable to the higher-speed memory systems of the newest PCs.&lt;br /&gt;
&lt;br /&gt;
===What is [https://compsci2014.wikispaces.com/2.1.3+Explain+the+use+of+cache+memory cache]? What is cache coherence?===&lt;br /&gt;
&lt;br /&gt;
Cache memory is used to reduce the average memory access times. This is done by storing the data that is frequently accessed in main memory addresses therefore allowing the CPU to access the data faster. This is due to the fact that cache memory can be read a lot faster than main memory.&lt;br /&gt;
 &lt;br /&gt;
Cache coherence is the consistency of shared resource data that ends up stored in multiple local caches. When clients in a system maintain caches of a common memory resource, problems may arise with inconsistent data, which is particularly the case with CPUs in a multiprocessing system.&lt;br /&gt;
&lt;br /&gt;
===What are differences between resistive and capacitive touchscreen?=== &lt;br /&gt;
Resistive touchscreen needs pressure to work by connecting to sheets of plastic and thus conducting electricity. Capacitive touchscreen works by conducting electricity from user&#039;s finger.&lt;br /&gt;
&lt;br /&gt;
Resistive touchscreens rely on the pressure of your fingertip—or any other object—to register input. They consist of two flexible layers with an air gap in-between. In order for the touchscreen to register input, you must press on the top layer using a small amount of pressure, in order to depress the top layer enough to make contact with the bottom layer. The touchscreen will then register the precise location of the touch. You can use anything you want on a resistive touchscreen to make the touch interface work; a gloved finger, a wooden rod, a fingernail – anything that creates enough pressure on the point of impact will activate the mechanism and the touch will be registered.&lt;br /&gt;
&lt;br /&gt;
Capacitive touchscreens instead sense conductivity to register input—usually from the skin on your fingertip. Because you don’t need to apply pressure, capacitive touchscreens are more responsive than resistive touchscreens. However, because they work by sensing conductivity, capacitive touchscreens can only be used with objects that have conductive properties, which includes your fingertip (which is most ideal), and special styluses designed with a conductive tip. This is the reason you cannot use a capacitive screen while wearing gloves – the gloves are not conductive, and the touch does not cause any change in the electrostatic field.&lt;br /&gt;
&lt;br /&gt;
[http://www.alphr.com/realworld/357325/capacitive-or-resistive-whats-the-best-type-of-touchscreen In-depth comparison of two]&lt;br /&gt;
&lt;br /&gt;
===Explain how [http://www.bidouille.org/hack/mousecam computer mouse] works?===&lt;br /&gt;
An optical computer mouse uses a light source, typically an LED, and a light detector, such as an array of photodiodes, to detect movement relative to a surface.&lt;br /&gt;
Modern surface-independent optical mice work by using an optoelectronic sensor (essentially, a tiny low-resolution video camera) to take successive images of the surface on which the mouse operates.&lt;br /&gt;
The technology underlying the modern optical computer mouse is known as digital image correlation.&lt;br /&gt;
To understand how optical mice work, imagine two photographs of the same object except slightly offset from each other. Place both photographs on a light table to make them transparent, and slide one across the other until their images line up. The amount that the edges of one photograph overhang the other represents the offset between the images, and in the case of an optical computer mouse the distance it has moved.&lt;br /&gt;
Optical mice capture one thousand successive images or more per second. Depending on how fast the mouse is moving, each image will be offset from the previous one by a fraction of a pixel or as many as several pixels. Optical mice mathematically process these images using cross correlation to calculate how much each successive image is offset from the previous one.&lt;br /&gt;
[http://www.topdesignmag.com/mouse-history-in-photos/ History of computer mouse].&lt;br /&gt;
&lt;br /&gt;
===Explain how [http://www.daskeyboard.com/blog/typing-through-time-the-history-of-the-keyboard/ computer keyboard] works?===&lt;br /&gt;
[http://computer.howstuffworks.com/keyboard.htm HowStuffworks article] [http://www.explainthatstuff.com/computerkeyboards.html Explain that Stuff article] [http://www.daskeyboard.com/blog/typing-through-time-the-history-of-the-keyboard/ Keyboard History]&lt;br /&gt;
&lt;br /&gt;
===Explain how [https://en.wikipedia.org/wiki/Cathode_ray_tube cathode ray tube] (CRT) based screen technology works and name pros/cons.===&lt;br /&gt;
[https://www.youtube.com/watch?v=2czqYV3T_Kc]&lt;br /&gt;
The cathode ray tube (CRT) is a vacuum tube containing one or more electron guns, and a phosphorescent screen used to, It has a means to accelerate and deflect the electron beam(s) onto the screen to create the images. The images may represent electrical waveforms (oscilloscope), pictures (television, computer monitor), radar targets or others. CRTs have also been used as memory devices, in which case the visible light emitted from the fluorescent material (if any) is not intended to have significant meaning to a visual observer (though the visible pattern on the tube face may cryptically represent the stored data).&lt;br /&gt;
&lt;br /&gt;
The CRT uses an evacuated glass envelope which is large, deep (i.e. long from front screen face to rear end), fairly heavy, and relatively fragile. As a matter of safety, the face is typically made of thick lead glass so as to be highly shatter-resistant and to block most X-ray emissions, particularly if the CRT is used in a consumer product.&lt;br /&gt;
&lt;br /&gt;
===Explain how [https://en.wikipedia.org/wiki/Liquid-crystal_display liquid crystal displays] (LCD) work and name pros/cons.===&lt;br /&gt;
[https://www.youtube.com/watch?v=nCHgmCxGEzY]&lt;br /&gt;
&lt;br /&gt;
===Name screen technologies making use of thin film transistor (TFT) technology?===&lt;br /&gt;
[https://en.wikipedia.org/wiki/Thin-film_transistor]&lt;br /&gt;
&lt;br /&gt;
===Name uses for light polarization filters?===&lt;br /&gt;
A polarizer or polariser is an optical filter that passes light of a specific polarization and blocks waves of other polarizations. It can convert a beam of light of undefined or mixed polarization into a beam with well-defined polarization, polarized light. Polarizers are used in many optical techniques and instruments, and polarizing filters find applications in photography, liquid crystal display technology and 3D watching. Polarizers can also be made for other types of electromagnetic waves besides light, such as radio waves, microwaves, and X-rays.&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/Polarizing_filter_%28photography%29 Polarizer photo] [https://en.wikipedia.org/wiki/Polarized_3D_system Polarizer 3D]&lt;br /&gt;
&lt;br /&gt;
===What are the benefits of [https://en.wikipedia.org/wiki/Twisted_pair twisted pair cabling] and [https://en.wikipedia.org/wiki/Differential_signaling differential signalling]?===&lt;br /&gt;
&#039;&#039;&#039;Twisted pair&#039;&#039;&#039; cabling is a type of wiring in which two conductors of a single circuit are twisted together for the purposes of canceling out electromagnetic interference (EMI) from external sources; for instance, electromagnetic radiation from unshielded twisted pair (UTP) cables, and crosstalk between neighboring pairs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Differential signaling&#039;&#039;&#039; is a method for electrically transmitting information using two complementary signals. The technique sends the same electrical signal as a differential pair of signals, each in its own conductor. The pair of conductors can be wires (typically twisted together) or traces on a circuit board. The receiving circuit responds to the electrical difference between the two signals, rather than the difference between a single wire and ground. Since the receiving circuit only detects the difference between the wires, the technique resists electromagnetic noise compared to one conductor with an un-paired reference (ground). The technique works for both analog signaling and digital signaling.&lt;br /&gt;
&lt;br /&gt;
===[https://en.wikipedia.org/wiki/Active_matrix Active matrix] vs [https://en.wikipedia.org/wiki/Passive_matrix_addressing passive matrix] in display technology===&lt;br /&gt;
Active-matrix display : An active-matrix display, also known as a TFT (thin-film transistor) display, uses a separate transistor to apply charges to each liquid crystal cell and thus displays high-quality color that is viewable from all angles.&lt;br /&gt;
&lt;br /&gt;
Passive-matrix display : A passive-matrix display uses fewer transistors, requires less power, and is less expensive than an active-matrix display. The color on a passive-matrix display often is not as bright as an active-matrix display. Users view images on a passive-matrix display best when working directly in front of it.&lt;br /&gt;
&lt;br /&gt;
==Storage abstractions==&lt;br /&gt;
&lt;br /&gt;
===What is a [https://en.wikipedia.org/wiki/Block_%28data_storage%29 block device]?===&lt;br /&gt;
In computing (specifically data transmission and data storage), a block, sometimes called a physical record, is a sequence of bytes or bits, usually containing some whole number of records, having a maximum length, a block size.Data thus structured are said to be blocked. The process of putting data into blocks is called blocking. Most file systems are based on a block device, which is a level of abstraction for the hardware responsible for storing and retrieving specified blocks of data&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Logical_block_addressing logical block addressing] and what are the benefits compared to older [https://en.wikipedia.org/wiki/Cylinder-head-sector cylinder-head-sector addressing] method in terms of harddisks?===&lt;br /&gt;
Logical block addressing (LBA) is a common scheme used for specifying the location of blocks of data stored on computer storage devices, generally secondary storage systems such as hard disk drives. LBA is a particularly simple linear addressing scheme; blocks are located by an integer index, with the first block being LBA 0, the second LBA 1, and so on. &lt;br /&gt;
&lt;br /&gt;
Cylinder-head-sector, also known as CHS, is an early method for giving addresses to each physical block of data on a hard disk drive. CHS addressing is the process of identifying individual sectors on a disk by their position in a track, where the track is determined by the head and cylinder numbers.&lt;br /&gt;
&lt;br /&gt;
LBA allows a maximum addressing capacity of 2TB although CHS allows 8GB&lt;br /&gt;
&lt;br /&gt;
===What is a [https://en.wikipedia.org/wiki/Disk_partitioning disk partition]?===&lt;br /&gt;
Disk partitioning is the creation of one or more regions on a hard disk or other secondary storage, so that an operating system can manage information in each region separately. Partitioning is typically the first step of preparing a newly manufactured disk, before any files or directories have been created. The disk stores the information about the partitions&#039; locations and sizes in an area known as the partition table that the operating system reads before any other part of the disk. Each partition then appears in the operating system as a distinct &amp;quot;logical&amp;quot; disk that uses part of the actual disk.&lt;br /&gt;
&lt;br /&gt;
===What is a [https://en.wikipedia.org/wiki/File_system file system]?===&lt;br /&gt;
In computing, a file system (or filesystem) is used to control how data is stored and retrieved. Without a file system, information placed in a storage area would be one large body of data with no way to tell where one piece of information stops and the next begins. By separating the data into individual pieces, and giving each piece a name, the information is easily separated and identified. Taking its name from the way paper-based information systems are named, each group of data is called a &amp;quot;file&amp;quot;. The structure and logic rules used to manage the groups of information and their names is called a &amp;quot;file system&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Journaling_file_system#Write_hazards journaling] in terms of filesystems and what are the benefits? Name some journaled file systems in use nowadays.===&lt;br /&gt;
A journaling file system is a file system that keeps track of changes not yet committed to the file system&#039;s main part by recording the intentions of such changes in a data structure known as a &amp;quot;journal&amp;quot;, which is usually a circular log. In the event of a system crash or power failure, such file systems can be brought back online quicker with lower likelihood of becoming corrupted.&lt;br /&gt;
&lt;br /&gt;
Depending on the actual implementation, a journaling file system may only keep track of stored metadata, resulting in improved performance at the expense of increased possibility for data corruption. Alternatively, a journaling file system may track both stored data and related metadata, while some implementations allow selectable behavior in this regard&lt;br /&gt;
&lt;br /&gt;
==Bootloaders, kernels==&lt;br /&gt;
&lt;br /&gt;
===What is the role of BIOS/UEFI in x86-based machines?===&lt;br /&gt;
BIOS (Basic Input/Output System) performs during boot up process of a computer and prepares it for the OS and its&#039; programs.&lt;br /&gt;
&lt;br /&gt;
UEFI (Unified Extensible Firmware Interface) is a replacement for BIOS. It offers several advantages over previous firmware interface, like: &lt;br /&gt;
* Ability to boot from large disks (over 2 TB) with a GUID Partition Table (GPT)&lt;br /&gt;
* CPU-independent architecture&lt;br /&gt;
* CPU-independent drivers&lt;br /&gt;
* Flexible pre-OS environment, including network capability&lt;br /&gt;
* Modular design&lt;br /&gt;
&lt;br /&gt;
===Explain step by step how operating system is booted up, see slides for flowchart.===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. The first thing a computer has to do when it is turned on is start up a special program called an operating system. That process is called booting. The instructions for booting are built into BIOS (Basic input/output system).&lt;br /&gt;
2. The BIOS will tell your computer to look into the boot disk (usually the lowest-numbered hard disk) for a boot loader and the boot loader will be pulled into memory and will be started. &lt;br /&gt;
3. The boot loader&#039;s job is to start the real operating system and it does it by looking for a kernel, loading it into memory and  starting it. &lt;br /&gt;
5. Once the kernel starts, it has to look around to find the rest of the hardware and get ready to run programs ( It does this by poking not at ordinary memory locations but rather at I/O ports — special bus addresses that are likely to have device controller cards listening at them for commands). The kernel doesn&#039;t poke at random; it has a lot of built-in knowledge about what it&#039;s likely to find where, and how controllers will respond if they&#039;re present. This process is called autoprobing.&lt;br /&gt;
&lt;br /&gt;
6. After the kernel is up and running, it&#039;s the end of first stage. After the first stage, the kernel hands control to a special program called &amp;quot;init&amp;quot; which spawns housekeeping processes. The init&#039;s process&#039;s first task is to look that your hard disks are okay &lt;br /&gt;
&lt;br /&gt;
7. Init&#039;s next step is to start several daemons. A daemon is a program like a print spooler, a mail listener or a WWW server that lurks in the background, waiting for things to do. These special programs often have to coordinate several requests that could conflict. They are daemons because it&#039;s often easier to write one program that runs constantly and knows about all requests than it would be to try to make sure that a flock of copies (each processing one request and all running at the same time) don&#039;t step on each other.&lt;br /&gt;
&lt;br /&gt;
8. The next step is to prepare for users. Init starts a copy of a program called getty to watch your screen and keyboard (and maybe more copies to watch dial-in serial ports).&lt;br /&gt;
&lt;br /&gt;
9. The next step is to start up various daemons that support networking and other services. The most important of these is your X server. X is a daemon that manages your display, keyboard, and mouse. Its main job is to produce the color pixel graphics you normally see on your screen.&lt;br /&gt;
&lt;br /&gt;
10. When the X server comes up, during the last part of your machine&#039;s boot process, it effectively takes over the hardware from whatever virtual console was previously in control. That&#039;s when you&#039;ll see a graphical login screen, produced for you by a program called a display manager.&lt;br /&gt;
&lt;br /&gt;
===BIOS===&lt;br /&gt;
=Basic input and output system&lt;br /&gt;
Located at memory location 0xFFFF0&lt;br /&gt;
bo&lt;br /&gt;
&lt;br /&gt;
1. The first thing a computer has to do when it is turned on is start up a special program called an operating system. That process is called booting. The instructions for booting are built into BIOS (Basic input/output system).&lt;br /&gt;
2. The BIOS will tell your computer to look into the boot disk (usually the lowest-numbered hard disk) for a boot loader and the boot loader will be pulled into memory and will be started. &lt;br /&gt;
3. The boot loader&#039;s job is to start the real operating system and it does it by looking for a kernel, loading it into memory and  starting it. &lt;br /&gt;
5. Once the kernel starts, it has to look around to find the rest of the hardware and get ready to run programs ( It does this by poking not at ordinary memory locations but rather at I/O ports — special bus addresses that are likely to have device controller cards listening at them for commands). The kernel doesn&#039;t poke at random; it has a lot of built-in knowledge about what it&#039;s likely to find where, and how controllers will respond if they&#039;re present. This process is called autoprobing.&lt;br /&gt;
&lt;br /&gt;
6. After the kernel is up and running, it&#039;s the end of first stage. After the first stage, the kernel hands control to a special program called &amp;quot;init&amp;quot; which spawns housekeeping processes. The init&#039;s process&#039;s first task is to look that your hard disks are okay &lt;br /&gt;
&lt;br /&gt;
7. Init&#039;s next step is to start several daemons. A daemon is a program like a print spooler, a mail listener or a WWW server that lurks in the background, waiting for things to do. These special programs often have to coordinate several requests that could conflict. They are daemons because it&#039;s often easier to write one program that runs constantly and knows about all requests than it would be to try to make sure that a flock of copies (each processing one request and all running at the same time) don&#039;t step on each other.&lt;br /&gt;
&lt;br /&gt;
8. The next step is to prepare for users. Init starts a copy of a program called getty to watch your screen and keyboard (and maybe more copies to watch dial-in serial ports).&lt;br /&gt;
&lt;br /&gt;
9. The next step is to start up various daemons that support networking and other services. The most important of these is your X server. X is a daemon that manages your display, keyboard, and mouse. Its main job is to produce the color pixel graphics you normally see on your screen.&lt;br /&gt;
&lt;br /&gt;
10. When the X server comes up, during the last part of your machine&#039;s boot process, it effectively takes over the hardware from whatever virtual console was previously in control. That&#039;s when you&#039;ll see a graphical login screen, produced for you by a program called a display manager.&lt;br /&gt;
&lt;br /&gt;
===Describe the functionality provided by general purpose operating system.===&lt;br /&gt;
See architecture of [https://en.wikipedia.org/wiki/Architecture_of_Windows_NT Windows NT], [http://www.elinux.org/Android_Architecture Android], [https://en.wikipedia.org/wiki/Architecture_of_OS_X OS X].&lt;br /&gt;
&lt;br /&gt;
===What are the main differences between [https://en.wikipedia.org/wiki/Real_mode real mode] and [https://en.wikipedia.org/wiki/Protected_mode protected mode] of x86-based processor?===&lt;br /&gt;
&lt;br /&gt;
===What happens during context switch?===&lt;br /&gt;
&lt;br /&gt;
===What is the purpose of [https://en.wikipedia.org/wiki/Virtual_memory paged virtual memory]?===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Libraries, frameworks==&lt;br /&gt;
&lt;br /&gt;
==Programming languages==&lt;br /&gt;
&lt;br /&gt;
===What are the major steps of compilation?===&lt;br /&gt;
===What are the differences between [https://en.wikipedia.org/wiki/Interpreted_language interpreted], [https://en.wikipedia.org/wiki/Just-in-time_compilation JIT-compilation] and [https://en.wikipedia.org/wiki/Compiler traditional compiling]?===&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Control_flow control flow]? Loops? Conditional statements?===&lt;br /&gt;
&lt;br /&gt;
==Data encoding==&lt;br /&gt;
&lt;br /&gt;
===What is bit? Nibble? Byte? Word?===&lt;br /&gt;
Bit is a basic unit of information that can hold either True or False value (1 or 0).&lt;br /&gt;
&lt;br /&gt;
Nibble is half of an octet.&lt;br /&gt;
&lt;br /&gt;
Byte is a unit of eight bits. Comes from the number of bits used to encode a single character of text in a computer&lt;br /&gt;
&lt;br /&gt;
Word is a length of bits the processor-architecture can process in bits (8-bit, 32-bit etc)&lt;br /&gt;
&lt;br /&gt;
===Write 9375 in binary, hexadecimal?===&lt;br /&gt;
&lt;br /&gt;
===Write 0xDEADBEEF in decimal?===&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Quantization_%28signal_processing%29 quantization] in terms of signal processing?===&lt;br /&gt;
&lt;br /&gt;
===How are [https://en.wikipedia.org/wiki/Integer_%28computer_science%29 integers] stored in binary? What integer range can be described using n bits? How many bits are required to describe integer range from n .. m.===&lt;br /&gt;
&lt;br /&gt;
===How are [https://en.wikipedia.org/wiki/Single-precision_floating-point_format single precision] and [https://en.wikipedia.org/wiki/Double-precision_floating-point_format double precision] floating point numbers stored in binary according to [https://en.wikipedia.org/wiki/IEEE_floating_point IEEE754 standard]?===&lt;br /&gt;
[http://lauri.vosandi.com/hdl/arithmetic/floating-point-representation.html Floating-point multiplication]&lt;br /&gt;
&lt;br /&gt;
===What is the difference between CMYK and RGB color models? How are YUV, HSV and HSL colorspaces related to RGB? What are sRGB and YCbCr and where are they used?===&lt;br /&gt;
&lt;br /&gt;
===How is data encoded on audio CD-s? What is the [http://lauri.vosandi.com/2013/07/audio-codecs.html capacity of an audio CD]?===&lt;br /&gt;
&lt;br /&gt;
===What is sampling rate? What is bit depth? What is resolution?===&lt;br /&gt;
&lt;br /&gt;
===What is bitrate?===&lt;br /&gt;
&lt;br /&gt;
===What is lossy/lossless compression?===&lt;br /&gt;
&lt;br /&gt;
===What is JPEG suitable for? Is JPEG lossy or lossless compression method?===&lt;br /&gt;
&lt;br /&gt;
===What is PNG suitable for? Does PNG support compression?===&lt;br /&gt;
&lt;br /&gt;
===How are time domain and frequency domain related in terms of signal processing? What is Fourier transform and where it is applied?===&lt;br /&gt;
&lt;br /&gt;
==Code execution in processor==&lt;br /&gt;
&lt;br /&gt;
===Given ~10 instructions and their explainations, follow the instructions and elaborate after every step what happened in the processor?===&lt;br /&gt;
&lt;br /&gt;
==Microcontrollers==&lt;br /&gt;
&lt;br /&gt;
===What distinguishes microcontroller from microprocessor?===&lt;br /&gt;
&lt;br /&gt;
===What are the differences between Hardvard architecture and von Neumann architecture?===&lt;br /&gt;
&lt;br /&gt;
===What is an interrupt?===&lt;br /&gt;
&lt;br /&gt;
===What is an timer?===&lt;br /&gt;
&lt;br /&gt;
==Introduction to Boole algebra==&lt;br /&gt;
&lt;br /&gt;
===Simplify A AND A OR B===&lt;br /&gt;
&lt;br /&gt;
===Show addition of X and Y in binary===&lt;br /&gt;
&lt;br /&gt;
===Show subtraction of X and Y  in binary===&lt;br /&gt;
&lt;br /&gt;
===Show multiplication of X and Y in binary===&lt;br /&gt;
&lt;br /&gt;
==Hardware description languages==&lt;br /&gt;
&lt;br /&gt;
===What are the uses for hardware description languages?===&lt;br /&gt;
In electronics, a hardware description language (HDL) is a specialized computer language used to program the structure, design and operation of electronic circuits, and most commonly, digital logic circuits.&lt;br /&gt;
&lt;br /&gt;
A hardware description language enables a precise, formal description of an electronic circuit that allows for the automated analysis, simulation, and simulated testing of an electronic circuit. It also allows for the compilation of an HDL program into a lower level specification of physical electronic components, such as the set of masks used to create an integrated circuit.&lt;br /&gt;
&lt;br /&gt;
A hardware description language looks much like a programming language such as C; it is a textual description consisting of expressions, statements and control structures. One important difference between most programming languages and HDLs is that HDLs explicitly include the notion of time.&lt;br /&gt;
&lt;br /&gt;
===What is latch?===&lt;br /&gt;
A latch is an example of a bistable multivibrator, that is, a device with exactly two stable states. These states are high-output and low-output. A latch has a feedback path, so information can be retained by the device. Therefore latches can be memory devices, and can store one bit of data for as long as the device is powered. As the name suggests, latches are used to &amp;quot;latch onto&amp;quot; information and hold in place. Latches are very similar to flip-flops, but are not synchronous devices, and do not operate on clock edges as flip-flops do.&lt;br /&gt;
&lt;br /&gt;
===What is flip-flop?===&lt;br /&gt;
A flip-flop is a device very like a latch in that it is a bistable multivibrator, having two states and a feedback path that allows it to store a bit of information. The difference between a latch and a flip-flop is that a latch is asynchronous, and the outputs can change as soon as the inputs do (or at least after a small propagation delay). A flip-flop, on the other hand, is edge-triggered and only changes state when a control signal goes from high to low or low to high. This distinction is relatively recent and is not formal, with many authorities still referring to flip-flops as latches and vice versa, but it is a helpful distinction to make for the sake of clarity.&lt;br /&gt;
&lt;br /&gt;
There are several different types of flip-flop each with its own uses and peculiarities. The four main types of flip-flop are : SR, JK, D, and T.&lt;br /&gt;
&lt;br /&gt;
===What is mux (multiplexer)?===&lt;br /&gt;
A multiplexer (or mux) is a device that selects one of several analog or digital input signals and forwards the selected input into a single line.[1] A multiplexer of 2n inputs has n select lines, which are used to select which input line to send to the output.[2] Multiplexers are mainly used to increase the amount of data that can be sent over the network within a certain amount of time and bandwidth.[1] A multiplexer is also called a data selector.&lt;br /&gt;
&lt;br /&gt;
An electronic multiplexer makes it possible for several signals to share one device or resource, for example one A/D converter or one communication line, instead of having one device per input signal.&lt;br /&gt;
&lt;br /&gt;
===What is register? Register file?===&lt;br /&gt;
&#039;&#039;&#039;Registers&#039;&#039;&#039; are a special, high-speed storage area within the CPU. All data must be represented in a register before it can be processed. For example, if two numbers are to be multiplied, both numbers must be in registers, and the result is also placed in a register. A register may hold a computer instruction , a storage address, or any kind of data (such as a bit sequence or individual characters). A register must be large enough to hold an instruction - for example, in a 32-bit instruction computer, a register must be 32 bits in length. In some computer designs, there are smaller registers - for example, half-registers - for shorter instructions. Depending on the processor design and language rules, registers may be numbered or have arbitrary names.&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;register file&#039;&#039;&#039; is an array of processor registers in a central processing unit (CPU). Modern integrated circuit-based register files are usually implemented by way of fast static RAMs with multiple ports. Such RAMs are distinguished by having dedicated read and write ports, whereas ordinary multiported SRAMs will usually read and write through the same ports.&lt;br /&gt;
&lt;br /&gt;
The instruction set architecture of a CPU will almost always define a set of registers which are used to stage data between memory and the functional units on the chip. In simpler CPUs, these architectural registers correspond one-for-one to the entries in a physical register file within the CPU. More complicated CPUs use register renaming, so that the mapping of which physical entry stores a particular architectural register changes dynamically during execution. The register file is part of the architecture and visible to the programmer, as opposed to the concept of transparent caches.&lt;br /&gt;
&lt;br /&gt;
===What is ALU?===&lt;br /&gt;
An arithmetic logic unit (ALU) is a digital electronic circuit that performs arithmetic and bitwise logical operations on integer binary numbers. This is in contrast to a floating-point unit (FPU), which operates on floating point numbers. An ALU is a fundamental building block of many types of computing circuits, including the central processing unit (CPU) of computers, FPUs, and graphics processing units (GPUs). A single CPU, FPU or GPU may contain multiple ALUs.&lt;br /&gt;
&lt;br /&gt;
The inputs to an ALU are the data to be operated on, called operands, and a code indicating the operation to be performed; the ALU&#039;s output is the result of the performed operation. In many designs, the ALU also exchanges additional information with a status register, which relates to the result of the current or previous operations.&lt;br /&gt;
&lt;br /&gt;
===What is floating-point unit?===&lt;br /&gt;
A floating-point unit (FPU) is a part of a computer system specially designed to carry out operations on floating point numbers. Typical operations are addition, subtraction, multiplication, division, square root, and bitshifting. Some systems (particularly older, microcode-based architectures) can also perform various transcendental functions such as exponential or trigonometric calculations, though in most modern processors these are done with software library routines.&lt;br /&gt;
&lt;br /&gt;
In general purpose computer architectures, one or more FPUs may be integrated with the central processing unit; however many embedded processors do not have hardware support for floating-point operations.&lt;br /&gt;
&lt;br /&gt;
===What is a cache?===&lt;br /&gt;
&lt;br /&gt;
===What is a bus?===&lt;br /&gt;
&lt;br /&gt;
===Show the circuit diagram for A OR B AND C, NOT A AND B, &amp;lt;insert some other Boole formula here&amp;gt;?===&lt;br /&gt;
&lt;br /&gt;
===Show the truth table for &amp;lt;insert Boole formula here&amp;gt;?===&lt;br /&gt;
&lt;br /&gt;
===Write the equivalent Boole formula of a circuit diagram.===&lt;br /&gt;
&lt;br /&gt;
==Publishing work==&lt;br /&gt;
&lt;br /&gt;
===What are the major implications of MIT, BSD and GPL licenses?===&lt;br /&gt;
&lt;br /&gt;
===What are the differences between copyright, trademark, trade secret?===&lt;br /&gt;
“Intellectual property is something that is created by the mind.”  Typically, we think of ideas as being created by the mind – but intellectual property does not protect bare ideas: rather, it is the expression or symbolic power/recognizability of the ideas that are protected. &lt;br /&gt;
Thus, it is the design of the rocket that is patented, not the idea of a rocket.  It is the painting of the lake that is copyrighted, not the idea of a lake.  And it is the consumer recognizable logo that is trademarked, not the idea of a logo.  Intellectual property protects how we express and identify ideas in concrete ways – not the idea itself.&lt;br /&gt;
&lt;br /&gt;
In particular:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Patents&#039;&#039;&#039;: protect functional expressions of an idea – not the idea itself.  A machines, method/process, manufacture, compositions of matter, and improvements of any of these items can be patented.  Thus, I can patent a design for the nozzle on a rocket, or the method of making the rocket, or the method of making the rocket fuel, or the metal in which the rocket fuel is stored, or a new way of transporting the rocket fuel to the rocket.  But I cannot patent the broad “idea” of a rocket.&lt;br /&gt;
     &lt;br /&gt;
&#039;&#039;&#039;Copyrights&#039;&#039;&#039;: protect the specific creative expression of an idea through any medium of artistic/creative expression – i.e., paintings, photographs, sculpture, writings, software, etc.   A copyright protects your painting of a haystack, but it would not prohibit another painter from expressing their artistry or viewpoint by also painting a haystack. Likewise, while Ian Fleming was able to receive a copyright on his particular expression of the idea of a secret agent (i.e., a debonair English secret agent), he could not prevent Rich Wilkes from receiving a copyright on his expression of the idea of a secret agent (i.e., a tattooed bald extreme athlete turned reluctant secret agent).  &lt;br /&gt;
     &lt;br /&gt;
&#039;&#039;&#039;Trademarks&#039;&#039;&#039;: protect any symbol that indicates the source or origin of the goods or services to which it is affixed.  While a trademark can be extremely valuable to its owner, the ultimate purpose of a trademark is to protect consumers – that is, the function of a trademark is to inform the consumer where the goods or services originate.  The consumer, knowing the origin of the goods, can make purchasing decisions based on prior knowledge, reputation or marketing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Trade secret&#039;&#039;&#039;: is a formula, practice, process, design, instrument, pattern, commercial method, or compilation of information which is not generally known or reasonably ascertainable by others, and by which a business can obtain an economic advantage over competitors or customers.[&lt;br /&gt;
&lt;br /&gt;
While each category is distinct, a product (or components/aspects of a product) may fall into one or more of the categories.  For example, software can be protected by both patents and copyrights.  The copyright would protect the artistic expression of the idea – i.e., the code itself – while the patent would protect the functional expression of the idea – e.g., using a single click to purchase a book online.  Likewise, it is likely that the software company will use a trademark to indicate who made the software. &lt;br /&gt;
&lt;br /&gt;
An additional example would be a logo for a company.  The logo may serve as a trademark indicating that all products affixed with the logo are from the same source.  The creative and artistic aspects of the logo may also be protected by a copyright.&lt;br /&gt;
&lt;br /&gt;
===Where would you use waterfall software development model? Where would you use agile?===&lt;br /&gt;
&lt;br /&gt;
===What is the purpose of a version control system?===&lt;br /&gt;
&lt;br /&gt;
===What would you store in a version control system?===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Algorithms and data structures==&lt;br /&gt;
&lt;br /&gt;
===What is time complexity of algorithm?===&lt;br /&gt;
In computer science, the time complexity of an algorithm quantifies the amount of time taken by an algorithm to run as a function of the length of the string representing the input. Time complexity is commonly estimated by counting the number of elementary operations performed by the algorithm, where an elementary operation takes a fixed amount of time to perform.&lt;br /&gt;
&lt;br /&gt;
===What is space complexity of algorithm?===&lt;br /&gt;
Space complexity is a measure of the amount of working storage an algorithm needs. That means how much memory, in the worst case, is needed at any point in the algorithm.&lt;br /&gt;
It represents the total amount of memory space that a &amp;quot;normal&amp;quot; physical computer would need to solve a given computational problem with a given algorithm.&lt;br /&gt;
&lt;br /&gt;
===What&#039;s a good algorithm?===&lt;br /&gt;
It executes as fast as possible.&lt;br /&gt;
It takes as less space as possible.&lt;br /&gt;
It is adaptable to computers.&lt;br /&gt;
It is simple.&lt;br /&gt;
It is elegant (well written).&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Moore&#039;s_law Moore&#039;s law]? What is [https://en.wikipedia.org/wiki/Rock&#039;s_law Rock&#039;s law]?===&lt;br /&gt;
Moore&#039;s law is the observation that the number of transistors in a dense integrated circuit doubles approximately every two years. The observation is named after Gordon E. Moore, the co-founder of Intel and Fairchild Semiconductor, whose 1965 paper described a doubling every year in the number of components per integrated circuit, and projected this rate of growth would continue for at least another decade. In 1975, looking forward to the next decade, he revised the forecast to doubling every two years.&lt;br /&gt;
Rock&#039;s law or Moore&#039;s second law, named for Arthur Rock or Gordon Moore, says that the cost of a semiconductor chip fabrication plant doubles every four years. As of 2015, the price had already reached about 14 billion US dollars.&lt;br /&gt;
&lt;br /&gt;
===What were the major contributing factors for success of Microsoft, Apple, Google, &amp;lt;your favourite company&amp;gt;?===&lt;br /&gt;
&lt;br /&gt;
===What were the major contributing factors to the success of Silicon Valley?===&lt;/div&gt;</summary>
		<author><name>Smets</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Exam_help&amp;diff=100281</id>
		<title>Exam help</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Exam_help&amp;diff=100281"/>
		<updated>2016-01-11T17:00:21Z</updated>

		<summary type="html">&lt;p&gt;Smets: /* Explain step by step how operating system is booted up, see slides for flowchart. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Computer hardware==&lt;br /&gt;
&lt;br /&gt;
=== Different buses and their uses===&lt;br /&gt;
In computer architecture, a bus is a communication system that transfers data between components inside a computer, or between computers. This expression covers all related hardware components (wire, optical fiber, etc.) and software, including communication protocols.&lt;br /&gt;
&lt;br /&gt;
The internal bus, also known as internal data bus, memory bus, system bus or Front-Side-Bus, connects all the internal components of a computer, such as CPU and memory, to the motherboard. Internal data buses are also referred to as a local bus, because they are intended to connect to local devices. This bus is typically rather quick and is independent of the rest of the computer operations.&lt;br /&gt;
&lt;br /&gt;
The external bus, or expansion bus, is made up of the electronic pathways that connect the different external devices, such as printer etc., to the computer.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Types and uses:&#039;&#039;&#039;&lt;br /&gt;
;USB&lt;br /&gt;
:Universal Serial Bus. Designed for: input devices, digital cameras, printers, media players...&lt;br /&gt;
&lt;br /&gt;
;Serial ATA&lt;br /&gt;
:Used by internal storage devices (hard disk). They replace the old ATA connectors.&lt;br /&gt;
&lt;br /&gt;
;PCI&lt;br /&gt;
:Peripheral Component Interconnect, is a local computer bus for attaching hardware devices in a computer. Attached devices can take either the form of an integrated circuit fitted onto the motherboard itself or an expansion card that fits into a slot. Typical PCI cards used in PCs include: network cards, sound cards, modems, extra ports such as USB or serial, TV tuner cards and disk controllers.&lt;br /&gt;
&lt;br /&gt;
;PCI Express&lt;br /&gt;
:Peripheral Component Interconnect Express (also called PCIe), is a high-speed serial computer expansion bus standard designed to replace the older PCI, PCI-X, and AGP bus standards. PCIe has numerous improvements over the older standards, including higher maximum system bus throughput, lower I/O pin count and smaller physical footprint, better performance scaling for bus devices, a more detailed error detection and reporting mechanism, and native hot-plug functionality. More recent revisions of the PCIe standard provide hardware support for I/O virtualization.&lt;br /&gt;
&lt;br /&gt;
;Mini PCIe&lt;br /&gt;
:It is based on PCI Express technoogy. Main point is its small size and its large variety of connectors makes it used for USB2.0 cards, SIM card, Wifi and Bluetooth cards, 3G and GPS cards.&lt;br /&gt;
&lt;br /&gt;
;ExpressCard&lt;br /&gt;
:It is an interface to connect peripheral devices to a computer, usually a laptop computer. ExpressCards can connect a variety of devices to a computer including mobile broadband modems, IEEE 1394 (FireWire) connectors, USB connectors, Ethernet network ports, Serial ATA storage devices, solid-state drives, external enclosures for desktop-size PCI Express graphics cards and other peripheral devices, wireless network interface controllers (NIC), TV tuner cards, Common Access Card (CAC) readers, and sound cards.&lt;br /&gt;
&lt;br /&gt;
===What are the differences between hard disk drive (HDD) and solid state drive (SSD)?=== &lt;br /&gt;
The traditional spinning hard drive (HDD) is the basic nonvolatile storage on a computer. Hard drives are essentially metal platters with a magnetic coating which stores the data. A read/write head on an arm accesses the data while the platters are spinning in a hard drive enclosure.&lt;br /&gt;
An SSD does same jobas an HDD, but instead of a magnetic coating on top of platters, the data is stored on interconnected flash memory chips that retain the data even when there&#039;s no power present. HDDs have spinning plates with magnetic coating, while SSDs have no moving parts and instead are using flash memory.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribute&lt;br /&gt;
!SSD (Solid State Drive)&lt;br /&gt;
!HDD (Hard Disk Drive)&lt;br /&gt;
|-&lt;br /&gt;
|Power Draw / Battery Life 	&lt;br /&gt;
|Less power draw, averages 2 – 3 watts, resulting in 30+ minute battery boost 	&lt;br /&gt;
|More power draw, averages 6 – 7 watts and therefore uses more battery&lt;br /&gt;
|-&lt;br /&gt;
|Cost 	&lt;br /&gt;
|Expensive, roughly $0.10 per gigabyte (based on buying a 1TB drive)&lt;br /&gt;
|Only around $0.06 per gigabyte, very cheap (buying a 4TB model)&lt;br /&gt;
|-&lt;br /&gt;
|Capacity 	&lt;br /&gt;
|Typically not larger than 1TB for notebook size drives; 1TB max for desktops 	&lt;br /&gt;
|Typically around 500GB and 2TB maximum for notebook size drives; 6TB max for desktops&lt;br /&gt;
|-&lt;br /&gt;
|Operating System Boot Time 	&lt;br /&gt;
|Around 10-13 seconds average bootup time 	&lt;br /&gt;
|Around 30-40 seconds average bootup time&lt;br /&gt;
|-&lt;br /&gt;
|Noise 	&lt;br /&gt;
|There are no moving parts and as such no sound 	&lt;br /&gt;
|Audible clicks and spinning can be heard&lt;br /&gt;
|-&lt;br /&gt;
|Vibration 	&lt;br /&gt;
|No vibration as there are no moving parts 	&lt;br /&gt;
|The spinning of the platters can sometimes result in vibration&lt;br /&gt;
|-&lt;br /&gt;
|Heat Produced 	&lt;br /&gt;
|Lower power draw and no moving parts so little heat is produced 	&lt;br /&gt;
|HDD doesn’t produce much heat, but it will have a measurable amount more heat than an SSD due to moving parts and higher power draw&lt;br /&gt;
|-&lt;br /&gt;
|Failure Rate 	&lt;br /&gt;
|Mean time between failure rate of 2.0 million hours 	&lt;br /&gt;
|Mean time between failure rate of 1.5 million hours&lt;br /&gt;
|-&lt;br /&gt;
|File Copy / Write Speed 	&lt;br /&gt;
|Generally above 200 MB/s and up to 550 MB/s for cutting edge drives 	&lt;br /&gt;
|The range can be anywhere from 50 – 120MB / s&lt;br /&gt;
|-&lt;br /&gt;
|Encryption 	&lt;br /&gt;
|Full Disk Encryption (FDE) Supported on some models 	&lt;br /&gt;
|Full Disk Encryption (FDE) Supported on some models&lt;br /&gt;
|-&lt;br /&gt;
|File Opening Speed 	&lt;br /&gt;
|Up to 30% faster than HDD 	&lt;br /&gt;
|Slower than SSD&lt;br /&gt;
|-&lt;br /&gt;
|Magnetism Affected? 	&lt;br /&gt;
|An SSD is safe from any effects of magnetism 	&lt;br /&gt;
|Magnets can erase data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===What is the purpose of Flash Translation Layer in terms of solid state drives?===&lt;br /&gt;
Flash drives have limited lifespan due to write cycles (or rather program-erase (PE) cycles) and to exhaust the drive equally, FTL layer is utilised.&lt;br /&gt;
&lt;br /&gt;
Although presenting an array of Logical Block Addresses (LBA) makes sense for HDDs as their sectors can be overwritten, it is not fully suited to the way flash memory works. For this reason, an additional component is required to hide the inner characteristics of NAND flash memory and expose only an array of LBAs to the host. This component is called the Flash Translation Layer (FTL), and resides in the SSD controller. The FTL is critical and has three main purposes: logical block mapping, wear leveling and garbage collection.&lt;br /&gt;
&lt;br /&gt;
The logical block mapping translates logical block addresses (LBAs) from the host space into physical block addresses (PBAs) in the physical NAND-flash memory space. This mapping takes the form of a table, which for any LBA gives the corresponding PBA.&lt;br /&gt;
&lt;br /&gt;
Wear leveling (also written as wear levelling) is a technique[1] for prolonging the service life of some kinds of erasable computer storage media, such as flash memory (used in solid-state drives (SSDs) and USB flash drives).&lt;br /&gt;
&lt;br /&gt;
The garbage collection process in the SSD controller ensures that “stale” pages are erased and restored into a “free” state so that the incoming write commands can be processed. If the data in a page has to be updated, the new version is written to a free page, and the page containing the previous version is marked as stale. When blocks contain stale pages, they need to be erased before they can be written to.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===What are difference between volatile/non-volatile, RAM, ROM, EEPROM and where are they used?===&lt;br /&gt;
&lt;br /&gt;
Volatile = does not hold data after power off.&lt;br /&gt;
Non-volatile = holds data even after power off.&lt;br /&gt;
&lt;br /&gt;
Random Access Memory or RAM is a form of data storage that can be accessed randomly at any time, in any order and from any physical location., allowing quick access and manipulation. RAM allows the computer to read data quickly to run applications. It allows reading and writing. It is volatile.&lt;br /&gt;
&lt;br /&gt;
Read-only memory or ROM is also a form of data storage that can not be easily altered or reprogrammed.Stores instuctions that are not nescesary for re-booting up to make the computer operate when it is switched off.They are hardwired. ROM stores the program required to initially boot the computer. It only allows reading. It is non-volatile.&lt;br /&gt;
&lt;br /&gt;
EEPROM (electrically erasable programmable read-only memory) is user-modifiable read-only memory (ROM) that can be erased and reprogrammed. Unlike EPROM chips, EEPROMs do not need to be removed from the computer to be modified. However, an EEPROM chip has to be erased and reprogrammed in its entirety, not selectively. It also has a limited life - that is, the number of times it can be reprogrammed is limited to tens or hundreds of thousands of times. BIOS of PCs are usually written to EEPROM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===What is data retention?===&lt;br /&gt;
It is how long a device can hold data before it becomes unreadable.&lt;br /&gt;
&lt;br /&gt;
===What are difference between asynchronous/synchronous, dynamic/static RAM and where are they used?===&lt;br /&gt;
The two main forms of modern RAM are static RAM (SRAM) and dynamic RAM (DRAM). In SRAM, a bit of data is stored using the state of a six transistor memory cell. This form of RAM is more expensive to produce, but is generally faster and requires less power than DRAM and, in modern computers, is often used as cache memory for the CPU. DRAM stores a bit of data using a transistor and capacitor pair, which together comprise a DRAM memory cell. The capacitor holds a high or low charge (1 or 0, respectively), and the transistor acts as a switch that lets the control circuitry on the chip read the capacitor&#039;s state of charge or change it. As this form of memory is less expensive to produce than static RAM, it is the predominant form of computer memory used in modern computers.&lt;br /&gt;
Dynamic RAM is used to create larger RAM space system, where Static RAM create speed- sensitive cache.&lt;br /&gt;
Dynamic RAM consumes less power than Static RAM.&lt;br /&gt;
&lt;br /&gt;
Asynchronous refers to the fact that the memory is not synchronized to the system clock. A memory access is begun, and a certain period of time later the memory value appears on the bus. The signals are not coordinated with the system clock at all, as described in the section discussing memory access. Asynchronous memory works fine in lower-speed memory bus systems but is not nearly as suitable for use in high-speed (&amp;gt;66 MHz) memory systems.&lt;br /&gt;
A newer type of DRAM, called &amp;quot;synchronous DRAM&amp;quot; or &amp;quot;SDRAM&amp;quot;, is synchronized to the system clock; all signals are tied to the clock so timing is much tighter and better controlled. This type of memory is much faster than asynchronous DRAM and can be used to improve the performance of the system. It is more suitable to the higher-speed memory systems of the newest PCs.&lt;br /&gt;
&lt;br /&gt;
===What is [https://compsci2014.wikispaces.com/2.1.3+Explain+the+use+of+cache+memory cache]? What is cache coherence?===&lt;br /&gt;
&lt;br /&gt;
Cache memory is used to reduce the average memory access times. This is done by storing the data that is frequently accessed in main memory addresses therefore allowing the CPU to access the data faster. This is due to the fact that cache memory can be read a lot faster than main memory.&lt;br /&gt;
 &lt;br /&gt;
Cache coherence is the consistency of shared resource data that ends up stored in multiple local caches. When clients in a system maintain caches of a common memory resource, problems may arise with inconsistent data, which is particularly the case with CPUs in a multiprocessing system.&lt;br /&gt;
&lt;br /&gt;
===What are differences between resistive and capacitive touchscreen?=== &lt;br /&gt;
Resistive touchscreen needs pressure to work by connecting to sheets of plastic and thus conducting electricity. Capacitive touchscreen works by conducting electricity from user&#039;s finger.&lt;br /&gt;
&lt;br /&gt;
Resistive touchscreens rely on the pressure of your fingertip—or any other object—to register input. They consist of two flexible layers with an air gap in-between. In order for the touchscreen to register input, you must press on the top layer using a small amount of pressure, in order to depress the top layer enough to make contact with the bottom layer. The touchscreen will then register the precise location of the touch. You can use anything you want on a resistive touchscreen to make the touch interface work; a gloved finger, a wooden rod, a fingernail – anything that creates enough pressure on the point of impact will activate the mechanism and the touch will be registered.&lt;br /&gt;
&lt;br /&gt;
Capacitive touchscreens instead sense conductivity to register input—usually from the skin on your fingertip. Because you don’t need to apply pressure, capacitive touchscreens are more responsive than resistive touchscreens. However, because they work by sensing conductivity, capacitive touchscreens can only be used with objects that have conductive properties, which includes your fingertip (which is most ideal), and special styluses designed with a conductive tip. This is the reason you cannot use a capacitive screen while wearing gloves – the gloves are not conductive, and the touch does not cause any change in the electrostatic field.&lt;br /&gt;
&lt;br /&gt;
[http://www.alphr.com/realworld/357325/capacitive-or-resistive-whats-the-best-type-of-touchscreen In-depth comparison of two]&lt;br /&gt;
&lt;br /&gt;
===Explain how [http://www.bidouille.org/hack/mousecam computer mouse] works?===&lt;br /&gt;
An optical computer mouse uses a light source, typically an LED, and a light detector, such as an array of photodiodes, to detect movement relative to a surface.&lt;br /&gt;
Modern surface-independent optical mice work by using an optoelectronic sensor (essentially, a tiny low-resolution video camera) to take successive images of the surface on which the mouse operates.&lt;br /&gt;
The technology underlying the modern optical computer mouse is known as digital image correlation.&lt;br /&gt;
To understand how optical mice work, imagine two photographs of the same object except slightly offset from each other. Place both photographs on a light table to make them transparent, and slide one across the other until their images line up. The amount that the edges of one photograph overhang the other represents the offset between the images, and in the case of an optical computer mouse the distance it has moved.&lt;br /&gt;
Optical mice capture one thousand successive images or more per second. Depending on how fast the mouse is moving, each image will be offset from the previous one by a fraction of a pixel or as many as several pixels. Optical mice mathematically process these images using cross correlation to calculate how much each successive image is offset from the previous one.&lt;br /&gt;
[http://www.topdesignmag.com/mouse-history-in-photos/ History of computer mouse].&lt;br /&gt;
&lt;br /&gt;
===Explain how [http://www.daskeyboard.com/blog/typing-through-time-the-history-of-the-keyboard/ computer keyboard] works?===&lt;br /&gt;
[http://computer.howstuffworks.com/keyboard.htm HowStuffworks article] [http://www.explainthatstuff.com/computerkeyboards.html Explain that Stuff article] [http://www.daskeyboard.com/blog/typing-through-time-the-history-of-the-keyboard/ Keyboard History]&lt;br /&gt;
&lt;br /&gt;
===Explain how [https://en.wikipedia.org/wiki/Cathode_ray_tube cathode ray tube] (CRT) based screen technology works and name pros/cons.===&lt;br /&gt;
[https://www.youtube.com/watch?v=2czqYV3T_Kc]&lt;br /&gt;
The cathode ray tube (CRT) is a vacuum tube containing one or more electron guns, and a phosphorescent screen used to, It has a means to accelerate and deflect the electron beam(s) onto the screen to create the images. The images may represent electrical waveforms (oscilloscope), pictures (television, computer monitor), radar targets or others. CRTs have also been used as memory devices, in which case the visible light emitted from the fluorescent material (if any) is not intended to have significant meaning to a visual observer (though the visible pattern on the tube face may cryptically represent the stored data).&lt;br /&gt;
&lt;br /&gt;
The CRT uses an evacuated glass envelope which is large, deep (i.e. long from front screen face to rear end), fairly heavy, and relatively fragile. As a matter of safety, the face is typically made of thick lead glass so as to be highly shatter-resistant and to block most X-ray emissions, particularly if the CRT is used in a consumer product.&lt;br /&gt;
&lt;br /&gt;
===Explain how [https://en.wikipedia.org/wiki/Liquid-crystal_display liquid crystal displays] (LCD) work and name pros/cons.===&lt;br /&gt;
[https://www.youtube.com/watch?v=nCHgmCxGEzY]&lt;br /&gt;
&lt;br /&gt;
===Name screen technologies making use of thin film transistor (TFT) technology?===&lt;br /&gt;
[https://en.wikipedia.org/wiki/Thin-film_transistor]&lt;br /&gt;
&lt;br /&gt;
===Name uses for light polarization filters?===&lt;br /&gt;
A polarizer or polariser is an optical filter that passes light of a specific polarization and blocks waves of other polarizations. It can convert a beam of light of undefined or mixed polarization into a beam with well-defined polarization, polarized light. Polarizers are used in many optical techniques and instruments, and polarizing filters find applications in photography, liquid crystal display technology and 3D watching. Polarizers can also be made for other types of electromagnetic waves besides light, such as radio waves, microwaves, and X-rays.&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/Polarizing_filter_%28photography%29 Polarizer photo] [https://en.wikipedia.org/wiki/Polarized_3D_system Polarizer 3D]&lt;br /&gt;
&lt;br /&gt;
===What are the benefits of [https://en.wikipedia.org/wiki/Twisted_pair twisted pair cabling] and [https://en.wikipedia.org/wiki/Differential_signaling differential signalling]?===&lt;br /&gt;
&#039;&#039;&#039;Twisted pair&#039;&#039;&#039; cabling is a type of wiring in which two conductors of a single circuit are twisted together for the purposes of canceling out electromagnetic interference (EMI) from external sources; for instance, electromagnetic radiation from unshielded twisted pair (UTP) cables, and crosstalk between neighboring pairs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Differential signaling&#039;&#039;&#039; is a method for electrically transmitting information using two complementary signals. The technique sends the same electrical signal as a differential pair of signals, each in its own conductor. The pair of conductors can be wires (typically twisted together) or traces on a circuit board. The receiving circuit responds to the electrical difference between the two signals, rather than the difference between a single wire and ground. Since the receiving circuit only detects the difference between the wires, the technique resists electromagnetic noise compared to one conductor with an un-paired reference (ground). The technique works for both analog signaling and digital signaling.&lt;br /&gt;
&lt;br /&gt;
===[https://en.wikipedia.org/wiki/Active_matrix Active matrix] vs [https://en.wikipedia.org/wiki/Passive_matrix_addressing passive matrix] in display technology===&lt;br /&gt;
Active-matrix display : An active-matrix display, also known as a TFT (thin-film transistor) display, uses a separate transistor to apply charges to each liquid crystal cell and thus displays high-quality color that is viewable from all angles.&lt;br /&gt;
&lt;br /&gt;
Passive-matrix display : A passive-matrix display uses fewer transistors, requires less power, and is less expensive than an active-matrix display. The color on a passive-matrix display often is not as bright as an active-matrix display. Users view images on a passive-matrix display best when working directly in front of it.&lt;br /&gt;
&lt;br /&gt;
==Storage abstractions==&lt;br /&gt;
&lt;br /&gt;
===What is a [https://en.wikipedia.org/wiki/Block_%28data_storage%29 block device]?===&lt;br /&gt;
In computing (specifically data transmission and data storage), a block, sometimes called a physical record, is a sequence of bytes or bits, usually containing some whole number of records, having a maximum length, a block size.Data thus structured are said to be blocked. The process of putting data into blocks is called blocking. Most file systems are based on a block device, which is a level of abstraction for the hardware responsible for storing and retrieving specified blocks of data&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Logical_block_addressing logical block addressing] and what are the benefits compared to older [https://en.wikipedia.org/wiki/Cylinder-head-sector cylinder-head-sector addressing] method in terms of harddisks?===&lt;br /&gt;
Logical block addressing (LBA) is a common scheme used for specifying the location of blocks of data stored on computer storage devices, generally secondary storage systems such as hard disk drives. LBA is a particularly simple linear addressing scheme; blocks are located by an integer index, with the first block being LBA 0, the second LBA 1, and so on. &lt;br /&gt;
&lt;br /&gt;
Cylinder-head-sector, also known as CHS, is an early method for giving addresses to each physical block of data on a hard disk drive. CHS addressing is the process of identifying individual sectors on a disk by their position in a track, where the track is determined by the head and cylinder numbers.&lt;br /&gt;
&lt;br /&gt;
LBA allows a maximum addressing capacity of 2TB although CHS allows 8GB&lt;br /&gt;
&lt;br /&gt;
===What is a [https://en.wikipedia.org/wiki/Disk_partitioning disk partition]?===&lt;br /&gt;
Disk partitioning is the creation of one or more regions on a hard disk or other secondary storage, so that an operating system can manage information in each region separately. Partitioning is typically the first step of preparing a newly manufactured disk, before any files or directories have been created. The disk stores the information about the partitions&#039; locations and sizes in an area known as the partition table that the operating system reads before any other part of the disk. Each partition then appears in the operating system as a distinct &amp;quot;logical&amp;quot; disk that uses part of the actual disk.&lt;br /&gt;
&lt;br /&gt;
===What is a [https://en.wikipedia.org/wiki/File_system file system]?===&lt;br /&gt;
In computing, a file system (or filesystem) is used to control how data is stored and retrieved. Without a file system, information placed in a storage area would be one large body of data with no way to tell where one piece of information stops and the next begins. By separating the data into individual pieces, and giving each piece a name, the information is easily separated and identified. Taking its name from the way paper-based information systems are named, each group of data is called a &amp;quot;file&amp;quot;. The structure and logic rules used to manage the groups of information and their names is called a &amp;quot;file system&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Journaling_file_system#Write_hazards journaling] in terms of filesystems and what are the benefits? Name some journaled file systems in use nowadays.===&lt;br /&gt;
A journaling file system is a file system that keeps track of changes not yet committed to the file system&#039;s main part by recording the intentions of such changes in a data structure known as a &amp;quot;journal&amp;quot;, which is usually a circular log. In the event of a system crash or power failure, such file systems can be brought back online quicker with lower likelihood of becoming corrupted.&lt;br /&gt;
&lt;br /&gt;
Depending on the actual implementation, a journaling file system may only keep track of stored metadata, resulting in improved performance at the expense of increased possibility for data corruption. Alternatively, a journaling file system may track both stored data and related metadata, while some implementations allow selectable behavior in this regard&lt;br /&gt;
&lt;br /&gt;
==Bootloaders, kernels==&lt;br /&gt;
&lt;br /&gt;
===What is the role of BIOS/UEFI in x86-based machines?===&lt;br /&gt;
BIOS (Basic Input/Output System) performs during boot up process of a computer and prepares it for the OS and its&#039; programs.&lt;br /&gt;
&lt;br /&gt;
UEFI (Unified Extensible Firmware Interface) is a replacement for BIOS. It offers several advantages over previous firmware interface, like: &lt;br /&gt;
* Ability to boot from large disks (over 2 TB) with a GUID Partition Table (GPT)&lt;br /&gt;
* CPU-independent architecture&lt;br /&gt;
* CPU-independent drivers&lt;br /&gt;
* Flexible pre-OS environment, including network capability&lt;br /&gt;
* Modular design&lt;br /&gt;
&lt;br /&gt;
===Explain step by step how operating system is booted up, see slides for flowchart.===&lt;br /&gt;
The PC Boot process in a nutshell&lt;br /&gt;
* Executes code form well-known location&lt;br /&gt;
* Execute first-stage boot loader from MBR&lt;br /&gt;
* Execute second-stage boot loader.&lt;br /&gt;
* Load the kernel &lt;br /&gt;
* load the first user space program.&lt;br /&gt;
&lt;br /&gt;
===BIOS===&lt;br /&gt;
=Basic input and output system&lt;br /&gt;
Located at memory location 0xFFFF0&lt;br /&gt;
bo&lt;br /&gt;
&lt;br /&gt;
1. The first thing a computer has to do when it is turned on is start up a special program called an operating system. That process is called booting. The instructions for booting are built into BIOS (Basic input/output system).&lt;br /&gt;
2. The BIOS will tell your computer to look into the boot disk (usually the lowest-numbered hard disk) for a boot loader and the boot loader will be pulled into memory and will be started. &lt;br /&gt;
3. The boot loader&#039;s job is to start the real operating system and it does it by looking for a kernel, loading it into memory and  starting it. &lt;br /&gt;
5. Once the kernel starts, it has to look around to find the rest of the hardware and get ready to run programs ( It does this by poking not at ordinary memory locations but rather at I/O ports — special bus addresses that are likely to have device controller cards listening at them for commands). The kernel doesn&#039;t poke at random; it has a lot of built-in knowledge about what it&#039;s likely to find where, and how controllers will respond if they&#039;re present. This process is called autoprobing.&lt;br /&gt;
&lt;br /&gt;
6. After the kernel is up and running, it&#039;s the end of first stage. After the first stage, the kernel hands control to a special program called &amp;quot;init&amp;quot; which spawns housekeeping processes. The init&#039;s process&#039;s first task is to look that your hard disks are okay &lt;br /&gt;
&lt;br /&gt;
7. Init&#039;s next step is to start several daemons. A daemon is a program like a print spooler, a mail listener or a WWW server that lurks in the background, waiting for things to do. These special programs often have to coordinate several requests that could conflict. They are daemons because it&#039;s often easier to write one program that runs constantly and knows about all requests than it would be to try to make sure that a flock of copies (each processing one request and all running at the same time) don&#039;t step on each other.&lt;br /&gt;
&lt;br /&gt;
8. The next step is to prepare for users. Init starts a copy of a program called getty to watch your screen and keyboard (and maybe more copies to watch dial-in serial ports).&lt;br /&gt;
&lt;br /&gt;
9. The next step is to start up various daemons that support networking and other services. The most important of these is your X server. X is a daemon that manages your display, keyboard, and mouse. Its main job is to produce the color pixel graphics you normally see on your screen.&lt;br /&gt;
&lt;br /&gt;
10. When the X server comes up, during the last part of your machine&#039;s boot process, it effectively takes over the hardware from whatever virtual console was previously in control. That&#039;s when you&#039;ll see a graphical login screen, produced for you by a program called a display manager.&lt;br /&gt;
&lt;br /&gt;
===Describe the functionality provided by general purpose operating system.===&lt;br /&gt;
See architecture of [https://en.wikipedia.org/wiki/Architecture_of_Windows_NT Windows NT], [http://www.elinux.org/Android_Architecture Android], [https://en.wikipedia.org/wiki/Architecture_of_OS_X OS X].&lt;br /&gt;
&lt;br /&gt;
===What are the main differences between [https://en.wikipedia.org/wiki/Real_mode real mode] and [https://en.wikipedia.org/wiki/Protected_mode protected mode] of x86-based processor?===&lt;br /&gt;
&lt;br /&gt;
===What happens during context switch?===&lt;br /&gt;
&lt;br /&gt;
===What is the purpose of [https://en.wikipedia.org/wiki/Virtual_memory paged virtual memory]?===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Libraries, frameworks==&lt;br /&gt;
&lt;br /&gt;
==Programming languages==&lt;br /&gt;
&lt;br /&gt;
===What are the major steps of compilation?===&lt;br /&gt;
===What are the differences between [https://en.wikipedia.org/wiki/Interpreted_language interpreted], [https://en.wikipedia.org/wiki/Just-in-time_compilation JIT-compilation] and [https://en.wikipedia.org/wiki/Compiler traditional compiling]?===&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Control_flow control flow]? Loops? Conditional statements?===&lt;br /&gt;
&lt;br /&gt;
==Data encoding==&lt;br /&gt;
&lt;br /&gt;
===What is bit? Nibble? Byte? Word?===&lt;br /&gt;
Bit is a basic unit of information that can hold either True or False value (1 or 0).&lt;br /&gt;
&lt;br /&gt;
Nibble is half of an octet.&lt;br /&gt;
&lt;br /&gt;
Byte is a unit of eight bits. Comes from the number of bits used to encode a single character of text in a computer&lt;br /&gt;
&lt;br /&gt;
Word is a length of bits the processor-architecture can process in bits (8-bit, 32-bit etc)&lt;br /&gt;
&lt;br /&gt;
===Write 9375 in binary, hexadecimal?===&lt;br /&gt;
&lt;br /&gt;
===Write 0xDEADBEEF in decimal?===&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Quantization_%28signal_processing%29 quantization] in terms of signal processing?===&lt;br /&gt;
&lt;br /&gt;
===How are [https://en.wikipedia.org/wiki/Integer_%28computer_science%29 integers] stored in binary? What integer range can be described using n bits? How many bits are required to describe integer range from n .. m.===&lt;br /&gt;
&lt;br /&gt;
===How are [https://en.wikipedia.org/wiki/Single-precision_floating-point_format single precision] and [https://en.wikipedia.org/wiki/Double-precision_floating-point_format double precision] floating point numbers stored in binary according to [https://en.wikipedia.org/wiki/IEEE_floating_point IEEE754 standard]?===&lt;br /&gt;
[http://lauri.vosandi.com/hdl/arithmetic/floating-point-representation.html Floating-point multiplication]&lt;br /&gt;
&lt;br /&gt;
===What is the difference between CMYK and RGB color models? How are YUV, HSV and HSL colorspaces related to RGB? What are sRGB and YCbCr and where are they used?===&lt;br /&gt;
&lt;br /&gt;
===How is data encoded on audio CD-s? What is the [http://lauri.vosandi.com/2013/07/audio-codecs.html capacity of an audio CD]?===&lt;br /&gt;
&lt;br /&gt;
===What is sampling rate? What is bit depth? What is resolution?===&lt;br /&gt;
&lt;br /&gt;
===What is bitrate?===&lt;br /&gt;
&lt;br /&gt;
===What is lossy/lossless compression?===&lt;br /&gt;
&lt;br /&gt;
===What is JPEG suitable for? Is JPEG lossy or lossless compression method?===&lt;br /&gt;
&lt;br /&gt;
===What is PNG suitable for? Does PNG support compression?===&lt;br /&gt;
&lt;br /&gt;
===How are time domain and frequency domain related in terms of signal processing? What is Fourier transform and where it is applied?===&lt;br /&gt;
&lt;br /&gt;
==Code execution in processor==&lt;br /&gt;
&lt;br /&gt;
===Given ~10 instructions and their explainations, follow the instructions and elaborate after every step what happened in the processor?===&lt;br /&gt;
&lt;br /&gt;
==Microcontrollers==&lt;br /&gt;
&lt;br /&gt;
===What distinguishes microcontroller from microprocessor?===&lt;br /&gt;
&lt;br /&gt;
===What are the differences between Hardvard architecture and von Neumann architecture?===&lt;br /&gt;
&lt;br /&gt;
===What is an interrupt?===&lt;br /&gt;
&lt;br /&gt;
===What is an timer?===&lt;br /&gt;
&lt;br /&gt;
==Introduction to Boole algebra==&lt;br /&gt;
&lt;br /&gt;
===Simplify A AND A OR B===&lt;br /&gt;
&lt;br /&gt;
===Show addition of X and Y in binary===&lt;br /&gt;
&lt;br /&gt;
===Show subtraction of X and Y  in binary===&lt;br /&gt;
&lt;br /&gt;
===Show multiplication of X and Y in binary===&lt;br /&gt;
&lt;br /&gt;
==Hardware description languages==&lt;br /&gt;
&lt;br /&gt;
===What are the uses for hardware description languages?===&lt;br /&gt;
In electronics, a hardware description language (HDL) is a specialized computer language used to program the structure, design and operation of electronic circuits, and most commonly, digital logic circuits.&lt;br /&gt;
&lt;br /&gt;
A hardware description language enables a precise, formal description of an electronic circuit that allows for the automated analysis, simulation, and simulated testing of an electronic circuit. It also allows for the compilation of an HDL program into a lower level specification of physical electronic components, such as the set of masks used to create an integrated circuit.&lt;br /&gt;
&lt;br /&gt;
A hardware description language looks much like a programming language such as C; it is a textual description consisting of expressions, statements and control structures. One important difference between most programming languages and HDLs is that HDLs explicitly include the notion of time.&lt;br /&gt;
&lt;br /&gt;
===What is latch?===&lt;br /&gt;
A latch is an example of a bistable multivibrator, that is, a device with exactly two stable states. These states are high-output and low-output. A latch has a feedback path, so information can be retained by the device. Therefore latches can be memory devices, and can store one bit of data for as long as the device is powered. As the name suggests, latches are used to &amp;quot;latch onto&amp;quot; information and hold in place. Latches are very similar to flip-flops, but are not synchronous devices, and do not operate on clock edges as flip-flops do.&lt;br /&gt;
&lt;br /&gt;
===What is flip-flop?===&lt;br /&gt;
A flip-flop is a device very like a latch in that it is a bistable multivibrator, having two states and a feedback path that allows it to store a bit of information. The difference between a latch and a flip-flop is that a latch is asynchronous, and the outputs can change as soon as the inputs do (or at least after a small propagation delay). A flip-flop, on the other hand, is edge-triggered and only changes state when a control signal goes from high to low or low to high. This distinction is relatively recent and is not formal, with many authorities still referring to flip-flops as latches and vice versa, but it is a helpful distinction to make for the sake of clarity.&lt;br /&gt;
&lt;br /&gt;
There are several different types of flip-flop each with its own uses and peculiarities. The four main types of flip-flop are : SR, JK, D, and T.&lt;br /&gt;
&lt;br /&gt;
===What is mux (multiplexer)?===&lt;br /&gt;
A multiplexer (or mux) is a device that selects one of several analog or digital input signals and forwards the selected input into a single line.[1] A multiplexer of 2n inputs has n select lines, which are used to select which input line to send to the output.[2] Multiplexers are mainly used to increase the amount of data that can be sent over the network within a certain amount of time and bandwidth.[1] A multiplexer is also called a data selector.&lt;br /&gt;
&lt;br /&gt;
An electronic multiplexer makes it possible for several signals to share one device or resource, for example one A/D converter or one communication line, instead of having one device per input signal.&lt;br /&gt;
&lt;br /&gt;
===What is register? Register file?===&lt;br /&gt;
&#039;&#039;&#039;Registers&#039;&#039;&#039; are a special, high-speed storage area within the CPU. All data must be represented in a register before it can be processed. For example, if two numbers are to be multiplied, both numbers must be in registers, and the result is also placed in a register. A register may hold a computer instruction , a storage address, or any kind of data (such as a bit sequence or individual characters). A register must be large enough to hold an instruction - for example, in a 32-bit instruction computer, a register must be 32 bits in length. In some computer designs, there are smaller registers - for example, half-registers - for shorter instructions. Depending on the processor design and language rules, registers may be numbered or have arbitrary names.&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;register file&#039;&#039;&#039; is an array of processor registers in a central processing unit (CPU). Modern integrated circuit-based register files are usually implemented by way of fast static RAMs with multiple ports. Such RAMs are distinguished by having dedicated read and write ports, whereas ordinary multiported SRAMs will usually read and write through the same ports.&lt;br /&gt;
&lt;br /&gt;
The instruction set architecture of a CPU will almost always define a set of registers which are used to stage data between memory and the functional units on the chip. In simpler CPUs, these architectural registers correspond one-for-one to the entries in a physical register file within the CPU. More complicated CPUs use register renaming, so that the mapping of which physical entry stores a particular architectural register changes dynamically during execution. The register file is part of the architecture and visible to the programmer, as opposed to the concept of transparent caches.&lt;br /&gt;
&lt;br /&gt;
===What is ALU?===&lt;br /&gt;
An arithmetic logic unit (ALU) is a digital electronic circuit that performs arithmetic and bitwise logical operations on integer binary numbers. This is in contrast to a floating-point unit (FPU), which operates on floating point numbers. An ALU is a fundamental building block of many types of computing circuits, including the central processing unit (CPU) of computers, FPUs, and graphics processing units (GPUs). A single CPU, FPU or GPU may contain multiple ALUs.&lt;br /&gt;
&lt;br /&gt;
The inputs to an ALU are the data to be operated on, called operands, and a code indicating the operation to be performed; the ALU&#039;s output is the result of the performed operation. In many designs, the ALU also exchanges additional information with a status register, which relates to the result of the current or previous operations.&lt;br /&gt;
&lt;br /&gt;
===What is floating-point unit?===&lt;br /&gt;
A floating-point unit (FPU) is a part of a computer system specially designed to carry out operations on floating point numbers. Typical operations are addition, subtraction, multiplication, division, square root, and bitshifting. Some systems (particularly older, microcode-based architectures) can also perform various transcendental functions such as exponential or trigonometric calculations, though in most modern processors these are done with software library routines.&lt;br /&gt;
&lt;br /&gt;
In general purpose computer architectures, one or more FPUs may be integrated with the central processing unit; however many embedded processors do not have hardware support for floating-point operations.&lt;br /&gt;
&lt;br /&gt;
===What is a cache?===&lt;br /&gt;
&lt;br /&gt;
===What is a bus?===&lt;br /&gt;
&lt;br /&gt;
===Show the circuit diagram for A OR B AND C, NOT A AND B, &amp;lt;insert some other Boole formula here&amp;gt;?===&lt;br /&gt;
&lt;br /&gt;
===Show the truth table for &amp;lt;insert Boole formula here&amp;gt;?===&lt;br /&gt;
&lt;br /&gt;
===Write the equivalent Boole formula of a circuit diagram.===&lt;br /&gt;
&lt;br /&gt;
==Publishing work==&lt;br /&gt;
&lt;br /&gt;
===What are the major implications of MIT, BSD and GPL licenses?===&lt;br /&gt;
&lt;br /&gt;
===What are the differences between copyright, trademark, trade secret?===&lt;br /&gt;
“Intellectual property is something that is created by the mind.”  Typically, we think of ideas as being created by the mind – but intellectual property does not protect bare ideas: rather, it is the expression or symbolic power/recognizability of the ideas that are protected. &lt;br /&gt;
Thus, it is the design of the rocket that is patented, not the idea of a rocket.  It is the painting of the lake that is copyrighted, not the idea of a lake.  And it is the consumer recognizable logo that is trademarked, not the idea of a logo.  Intellectual property protects how we express and identify ideas in concrete ways – not the idea itself.&lt;br /&gt;
&lt;br /&gt;
In particular:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Patents&#039;&#039;&#039;: protect functional expressions of an idea – not the idea itself.  A machines, method/process, manufacture, compositions of matter, and improvements of any of these items can be patented.  Thus, I can patent a design for the nozzle on a rocket, or the method of making the rocket, or the method of making the rocket fuel, or the metal in which the rocket fuel is stored, or a new way of transporting the rocket fuel to the rocket.  But I cannot patent the broad “idea” of a rocket.&lt;br /&gt;
     &lt;br /&gt;
&#039;&#039;&#039;Copyrights&#039;&#039;&#039;: protect the specific creative expression of an idea through any medium of artistic/creative expression – i.e., paintings, photographs, sculpture, writings, software, etc.   A copyright protects your painting of a haystack, but it would not prohibit another painter from expressing their artistry or viewpoint by also painting a haystack. Likewise, while Ian Fleming was able to receive a copyright on his particular expression of the idea of a secret agent (i.e., a debonair English secret agent), he could not prevent Rich Wilkes from receiving a copyright on his expression of the idea of a secret agent (i.e., a tattooed bald extreme athlete turned reluctant secret agent).  &lt;br /&gt;
     &lt;br /&gt;
&#039;&#039;&#039;Trademarks&#039;&#039;&#039;: protect any symbol that indicates the source or origin of the goods or services to which it is affixed.  While a trademark can be extremely valuable to its owner, the ultimate purpose of a trademark is to protect consumers – that is, the function of a trademark is to inform the consumer where the goods or services originate.  The consumer, knowing the origin of the goods, can make purchasing decisions based on prior knowledge, reputation or marketing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Trade secret&#039;&#039;&#039;: is a formula, practice, process, design, instrument, pattern, commercial method, or compilation of information which is not generally known or reasonably ascertainable by others, and by which a business can obtain an economic advantage over competitors or customers.[&lt;br /&gt;
&lt;br /&gt;
While each category is distinct, a product (or components/aspects of a product) may fall into one or more of the categories.  For example, software can be protected by both patents and copyrights.  The copyright would protect the artistic expression of the idea – i.e., the code itself – while the patent would protect the functional expression of the idea – e.g., using a single click to purchase a book online.  Likewise, it is likely that the software company will use a trademark to indicate who made the software. &lt;br /&gt;
&lt;br /&gt;
An additional example would be a logo for a company.  The logo may serve as a trademark indicating that all products affixed with the logo are from the same source.  The creative and artistic aspects of the logo may also be protected by a copyright.&lt;br /&gt;
&lt;br /&gt;
===Where would you use waterfall software development model? Where would you use agile?===&lt;br /&gt;
&lt;br /&gt;
===What is the purpose of a version control system?===&lt;br /&gt;
&lt;br /&gt;
===What would you store in a version control system?===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Algorithms and data structures==&lt;br /&gt;
&lt;br /&gt;
===What is time complexity of algorithm?===&lt;br /&gt;
In computer science, the time complexity of an algorithm quantifies the amount of time taken by an algorithm to run as a function of the length of the string representing the input. Time complexity is commonly estimated by counting the number of elementary operations performed by the algorithm, where an elementary operation takes a fixed amount of time to perform.&lt;br /&gt;
&lt;br /&gt;
===What is space complexity of algorithm?===&lt;br /&gt;
Space complexity is a measure of the amount of working storage an algorithm needs. That means how much memory, in the worst case, is needed at any point in the algorithm.&lt;br /&gt;
It represents the total amount of memory space that a &amp;quot;normal&amp;quot; physical computer would need to solve a given computational problem with a given algorithm.&lt;br /&gt;
&lt;br /&gt;
===What&#039;s a good algorithm?===&lt;br /&gt;
It executes as fast as possible.&lt;br /&gt;
It takes as less space as possible.&lt;br /&gt;
It is adaptable to computers.&lt;br /&gt;
It is simple.&lt;br /&gt;
It is elegant (well written).&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
===What is [https://en.wikipedia.org/wiki/Moore&#039;s_law Moore&#039;s law]? What is [https://en.wikipedia.org/wiki/Rock&#039;s_law Rock&#039;s law]?===&lt;br /&gt;
Moore&#039;s law is the observation that the number of transistors in a dense integrated circuit doubles approximately every two years. The observation is named after Gordon E. Moore, the co-founder of Intel and Fairchild Semiconductor, whose 1965 paper described a doubling every year in the number of components per integrated circuit, and projected this rate of growth would continue for at least another decade. In 1975, looking forward to the next decade, he revised the forecast to doubling every two years.&lt;br /&gt;
Rock&#039;s law or Moore&#039;s second law, named for Arthur Rock or Gordon Moore, says that the cost of a semiconductor chip fabrication plant doubles every four years. As of 2015, the price had already reached about 14 billion US dollars.&lt;br /&gt;
&lt;br /&gt;
===What were the major contributing factors for success of Microsoft, Apple, Google, &amp;lt;your favourite company&amp;gt;?===&lt;br /&gt;
&lt;br /&gt;
===What were the major contributing factors to the success of Silicon Valley?===&lt;/div&gt;</summary>
		<author><name>Smets</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Category:I600_Introduction_to_Computers_and_Informatics&amp;diff=99830</id>
		<title>Category:I600 Introduction to Computers and Informatics</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Category:I600_Introduction_to_Computers_and_Informatics&amp;diff=99830"/>
		<updated>2016-01-03T13:27:19Z</updated>

		<summary type="html">&lt;p&gt;Smets: /* Grading */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this course we&#039;ll give an introduction to variety of topics from hardware to software.&lt;br /&gt;
The course will follow roughly the same structure as [https://lagunita.stanford.edu/courses/Engineering/CS101/Summer2014/about Computer Science 101 at Stanford University] with more hands-on approach. This course substitutes Estonian courses I100 Sissejuhatus informaatikasse and [http://www.pld.ttu.ee/~teet/itarvutid.html I201 Arvutid].&lt;br /&gt;
&lt;br /&gt;
Monday lectures will cover more theoretical stuff;&lt;br /&gt;
Thursday workshops are for getting started with new topics;&lt;br /&gt;
the homework assignments connect theoretical with practice and&lt;br /&gt;
Tuesday sessions are for follow up, asking/answering questions and presenting homework.&lt;br /&gt;
Attendance won&#039;t be tracked, the sessions are there if you need help.&lt;br /&gt;
Bring your laptops for Tuesday and Thursday sessions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Course credits: 6 ECTS&lt;br /&gt;
&lt;br /&gt;
Lecturer: Lauri Võsandi&lt;br /&gt;
&lt;br /&gt;
E-mail: lauri [donut] vosandi [plus] i600 [ät] gmail [dotchka] com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Grading=&lt;br /&gt;
&lt;br /&gt;
Grade mapping:&lt;br /&gt;
&lt;br /&gt;
* 0-50 points, fail&lt;br /&gt;
* 51-60 points, pass 1&lt;br /&gt;
* 61-70 points, satisfactory 2&lt;br /&gt;
* 71-80 points, average 3&lt;br /&gt;
* 81-90 points, good 4&lt;br /&gt;
* 91-100 points, very good 5&lt;br /&gt;
&lt;br /&gt;
Grading is split between theory and practice&lt;br /&gt;
&lt;br /&gt;
* Exam of 50 points, preparation in lectures and general discussion in workshops.&lt;br /&gt;
* Assignments, see instructions and points below.&lt;br /&gt;
* Extra points for improving quality of wiki articles, extracurricular work and also helping others, see points below.&lt;br /&gt;
&lt;br /&gt;
Exam will be halfway between oral and written: You&#039;ll be given 30 minutes to prepare for several random questions and 15 minutes to discuss what you&#039;ve answered.&lt;br /&gt;
If you don&#039;t have prior experience with the topics, it&#039;s highly recommended to take part of the sessions in order to pass the exam. You can use a calculator and this wiki page, don&#039;t rely on the access to terminal or other software tools. You can not access Internet or any remote computers.&lt;br /&gt;
&lt;br /&gt;
Exam sections:&lt;br /&gt;
&lt;br /&gt;
* Execution of ~10 processor instructions&lt;br /&gt;
* Bunch of randomly selected questions from this page&lt;br /&gt;
* Bunch of questions (how much RAM, how big disk, what wireless chipset) asked about a computer you&#039;ll be given&lt;br /&gt;
* Gain SSH access to a machine on the network, basic text file editing skills using nano&lt;br /&gt;
&lt;br /&gt;
Exam times:&lt;br /&gt;
&lt;br /&gt;
* 12. jan 10:00 - Oliver Aasmets&lt;br /&gt;
* 12. jan 10:30 - &amp;lt;Insert name&amp;gt;&lt;br /&gt;
* 12. jan 11:00 - &amp;lt;Insert name&amp;gt;&lt;br /&gt;
* 12. jan 11:30 - &amp;lt;Insert name&amp;gt;&lt;br /&gt;
* 12. jan 13:00 - Artur V. Kerge&lt;br /&gt;
* 12. jan 13:30 - &amp;lt;Insert name&amp;gt;&lt;br /&gt;
* 12. jan 14:00 -  Nazmul Hasan &lt;br /&gt;
* 12. jan 14:30 - &amp;lt;Insert name&amp;gt;&lt;br /&gt;
* 12. jan 15:00 - Meelis Hass&lt;br /&gt;
* 12. jan 15:30 - &amp;lt;Insert name&amp;gt;&lt;br /&gt;
* 13. jan 10:00 - &amp;lt;Insert name&amp;gt;&lt;br /&gt;
* 13. jan 10:30 - &amp;lt;Insert name&amp;gt;&lt;br /&gt;
* 13. jan 11:00 - &amp;lt;Insert name&amp;gt;&lt;br /&gt;
* 13. jan 11:30 - &amp;lt;Insert name&amp;gt;&lt;br /&gt;
* 13. jan 13:00 - &amp;lt;Sheela Gowry&amp;gt;&lt;br /&gt;
* 13. jan 13:30 -  Dmitri Sim&lt;br /&gt;
* 13. jan 14:00 -  Ender&lt;br /&gt;
* 13. jan 14:30 -  Sander Mets&lt;br /&gt;
* 13. jan 15:00 - &amp;lt;Insert name&amp;gt;&lt;br /&gt;
* 13. jan 15:30 - Mohanad Aly&lt;br /&gt;
&lt;br /&gt;
=Lecture: Computer hardware=&lt;br /&gt;
&lt;br /&gt;
Jargon: CPU, RAM, ROM, HDD, SSD, PCI, PCI Express, USB 2.0, USB 3.0, VGA, HDMI, DVI, LCD, TFT, LED, OLED, AMOLED, CRT, PWM&lt;br /&gt;
&lt;br /&gt;
[https://echo360.e-ope.ee/ess/echo/presentation/beef71c3-044c-43c9-a326-e1e62cbb5c9b Lecture recording #1]&lt;br /&gt;
&lt;br /&gt;
[https://echo360.e-ope.ee/ess/echo/presentation/36786bbb-84b6-4604-be6f-c363bf22ce8d Lecture recording #2 starting 12:30]&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/presentation/d/1OzaqTBAUfMOzhG0HZeSJVSszCmFyn4ug35teYJWkyfM/edit?usp=sharing Lecture slides] Random access memory, permanent storage, buses, input devices, display technologies, networking&lt;br /&gt;
&lt;br /&gt;
Potential exam questions:&lt;br /&gt;
&lt;br /&gt;
* Different buses and their uses&lt;br /&gt;
* What are the differences between hard disk drive (HDD) and solid state drive (SSD)? [http://www.storagereview.com/ssd_vs_hdd]&lt;br /&gt;
* What is the purpose of Flash Translation Layer in terms of solid state drives?&lt;br /&gt;
* What are difference between volatile/non-volatile, RAM, ROM, EEPROM and where are they used?&lt;br /&gt;
* What is data retention?&lt;br /&gt;
* What are difference between asynchronous/synchronous, dynamic/static RAM and where are they used?&lt;br /&gt;
* What is [https://compsci2014.wikispaces.com/2.1.3+Explain+the+use+of+cache+memory cache]? What is cache coherence?&lt;br /&gt;
* What are differences between resistive and capacitive touchscreen? [http://www.alphr.com/realworld/357325/capacitive-or-resistive-whats-the-best-type-of-touchscreen]&lt;br /&gt;
* Explain how [http://www.bidouille.org/hack/mousecam computer mouse] works? [http://www.topdesignmag.com/mouse-history-in-photos/ History of computer mouse].&lt;br /&gt;
* Explain how [http://www.daskeyboard.com/blog/typing-through-time-the-history-of-the-keyboard/ computer keyboard] works? [http://computer.howstuffworks.com/keyboard.htm HowStuffworks article] [http://www.explainthatstuff.com/computerkeyboards.html Explain that Stuff article] [http://www.daskeyboard.com/blog/typing-through-time-the-history-of-the-keyboard/ Keyboard History]&lt;br /&gt;
* Explain how [https://en.wikipedia.org/wiki/Cathode_ray_tube cathode ray tube] (CRT) based screen technology works and name pros/cons. [https://www.youtube.com/watch?v=2czqYV3T_Kc]&lt;br /&gt;
* Explain how [https://en.wikipedia.org/wiki/Liquid-crystal_display liquid crystal displays] (LCD) work and name pros/cons. [https://www.youtube.com/watch?v=nCHgmCxGEzY]&lt;br /&gt;
* Name screen technologies making use of thin film transistor (TFT) technology? [https://en.wikipedia.org/wiki/Thin-film_transistor]&lt;br /&gt;
* Name uses for light polarization filters? [https://en.wikipedia.org/wiki/Polarizing_filter_%28photography%29] [https://en.wikipedia.org/wiki/Polarized_3D_system] &lt;br /&gt;
* What are the benefits of [https://en.wikipedia.org/wiki/Twisted_pair twisted pair cabling] and [https://en.wikipedia.org/wiki/Differential_signaling differential signalling]?&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Active_matrix Active matrix] vs [https://en.wikipedia.org/wiki/Passive_matrix_addressing passive matrix] in display technology&lt;br /&gt;
&lt;br /&gt;
Security section: [http://www.bunniestudios.com/blog/?p=3554 Hacking SD cards]&lt;br /&gt;
&lt;br /&gt;
Assignments:&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/I600_Introduction_to_Computers_and_Informatics#Assignment:_Investigating_PC_hardware Investigating PC hardware]&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/I600_Introduction_to_Computers_and_Informatics#Assignment:_Investigating_embedded_hardware Investigating embedded hardware]&lt;br /&gt;
&lt;br /&gt;
=Lecture: Storage abstractions=&lt;br /&gt;
&lt;br /&gt;
In this lecture we&#039;ll talk about permanent storage abstractions: block device, disk, partition, file system, directory/folder, file, journaling, FAT32, NTFS, ext4, HFS+&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/presentation/d/1dJ-HMSR9nW8OuZtSTYf5dlFyPsZKGqxlKoEwIHi9h6k/ Lecture slides] &lt;br /&gt;
&lt;br /&gt;
[https://echo360.e-ope.ee/ess/echo/presentation/36786bbb-84b6-4604-be6f-c363bf22ce8d Lecture recording] starts at 47:50.&lt;br /&gt;
&lt;br /&gt;
* What is a [https://en.wikipedia.org/wiki/Block_%28data_storage%29 block device]?&lt;br /&gt;
* What is [https://en.wikipedia.org/wiki/Logical_block_addressing logical block addressing] and what are the benefits compared to older [https://en.wikipedia.org/wiki/Cylinder-head-sector cylinder-head-sector addressing] method in terms of harddisks?&lt;br /&gt;
* What is a [https://en.wikipedia.org/wiki/Disk_partitioning disk partition]?&lt;br /&gt;
* What is a [https://en.wikipedia.org/wiki/File_system file system]?&lt;br /&gt;
* What is [https://en.wikipedia.org/wiki/Journaling_file_system#Write_hazards journaling] in terms of filesystems and what are the benefits? Name some journaled filesystems in use nowadays.&lt;br /&gt;
&lt;br /&gt;
=Lecture: Bootloaders, kernels=&lt;br /&gt;
&lt;br /&gt;
In this lecture we&#039;ll discuss how a computer boots and how an operating system kernel is loaded.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://echo360.e-ope.ee/ess/echo/presentation/04eeebd1-c892-485a-9123-03abaa3ce3ca Lecture recording #1], first half we&#039;ll discuss about first assignment about investigating PC hardware, slides start at 43:40.&lt;br /&gt;
&lt;br /&gt;
[https://echo360.e-ope.ee/ess/echo/presentation/26f1d40d-7830-4e5c-b783-e061c1e91cfc Lecture recording #2], first 15 minutes we&#039;ll discuss about second assignment about investigating embedded hardware, last slides about kernels are discussed from 16:00 up to 27:30. I forgot to switch video input for lecture recording so you&#039;ll have to browse slides from the link below :/&lt;br /&gt;
&lt;br /&gt;
Lecture slides:&lt;br /&gt;
[https://docs.google.com/presentation/d/1ybYQEqCgN1KdVW1sLdwtfRogavgzzMQdUfTcAnxNAf4/ bootloaders],&lt;br /&gt;
[https://docs.google.com/presentation/d/1xDL27k3z_0I-IKzdjKkwhOhBrg0aOnM0w0u1zDwaEWY/ kernels].&lt;br /&gt;
&lt;br /&gt;
Jargon: [https://en.wikipedia.org/wiki/BIOS BIOS] (basic input/output system), [https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface UEFI] (Unified Extensible Firmware Interface), bootloader, kernel, process, context switch, x86 real/protected mode, paged virtual memory, swap/pagefile, [https://en.wikipedia.org/wiki/User_space kernelspace/supervisor mode, userspace], [https://en.wikipedia.org/wiki/Protection_ring#Hypervisor_mode hypervisor mode] (ring -1), [https://en.wikipedia.org/wiki/System_Management_Mode#Problems system management mode] aka (ring -2).&lt;br /&gt;
&lt;br /&gt;
Potential exam questions:&lt;br /&gt;
&lt;br /&gt;
* What is the role of BIOS/UEFI in x86-based machines?&lt;br /&gt;
* Explain step by step how operating system is booted up, see slides for flowchart.&lt;br /&gt;
* Describe the functionality provided by general purpose operating system. See architecture of [https://en.wikipedia.org/wiki/Architecture_of_Windows_NT Windows NT], [http://www.elinux.org/Android_Architecture Android], [https://en.wikipedia.org/wiki/Architecture_of_OS_X OS X].&lt;br /&gt;
* What are the main differences between [https://en.wikipedia.org/wiki/Real_mode real mode] and [https://en.wikipedia.org/wiki/Protected_mode protected mode] of x86-based processor?&lt;br /&gt;
* What happens during context switch?&lt;br /&gt;
* What is the purpose of [https://en.wikipedia.org/wiki/Virtual_memory paged virtual memory]?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Security section: [https://en.wikipedia.org/wiki/DMA_attack DMA attack], [http://www.outsidaz.org/blog/2007/10/22/resetting-root-password-via-grubkernel-boot-options/ editing GRUB entries to gain root shell] without password prompt, [http://www.theinquirer.net/inquirer/news/2421402/serious-intel-cpu-security-exploit-spotted-in-old-x86-chips 20 years old security exploit in x86 processors].&lt;br /&gt;
&lt;br /&gt;
=Lecture: Libraries, frameworks=&lt;br /&gt;
&lt;br /&gt;
[https://echo360.e-ope.ee/ess/echo/presentation/26f1d40d-7830-4e5c-b783-e061c1e91cfc Lecture recording #1], from 00:27:30 up to 1:04:00.&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/presentation/d/1q9kGg5AI3AyXglxpJdLjLMpgRLdbF9dl62gauNmDEG8/edit Lecture slides]&lt;br /&gt;
&lt;br /&gt;
Jargon: framework, library, [https://en.wikipedia.org/wiki/Application_binary_interface ABI], [https://en.wikipedia.org/wiki/Application_programming_interface API]&lt;br /&gt;
&lt;br /&gt;
Security section: [http://www.fiercecio.com/story/hackers-exploiting-httpsys-bug-crash-iis-web-servers/2015-04-17 HTTP.sys bug crashes IIS web servers], [http://heartbleed.com/ OpenSSL bug Heartbleed].&lt;br /&gt;
&lt;br /&gt;
=Lecture: Programming languages=&lt;br /&gt;
&lt;br /&gt;
In this lecture we&#039;ll talk about programming languages&lt;br /&gt;
&lt;br /&gt;
Lecture recording: [https://echo360.e-ope.ee/ess/echo/presentation/26f1d40d-7830-4e5c-b783-e061c1e91cfc starting from 1:04:00]&lt;br /&gt;
&lt;br /&gt;
Lecture slides: [https://docs.google.com/presentation/d/1CCZntY7Z-AG_Mice5N2kclDGYI2xVVvRHgWUIs-SxYo/edit programming languages, stack machine]&lt;br /&gt;
&lt;br /&gt;
Jargon: stack machine, lexer/lexeme, token, abstract syntax tree&lt;br /&gt;
&lt;br /&gt;
Potential exam questions:&lt;br /&gt;
&lt;br /&gt;
* What are the major steps of compilation?&lt;br /&gt;
* What are the differences between [https://en.wikipedia.org/wiki/Interpreted_language interpreted], [https://en.wikipedia.org/wiki/Just-in-time_compilation JIT-compilation] and [https://en.wikipedia.org/wiki/Compiler traditional compiling]?&lt;br /&gt;
* What is [https://en.wikipedia.org/wiki/Control_flow control flow]? Loops? Conditional statements?&lt;br /&gt;
&lt;br /&gt;
Assignments:&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Category:I600_Introduction_to_Computers_and_Informatics#Assignment:_Disassembling_Python Disassembling Python]&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Category:I600_Introduction_to_Computers_and_Informatics#Assignment:_Investigating_compilers Investigating compilers]&lt;br /&gt;
&lt;br /&gt;
=Lecture: Data encoding=&lt;br /&gt;
&lt;br /&gt;
[https://echo360.e-ope.ee/ess/echo/presentation/ca8310e9-e82e-4e47-b90a-2e1801bcfada Lecture recording]&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/presentation/d/1QV_IMOadIEUTBW7Laqw59j8J7Y8HKwvSDmP-swEEx0s Lecture slides]&lt;br /&gt;
&lt;br /&gt;
In this lecture we&#039;ll talk about bits, bytes, integers, strings, pixels, audio encodings, video encoding etc.&lt;br /&gt;
&lt;br /&gt;
Potential exam questions:&lt;br /&gt;
&lt;br /&gt;
* What is bit? Nibble? Byte? Word?&lt;br /&gt;
* Write 9375 in binary, hexadecimal?&lt;br /&gt;
* Write 0xDEADBEEF in decimal?&lt;br /&gt;
* What is [https://en.wikipedia.org/wiki/Quantization_%28signal_processing%29 quantization] in terms of signal processing?&lt;br /&gt;
* How are [https://en.wikipedia.org/wiki/Integer_%28computer_science%29 integers] stored in binary? What integer range can be described using n bits? How many bits are required to describe integer range from n .. m.&lt;br /&gt;
* How are [https://en.wikipedia.org/wiki/Single-precision_floating-point_format single precision] and [https://en.wikipedia.org/wiki/Double-precision_floating-point_format double precision] floating point numbers stored in binary according to [https://en.wikipedia.org/wiki/IEEE_floating_point IEEE754 standard]? [http://lauri.vosandi.com/hdl/arithmetic/floating-point-representation.html Floating-point multiplication]&lt;br /&gt;
* What is the difference between CMYK and RGB color models? How are YUV, HSV and HSL colorspaces related to RGB? What are sRGB and YCbCr and where are they used?&lt;br /&gt;
* How is data encoded on audio CD-s? What is the [http://lauri.vosandi.com/2013/07/audio-codecs.html capacity of an audio CD]?&lt;br /&gt;
* What is sampling rate? What is bit depth? What is resolution?&lt;br /&gt;
* What is bitrate?&lt;br /&gt;
* What is lossy/lossless compression?&lt;br /&gt;
* What is JPEG suitable for? Is JPEG lossy or lossless compression method?&lt;br /&gt;
* What is PNG suitable for? Does PNG support compression?&lt;br /&gt;
* How are time domain and frequency domain related in terms of signal processing? What is Fourier transform and where it is applied?&lt;br /&gt;
&lt;br /&gt;
Jargon: 44.1kHz sampling rate, 16-bit audio, RGB565 pixel format, RGB888 pixel format&lt;br /&gt;
&lt;br /&gt;
Relevant assignments:&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Category:I600_Introduction_to_Computers_and_Informatics#Assignment:_Disassembling_Python Disassembling Python]&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Category:I600_Introduction_to_Computers_and_Informatics#Assignment:_Investigating_compilers Investigating compilers]&lt;br /&gt;
&lt;br /&gt;
=Lecture: Code execution in processor=&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/presentation/d/18wPDLydyZevMi9F0MX7F6eK-NMBZQzGN4mviF_ft8-E/edit Lecture slides]&lt;br /&gt;
&lt;br /&gt;
[https://echo360.e-ope.ee/ess/echo/presentation/41440769-1cd5-4166-bd4e-299c2af3d3e0?ec=true Lecture recording #1]&lt;br /&gt;
&lt;br /&gt;
[https://echo360.e-ope.ee/ess/echo/presentation/7aeb2a04-b0dc-4547-9dee-e541a5f9c99a?ec=true Lecture recording #2] up to 8:35, system calls&lt;br /&gt;
&lt;br /&gt;
It&#039;s highly reccommended to play around with simulators [http://morriswmz.jit.su/static/simple-mips-pipelined.html here is one for MIPS processors].&lt;br /&gt;
&lt;br /&gt;
In this lecture we&#039;ll talk about different processor architectures, instructions, pipelining, function calls, jumps, loops etc.&lt;br /&gt;
&lt;br /&gt;
Assignments:&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Category:I600_Introduction_to_Computers_and_Informatics#Assignment:_Disassembling_Python Disassembling Python]&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Category:I600_Introduction_to_Computers_and_Informatics#Assignment:_Investigating_compilers Investigating compilers]&lt;br /&gt;
&lt;br /&gt;
Exam question:&lt;br /&gt;
&lt;br /&gt;
* Given ~10 instructions and their explainations, follow the instructions and elaborate after every step what happened in the processor?&lt;br /&gt;
&lt;br /&gt;
=Lecture: Microcontrollers=&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/presentation/d/1qPyzBBfB1TseEzXjcp4-ZjqSnAwbjDmEqyIYcUGFLG0/edit Lecture slides]&lt;br /&gt;
&lt;br /&gt;
[https://echo360.e-ope.ee/ess/echo/presentation/7aeb2a04-b0dc-4547-9dee-e541a5f9c99a?ec=true Lecture recording] starts at 8:35&lt;br /&gt;
&lt;br /&gt;
Jargon: microprocessor, microcontroller, coprocessor, floating-point unit (FPU), digital signal processor (DSP), field programmable grid array (FPGA), sensors, actuators, digital input/output, analog input, general purpose input/output (GPIO), interrupt, interrupt handler, timer/counter, pulse-width modulation (PWM), &lt;br /&gt;
&lt;br /&gt;
Potential exam question:&lt;br /&gt;
&lt;br /&gt;
* What distinguishes microcontroller from microprocessor?&lt;br /&gt;
* What are the differences between Hardvard architecture and von Neumann architecture?&lt;br /&gt;
* What is an interrupt?&lt;br /&gt;
* What is an timer?&lt;br /&gt;
&lt;br /&gt;
=Lecture: Introduction to Boole algebra=&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/presentation/d/1Y1rXvt2oXROhW-LZ07B0Sg90D-_u8SlLUZeaxds7f1g/ Lecture slides]&lt;br /&gt;
&lt;br /&gt;
Exam questions:&lt;br /&gt;
&lt;br /&gt;
* Simplify A AND A OR B&lt;br /&gt;
* Show addition of X and Y in binary&lt;br /&gt;
* Show subtraction of X and Y  in binary&lt;br /&gt;
* Show multiplication of X and Y in binary&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Assignments:&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Category:I600_Introduction_to_Computers_and_Informatics#Assignment:_Designing_arithmetic-logic_unit Designing arithmetic-logic unit]&lt;br /&gt;
&lt;br /&gt;
=Lecture: Hardware description languages=&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/presentation/d/1HO9iPfi8S3ZykuW7IHVm09QamLHiVo6s6lUGwWu4eD4/ Lecture slides]&lt;br /&gt;
&lt;br /&gt;
[https://echo360.e-ope.ee/ess/echo/presentation/b7ca9eb3-5a9d-4e8c-8c1b-25c2891359ee Lecture recording] starts at 05:00&lt;br /&gt;
&lt;br /&gt;
Potential exam questions:&lt;br /&gt;
&lt;br /&gt;
* What are the uses for hardware description languages?&lt;br /&gt;
* What is latch?&lt;br /&gt;
* What is flip-flop?&lt;br /&gt;
* What is mux (multiplexer)?&lt;br /&gt;
* What is register? Register file?&lt;br /&gt;
* What is ALU?&lt;br /&gt;
* What is floating-point unit?&lt;br /&gt;
* What is a cache?&lt;br /&gt;
* What is a bus?&lt;br /&gt;
* Show the circuit diagram for A OR B AND C, NOT A AND B, &amp;lt;insert some other Boole formula here&amp;gt;?&lt;br /&gt;
* Show the truth table for &amp;lt;insert Boole formula here&amp;gt;?&lt;br /&gt;
* Write the equivalent Boole formula of a circuit diagram.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Lecture: Publishing work=&lt;br /&gt;
&lt;br /&gt;
[https://echo360.e-ope.ee/ess/echo/presentation/cd2c0e2b-5f48-4a39-89ca-b75801e5d00b Lecture recording]&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/presentation/d/1hCqRjGUx5Yv6iZN4xaz2UICLWbycnM46ctw2zX0g94U/ Lecture slides]&lt;br /&gt;
&lt;br /&gt;
Potential exam questions:&lt;br /&gt;
&lt;br /&gt;
* What are the major implications of MIT, BSD and GPL licenses?&lt;br /&gt;
* What are the differences between copyright, trademark, trade secret?&lt;br /&gt;
* Where would you use waterfall software development model? Where would you use agile?&lt;br /&gt;
* What is the purpose of a version control system?&lt;br /&gt;
* What would you store in a version control system?&lt;br /&gt;
&lt;br /&gt;
=Lecture: Algorithms and data structures=&lt;br /&gt;
&lt;br /&gt;
[https://echo360.e-ope.ee/ess/echo/presentation/1145600e-cef9-40b4-91da-3cc1174e27eb Lecture recording] unfortunately without audio :(&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/presentation/d/1vwJvvRerM0rYBaiE3pEX5GUXRHuVJvjTUDKo8fqTq_A/ Lecture slides]&lt;br /&gt;
&lt;br /&gt;
Potential exam questions:&lt;br /&gt;
&lt;br /&gt;
* What is time complexity of algorithm?&lt;br /&gt;
* What is space complexity of algorithm?&lt;br /&gt;
* What&#039;s a good algorithm?&lt;br /&gt;
&lt;br /&gt;
=Lecture: History=&lt;br /&gt;
&lt;br /&gt;
Topics: Computer history, Silicon Valley, standards&lt;br /&gt;
&lt;br /&gt;
[https://echo360.e-ope.ee/ess/echo/presentation/584b21e6-4ead-4cb6-bc41-5c653bc5c3a2 Lecture recording]&lt;br /&gt;
&lt;br /&gt;
[https://docs.google.com/presentation/d/1Ybld2ABpm9QJSLL-Bodr1a5XI5Hk_KM2q_nZVYu2L0c/edit?usp=sharing Lecture slides]&lt;br /&gt;
&lt;br /&gt;
Potential example questions:&lt;br /&gt;
&lt;br /&gt;
* What is [https://en.wikipedia.org/wiki/Moore&#039;s_law Moore&#039;s law]? What is [https://en.wikipedia.org/wiki/Rock&#039;s_law Rock&#039;s law]?&lt;br /&gt;
* What were the major contributing factors for success of Microsoft, Apple, Google, &amp;lt;your favourite company&amp;gt;?&lt;br /&gt;
* What were the major contributing factors to the success of Silicon Valley?&lt;br /&gt;
&lt;br /&gt;
=Assignment: Investigating PC hardware=&lt;br /&gt;
&lt;br /&gt;
Goal: Get familiar with your [https://en.wikipedia.org/wiki/X86 laptop hardware]. Get out of the comfort zone of your primary operating system and try out other operating systems. Learn about [https://en.wikipedia.org/wiki/Full_virtualization hardware virtualization].&lt;br /&gt;
&lt;br /&gt;
Deadline: 16. September&lt;br /&gt;
&lt;br /&gt;
Credits: 5 points plus extra point for being extra thorough about interpreting what you see.&lt;br /&gt;
&lt;br /&gt;
Use what you learned in [[Getting started with Ubuntu]] workshop:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Read the instructions before you act&#039;&#039;&#039;.&lt;br /&gt;
* Place your preferred ISO image to a memory stick using &amp;lt;code&amp;gt;dd&amp;lt;/code&amp;gt; or Win32 Disk Imager and boot it on your personal laptop. You do &#039;&#039;&#039;not&#039;&#039;&#039; need to install Ubuntu on your harddisk, simply click &#039;&#039;&#039;Try Ubuntu&#039;&#039;&#039; once the operating system boots off the memory stick and carry out following tasks.&lt;br /&gt;
* Open up terminal by pressing &amp;lt;code&amp;gt;Ctrl-Alt-T&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Use &amp;lt;code&amp;gt;lsb_release -a&amp;lt;/code&amp;gt; to check what operating system distribution you&#039;re running.&lt;br /&gt;
* Use &amp;lt;code&amp;gt;uname -sr&amp;lt;/code&amp;gt; to check what operating system kernel you&#039;re running. &lt;br /&gt;
* Use &amp;lt;code&amp;gt;cat /proc/cpuinfo&amp;lt;/code&amp;gt; and check processor information. What CPU model and how many cores your computer has?&lt;br /&gt;
* Use &amp;lt;code&amp;gt;arch&amp;lt;/code&amp;gt; to check what CPU architecture is being used by the operating system. Is it 32-bit or 64-bit?&lt;br /&gt;
* Use &amp;lt;code&amp;gt;cat /proc/meminfo&amp;lt;/code&amp;gt; to check memory usage. How much RAM your computer has?&lt;br /&gt;
* Use &amp;lt;code&amp;gt;lspci -t -v -nn&amp;lt;/code&amp;gt; to enumerate PCI and PCI Express devices, attempt to identify what is what.&lt;br /&gt;
* Use &amp;lt;code&amp;gt;lsusb&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;lsusb -t&amp;lt;/code&amp;gt; to enumerate USB devices, again attempt to identify what is what.&lt;br /&gt;
* Use &amp;lt;code&amp;gt;fdisk -l&amp;lt;/code&amp;gt; to enumerate disks and partitions. How big is your harddisk? How many and how big partitions it has?&lt;br /&gt;
* Use &amp;lt;code&amp;gt;lsblk&amp;lt;/code&amp;gt; to enumerate block devices.&lt;br /&gt;
* Use &amp;lt;code&amp;gt;xrandr&amp;lt;/code&amp;gt; to enumerate display outputs. What video output resolutions are available and which one is currently used?&lt;br /&gt;
* Use &amp;lt;code&amp;gt;cat /proc/asound/cards&amp;lt;/code&amp;gt; to check which audio devices are available.&lt;br /&gt;
* Use &amp;lt;code&amp;gt;dmidecode&amp;lt;/code&amp;gt; to see even more information about your computer.&lt;br /&gt;
* Use &amp;lt;code&amp;gt;ifconfig -a&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip addr list&amp;lt;/code&amp;gt; to list all network interfaces.&lt;br /&gt;
* Use &amp;lt;code&amp;gt;iwconfig&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;iw list&amp;lt;/code&amp;gt; to list all wireless network interfaces. Is your wireless network interface detected? If not take a guess why?&lt;br /&gt;
* Use &amp;lt;code&amp;gt;hcitool dev&amp;lt;/code&amp;gt; to list bluetooth host controller. Is your bluetooth device detected?&lt;br /&gt;
* Use &amp;lt;code&amp;gt;glxinfo&amp;lt;/code&amp;gt; to check what 3D rendering capabilities are available, is it hardware accelerated? (hint: is direct rendering enabled?)&lt;br /&gt;
* What [https://en.wikipedia.org/wiki/Sound_card audio card] is your machine using? What bus is it using?&lt;br /&gt;
* What [https://en.wikipedia.org/wiki/Graphics_processing_unit graphics controller] is your machine using? What bus is it using?&lt;br /&gt;
* What webcam is your machine using? What bus is it using?&lt;br /&gt;
* What [https://en.wikipedia.org/wiki/Ethernet wired network] chipset your computer has? What bus is it using? &lt;br /&gt;
* What [https://en.wikipedia.org/wiki/IEEE_802.11 wireless network] chipset your computer has? What bus is it using?&lt;br /&gt;
* What [https://en.wikipedia.org/wiki/Bluetooth Bluetooth] device your computer has? What bus is it using?&lt;br /&gt;
* Is there a [https://en.wikipedia.org/wiki/Mobile_broadband_modem cellular modem] connected and how it&#039;s connected?&lt;br /&gt;
* Boot the ISO image in VirtualBox and follow the same steps as above, &#039;&#039;&#039;what are the differences and why&#039;&#039;&#039;?&lt;br /&gt;
* Answer to questions above and send it as [https://en.wikipedia.org/wiki/Plain_text plain text] e-mail to Lauri, make sure you &#039;&#039;&#039;use the address supplied above with the course code&#039;&#039;&#039;, otherwise your mail is not searchable in my mailbox. Attach collected command outputs as [https://en.wikipedia.org/wiki/Plain_text plain text] file, do &#039;&#039;&#039;not&#039;&#039;&#039; send .odt, .doc files, these are not readable on my smartphone. When answering to questions phrase the text in a way that is understandable out of context, so I don&#039;t have to open up wiki to understand what you&#039;re talking about.&lt;br /&gt;
&lt;br /&gt;
Note that I can&#039;t expect you to install Ubuntu on your physical machine, but I can help if you want to do that. You should have Ubuntu ready to go in a virtual machine at least for subsequent sessions. We&#039;re using Ubuntu because it&#039;s widely used on servers and in the cloud, so any Ubuntu skills will definitely come handy in future. If you&#039;re already familiar with Linux, it&#039;s suggested to take a look at other interesting operating systems such as [https://www.freebsd.org/ FreeBSD] or [http://www.openbsd.org/ OpenBSD]. Take a look at [https://www.kali.org/ Kali Linux] if you&#039;re interested in penetration testing.&lt;br /&gt;
&lt;br /&gt;
=Assignment: Investigating embedded hardware=&lt;br /&gt;
&lt;br /&gt;
Background: Most of the smartphones nowadays are using [https://en.wikipedia.org/wiki/System_on_a_chip SoC] built around [https://en.wikipedia.org/wiki/ARM_architecture ARM] processor. Raspberry Pi is an excellent piece of hardware to for checking out how an ARM-based machine looks like.&lt;br /&gt;
&lt;br /&gt;
Goal: Get familiar with hardware ARM-based hardware.&lt;br /&gt;
&lt;br /&gt;
Deadline: 23. September&lt;br /&gt;
&lt;br /&gt;
Points: 4 points&lt;br /&gt;
&lt;br /&gt;
Use what you learned in [[Getting started with Ubuntu]] and [[Getting started with Raspberry Pi]] workshops:&lt;br /&gt;
&lt;br /&gt;
* Read the instructions before you get busy.&lt;br /&gt;
* Boot Raspbian on Raspberry Pi.&lt;br /&gt;
* Use the commands described in previous assignment to examine the environment of Raspbian on Raspberry Pi. What are the major differences compares to your laptop and virtual machine?&lt;br /&gt;
* What buses is Raspberry Pi making use of?&lt;br /&gt;
* What filesystems is Raspbian making use of?&lt;br /&gt;
* Answer to questions above and send it as e-mail to Lauri, make sure you &#039;&#039;&#039;use the address supplied above with the course code&#039;&#039;&#039;, otherwise your mail is not searchable in my mailbox. Attach collected command outputs as [https://en.wikipedia.org/wiki/Plain_text plain text] file, do &#039;&#039;&#039;not&#039;&#039;&#039; send .odt, .doc files, these are not readable on a phone. When answering to questions phrase the text in a way that is understandable out of context, so it is not necessary to open up wiki to understand what you&#039;re talking about.&lt;br /&gt;
&lt;br /&gt;
=Assignment: Investigating LAMP=&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/LAMP_%28software_bundle%29 LAMP] software bundle is consists of Linux-based OS, [https://en.wikipedia.org/wiki/Apache_HTTP_Server Apache web server], [https://en.wikipedia.org/wiki/PHP PHP programming language] runtime and [https://en.wikipedia.org/wiki/MySQL MySQL database].&lt;br /&gt;
Most of the web applications on the Internet including Facebook are built on top of LAMP-styled software stack.&lt;br /&gt;
Use a Raspberry Pi or Ubuntu virtual machine to set up [https://www.raspberrypi.org/learning/lamp-web-server-with-wordpress/ WordPress], [https://doc.owncloud.org/server/8.1/admin_manual/installation/index.html ownCloud] or any well-known web application that makes use of a database such as MySQL.&lt;br /&gt;
To make your life easier also set up SSH public key authentication.&lt;br /&gt;
&lt;br /&gt;
Goal: Get familiar with LAMP stack. Get comfortable with (SSH) public key authentication.&lt;br /&gt;
&lt;br /&gt;
Deadline: 30. September&lt;br /&gt;
&lt;br /&gt;
Points: 4 points&lt;br /&gt;
&lt;br /&gt;
Tasks:&lt;br /&gt;
&lt;br /&gt;
* If you&#039;re using Ubuntu virtual machine approach, see [[Accessing a virtual machine via SSH connection]]&lt;br /&gt;
* Use SSH to connect to your server over the network. If you&#039;re using Windows on your laptop use [http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html PuTTY] to gain access to command line and [https://winscp.net/ WinSCP] to copy files, otherwise simply boot Ubuntu in a virtual machine and use &amp;lt;code&amp;gt;ssh username@hostname&amp;lt;/code&amp;gt; to invoke commands and &amp;lt;code&amp;gt;sftp://username@hostname&amp;lt;/code&amp;gt; in the file browser to access filesystem.&lt;br /&gt;
* Set up any of the web applications referenced above. You may be interested in reading also [http://howtoubuntu.org/how-to-install-lamp-on-ubuntu this] and [https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-on-ubuntu-14-04 this].&lt;br /&gt;
* Demonstrate that the web application you installed works in next Tuesday session, screenshots/photos with explanation sent to e-mail above also suffice.&lt;br /&gt;
* Optional: Set up SSH public key authentication to &amp;lt;code&amp;gt;enos.itcollege.ee&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Optional: [https://www.raspberrypi.org/documentation/remote-access/ssh/passwordless.md Set up public key authentication to your Raspberry Pi]. Windows users might want to take a look at [https://winscp.net/eng/docs/ui_puttygen#obtaining_and_starting_puttygen PuTTYgen instructions].&lt;br /&gt;
&lt;br /&gt;
Note: You don&#039;t have to necessarily use Raspberry Pi - Web application installed in Ubuntu VM is also accepted, also if you&#039;re maintaining similar installation of a production server that is accepted as well. [http://www.wampserver.com/en/ WAMP] on Windows is also accepted.&lt;br /&gt;
&lt;br /&gt;
=Assignment: Set up basic IoT scenario=&lt;br /&gt;
&lt;br /&gt;
[https://en.wikipedia.org/wiki/Internet_of_Things Internet of Things] is one of the emerging technologies (read: hype). IoT is essentially about getting everything online, including lightbulbs, switches, window shades etc. In this assignment LED symbolizes a light and the task is to implement code which allows user to switch the LED on and off over the network.&lt;br /&gt;
&lt;br /&gt;
[[File:Raspberry-pi-gpio-18-led bb.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Goal: Get familiar how Python code can be started up. Build basic [https://en.wikipedia.org/wiki/Internet_of_Things IoT] appliance, a light that can be turned on and off via the Internet.&lt;br /&gt;
&lt;br /&gt;
Deadline: 7. October&lt;br /&gt;
&lt;br /&gt;
Points: 4 points&lt;br /&gt;
&lt;br /&gt;
* Complete the [http://codeacademy.com/tracks/python Python track at CodeAcademy] if you haven&#039;t done that yet.&lt;br /&gt;
* Follow the wiki page Blinking LED section under [[Getting started with Raspberry Pi]].&lt;br /&gt;
* Get an LED blinking on command-line.&lt;br /&gt;
* Get LED blinking from Python code.&lt;br /&gt;
* Get basic HTTP server running in Python.&lt;br /&gt;
* Combine all of the above, build an HTTP server that can be used to turn LED on and off from via web browser.&lt;br /&gt;
* Optional: Take a peek at next assignment and upload working version to GitHub.&lt;br /&gt;
* Optional: [http://sourceforge.net/p/raspberry-gpio-python/wiki/PWM/ Smoothen the transitions using PWM].&lt;br /&gt;
&lt;br /&gt;
=Assignment: Collaborating using Git=&lt;br /&gt;
&lt;br /&gt;
Software development is usually done by several contributors, to facilitate efficient collaboration a distributed version control system is a must. In this assignment you&#039;ll upload your code to GitHub and modify fellow student&#039;s code to reflect changes in the Raspberry Pi setup:&lt;br /&gt;
&lt;br /&gt;
[[File:Raspberry-pi-rgb-led bb.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Deadline: 14. October&lt;br /&gt;
&lt;br /&gt;
Points: 5&lt;br /&gt;
&lt;br /&gt;
Goal: Get familiar with distributed version control systems. Collaborate.&lt;br /&gt;
&lt;br /&gt;
* Create [https://github.com/ GitHub] account if you haven&#039;t done so yet.&lt;br /&gt;
* Create a Git repository, eg http://github.com/your-username/rpi-iot-example&lt;br /&gt;
* Install Git on your Raspberry Pi by using &amp;lt;code&amp;gt;apt-get install git&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Clone the repository to your Raspberry Pi using &amp;lt;code&amp;gt;git clone http://github.com/your-username/rpi-iot-example&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Move the Python code created earlier to the Git repository directory.&lt;br /&gt;
* Use &amp;lt;code&amp;gt;git add&amp;lt;/code&amp;gt; to add the files.&lt;br /&gt;
* Configure full name: &amp;lt;code&amp;gt;git config --global user.name &amp;quot;Firstname Surname&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* Configure e-mail: &amp;lt;code&amp;gt;git config --global user.email first.last@domain.tld&amp;lt;/code&amp;gt; &lt;br /&gt;
* Use &amp;lt;code&amp;gt;git commit&amp;lt;/code&amp;gt; to create the [http://blog.no-panic.at/2014/10/20/funny-initial-git-commit-messages/ initial commit].&lt;br /&gt;
* Use &amp;lt;code&amp;gt;git push&amp;lt;/code&amp;gt; to push the commits to GitHub server.&lt;br /&gt;
* Set up [https://help.github.com/articles/generating-ssh-keys/ public key authentication between your laptop and GitHub servers], verify that &amp;lt;code&amp;gt;https://github.com/username.keys&amp;lt;/code&amp;gt; gives the expected result.&lt;br /&gt;
* Use &amp;lt;code&amp;gt;git clone&amp;lt;/code&amp;gt; to clone the repository to your laptop. Ubuntu should first &amp;lt;code&amp;gt;apt-get install git&amp;lt;/code&amp;gt;, Windows and Mac users might want to take a look at [http://git-scm.com/download/ Git homepage]. If you&#039;re looking for graphical user interface take a look at [https://desktop.github.com/ GitHub Desktop] or [https://tortoisegit.org/ TortoiseGit].&lt;br /&gt;
* Create [https://en.wikipedia.org/wiki/README README] in the repository directory, populate it with relevant content - what is it about, who made it etc and commit the changes.&lt;br /&gt;
* In your Raspberry Pi setup replace the single-color LED with RGB LED as shown above.&lt;br /&gt;
* Clone &#039;&#039;&#039;fellow student&#039;s&#039;&#039;&#039; repository and adapt the code to reflect physical changes to the setup, the Python snippet should now permit changing the color of the light, have it blinking and turn it off. Other interesting modes are awarded with extra points.&lt;br /&gt;
* Use either [https://www.atlassian.com/git/tutorials/ Atlassian Tutorials], [http://rogerdudler.github.io/git-guide/ git - the simple guide] or [https://try.github.io/ Try Git] as a reference if you get lost.&lt;br /&gt;
* Document in the README what GPIO pins are used in the code for red, green and blue. Extra points for making the Python code [https://docs.python.org/2/library/argparse.html#module-argparse configurable from command-line].&lt;br /&gt;
* Late submissions will heavily lose points for failure to comply with [http://chris.beams.io/posts/git-commit/ decent commit messages].&lt;br /&gt;
* Send Lauri the URL of your repository at GitHub.&lt;br /&gt;
&lt;br /&gt;
Git resources: [http://git-scm.com/book/en/v2 Pro Git Book] (read the basics to get kickstarted) and [https://www.codecademy.com/en/courses/learn-git/ Codecademy Git course].&lt;br /&gt;
&lt;br /&gt;
=Assignment: Disassembling Python=&lt;br /&gt;
&lt;br /&gt;
CPython is the default, most widely used implementation of the Python programming language. CPython is written in C. CPython compiles Python source into bytecode which is interpreted by a Python virtual (stack) machine. This is very similar to what is done with Java. Use [https://docs.python.org/2/library/dis.html dis] to disassemble a Python function into stack machine instructions. Follow [https://docs.python.org/2/library/dis.html#python-bytecode-instructions bytecode instructions] to determine what each instruction does.&lt;br /&gt;
&lt;br /&gt;
Deadline: 21. October&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Example submission==&lt;br /&gt;
&lt;br /&gt;
Consider following Python function, which calculates the sum of squares. For example sum_of_powers(2, 3) == 14 (1**2 + 2**2 + 3**2):&lt;br /&gt;
&lt;br /&gt;
 def sum_of_powers(exponent, numbers):&lt;br /&gt;
     counter = 1&lt;br /&gt;
     return_value = 0&lt;br /&gt;
     while True:&lt;br /&gt;
         if counter &amp;gt; numbers:&lt;br /&gt;
             break&lt;br /&gt;
         return_value += counter ** exponent&lt;br /&gt;
         counter += 1&lt;br /&gt;
     return return_value&lt;br /&gt;
 &lt;br /&gt;
 # Following two lines are the ones which produce the instructions shown below&lt;br /&gt;
 from dis import dis&lt;br /&gt;
 dis(sum_of_powers)&lt;br /&gt;
&lt;br /&gt;
Corresponding Python stack machine instructions extracted with &amp;lt;code&amp;gt;dis&amp;lt;/code&amp;gt; are following. Columns correspond to: line number in the source code, instruction offset (in bytes), instruction name as listed [https://docs.python.org/2/library/dis.html in dis documentation], &lt;br /&gt;
&lt;br /&gt;
 22           0 LOAD_CONST               1 (1)               # Constant of 1 is pushed to stack&lt;br /&gt;
              3 STORE_FAST               2 (counter)         # Pushed value is popped and stored in variable counter&lt;br /&gt;
 &lt;br /&gt;
 23           6 LOAD_CONST               2 (0)               # Constant of 0 is pushed to stack&lt;br /&gt;
              9 STORE_FAST               3 (return_value)    # Pushed value is popped and stored in variable return_value&lt;br /&gt;
 &lt;br /&gt;
 24          12 SETUP_LOOP              43 (to 58)           # Loop until instruction no 58 is set up&lt;br /&gt;
 &lt;br /&gt;
 25     &amp;gt;&amp;gt;   15 LOAD_FAST                2 (counter)             # Value of variable &amp;lt;counter&amp;gt; is pushed to stack&lt;br /&gt;
             18 LOAD_FAST                1 (numbers)             # Value of variable &amp;lt;numbers&amp;gt; is pushed to stack&lt;br /&gt;
             21 COMPARE_OP               4 (&amp;gt;)                   # Two topmost values of stack are popped and compared,&lt;br /&gt;
                                                                 # boolean result is pushed back to the top of stack&lt;br /&gt;
             24 POP_JUMP_IF_FALSE       31                       # If top of the stack if False,&lt;br /&gt;
                                                                 # jump to instruction no 31 is performed.&lt;br /&gt;
                                                                 # Top of the stack is popped&lt;br /&gt;
 &lt;br /&gt;
 26          27 BREAK_LOOP                                       # Execution jumps out of the loop, the one&lt;br /&gt;
                                                                 # that was set up at inst no 12&lt;br /&gt;
             28 JUMP_FORWARD             0 (to 31)               # Placeholder probably due to the way pipeline is handled&lt;br /&gt;
 &lt;br /&gt;
 27     &amp;gt;&amp;gt;   31 LOAD_FAST                3 (return_value)        # Value of variable &amp;lt;return_value&amp;gt; is pushed to stack&lt;br /&gt;
             34 LOAD_FAST                2 (counter)             # Value of variable &amp;lt;counter&amp;gt; is pushed to stack&lt;br /&gt;
             37 LOAD_FAST                0 (exponent)            # Value of variable &amp;lt;exponent&amp;gt; is pushed to stack&lt;br /&gt;
             40 BINARY_POWER                                     # Exponentiation of two topmost values is performed and&lt;br /&gt;
                                                                 # substituted with the result&lt;br /&gt;
             41 INPLACE_ADD                                      # Two topmost values are added and substituted with the sum&lt;br /&gt;
             42 STORE_FAST               3 (return_value)        # Sum of the addition is stored in variable &amp;lt;return_value&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 28          45 LOAD_FAST                2 (counter)             # Value of variable &amp;lt;counter&amp;gt; is pushed to stack&lt;br /&gt;
             48 LOAD_CONST               1 (1)                   # Constant of 1 is pushed to stack&lt;br /&gt;
             51 INPLACE_ADD                                      # Two topmost values are added and substituted with the sum&lt;br /&gt;
             52 STORE_FAST               2 (counter)             # Sum is stored in the variable &amp;lt;counter&amp;gt;&lt;br /&gt;
             55 JUMP_ABSOLUTE           15                       # Code execution jumps to instruction no 15 (the beginning of the loop)&lt;br /&gt;
 &lt;br /&gt;
 29     &amp;gt;&amp;gt;   58 LOAD_FAST                3 (return_value)    # The value of variable &amp;lt;return_value&amp;gt; is pushed to stack&lt;br /&gt;
             61 RETURN_VALUE                                 # Return top of the stack to the function caller&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the Python VM the state consists of:&lt;br /&gt;
&lt;br /&gt;
* Program counter (PC), the number of currently executed instruction&lt;br /&gt;
* The stack and most importantly top of stack (TOS)&lt;br /&gt;
* Constants extracted from source (co_consts)&lt;br /&gt;
* Variables names (co_names)&lt;br /&gt;
* Variables values (co_varnames)&lt;br /&gt;
* There are *no* registers!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Executing the function with arguments exponent=2 and numbers=3 will result in return value of 14, the arguments are already placed in the co_varnames array by the calling function. Also the constants used in the code are present, so you may assume following state in the Python interpreter just before entering the function body:&lt;br /&gt;
&lt;br /&gt;
    -1. stack = []; co_varnames = [2, 3]; co_consts[?, 1, 0]&lt;br /&gt;
&lt;br /&gt;
The steps that Python VM takes to get to the results are following:&lt;br /&gt;
&lt;br /&gt;
     0. LOAD_CONST 1: stack = [1]&lt;br /&gt;
     3. STORE_FAST 2: stack = []; co_varnames = [2, 3, 1]&lt;br /&gt;
     6. LOAD_CONST 2: stack = [0];&lt;br /&gt;
     9. STORE_FAST 3: stack = []; co_varnames = [2, 3, 1, 0]&lt;br /&gt;
    12. SETUP_LOOP 43: stack = []; loop is set up, counter is 1&lt;br /&gt;
 &lt;br /&gt;
    Here we enter loop body for the first time&lt;br /&gt;
    &lt;br /&gt;
    15. LOAD_FAST 2: stack = [1]&lt;br /&gt;
    18. LOAD_FAST 1: stack = [1, 3]&lt;br /&gt;
    21. COMPARE_OP 4: stack = [False]&lt;br /&gt;
    24. POP_JUMP_IF_FALSE 31: stack = []; jump to instruction 31&lt;br /&gt;
    31. LOAD_FAST 3: stack = [0];&lt;br /&gt;
    34. LOAD_FAST 2: stack = [0, 1];&lt;br /&gt;
    37. LOAD_FAST 0: stack = [0, 1, 2];&lt;br /&gt;
    40. BINARY_POWER: stack = [0, 1]&lt;br /&gt;
    41. INPLACE_ADD: stack = [1]&lt;br /&gt;
    42. STORE_FAST 3: stack = []; co_varnames = [2, 3, 1, 1]&lt;br /&gt;
    45. LOAD_FAST 3: stack = [1];&lt;br /&gt;
    48. LOAD_CONST 1: stack = [1, 1];&lt;br /&gt;
    51. INPLACE_ADD: stack = [2]&lt;br /&gt;
    52. STORE_FAST 2: stack = []; co_varnames = [2, 3, 2, 1]&lt;br /&gt;
    53. JUMP_ABSOLUTE 15: jump to instruction no 15, counter is 2&lt;br /&gt;
 &lt;br /&gt;
    Here we enter loop body for the second time&lt;br /&gt;
    &lt;br /&gt;
    15. LOAD_FAST 2: stack = [2]&lt;br /&gt;
    18. LOAD_FAST 1: stack = [2, 3]&lt;br /&gt;
    21. COMPARE_OP: stack = [False]&lt;br /&gt;
    24. POP_JUMP_IF_FALSE 31: stack = []; jump to instruction 31&lt;br /&gt;
    31. LOAD_FAST 3: stack = [1]; here we have only 1**1&lt;br /&gt;
    34. LOAD_FAST 2: stack = [1, 2];&lt;br /&gt;
    37. LOAD_FAST 0: stack = [1, 2, 2];&lt;br /&gt;
    40. BINARY_POWER: stack = [1, 4]&lt;br /&gt;
    41. INPLACE_ADD: stack = [5]; here we already have 1**2 + 2**2&lt;br /&gt;
    42. STORE_FAST 3: stack = []; co_varnames = [2, 3, 2, 5]&lt;br /&gt;
    45. LOAD_FAST 3: stack = [2];&lt;br /&gt;
    48. LOAD_CONST 1: stack = [2, 1];&lt;br /&gt;
    51. INPLACE_ADD: stack = [3]&lt;br /&gt;
    52. STORE_FAST 2: stack = []; co_varnames = [2, 3, 3, 5]&lt;br /&gt;
    53. JUMP_ABSOLUTE 15: jump to instruction no 15, counter is 3&lt;br /&gt;
 &lt;br /&gt;
    Here we enter the loop body third time&lt;br /&gt;
    &lt;br /&gt;
    15. LOAD_FAST 2: stack = [3]&lt;br /&gt;
    18. LOAD_FAST 1: stack = [3, 3]&lt;br /&gt;
    21. COMPARE_OP: stack = [False]&lt;br /&gt;
    24. POP_JUMP_IF_FALSE 31: stack = []; jump to instruction 31&lt;br /&gt;
    31. LOAD_FAST 3: stack = [5]&lt;br /&gt;
    34. LOAD_FAST 2: stack = [5, 3];&lt;br /&gt;
    37. LOAD_FAST 0: stack = [5, 3, 2];&lt;br /&gt;
    40. BINARY_POWER: stack = [5, 9]&lt;br /&gt;
    41. INPLACE_ADD: stack = [14]; here we have 1**2 + 2**2 + 3**2&lt;br /&gt;
    42. STORE_FAST: stack = []; co_varnames = [2, 3, 3, 14]&lt;br /&gt;
    45. LOAD_FAST 3: stack = [3];&lt;br /&gt;
    48. LOAD_CONST 1: stack = [3, 1];&lt;br /&gt;
    51. INPLACE_ADD: stack = [4]&lt;br /&gt;
    52. STORE_FAST 2: stack = []; co_varnames = [2, 3, 4, 14]&lt;br /&gt;
    53. JUMP_ABSOLUTE 15: jump to instruction no 15, counter is 4&lt;br /&gt;
 &lt;br /&gt;
    Here we enter the loop body fourth (!!!) time&lt;br /&gt;
    &lt;br /&gt;
    15. LOAD_FAST 2; stack = [4]&lt;br /&gt;
    18. LOAD_FAST 1; stack = [4, 3]&lt;br /&gt;
    21. COMPARE_OP 4; stack = [True]&lt;br /&gt;
    24. POP_JUMP_IF_FALSE 31; stack = []; but the condition does not hold anymore so we jump out of the loop&lt;br /&gt;
    27. BREAK_LOOP; break out of the loop&lt;br /&gt;
    58. LOAD_FAST 3; stack = [14]&lt;br /&gt;
    61. RETURN_VALUE; return 14 to caller&lt;br /&gt;
&lt;br /&gt;
==Assignment steps==&lt;br /&gt;
&lt;br /&gt;
# Select one of the Fibonacci code examples below.&lt;br /&gt;
# Use &amp;lt;code&amp;gt;from dis import dis&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;dis(function_name_goes_here)&amp;lt;/code&amp;gt; to disassemble the function to opcodes.&lt;br /&gt;
# Comment the stack machine instructions as shown above (3p).&lt;br /&gt;
# Invoke the Fibonacci number calculation function with n=2, follow the instructions and elaborate after each instruction executed a) the stack contents b) co_varnames contents c) co_names contents d) what happened as shown above. Note that certain code blocks will be executed repeatedly, which means you&#039;ll have more than &#039;&#039;&#039;30 instructions executed&#039;&#039;&#039; (2p).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fibonacci with iterators:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def fib(n):&lt;br /&gt;
    a,b = 1,1&lt;br /&gt;
    for i in range(n-1):&lt;br /&gt;
        a,b = b,a+b&lt;br /&gt;
    return a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fibonacci with recursion:&lt;br /&gt;
&lt;br /&gt;
 def fib(n):&lt;br /&gt;
     if n==1 or n==2:&lt;br /&gt;
         return 1&lt;br /&gt;
     return fib(n-1) + fib(n-2)&lt;br /&gt;
&lt;br /&gt;
Fibonacci with infinite loop and breaks:&lt;br /&gt;
&lt;br /&gt;
 def fib3(n):&lt;br /&gt;
     a,b,i = 1,1,0&lt;br /&gt;
     while True:&lt;br /&gt;
         i += 1&lt;br /&gt;
         if i &amp;gt;= n: break&lt;br /&gt;
         b,a = a+b,b&lt;br /&gt;
     return a&lt;br /&gt;
&lt;br /&gt;
Another variation:&lt;br /&gt;
&lt;br /&gt;
 def fib4(n):&lt;br /&gt;
     a = 1&lt;br /&gt;
     b = 1&lt;br /&gt;
     i = 0&lt;br /&gt;
     while True:&lt;br /&gt;
         i += 1&lt;br /&gt;
         if i &amp;gt;= n: break&lt;br /&gt;
         s = a + b&lt;br /&gt;
         a = b&lt;br /&gt;
         b = s&lt;br /&gt;
     return a&lt;br /&gt;
&lt;br /&gt;
=Assignment: Investigating compilers=&lt;br /&gt;
&lt;br /&gt;
Use what you learned in the [https://wiki.itcollege.ee/index.php/Getting_started_with_GCC Getting started with GCC] session.&lt;br /&gt;
See assignment steps below.&lt;br /&gt;
Everything you need to understand ARM instructions should be [http://aelmahmoudy.users.sourceforge.net/electronix/arm/chapter2.htm here].&lt;br /&gt;
Another good resource seems to be [http://www.davespace.co.uk/arm/introduction-to-arm/ Introduction to ARM] by David Thomas.&lt;br /&gt;
See page 14 of [http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042e/IHI0042E_aapcs.pdf Procedure Call Standard for the ARM® Architecture] if you want to learn more about how function calls are implemented on ARM.&lt;br /&gt;
See [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204j/Cihfddaf.html here] for more information about branching instructions: B, BL, BX.&lt;br /&gt;
&amp;lt;Insert extemely useful link here yourself&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deadline: 4. November&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have Ubuntu installed on your machine skip next step and use SSH to perform these steps remotely at &amp;lt;code&amp;gt;enos.itcollege.ee&amp;lt;/code&amp;gt;.&lt;br /&gt;
Otherwise install ARM cross-compiler:&lt;br /&gt;
&lt;br /&gt;
 apt-get install gcc-arm-linux-gnueabi&lt;br /&gt;
&lt;br /&gt;
Consider C snippet for calculating integer [https://en.wikipedia.org/wiki/Exponentiation exponentiation], place it in a file &amp;lt;code&amp;gt;power.c&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 int power(long base, long exponent) {&lt;br /&gt;
     int counter;&lt;br /&gt;
     int result = 1;&lt;br /&gt;
     for (counter = 0; counter &amp;lt; exponent; counter++)&lt;br /&gt;
         result *= base;&lt;br /&gt;
     return result;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Generating assembly===&lt;br /&gt;
&lt;br /&gt;
Compile ARM assembly of the code snippet:&lt;br /&gt;
&lt;br /&gt;
 arm-linux-gnueabi-gcc -Os -S power.c -o power.s   # Cross-compile ARM assembly file power.s from C source code file power.c&lt;br /&gt;
 cat power.s                                       # Dump the assembly file on terminal&lt;br /&gt;
&lt;br /&gt;
The compiler should produce something similar to following:&lt;br /&gt;
&lt;br /&gt;
 	.arch armv5t&lt;br /&gt;
 	.fpu softvfp&lt;br /&gt;
 	.eabi_attribute 20, 1&lt;br /&gt;
 	.eabi_attribute 21, 1&lt;br /&gt;
 	.eabi_attribute 23, 3&lt;br /&gt;
 	.eabi_attribute 24, 1&lt;br /&gt;
 	.eabi_attribute 25, 1&lt;br /&gt;
 	.eabi_attribute 26, 2&lt;br /&gt;
 	.eabi_attribute 30, 2&lt;br /&gt;
 	.eabi_attribute 34, 0&lt;br /&gt;
 	.eabi_attribute 18, 4&lt;br /&gt;
 	.file	&amp;quot;power.c&amp;quot;&lt;br /&gt;
 	.text&lt;br /&gt;
 	.align	2&lt;br /&gt;
 	.global	power&lt;br /&gt;
 	.type	power, %function&lt;br /&gt;
 power:&lt;br /&gt;
 	@ args = 0, pretend = 0, frame = 0&lt;br /&gt;
 	@ frame_needed = 0, uses_anonymous_args = 0&lt;br /&gt;
 	@ link register save eliminated.&lt;br /&gt;
 	cmp	r1, #0&lt;br /&gt;
 	mov	r2, #1&lt;br /&gt;
 	ble	.L2&lt;br /&gt;
 	mov	r3, #0&lt;br /&gt;
 .L3:&lt;br /&gt;
 	add	r3, r3, #1&lt;br /&gt;
 	cmp	r3, r1&lt;br /&gt;
 	mul	r2, r0, r2&lt;br /&gt;
 	bne	.L3&lt;br /&gt;
 .L2:&lt;br /&gt;
 	mov	r0, r2&lt;br /&gt;
 	bx	lr&lt;br /&gt;
 	.size	power, .-power&lt;br /&gt;
 	.ident	&amp;quot;GCC: (Ubuntu/Linaro 4.7.3-12ubuntu1) 4.7.3&amp;quot;&lt;br /&gt;
 	.section	.note.GNU-stack,&amp;quot;&amp;quot;,%progbits&lt;br /&gt;
&lt;br /&gt;
===Commenting the assembly===&lt;br /&gt;
&lt;br /&gt;
You can safely ignore the lines starting with dot, these are simply hints for the next stage of the compilation process.&lt;br /&gt;
Thus you&#039;re left only (!!!) 10 actual instructions. Here you can also see what kind of comments are expected from the submission:&lt;br /&gt;
&lt;br /&gt;
 power:&lt;br /&gt;
 	cmp	r1, #0             /* Compare register r1 (second argument) contents against constant 0 */    &lt;br /&gt;
 	mov	r2, #1             /* Copy the constant 1 to register r2 */&lt;br /&gt;
 	ble	.L2                /* Jump to label .L2 if the comparison was false */&lt;br /&gt;
 	mov	r3, #0             /* Copy the constant 0 to register r3 */&lt;br /&gt;
 .L3:&lt;br /&gt;
 	add	r3, r3, #1         /* Perform r3 = r3 + 1 */&lt;br /&gt;
 	cmp	r3, r1             /* Compare register r3 and r1 (second argument) */&lt;br /&gt;
 	mul	r2, r0, r2         /* Perform r2 = r0 (first argument) * r2 */&lt;br /&gt;
 	bne	.L3                /* If r3 and r1 were different jump to label .L3&lt;br /&gt;
 .L2:&lt;br /&gt;
 	mov	r0, r2             /* Copy register r2 contents to register r0 */&lt;br /&gt;
 	bx	lr                 /* Jump back to caller */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Analyzing the code===&lt;br /&gt;
&lt;br /&gt;
Code analysis reveals that registers are mapped as following:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;r0&amp;lt;/code&amp;gt; - argument &amp;lt;code&amp;gt;base&amp;lt;/code&amp;gt; and eventually return value&lt;br /&gt;
* &amp;lt;code&amp;gt;r1&amp;lt;/code&amp;gt; - argument &amp;lt;code&amp;gt;exponent&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;r2&amp;lt;/code&amp;gt; - variable &amp;lt;code&amp;gt;result&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;r3&amp;lt;/code&amp;gt; - variable &amp;lt;code&amp;gt;counter&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We can also see how the &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; loop gets translated into assembly:&lt;br /&gt;
&lt;br /&gt;
 power:&lt;br /&gt;
 	cmp	r1, #0&lt;br /&gt;
 	mov	r2, #1&lt;br /&gt;
 	ble	.L2&lt;br /&gt;
 	mov	r3, #0&lt;br /&gt;
 .L3:&lt;br /&gt;
 	add	r3, r3, #1 &amp;lt;---+&lt;br /&gt;
 	cmp	r3, r1         | 4 instructions are executed repeatedly&lt;br /&gt;
 	mul	r2, r0, r2     | if exponent is greater than 0&lt;br /&gt;
 	bne	.L3 -----------+&lt;br /&gt;
 .L2:&lt;br /&gt;
 	mov	r0, r2&lt;br /&gt;
 	bx	lr&lt;br /&gt;
&lt;br /&gt;
===Stepping through the instructions===&lt;br /&gt;
&lt;br /&gt;
When we execute the function with for example arguments base=5 and exponent=3 following happens in the processor.&lt;br /&gt;
Note that this will essentially calculates 5 ^ 3 (5 to the power of 3) which is 125.&lt;br /&gt;
Following has been done manually to illustrate how much time does it take to execute the the function.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 /* When processor enters the function body the arguments are already placed in registers r0=5 (base), r1=3 (exponent) */&lt;br /&gt;
 cmp r1, #0                        /* Compare exponent to 0 */&lt;br /&gt;
 mov r2, #1                        /* Place constant 1 in register r2,&lt;br /&gt;
                                      this corresponds to result = 1 in C code */&lt;br /&gt;
 ble .L2                           /* Exponent was not less than 0, so no jump to L2&lt;br /&gt;
 mov r3, #0                        /* Place constant 0 in register r3,&lt;br /&gt;
                                      this corresponds to variable counter */&lt;br /&gt;
 &lt;br /&gt;
 add r3, r3, #1                    /* Perform r3 = 0 + 1 which results in 1 being stored to r3&lt;br /&gt;
                                      this corresponds to first invocation of counter++ in C code */&lt;br /&gt;
 cmp r3, r1                        /* Compare counter (1 in this case) to exponent (3), this will be used by bne instruction below */&lt;br /&gt;
 mul r2, r0, r2                    /* Perform r2 = r0 * r2 which results in 1 * 5 = 5 being placed in r2&lt;br /&gt;
                                      this corresponds to first invocation of result *= base in C code */&lt;br /&gt;
 bne .L3                           /* The comparison resulted in counter being not equal to exponent, so we jump back to L3&lt;br /&gt;
                                      this corresponds to first invocation of counter &amp;lt; exponent in C code */&lt;br /&gt;
 &lt;br /&gt;
 add r3, r3, #1                    /* Perform r3 = 1 + 1 which results in 2 being stored to r3&lt;br /&gt;
                                      this corresponds to second invocation of counter++ in C code */&lt;br /&gt;
 cmp r3, r1                        /* Compare counter (2 in this case) to exponent (3), this will be used by bne instruction below */&lt;br /&gt;
 mul r2, r0, r2                    /* Perform r2 = r0 * r2 which results 5 * 5 = 25 being placed in r2&lt;br /&gt;
                                      this corresponds to second invocation of result *= base in C code */&lt;br /&gt;
 bne .L3                           /* The comparison resulted in counter being not equal to exponent, so we jump back to L3&lt;br /&gt;
                                      this corresponds to second invocation of counter &amp;lt; exponent in C code */&lt;br /&gt;
 &lt;br /&gt;
 add r3, r3, #1                    /* Perform r3 = 2 + 1 which results in 3 being stored to r3&lt;br /&gt;
                                      this corresponds to third invocation of counter++ in C code */&lt;br /&gt;
 cmp r3, r1                        /* Compare counter (3 in this case) to exponent (3), this will be used by bne instruction below */&lt;br /&gt;
 mul r2, r0, r2                    /* Perform r2 = r0 * r2 which results 25 * 5 = 125 being placed in r2&lt;br /&gt;
                                      this corresponds to third invocation of result *= base in C code */&lt;br /&gt;
 bne .L3                           /* The comparison resulted in counter being equal to exponent, so we DO NOT jump back to L3 */&lt;br /&gt;
 &lt;br /&gt;
 mov	r0, r2                     /* Copy register r2 contents (125) to register r0 */&lt;br /&gt;
 bx	lr                         /* Jump back to caller */&lt;br /&gt;
 /* Function returns with 125 placed in r0 this is where caller function should expect the return value */&lt;br /&gt;
 /* The other registers will still hold whatever values were left there: r1 = 3, r2 = 125, r3 = 3 */&lt;br /&gt;
&lt;br /&gt;
===ARM registers===&lt;br /&gt;
&lt;br /&gt;
If you get lost with the ARM register naming conventions use following as a guide.&lt;br /&gt;
&lt;br /&gt;
ARM7 has 16x 32-bit registers:&lt;br /&gt;
&lt;br /&gt;
  r0 (a1) - Argument/result/scratch register, this is where first function argument is usually placed&lt;br /&gt;
  r1 (a2) - Argument/result/scratch register, this is where second function argument is placed&lt;br /&gt;
  r2 (a3) - Argument/scratch register 3&lt;br /&gt;
  r3 (a4) - Argument/scratch register 4&lt;br /&gt;
  r4 (v1) - Variable register 1&lt;br /&gt;
  r5 (v2) - Variable register 2&lt;br /&gt;
  r6 (v3) - Variable register 3&lt;br /&gt;
  r7 (v4) - Variable register 4&lt;br /&gt;
  r8 (v5) - Variable register 5&lt;br /&gt;
  r9 (v6) - Variable register 6&lt;br /&gt;
 r10 (v7) - Variable register 7&lt;br /&gt;
 r11 (fp) - Frame pointer, variable register 8 &lt;br /&gt;
 r12 (ip) - Intra-procedure call scratch register&lt;br /&gt;
 r13 (sp) - Stack pointer&lt;br /&gt;
 r14 (lr) - Link register (to which memory address currently&lt;br /&gt;
                           executing function should return to?)&lt;br /&gt;
 r15 (pc) - Program counter (what is the memory address of instruction&lt;br /&gt;
      ^                      that we are going to execute next?)&lt;br /&gt;
      |&lt;br /&gt;
      +- These are simply aliases for the numbered registers and&lt;br /&gt;
         can be used interchangeably.&lt;br /&gt;
&lt;br /&gt;
==Assignment steps==&lt;br /&gt;
&lt;br /&gt;
# Select one of the Fibonacci calculation examples below and use ARM cross compiler as shown above to generate the assembly corresponding to the C source code (1p).&lt;br /&gt;
# Remove the compiler hints (lines starting with dot), this should leave you less than 20 instructions. If it&#039;s more than that try different optimization flags. Analyze and comment the assembly as shown above (1p).&lt;br /&gt;
# Use n=3 as argument and follow the instructions, what values are left in the registers after the function finishes (2p)?&lt;br /&gt;
# Optional/extra: Elaborate step by step what happens in the processor: what instruction is being executed and what values are left in registers after instruction finishes? (1p)&lt;br /&gt;
# Optional/extra: Recompile with different optimization levels: &amp;lt;code&amp;gt;-Os&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;-O0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;-O1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;-O2&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;-O3&amp;lt;/code&amp;gt;. What differences did you notice? (1p)&lt;br /&gt;
# Optional/extra: Take a guess which one of the Fibonacci calculation functions below is the slowest? Which one is the fastest? Why? (1p)&lt;br /&gt;
# Send your conclusions as e-mail attachment to Lauri, attach the commented assembly, make sure you &#039;&#039;&#039;use the address supplied above with the course code&#039;&#039;&#039;, otherwise your mail is not searchable in my mailbox.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fibonacci calculation using &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;-loop:&lt;br /&gt;
&lt;br /&gt;
 int fib(n) {&lt;br /&gt;
     int a = 1;&lt;br /&gt;
     int b = 1;&lt;br /&gt;
     int i;&lt;br /&gt;
     for (i = 0; i &amp;lt; n; i++) {&lt;br /&gt;
         int s = a + b;&lt;br /&gt;
         a = b;&lt;br /&gt;
         b = s;&lt;br /&gt;
     }&lt;br /&gt;
     return a;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Fibonacci calculation using recursion:&lt;br /&gt;
&lt;br /&gt;
 int fib2(n) {&lt;br /&gt;
     if (n == 1 || n== 2) {&lt;br /&gt;
         return 1;&lt;br /&gt;
     } else {&lt;br /&gt;
         return fib(n-1) + fib(n-2);&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Fibonacci calculation using &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;-loop:&lt;br /&gt;
&lt;br /&gt;
 int fib4(n) {&lt;br /&gt;
     int a = 1;&lt;br /&gt;
     int b = 1;&lt;br /&gt;
     int i = 0;&lt;br /&gt;
     while(1) {&lt;br /&gt;
         i += 1;&lt;br /&gt;
         if (i &amp;gt;= n) { break; }&lt;br /&gt;
         int s = a + b;&lt;br /&gt;
         a = b;&lt;br /&gt;
         b = s;&lt;br /&gt;
     }&lt;br /&gt;
     return a;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=Assignment: Investigating microcontrollers=&lt;br /&gt;
&lt;br /&gt;
In this assignment we use Arduino to implement traffic lights for [http://www.nobleled.com/uploads/110833/100_101.jpg crossroads].&lt;br /&gt;
If you don&#039;t care much about doing this assignment hands on, you can give a try [https://123d.circuits.io/ online].&lt;br /&gt;
&lt;br /&gt;
==Assignment steps==&lt;br /&gt;
&lt;br /&gt;
* Install Arduino IDE on your personal machine, on Windows/Mac check out [https://www.arduino.cc/ Arduino homepage] for instructions, on Ubuntu &amp;lt;code&amp;gt;apt-get install arduino&amp;lt;/code&amp;gt; should suffice. You can also use school computers, Ubuntu has Arduino preinstalled.&lt;br /&gt;
* From Arduino IDE menu open up File -&amp;gt; Examples -&amp;gt; 01. Basic -&amp;gt; Blink&lt;br /&gt;
* In Arduino IDE menu Tools -&amp;gt; Board -&amp;gt; Arduino Mega2560&lt;br /&gt;
* In Arduino IDE menu Tools -&amp;gt; Serial port -&amp;gt; Select what makes sense&lt;br /&gt;
* On Ubuntu you may have to add yourself to the dialout group before you can access the serial ports. Use the command &amp;lt;code&amp;gt;sudo gpasswd -a $USER dialout&amp;lt;/code&amp;gt;, log out and log in again to your PC.&lt;br /&gt;
* Press the second button in the toolbar to upload the code, make sure the changes take effect on the board. You should see on-board LED blinking.&lt;br /&gt;
* Connect some LED-s to the board. &#039;&#039;&#039;MAKE SURE YOU USE RESISTORS TO PROTECT LED-s AND THE BOARD&#039;&#039;&#039;&lt;br /&gt;
* Implement traffic light cycle using &amp;lt;code&amp;gt;digitalWrite&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;delay&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;loop&amp;lt;/code&amp;gt; function (3p)&lt;br /&gt;
* Use interrupts to read button presses, see example below. Pressing the button should toggle the LED now (1p)&lt;br /&gt;
* Extra: Use [https://www.arduino.cc/en/Reference/AnalogWrite PWM] to implement smoother blinking (1p)&lt;br /&gt;
* Extra: Use [http://lauri.vosandi.com/arduino/lcd1602-key-shield.html LCD1602] shield to display countdown (1p)&lt;br /&gt;
* Use [https://www.arduino.cc/en/Reference/Serial serial] interface to send messages to your PC.&lt;br /&gt;
* You can find useful code snippets for Robotics club equipment [http://lauri.vosandi.com/arduino here]&lt;br /&gt;
&lt;br /&gt;
==Code example: reading button press with interrupts==&lt;br /&gt;
&lt;br /&gt;
Set up a push button as shown below:&lt;br /&gt;
&lt;br /&gt;
[[File:Arduino-pushbutton_bb.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Insert following code to Arduino IDE and upload it to Arduino, verify that it works:&lt;br /&gt;
&lt;br /&gt;
 int led = 13;&lt;br /&gt;
 int button  = 2;&lt;br /&gt;
 int flag = LOW;&lt;br /&gt;
 &lt;br /&gt;
 void setup() {&lt;br /&gt;
     pinMode(led, OUTPUT);         // Set up pin 13 as digital output&lt;br /&gt;
     pinMode(button, INPUT);       // Set up pin 9 as digital input&lt;br /&gt;
     digitalWrite(button, HIGH);   // Turn in pull-up resistor&lt;br /&gt;
 &lt;br /&gt;
     // Associate interrupt handler with an event&lt;br /&gt;
     attachInterrupt(digitalPinToInterrupt(button), onButtonPressed, FALLING);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void onButtonPressed() {&lt;br /&gt;
     // Keep this as short as possible&lt;br /&gt;
     flag = HIGH;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void loop() {&lt;br /&gt;
     // Do something useful or let processor sleep here&lt;br /&gt;
     if (flag) {&lt;br /&gt;
         digitalWrite(led, HIGH);&lt;br /&gt;
         delay(2000);&lt;br /&gt;
         flag = LOW;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     digitalWrite(led, LOW);&lt;br /&gt;
     delay(50);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Code example: Cycling through different traffic light states==&lt;br /&gt;
&lt;br /&gt;
Add LED-s to the design:&lt;br /&gt;
&lt;br /&gt;
[[File:Traffic-lights_bb.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Use following as hint to implement cycling through traffic light states:&lt;br /&gt;
&lt;br /&gt;
 // Define pin numbers&lt;br /&gt;
 int car_green = 5;&lt;br /&gt;
 int car_yellow = 6;&lt;br /&gt;
 int car_red = 7;&lt;br /&gt;
 &lt;br /&gt;
 // For LED-s we&#039;re sinking the 5V voltage, hence LED is turned on when voltage on the pin is LOW&lt;br /&gt;
 int on = LOW;&lt;br /&gt;
 int off = HIGH;&lt;br /&gt;
 &lt;br /&gt;
 void setup() {&lt;br /&gt;
     pinMode(car_green, OUTPUT);&lt;br /&gt;
     pinMode(car_yellow, OUTPUT);&lt;br /&gt;
     pinMode(car_red, OUTPUT);&lt;br /&gt;
     digitalWrite(cars_yellow, off);&lt;br /&gt;
     Serial.begin(9600);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void loop() {&lt;br /&gt;
     Serial.println(&amp;quot;Cars green, pedestrians red for 5 seconds&amp;quot;);&lt;br /&gt;
     digitalWrite(cars_red, off);&lt;br /&gt;
     digitalWrite(cars_green, on);&lt;br /&gt;
     delay(5000);&lt;br /&gt;
 &lt;br /&gt;
     Serial.println(&amp;quot;Green for cars is blinking 5 seconds&amp;quot;);&lt;br /&gt;
     for(int j = 0; j &amp;lt; 10; j++) {&lt;br /&gt;
         digitalWrite(cars_green, j % 2 == 0);&lt;br /&gt;
         delay(500);&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     Serial.println(&amp;quot;Cars red, pedestrians green for 5 seconds&amp;quot;);&lt;br /&gt;
     digitalWrite(cars_green, off);&lt;br /&gt;
     digitalWrite(cars_red, on);&lt;br /&gt;
     delay(5000);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Skeleton of the final submission==&lt;br /&gt;
&lt;br /&gt;
The real traffic light has of course a little bit more states:&lt;br /&gt;
&lt;br /&gt;
 1. Cars green, pedestrians red for 10 seconds&lt;br /&gt;
 2. Cars green **blinking**, pedestrians red for 2 seconds&lt;br /&gt;
 3. Cars red, pedestrians green for 10 seconds&lt;br /&gt;
 4. Cars red, pedestrians green **blinking** for 2 seconds&lt;br /&gt;
 5. Cars yellow, pedestrians red for 2 seconds&lt;br /&gt;
&lt;br /&gt;
So your final code will look something like this:&lt;br /&gt;
&lt;br /&gt;
 // Define pin numbers here&lt;br /&gt;
 &lt;br /&gt;
 // Initially the flag is low&lt;br /&gt;
 int pedestrian_requested_crossing = LOW;&lt;br /&gt;
  &lt;br /&gt;
 void setup() {&lt;br /&gt;
     // Initialize necessary pins as digital outputs&lt;br /&gt;
     // Reset pins with digitalWrite&lt;br /&gt;
 &lt;br /&gt;
     // Initialize button pin as digital input&lt;br /&gt;
     // Enable pull-up resistor on button pin&lt;br /&gt;
     // Associate button interrupt handler function (onButtonPressed) below with the event on the button&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void onButtonPressed() {&lt;br /&gt;
     // Here set pedestrian_requested_crossing flag to HIGH&lt;br /&gt;
     // Don&#039;t do anything else here!&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void loop() {&lt;br /&gt;
     Serial.println(&amp;quot;Cars green, pedestrians red for 5 seconds&amp;quot;);&lt;br /&gt;
     digitalWrite(cars_red, off);&lt;br /&gt;
     digitalWrite(cars_green, on);&lt;br /&gt;
     // Set pedestrian lights here&lt;br /&gt;
     delay(5000);&lt;br /&gt;
 &lt;br /&gt;
     if (pedestrian_requested_crossing) {&lt;br /&gt;
 &lt;br /&gt;
         Serial.println(&amp;quot;Green for cars is blinking 5 seconds&amp;quot;);&lt;br /&gt;
         for(int j = 0; j &amp;lt; 10; j++) {&lt;br /&gt;
             digitalWrite(cars_green, j % 2 == 0);&lt;br /&gt;
             delay(500);&lt;br /&gt;
         }&lt;br /&gt;
 &lt;br /&gt;
         Serial.println(&amp;quot;Cars red, pedestrians green for 5 seconds&amp;quot;);&lt;br /&gt;
         digitalWrite(cars_green, off);&lt;br /&gt;
         digitalWrite(cars_red, on);&lt;br /&gt;
         // Set pedestrian lights here&lt;br /&gt;
         delay(5000);&lt;br /&gt;
 &lt;br /&gt;
         // Add another state here&lt;br /&gt;
 &lt;br /&gt;
         // And another state here&lt;br /&gt;
 &lt;br /&gt;
         // Reset flag here&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=Assignment: Adders with NAND gates=&lt;br /&gt;
&lt;br /&gt;
In this assignment we use chips to build an adder. Get max points (4p) by wiring up half adder and double your points (8p) if you can make full adder work as well :)&lt;br /&gt;
&lt;br /&gt;
[[File:53-7400n-detailed.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Each SN74HC03N chip contains four NAND gates arranged like this, observe the pit on the left. VCC corresponds to 5V power supply and GND corresponds to ground or 0V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Half adder==&lt;br /&gt;
&lt;br /&gt;
Each [http://www.ti.com/lit/gpn/sn74hc03 SN74HC03] contains 4 NAND gates.&lt;br /&gt;
Use breadboard to wire up half adder with 7400 chips (4p):&lt;br /&gt;
&lt;br /&gt;
[[File:Half-adder_bb.png|700px]]&lt;br /&gt;
&lt;br /&gt;
The truth table for half adder:&lt;br /&gt;
&lt;br /&gt;
   A  |  B  | Cout | Sum  | Human readable (how many bits are high?)&lt;br /&gt;
 -----+-----+------+------+-------------------------------------------&lt;br /&gt;
   0  |  0  |  0   |  0   | 0&lt;br /&gt;
 -----+-----+------+------+-------------------------------------------&lt;br /&gt;
   0  |  1  |  0   |  1   | 1&lt;br /&gt;
 -----+-----+------+------+-------------------------------------------&lt;br /&gt;
   1  |  0  |  0   |  1   | 1&lt;br /&gt;
 -----+-----+------+------+-------------------------------------------&lt;br /&gt;
   1  |  1  |  1   |  0   | 2&lt;br /&gt;
&lt;br /&gt;
==Full adder==&lt;br /&gt;
&lt;br /&gt;
You can double your points if you manage to wire up a full adder (+4p)&lt;br /&gt;
&lt;br /&gt;
[[File:Nand-full-adder.png]]&lt;br /&gt;
&lt;br /&gt;
On a breadboard it looks a bit messy, but if you pay attention to gate numbering as shown above it should make your life significantly easier.&lt;br /&gt;
The gates 1, 2, 3, 4 are placed in the leftmost chip; 5, 6, 7, 8 are placed in the middle one and gate 9 is the only one in the rightmost chip:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Full-adder_bb.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   A  |  B  | Cin | Cout | Sum  | Human readable (how many bits are high?)&lt;br /&gt;
 -----+-----+-----+------+------+-------------------------------------------&lt;br /&gt;
   0  |  0  |  0  |  0   |  0   | 0&lt;br /&gt;
 -----+-----+-----+------+------+-------------------------------------------&lt;br /&gt;
   0  |  0  |  1  |  0   |  1   | 1&lt;br /&gt;
 -----+-----+-----+------+------+-------------------------------------------&lt;br /&gt;
   0  |  1  |  0  |  0   |  1   | 1&lt;br /&gt;
 -----+-----+-----+------+------+-------------------------------------------&lt;br /&gt;
   0  |  1  |  1  |  1   |  0   | 2&lt;br /&gt;
 -----+-----+-----+------+------+-------------------------------------------&lt;br /&gt;
   1  |  0  |  0  |  0   |  1   | 1&lt;br /&gt;
 -----+-----+-----+------+------+-------------------------------------------&lt;br /&gt;
   1  |  0  |  1  |  1   |  0   | 2&lt;br /&gt;
 -----+-----+-----+------+------+-------------------------------------------&lt;br /&gt;
   1  |  1  |  0  |  1   |  0   | 2&lt;br /&gt;
 -----+-----+-----+------+------+-------------------------------------------&lt;br /&gt;
   1  |  1  |  1  |  1   |  1   | 3&lt;br /&gt;
&lt;br /&gt;
==Unittest==&lt;br /&gt;
&lt;br /&gt;
Use following code snippet on Arduino to test the circuit, it will shuffle through all the possible inputs and test whether the expected output is on the output pins.&lt;br /&gt;
If you see &amp;lt;code&amp;gt;sum&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;cout&amp;lt;/code&amp;gt; outputs giving 0 all the time it&#039;s likely you have resistors of too low resistance in the circuit which is draining all the voltage on the NAND gate output pins.&lt;br /&gt;
&lt;br /&gt;
 int PIN_A = 2;&lt;br /&gt;
 int PIN_B = 3;&lt;br /&gt;
 int PIN_CIN = 4;&lt;br /&gt;
 int PIN_SUM = 5;&lt;br /&gt;
 int PIN_COUT = 6;&lt;br /&gt;
 &lt;br /&gt;
 void setup() {&lt;br /&gt;
     // Set up serial&lt;br /&gt;
     Serial.begin(9600);&lt;br /&gt;
     &lt;br /&gt;
     // Set up operands&lt;br /&gt;
     pinMode(PIN_A, OUTPUT);&lt;br /&gt;
     pinMode(PIN_B, OUTPUT);&lt;br /&gt;
     pinMode(PIN_CIN, OUTPUT);&lt;br /&gt;
     digitalWrite(PIN_A, HIGH);&lt;br /&gt;
     digitalWrite(PIN_B, HIGH);&lt;br /&gt;
     digitalWrite(PIN_CIN, HIGH);&lt;br /&gt;
     &lt;br /&gt;
     // Set up measurement pins&lt;br /&gt;
     pinMode(PIN_SUM, INPUT);&lt;br /&gt;
     pinMode(PIN_COUT, INPUT);&lt;br /&gt;
     digitalWrite(PIN_SUM, HIGH); // Enable pull-up resistor&lt;br /&gt;
     digitalWrite(PIN_COUT, HIGH); // Enable pull-up resistor&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void test(int a, int b, int cin) {&lt;br /&gt;
     int cout = a &amp;amp;&amp;amp; b || a &amp;amp;&amp;amp; cin || b &amp;amp;&amp;amp; cin;&lt;br /&gt;
     int sum = a ^ b ^ cin;&lt;br /&gt;
     &lt;br /&gt;
     digitalWrite(PIN_A, a);&lt;br /&gt;
     digitalWrite(PIN_B, b);&lt;br /&gt;
     digitalWrite(PIN_CIN, cin);&lt;br /&gt;
     &lt;br /&gt;
     Serial.print(&amp;quot;Writing: a=&amp;quot;);&lt;br /&gt;
     Serial.print(a);&lt;br /&gt;
     Serial.print(&amp;quot;, b=&amp;quot;);&lt;br /&gt;
     Serial.print(b);&lt;br /&gt;
     Serial.print(&amp;quot;, cin=&amp;quot;);&lt;br /&gt;
     Serial.print(cin);&lt;br /&gt;
     Serial.print(&amp;quot;  Expecting: sum=&amp;quot;);&lt;br /&gt;
     Serial.print(sum);&lt;br /&gt;
     Serial.print(&amp;quot;, cout=&amp;quot;);&lt;br /&gt;
     Serial.print(cout);&lt;br /&gt;
     &lt;br /&gt;
     int measured_sum = digitalRead(PIN_SUM);&lt;br /&gt;
     int measured_cout = digitalRead(PIN_COUT);&lt;br /&gt;
 &lt;br /&gt;
     Serial.print(&amp;quot;  Got: sum=&amp;quot;);&lt;br /&gt;
     Serial.print(measured_sum);&lt;br /&gt;
     Serial.print(&amp;quot; cout=&amp;quot;);&lt;br /&gt;
     Serial.print(measured_cout);&lt;br /&gt;
     &lt;br /&gt;
     Serial.print(&amp;quot;  Test:&amp;quot;);&lt;br /&gt;
     if (measured_sum != sum || measured_cout != cout) {&lt;br /&gt;
         Serial.print(&amp;quot;  FAIL&amp;quot;);&lt;br /&gt;
     } else {&lt;br /&gt;
         Serial.print(&amp;quot;  GOOD&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     Serial.println();&lt;br /&gt;
     delay(500);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void loop() {&lt;br /&gt;
     Serial.println(&amp;quot;Running test&amp;quot;);&lt;br /&gt;
     test(0, 0, 0);&lt;br /&gt;
     test(0, 0, 1);&lt;br /&gt;
     test(0, 1, 0);&lt;br /&gt;
     test(0, 1, 1);&lt;br /&gt;
     test(1, 0, 0);&lt;br /&gt;
     test(1, 0, 1);&lt;br /&gt;
     test(1, 1, 0);&lt;br /&gt;
     test(1, 1, 1);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=Assignment: Debugging ALU design=&lt;br /&gt;
&lt;br /&gt;
Bob had to ship the ALU design to the hardware manufacturer by yesterday. The project manager is angry about missed deadline. Bob still hasn&#039;t figured out why the ALU is not working properly. Help Bob by figuring out what&#039;s the problem.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re on Ubuntu install GHDL and GtkWave, otherwise simply use a school computer:&lt;br /&gt;
&lt;br /&gt;
 sudo add-apt-repository ppa:pgavin/ghdl&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
 sudo apt-get install ghdl gtkwave git&lt;br /&gt;
&lt;br /&gt;
Clone the repository&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/laurivosandi/vhdl-exercise&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; to compile the components and run the testbench:&lt;br /&gt;
&lt;br /&gt;
 cd path/to/vhdl-exercise&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
Expected output of the testbench:&lt;br /&gt;
&lt;br /&gt;
 alu_testbench.vhd:77:9:@360ns:(report note): Finished testing addition operation of ALU&lt;br /&gt;
 alu_testbench.vhd:106:9:@1us:(report note): Finished testing subtraction operation of ALU&lt;br /&gt;
 alu_testbench.vhd:135:9:@1640ns:(report note): Finished testing NAND operation of ALU&lt;br /&gt;
 alu_testbench.vhd:166:9:@2280ns:(report note): Finished testing NOR operation of ALU&lt;br /&gt;
&lt;br /&gt;
However there are few bugs in &amp;lt;code&amp;gt;alu.vhd&amp;lt;/code&amp;gt;, find the bugs and correct them. If this is your first experience with VHDL, take a look [http://lauri.vosandi.com/hdl/ here].&lt;br /&gt;
&lt;br /&gt;
=Assignment: Publishing your work=&lt;br /&gt;
&lt;br /&gt;
Deadline: 25. November&lt;br /&gt;
&lt;br /&gt;
* Clean up your Git repositories and send the URL of a repository that you&#039;ve actively worked on (for example the one from Java course) to Lauri, but before check the following:&lt;br /&gt;
** The repository should show changes you&#039;ve made over at least few days.&lt;br /&gt;
** The repository has to contain only plaintext files unless there is a really good reason not to (eg. images).&lt;br /&gt;
** There has to be authorship information in the files.&lt;br /&gt;
** Add &amp;lt;code&amp;gt;.gitignore&amp;lt;/code&amp;gt; file to your GitHub repositories to ignore temporary files, see [https://git-scm.com/docs/gitignore Git docs] for more details.&lt;br /&gt;
** Add [http://opensource.org/licenses LICENSE] file in the repository directory and commit the changes. LICENSE should answer to some important questions&lt;br /&gt;
*** Who is the copyright holder?&lt;br /&gt;
*** Under which conditions is redistribution permitted?&lt;br /&gt;
** Add nicely formatted README file, see [https://help.github.com/articles/markdown-basics/ Markdown] (online editor [http://dillinger.io here]) and [http://sphinx-doc.org/rest.html reStructuredText] for more details. README should answer to several silly questions:&lt;br /&gt;
*** What is the repository about?&lt;br /&gt;
*** Who made it?&lt;br /&gt;
*** How can the author be contacted? E-mail address, IRC chat channel on Freenode, Skype username?&lt;br /&gt;
*** How can the code be used? What hardware is necessary? How should the user wire the circuit to make it work? Add images if necessary.&lt;br /&gt;
*** What is the policy for including changes from third party developers?&lt;br /&gt;
* There will be more details here&lt;br /&gt;
&lt;br /&gt;
=Extra points=&lt;br /&gt;
&lt;br /&gt;
Here you can claim extra credit points for various tasks, this is mostly to improve the quality of wiki.itcollege.ee.&lt;br /&gt;
Once you have taken care of the task insert your name in the end of the line with corresponding date.&lt;br /&gt;
&lt;br /&gt;
* Expand [[Getting started with Ubuntu#Installing in VirtualBox]] section with highlighted screenshots of VirtualBox. Points: 1p&lt;br /&gt;
* Create [[Claiming GitHub Student Developer Pack]] with screenshots how to add @itcollege.ee e-mail to your GitHub profile and claim [https://education.github.com/pack Student Developer Pack] Points: 2p&lt;/div&gt;</summary>
		<author><name>Smets</name></author>
	</entry>
</feed>