<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://homeostasis.scs.carleton.ca/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jagger</id>
	<title>Soma-notes - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://homeostasis.scs.carleton.ca/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jagger"/>
	<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php/Special:Contributions/Jagger"/>
	<updated>2026-04-22T12:34:38Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=SystemsSec_2018W_Lecture_12&amp;diff=21522</id>
		<title>SystemsSec 2018W Lecture 12</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=SystemsSec_2018W_Lecture_12&amp;diff=21522"/>
		<updated>2018-02-20T19:38:47Z</updated>

		<summary type="html">&lt;p&gt;Jagger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Audio==&lt;br /&gt;
&lt;br /&gt;
[https://homeostasis.scs.carleton.ca/~soma/systemssec-2018w/lectures/comp4108-2018w-lec12-14Feb2018.m4a Lecture 12 Audio]&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
Potential Assignment Topics:&lt;br /&gt;
*Crypto&lt;br /&gt;
**What does it buy you?&lt;br /&gt;
**What can’t it do? &lt;br /&gt;
*Obfuscation&lt;br /&gt;
*Memory corruption&lt;br /&gt;
*Logic errors&lt;br /&gt;
*Back doors&lt;br /&gt;
*Certificates&lt;br /&gt;
&lt;br /&gt;
SQL Injections&lt;br /&gt;
*Query is unsanitized &lt;br /&gt;
&lt;br /&gt;
In the browser what interpreters do we have?&lt;br /&gt;
*Javascript&lt;br /&gt;
*HTML&lt;br /&gt;
*CSS&lt;br /&gt;
&lt;br /&gt;
What does it mean to exploit it? &lt;br /&gt;
*To use a vulnerability to your advantage&lt;br /&gt;
&lt;br /&gt;
In the webpage, there are all kinds of content.  There are advertisements, search bars, twitter feeds, facebook like buttons, etc.  &lt;br /&gt;
&lt;br /&gt;
Everything on a webpage has access to the document object model. &lt;br /&gt;
&lt;br /&gt;
Setuid programs -&amp;gt; How much do you have to trust?&lt;br /&gt;
&lt;br /&gt;
Anyone that you allow to become root can do way too much. &lt;br /&gt;
&lt;br /&gt;
Sammy Attack:&lt;br /&gt;
*Happened during the days of myspace&lt;br /&gt;
*Forces users to send samy a friend request&lt;br /&gt;
*Harmless&lt;br /&gt;
&lt;br /&gt;
In the comment section, there is a possibility of malicious code. &lt;br /&gt;
&lt;br /&gt;
CSRF&lt;br /&gt;
*Have the victim visit a random webpage &lt;br /&gt;
*Have the ability to make your web browser do all sorts of network traffic &lt;br /&gt;
&lt;br /&gt;
You can pull any arbitrary content over the internet and stick it into a webpage. &lt;br /&gt;
&lt;br /&gt;
Cookies:&lt;br /&gt;
*Stored on the web browser &lt;br /&gt;
*Remembers information about the person browsing the website&lt;br /&gt;
&lt;br /&gt;
Some websites let you stay logged in for a long time.  Some don’t. &lt;br /&gt;
&lt;br /&gt;
XML HTTP Request -&amp;gt; Developed by microsoft&lt;br /&gt;
&lt;br /&gt;
Why did microsoft do this? &lt;br /&gt;
*Outlook client access &lt;br /&gt;
&lt;br /&gt;
What people want to do with the web impacts security design. &lt;br /&gt;
&lt;br /&gt;
Can you embed arbitrary html in facebook? -&amp;gt; No&lt;br /&gt;
&lt;br /&gt;
Either you filter out the bad things, or you escape the bad things. &lt;br /&gt;
&lt;br /&gt;
How can we minimize people from running code on your web browser?&lt;br /&gt;
*Idea of least privilege&lt;br /&gt;
&lt;br /&gt;
Same Origin Policy &lt;br /&gt;
*The only person that is allowed to get access to your web browser is the origin server. &lt;br /&gt;
&lt;br /&gt;
CSP&lt;br /&gt;
*Prevents stuff from coming from arbitrary sources&lt;br /&gt;
*It does not help with you visiting untrusted sources &lt;br /&gt;
*Keeps a list of who is trusted and who is not trusted &lt;br /&gt;
&lt;br /&gt;
Web browsers -&amp;gt; The modern operating system &lt;br /&gt;
&lt;br /&gt;
Web browsers have a different trust model than the operating system does.&lt;br /&gt;
&lt;br /&gt;
Web browsers sandboxes code&lt;br /&gt;
&lt;br /&gt;
Phone operating systems:&lt;br /&gt;
*Deal with similar threat model to the web &lt;br /&gt;
&lt;br /&gt;
IOS strategy for dealing with threats:&lt;br /&gt;
*Sandbox the hell out of everything &lt;br /&gt;
&lt;br /&gt;
Android Model:&lt;br /&gt;
*Access control using capabilities list &lt;br /&gt;
&lt;br /&gt;
Everytime you install an app on android, it would need to do a security analysis.  You would get questions regarding your current location, camera access, microphone access, etc.  Why does it do that?  For advertisement content. &lt;br /&gt;
&lt;br /&gt;
Snaps and flat packs&lt;br /&gt;
*Standards for packaging linux applications to run on systems. &lt;br /&gt;
*They also include sandboxing&lt;br /&gt;
&lt;br /&gt;
If you want to run skype on your linux system, you can get a “snap” for it.  But you have to install it on classic mode. &lt;br /&gt;
&lt;br /&gt;
How are you going to make sure that you are going to be provided with safety while running untrusted code?&lt;br /&gt;
*Access control&lt;br /&gt;
*Sandboxing&lt;br /&gt;
&lt;br /&gt;
Usability of security systems &lt;br /&gt;
&lt;br /&gt;
Questions:&lt;br /&gt;
*What can we do to restrict people from putting arbitrary code onto the website you are visiting? &lt;br /&gt;
*What is browser exploit? How do we prevent it?&lt;br /&gt;
*What is the program with fine grained permissions?&lt;/div&gt;</summary>
		<author><name>Jagger</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=SystemsSec_2018W_Lecture_9&amp;diff=21499</id>
		<title>SystemsSec 2018W Lecture 9</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=SystemsSec_2018W_Lecture_9&amp;diff=21499"/>
		<updated>2018-02-06T04:21:20Z</updated>

		<summary type="html">&lt;p&gt;Jagger: Create page and add notes section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Notes==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Software Vulnerabilities&lt;br /&gt;
======&lt;br /&gt;
&lt;br /&gt;
Sandboxing: [ dangerous ] safe&lt;br /&gt;
             (untrusted) (trusted)&lt;br /&gt;
&lt;br /&gt;
Firewalls: [ safe ] dangerous&lt;br /&gt;
&lt;br /&gt;
What else? Access control?&lt;br /&gt;
&lt;br /&gt;
Conceptually, a software vulnerability is when the barriers (trust boundaries) are bypassed.&lt;br /&gt;
&lt;br /&gt;
How do we detect when trust boundaries are defied?&lt;br /&gt;
- classic example, logging (&amp;quot;Hey that&#039;s an IP from Eastern Europe&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Classic Attack Vectors (not related to vulns)&lt;br /&gt;
- insider attacks&lt;br /&gt;
- social engineering&lt;br /&gt;
&lt;br /&gt;
Mobile phone threat modeling&lt;br /&gt;
======&lt;br /&gt;
How can an attacker get access to your device?&lt;br /&gt;
&lt;br /&gt;
The web.&lt;br /&gt;
&lt;br /&gt;
Your phone in this example is not listening on any ports, but it is easy to get bits onto your phone. Send the victim an email. Buy targeted ads. etc. i.e. get them to talk to you.&lt;br /&gt;
&lt;br /&gt;
Now that the bits are on the device, how will they &amp;quot;escape&amp;quot;?&lt;br /&gt;
There are classficiations like:&lt;br /&gt;
- remote code execution&lt;br /&gt;
- priviledge escalation&lt;br /&gt;
- etc.&lt;br /&gt;
&lt;br /&gt;
I/O devices (bit entrypoints)&lt;br /&gt;
======&lt;br /&gt;
- removable storage&lt;br /&gt;
- network&lt;br /&gt;
- video/audio input (webcam, microphone)&lt;br /&gt;
- peripherals (mouse, keyboard, touch screen)&lt;br /&gt;
- mobile specific inputs (accelerometer, gyroscope, compass, barometer, GPS)&lt;br /&gt;
&lt;br /&gt;
What are all these things, at their core?&lt;br /&gt;
&lt;br /&gt;
[ a device ] &amp;lt;-&amp;gt; [ driver ] &amp;lt;-&amp;gt; [ kernel ] &amp;lt;-&amp;gt; [ process ]&lt;br /&gt;
[                    CPU and memory                      ] &amp;lt;- Spectre and Meltdown live here&lt;br /&gt;
&lt;br /&gt;
Each step along the chain is a potential place to attack.&lt;br /&gt;
&lt;br /&gt;
How can each step (software) fail? Rough categories:&lt;br /&gt;
- memory corruption (buffer overruns) (more hard nowadays)&lt;br /&gt;
- &amp;quot;interpreter&amp;quot; abuse&lt;br /&gt;
- logic errors&lt;br /&gt;
- race condition (TOCTTOU: time of check to time of use)&lt;br /&gt;
- information leak (people can hear you through the wall, but can&#039;t otherwise get through it)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jagger</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Computer_Systems_Security_(Winter_2018)&amp;diff=21498</id>
		<title>Computer Systems Security (Winter 2018)</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Computer_Systems_Security_(Winter_2018)&amp;diff=21498"/>
		<updated>2018-02-06T04:16:51Z</updated>

		<summary type="html">&lt;p&gt;Jagger: /* Schedule */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Course Outline==&lt;br /&gt;
&lt;br /&gt;
[[Computer Systems Security: Winter 2018 Course Outline|Course Outline]]&lt;br /&gt;
&lt;br /&gt;
==Experiences==&lt;br /&gt;
&lt;br /&gt;
You are required to complete 9 experiences throughout the semester.&lt;br /&gt;
&lt;br /&gt;
* [[Computer Systems Security: Winter 2018 Experiences|List of Experiences]]&lt;br /&gt;
&lt;br /&gt;
==Assignments==&lt;br /&gt;
&lt;br /&gt;
Assignments will be posted here as they become available&lt;br /&gt;
&lt;br /&gt;
* [[Computer Systems Security: Winter 2018 Assignment 1|Assignment 1]]&lt;br /&gt;
* Assignment 2&lt;br /&gt;
* Assignment 3&lt;br /&gt;
* Assignment 4&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
&lt;br /&gt;
Here are some resources you may find useful:&lt;br /&gt;
&lt;br /&gt;
* [http://homeostasis.scs.carleton.ca/~soma/systemssec-2018w/comp4108-2018w.ova A Virtualbox OVF image for Ubuntu 17.10.1]&lt;br /&gt;
* [https://openstack.scs.carleton.ca The SCS openstack cluster].  Note that you can only access this from the Carleton network.  To access from elsewhere, [https://carleton.ca/its/help-centre/remote-access/ VPN in] to the university.  (On Linux you can also use openconnect rather than the Cisco software provided by Carleton.)&lt;br /&gt;
&lt;br /&gt;
If you cannot access openstack, try [http://www.scs.carleton.ca/webacct changing your SCS password].&lt;br /&gt;
&lt;br /&gt;
==Schedule==&lt;br /&gt;
&lt;br /&gt;
===January 8, 2018===&lt;br /&gt;
&lt;br /&gt;
[[SystemsSec 2018W Lecture 1|Introduction]]&lt;br /&gt;
&lt;br /&gt;
===January 10, 2018===&lt;br /&gt;
&lt;br /&gt;
[[SystemsSec 2018W Lecture 2|Threat Modelling]]&lt;br /&gt;
&lt;br /&gt;
===January 15, 2018===&lt;br /&gt;
&lt;br /&gt;
[[SystemsSec 2018W Lecture 3|Common tools]]&lt;br /&gt;
&lt;br /&gt;
===January 17, 2018===&lt;br /&gt;
&lt;br /&gt;
[[SystemsSec 2018W Lecture 4|passwd]]&lt;br /&gt;
&lt;br /&gt;
===January 22, 2018===&lt;br /&gt;
&lt;br /&gt;
[[SystemsSec 2018W Lecture 5|Networking 1]]&lt;br /&gt;
&lt;br /&gt;
===January 24, 2018===&lt;br /&gt;
&lt;br /&gt;
[[SystemsSec 2018W Lecture 6|Virtual machines 1]]&lt;br /&gt;
&lt;br /&gt;
===January 29, 2018===&lt;br /&gt;
&lt;br /&gt;
[[SystemsSec 2018W Lecture 7|Cryptography 1]]&lt;br /&gt;
&lt;br /&gt;
===January 31, 2018===&lt;br /&gt;
&lt;br /&gt;
[[SystemsSec 2018W Lecture 8|Networking 2]]&lt;br /&gt;
&lt;br /&gt;
Assignment 1 due&lt;br /&gt;
&lt;br /&gt;
===February 5, 2018===&lt;br /&gt;
&lt;br /&gt;
[[SystemsSec 2018W Lecture 9|Software Vulnerabilities 1]]&lt;br /&gt;
&lt;br /&gt;
===February 14, 2018===&lt;br /&gt;
&lt;br /&gt;
Assignment 2 due&lt;br /&gt;
&lt;br /&gt;
===February 19 &amp;amp; 21, 2018===&lt;br /&gt;
&lt;br /&gt;
Winter break, no classes&lt;br /&gt;
&lt;br /&gt;
===February 26, 2018===&lt;br /&gt;
&lt;br /&gt;
Mid-term review&lt;br /&gt;
&lt;br /&gt;
===February 28, 2018===&lt;br /&gt;
&lt;br /&gt;
Mid-term Exam&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===March 19, 2018===&lt;br /&gt;
&lt;br /&gt;
Assignment 3 due&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===April 4, 2018===&lt;br /&gt;
&lt;br /&gt;
Assignment 4 due&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===April 9, 2018===&lt;br /&gt;
&lt;br /&gt;
Last day of class&lt;/div&gt;</summary>
		<author><name>Jagger</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Operating_Systems_2017F:_Tutorial_5&amp;diff=21174</id>
		<title>Operating Systems 2017F: Tutorial 5</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Operating_Systems_2017F:_Tutorial_5&amp;diff=21174"/>
		<updated>2017-11-05T22:22:06Z</updated>

		<summary type="html">&lt;p&gt;Jagger: /* A simple kernel module */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this tutorial you will be creating filesystems and installing kernel modules.  It is &#039;&#039;&#039;highly recommended&#039;&#039;&#039; that you use a comp3000 openstack instance for the exercises below for two reasons.  In particular you may have difficulties compiling kernel modules on other systems.  You will need root access to install kernel modules and mount filesystems.  These operations are potentially dangerous and mistakes could &#039;&#039;&#039;destroy all data&#039;&#039;&#039; on the Linux system.  Consider yourself warned!&lt;br /&gt;
&lt;br /&gt;
==Filesystems==&lt;br /&gt;
&lt;br /&gt;
# Run &amp;lt;tt&amp;gt;ls -lai&amp;lt;/tt&amp;gt; (by itself or for a specific directory).  What are the numbers appearing in the left column?&lt;br /&gt;
# dd if=/dev/zero of=foo bs=8192 count=32K   What is the logical size of the file?  How much space does it consume on disk? (Hint: Look at the size option to ls.)&lt;br /&gt;
# Run &amp;lt;tt&amp;gt;mkfs.ext4 foo&amp;lt;/tt&amp;gt;.  (If asked, say &amp;quot;yes&amp;quot; to operating on a regular file.)  Does foo consume any more space?&lt;br /&gt;
# Run &amp;lt;tt&amp;gt;dumpe2fs foo&amp;lt;/tt&amp;gt;.  What does the output of this command mean?&lt;br /&gt;
# What command do you run to check the filesystem in foo for errors?&lt;br /&gt;
# Run &amp;lt;tt&amp;gt;sudo mount foo /mnt&amp;lt;/tt&amp;gt;.  How does this command change what files are accessible?&lt;br /&gt;
# Run &amp;lt;tt&amp;gt;df&amp;lt;/tt&amp;gt;.  What device is mounted on /mnt?  What is this device?&lt;br /&gt;
# Run &amp;lt;tt&amp;gt;rsync -a -v /etc /mnt&amp;lt;/tt&amp;gt;.  What does this command do?  Explain the arguments as well.&lt;br /&gt;
# Run &amp;lt;tt&amp;gt;sudo umount /mnt&amp;lt;/tt&amp;gt;.  What files can you still access, and what have gone away?&lt;br /&gt;
# Run &amp;lt;tt&amp;gt;dd if=/dev/zero of=foo conv=notrunc count=10 bs=512&amp;lt;/tt&amp;gt;.  How does the &amp;quot;conv=notrunc&amp;quot; change dd&#039;s behavior (versus the command in question 1)?&lt;br /&gt;
# Run &amp;lt;tt&amp;gt;sudo mount foo /mnt&amp;lt;/tt&amp;gt;.  What error do you get?&lt;br /&gt;
# What command can you run to make foo mountable again?  What characteristic of the file system enables this command to work?&lt;br /&gt;
# Run the command &amp;lt;tt&amp;gt;truncate -s 1G bar&amp;lt;/tt&amp;gt;.  What is the logical size of bar, and how much space does it consume on disk?  How does this compare with foo?&lt;br /&gt;
# How does the logical size of bar change when you create an ext4 filesystem in it?  What about the space consumed on disk?&lt;br /&gt;
&lt;br /&gt;
==A simple kernel module==&lt;br /&gt;
&lt;br /&gt;
# Download the source for [http://homeostasis.scs.carleton.ca/~soma/os-2015f/code/simple.zip this simple module], unpack, and build it by typing &amp;quot;make&amp;quot;. Use &amp;lt;code&amp;gt;wget&amp;lt;/code&amp;gt;&lt;br /&gt;
# Install the module using &amp;quot;sudo insmod simple.ko&amp;quot;.  The hello message is recorded in the kernel logs.  How do you view the kernel logs?&lt;br /&gt;
# Check to see that the module has been loaded.  How do you do this?&lt;br /&gt;
# Remove the module from the kernel.  What did you do?&lt;br /&gt;
&lt;br /&gt;
==A character device kernel module==&lt;br /&gt;
&lt;br /&gt;
# Download the source for [http://homeostasis.scs.carleton.ca/~soma/os-2015f/code/ones.zip ones], a kernel module implementing a character device that ouputs an unbounded string of &amp;quot;1&amp;quot;&#039;s.  Build, compile, and run it as before.&lt;br /&gt;
# What kernel messages does the module generate?  Does it create any new files (other than /dev/ones)?  If so, where?&lt;br /&gt;
# What happens when you &amp;quot;cat&amp;quot; the device /dev/ones?  How can you limit the output?&lt;br /&gt;
# How can you modify your module to generate a kernel &amp;quot;Oops&amp;quot; as reported in the kernel logs or outright crash the kernel?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Simple module==&lt;br /&gt;
&lt;br /&gt;
===simple.c===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/module.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/init.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/kernel.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
static int __init simple_init(void)&lt;br /&gt;
{&lt;br /&gt;
        printk (&amp;quot;Hello kernel world!\n&amp;quot;);&lt;br /&gt;
        return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
static void __exit simple_exit(void)&lt;br /&gt;
{&lt;br /&gt;
        printk (&amp;quot;Goodbye kernel world.\n&amp;quot;);&lt;br /&gt;
        return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
module_init(simple_init);&lt;br /&gt;
module_exit(simple_exit);&lt;br /&gt;
&lt;br /&gt;
MODULE_LICENSE(&amp;quot;GPL&amp;quot;);&lt;br /&gt;
MODULE_AUTHOR(&amp;quot;Anil Somayaji &amp;lt;soma@scs.carleton.ca&amp;gt;&amp;quot;);&lt;br /&gt;
MODULE_DESCRIPTION(&amp;quot;A simple module&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Makefile===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;make&amp;quot;&amp;gt;&lt;br /&gt;
obj-m := simple.o&lt;br /&gt;
KDIR := /lib/modules/$(shell uname -r)/build&lt;br /&gt;
PWD := $(shell pwd)&lt;br /&gt;
default:&lt;br /&gt;
	$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ones module==&lt;br /&gt;
&lt;br /&gt;
===ones.c===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* Code derived from:&lt;br /&gt;
  https://appusajeev.wordpress.com/2011/06/18/writing-a-linux-character-device-driver/&lt;br /&gt;
  and&lt;br /&gt;
  http://pete.akeo.ie/2011/08/writing-linux-device-driver-for-kernels.html&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;linux/module.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/fs.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/device.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/init.h&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/kernel.h&amp;gt;&lt;br /&gt;
#include &amp;lt;asm/uaccess.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define dbg(format, arg...) do { if (debug) pr_info(CLASS_NAME &amp;quot;: %s: &amp;quot; format, __FUNCTION__, ## arg); } while (0)&lt;br /&gt;
#define err(format, arg...) pr_err(CLASS_NAME &amp;quot;: &amp;quot; format, ## arg)&lt;br /&gt;
#define info(format, arg...) pr_info(CLASS_NAME &amp;quot;: &amp;quot; format, ## arg)&lt;br /&gt;
#define warn(format, arg...) pr_warn(CLASS_NAME &amp;quot;: &amp;quot; format, ## arg)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#define DEVICE_NAME &amp;quot;ones&amp;quot;&lt;br /&gt;
#define CLASS_NAME &amp;quot;comp3000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
static struct class* ones_class = NULL;&lt;br /&gt;
static struct device* ones_device = NULL;&lt;br /&gt;
static int ones_major;&lt;br /&gt;
&lt;br /&gt;
static int ones_open(struct inode *the_inode, struct file *f)&lt;br /&gt;
{&lt;br /&gt;
        return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
static ssize_t ones_read(struct file *f, char *buf, size_t len, loff_t *offset)&lt;br /&gt;
{&lt;br /&gt;
        size_t i;&lt;br /&gt;
&lt;br /&gt;
        for (i = 0; i &amp;lt; len; i++) {&lt;br /&gt;
                put_user(&#039;1&#039;, buf++);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return i;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
static int ones_release(struct inode *the_inode, struct file *f)&lt;br /&gt;
{&lt;br /&gt;
        printk(KERN_ALERT &amp;quot;Ones device closed\n&amp;quot;);&lt;br /&gt;
        return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
static struct file_operations ones_fops = {&lt;br /&gt;
        .open = ones_open,&lt;br /&gt;
        .read = ones_read,&lt;br /&gt;
        .release = ones_release,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
static char *ones_devnode(struct device *dev, umode_t *mode)&lt;br /&gt;
{&lt;br /&gt;
        if (mode)&lt;br /&gt;
	        *mode = 0444;&lt;br /&gt;
        return NULL;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
static int __init ones_init(void)&lt;br /&gt;
{&lt;br /&gt;
        int retval;&lt;br /&gt;
  &lt;br /&gt;
        ones_major = register_chrdev(0, DEVICE_NAME, &amp;amp;ones_fops);&lt;br /&gt;
        if (ones_major &amp;lt; 0) {&lt;br /&gt;
                err(&amp;quot;failed to register device: error %d\n&amp;quot;, ones_major);&lt;br /&gt;
                retval = ones_major;&lt;br /&gt;
                goto failed_chrdevreg;&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        ones_class = class_create(THIS_MODULE, CLASS_NAME);&lt;br /&gt;
        if (IS_ERR(ones_class)) {&lt;br /&gt;
                err(&amp;quot;failed to register device class &#039;%s&#039;\n&amp;quot;, CLASS_NAME);&lt;br /&gt;
                retval = PTR_ERR(ones_class);&lt;br /&gt;
                goto failed_classreg;&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
	ones_class-&amp;gt;devnode = ones_devnode;&lt;br /&gt;
&lt;br /&gt;
        ones_device = device_create(ones_class, NULL, MKDEV(ones_major, 0),&lt;br /&gt;
                                    NULL, DEVICE_NAME);&lt;br /&gt;
&lt;br /&gt;
        if (IS_ERR(ones_device)) {&lt;br /&gt;
                err(&amp;quot;failed to create device &#039;%s&#039;\n&amp;quot;, DEVICE_NAME);&lt;br /&gt;
                retval = PTR_ERR(ones_device);&lt;br /&gt;
                goto failed_devreg;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        info(&amp;quot;Ones device registered using major %d.\n&amp;quot;, ones_major);&lt;br /&gt;
        &lt;br /&gt;
        return 0;&lt;br /&gt;
        &lt;br /&gt;
 failed_devreg:&lt;br /&gt;
        class_unregister(ones_class);&lt;br /&gt;
        class_destroy(ones_class);&lt;br /&gt;
 failed_classreg:&lt;br /&gt;
        unregister_chrdev(ones_major, DEVICE_NAME);&lt;br /&gt;
 failed_chrdevreg:&lt;br /&gt;
        return -1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
static void __exit ones_exit(void)&lt;br /&gt;
{&lt;br /&gt;
        device_destroy(ones_class, MKDEV(ones_major, 0));&lt;br /&gt;
        class_unregister(ones_class);&lt;br /&gt;
        class_destroy(ones_class);&lt;br /&gt;
        unregister_chrdev(ones_major, &amp;quot;ones&amp;quot;);&lt;br /&gt;
        info(&amp;quot;Unloading Ones module.\n&amp;quot;);&lt;br /&gt;
        return;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
module_init(ones_init);&lt;br /&gt;
module_exit(ones_exit);&lt;br /&gt;
&lt;br /&gt;
MODULE_LICENSE(&amp;quot;GPL&amp;quot;);&lt;br /&gt;
MODULE_AUTHOR(&amp;quot;Anil Somayaji &amp;lt;soma@scs.carleton.ca&amp;gt;&amp;quot;);&lt;br /&gt;
MODULE_DESCRIPTION(&amp;quot;A write ones character device module&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Makefile===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;make&amp;quot;&amp;gt;&lt;br /&gt;
obj-m := ones.o&lt;br /&gt;
KDIR := /lib/modules/$(shell uname -r)/build&lt;br /&gt;
PWD := $(shell pwd)&lt;br /&gt;
default:&lt;br /&gt;
	$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jagger</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Operating_Systems_2017F_Lecture_7&amp;diff=21073</id>
		<title>Operating Systems 2017F Lecture 7</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Operating_Systems_2017F_Lecture_7&amp;diff=21073"/>
		<updated>2017-10-04T05:16:50Z</updated>

		<summary type="html">&lt;p&gt;Jagger: Significant formatting improvement, some content omissions, spelling errors&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Video==&lt;br /&gt;
&lt;br /&gt;
Video from the lecture given on September 28, 2017 [http://homeostasis.scs.carleton.ca/~soma/os-2017f/lectures/comp3000-2017f-lec07-28Sep2017.mp4 is now available].&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&lt;br /&gt;
Code and files from the lecture (captured as they were at the end) are available [http://homeostasis.scs.carleton.ca/~soma/os-2017f/code/lec07/ here].&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
3000 Sep28&lt;br /&gt;
Next week: Anil is away from Sunday to Thursday morning. Review section.&lt;br /&gt;
&lt;br /&gt;
Topic today: File systems&lt;br /&gt;
&lt;br /&gt;
===What is a file?===&lt;br /&gt;
It is a key - value pair.&lt;br /&gt;
&lt;br /&gt;
*Key:  hierarchical filename (pathname)&lt;br /&gt;
*Value: arbitrary number of bytes&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;In principle, you can use files to store very small values&#039;&#039;&#039;&lt;br /&gt;
* most filesystems have a minimum file size of at least 1k, often 4K or more&lt;br /&gt;
* a file containing one byte of data wastes a lot of real disk space&lt;br /&gt;
&#039;&#039;&#039;A set of files &#039;stored&#039; together, sharing a common hierarchical root, is a filesystem.&#039;&#039;&#039;&lt;br /&gt;
Why quote &#039;stored&#039;? &lt;br /&gt;
* Because there is no storage for virtual filesystems (such as /proc and /sys)&lt;br /&gt;
* when you first start a UNIX system, you start with the ‘root’ filesystem. (have nothing to do with root user.)&lt;br /&gt;
* other filesystems can be put on top by &amp;quot;mount&amp;quot;-ing them.&lt;br /&gt;
&lt;br /&gt;
====Demonstration====&lt;br /&gt;
&lt;br /&gt;
Run &amp;lt;code&amp;gt;mount&amp;lt;/code&amp;gt;, it shows&lt;br /&gt;
  /dev/vda1 on / type ext4 (rw, relatetime,data=ordered)&lt;br /&gt;
&lt;br /&gt;
* /dev is root filesystem&lt;br /&gt;
* / is the top of hierarchy&lt;br /&gt;
* ‘rw’ means read write &lt;br /&gt;
* /def/vda1 is a Special file, files in /dev are special files.&lt;br /&gt;
&lt;br /&gt;
(Special files are actual files, historically they might have been stored on disk, nowadays they are not.)&lt;br /&gt;
&lt;br /&gt;
Run &amp;lt;code&amp;gt;df .&amp;lt;/code&amp;gt; (df is for displaying the amount of available disk space for file systems on which the invoking user has appropriate read access.)&lt;br /&gt;
* There is a filesystem called ‘udev’, which is a virtual file system with zero space used, since it is created automatically on run time&lt;br /&gt;
&lt;br /&gt;
Run &amp;lt;code&amp;gt;who&amp;lt;/code&amp;gt; in another terminal&lt;br /&gt;
* it displays &amp;lt;code&amp;gt;soma tty7 2017-09-28 12:59 (:0)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run &amp;lt;code&amp;gt;ls /dev&amp;lt;/code&amp;gt;&lt;br /&gt;
*Instead of &#039;&#039;vda&#039;&#039;, it shows &#039;&#039;sda&#039;&#039;. The ‘v’ in &#039;&#039;vda&#039;&#039; stands for ‘virtual’. The ‘s’ in &#039;&#039;sda&#039;&#039; stands for SCSI (The Small Computer System Interface).&lt;br /&gt;
*Any device you want to access on unix system has /dev&lt;br /&gt;
&lt;br /&gt;
Run &amp;lt;code&amp;gt;ls -a&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;/dev&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Looking at the permissions (e.g ‘crw--rw----’), first letter for normal file is blank , directory is ‘d’, ‘c’ is for Character Devices, ‘b’ is for Block Devices&lt;br /&gt;
&lt;br /&gt;
*Character devices example: keyboard, mouse, /dev/random&lt;br /&gt;
:-read/write a single byte (character) at a time&lt;br /&gt;
*What makes b-disk different? Caches.&lt;br /&gt;
:-Hard drives are optical drives are examples of block devices&lt;br /&gt;
*Character and block devices are accessed via special files, denoted by &#039;c&#039; and &#039;b&#039; in the file metadata&lt;br /&gt;
*Block devices are for block storage, to cache results&lt;br /&gt;
:-It is faster to read or write large chunks of data (e.g. 4KiB) than it would be one byte at a time&lt;br /&gt;
:-Traditional filesystems are stored in block devices&lt;br /&gt;
*However, a filesystem can be anything that provides a filesystem interface.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;file interface basics:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*open, read, write, seek, close&lt;br /&gt;
*open directory, read/write directory, close directory&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Block size issues:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*larger blocks, less overhead&lt;br /&gt;
:-there is a fixed cost for each block access&lt;br /&gt;
:-large files span many blocks&lt;br /&gt;
*smaller blocks, more efficient space usage&lt;br /&gt;
:-you end up with fewer files that are smaller than one block&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;filesystem interface basics:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-mount and unmount&lt;br /&gt;
&lt;br /&gt;
filesystem block size is a multiple of disk block (sometimes called sector or cluster) size&lt;br /&gt;
  e.g. an SSD has a 512 byte sectors with an EXT3 filesystem with 8,192 byte (8K) blocks&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Inodes===&lt;br /&gt;
&lt;br /&gt;
How do you structure a filesystem? First, you have to understand inodes.&lt;br /&gt;
&lt;br /&gt;
====Demonstration====&lt;br /&gt;
&lt;br /&gt;
1. Run &amp;lt;code&amp;gt;cp lec07.txt test.txt&amp;lt;/code&amp;gt; &lt;br /&gt;
:- There is no difference between those files&lt;br /&gt;
2. Run &amp;lt;code&amp;gt;ln test.txt duplicate.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
:- There is difference between duplicate.txt and test.txt: A number for test.txt changed from ‘1’ to ‘2’. That number is inode count&lt;br /&gt;
:- &amp;lt;code&amp;gt;ln&amp;lt;/code&amp;gt; stands for &#039;&#039;link&#039;&#039;&lt;br /&gt;
3. Run &amp;lt;code&amp;gt;ln duplicate.txt alsodup.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
:- Inode count number changed ‘2’ from ‘3’&lt;br /&gt;
4. Run &amp;lt;code&amp;gt;ln -s duplicate.txt another.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
:- There is no different between another.txt lec07.txt&lt;br /&gt;
5. Run &amp;lt;code&amp;gt;ls -la&amp;lt;/code&amp;gt;has diffrence’&lt;br /&gt;
:- It shows another.txt -&amp;gt; duplicate.txt (symbolic link pointing one to the other&lt;br /&gt;
6.Run &amp;lt;code&amp;gt;rm duplicate.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
:- The arrow is still pointing, but inode count number goes down. (From ‘3’ to ‘2’)&lt;br /&gt;
7. Run &amp;lt;code&amp;gt;cat another.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
:- It shows there is such file, because the file that pointing to is not exist&lt;br /&gt;
&lt;br /&gt;
* ‘ln’ creates hard links to an item by default. &lt;br /&gt;
* File name is a pointer to an inodes.&lt;br /&gt;
* ‘rm’ is not remove, just unlink, which reduces the link count for inode&lt;br /&gt;
* When you clear storage, when inode inbound number go to 0, is not link to other file,system will remove it.&lt;br /&gt;
* When the user open a file, reference count is incremented.&lt;br /&gt;
* A file sys doesn’t have to be a block device? It can store anywhere as long as you provide the api.&lt;br /&gt;
* A file system can be made in a file (the basic of virtual machine)&lt;br /&gt;
&lt;br /&gt;
One other file api: mmap&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Inode store permission&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
mmap, munmap: map or unmap files or devices into memory, this is the piece that unify the file sys with process memory.&lt;br /&gt;
&lt;br /&gt;
What ‘read’ does: read directly into RAM&lt;br /&gt;
&lt;br /&gt;
Run &amp;lt;code&amp;gt;top&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:-There are ‘VIRT’, ‘RES’ and ‘SHR’:&lt;br /&gt;
 VIRT stands for the virtual size of a process&lt;br /&gt;
 RES stands for the resident size, which is an accurate representation of how much actual physical memory a process is consuming.&lt;br /&gt;
 SHR indicates how much of the VIRT size is actually sharable (memory or libraries).&lt;/div&gt;</summary>
		<author><name>Jagger</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Operating_Systems_2017F_Lecture_2&amp;diff=21069</id>
		<title>Operating Systems 2017F Lecture 2</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Operating_Systems_2017F_Lecture_2&amp;diff=21069"/>
		<updated>2017-10-04T03:55:15Z</updated>

		<summary type="html">&lt;p&gt;Jagger: fix hello world syntax highlighting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Video==&lt;br /&gt;
&lt;br /&gt;
Video from the lecture given on September 12, 2017 [http://homeostasis.scs.carleton.ca/~soma/os-2017f/lectures/comp3000-2017f-lec02-12Sep2017.mp4 is now available].&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&lt;br /&gt;
Code and files from the lecture (captured as they were at the end) are available [http://homeostasis.scs.carleton.ca/~soma/os-2017f/code/lec02/ here].&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&#039;&#039;&#039;What is a file?&#039;&#039;&#039;&lt;br /&gt;
  - A hierarchical name with a value mapping, accessed using the API &amp;quot;open, read, close, seek&amp;quot; (roughly).  Open and close are used for efficiency; read and write do all of the work.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Why is Unix and Linux interchangeable?&#039;&#039;&#039;&lt;br /&gt;
  - Linux is a variant of the Unix, it contains the Unix kernel with custom built layers on top.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What is the architecture of the Unix kernel?&#039;&#039;&#039;&lt;br /&gt;
  - A system of hierarchical files that represent all of the different hardware devices&lt;br /&gt;
    for example: writing to stdout or reading from stdin.  These are the computer monitor and keyborad file descriptors.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do we add new devices to the system?&#039;&#039;&#039;&lt;br /&gt;
  - We tell the operating system to mount the new device.  The operating system responds with a file descriptor for the new device.  Accessing the device means writing to its file.&lt;br /&gt;
  - There are many files that represent a device.  We can trace these files by calling the command &amp;quot;lspci&amp;quot; which gets the PCI bus hardware device info from the kernel.  Using the   &lt;br /&gt;
    command &amp;quot;strace lspci&amp;quot; we can trace all of the system calls performed by lspci.  Now we know exactly which files make up each device on the PCI bus. &lt;br /&gt;
  - file descriptors like /dev or /sys are conduits to the kernel.  The kernel then performs operations on the hardware.&lt;br /&gt;
&lt;br /&gt;
The key point(s):  The kernel abstracts the hardware by assigning file descriptors for every device.  A program can gain information about the device using system calls to the kernel.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Virtualizing Memory&#039;&#039;&#039;&lt;br /&gt;
  - Hard disks file descriptors appear as:&lt;br /&gt;
    - /dev/sda -&amp;gt; unencrypted drive&lt;br /&gt;
    - /dev/mapper… -&amp;gt; encrypted drive&lt;br /&gt;
  - We can see the filesystem using the &amp;quot;df&amp;quot; command or view the size of files using &amp;quot;df.&amp;quot;&lt;br /&gt;
  - Why are some of the files showing a size of 0 bytes?&lt;br /&gt;
    - When memory is virtualized, the kernel builds the file system as it goes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Processes&#039;&#039;&#039;&lt;br /&gt;
  - &#039;&#039;&#039;What is a Process?&#039;&#039;&#039;&lt;br /&gt;
    - A running program&lt;br /&gt;
    - Just like the devices, every process gets a directory in the files system &amp;quot;/proc&amp;quot;&lt;br /&gt;
    - To view running process use the command &amp;quot;ps&amp;quot;&lt;br /&gt;
      - To stop a running process use the command &amp;quot;Kill &amp;lt;process id&amp;gt;&amp;quot;&lt;br /&gt;
  - &#039;&#039;&#039;What happens when multiple processes are created?&#039;&#039;&#039;&lt;br /&gt;
    - The operating system shares the resources between the processes using time sharing -- also called virtualizing the resources.&lt;br /&gt;
  - &#039;&#039;&#039;What is a shell in Linux?&#039;&#039;&#039;&lt;br /&gt;
    - Just another program that can access the operating system and run other programs&lt;br /&gt;
    - A shell can run multiple programs (processes), only control returns to the shell after the process has finished.  To give the shell priority use the &amp;quot;&amp;amp;&amp;quot; to send the current process to &lt;br /&gt;
      the background.  This idea demonstrates how the CPU is virtualized because it is being shared by the shell and the running process.  The concept was demonstrated using xclock.&lt;br /&gt;
      - Use the &amp;quot;jobs&amp;quot; command to see which processes are running&lt;br /&gt;
      - Use the &amp;quot;ps aux&amp;quot; command to view the full command line of all running processes.&lt;br /&gt;
      - Use the &amp;quot;getpid()&amp;quot; function call in a c program to find the process id for the current process.&lt;br /&gt;
      - Use the &amp;quot;getppid()&amp;quot; function call in a c program to find the parents process id for the current process.&lt;br /&gt;
  - &#039;&#039;&#039;How do I make a process?&#039;&#039;&#039;&lt;br /&gt;
    - by copying the current process&lt;br /&gt;
    - fork(): a system call the clones the currently running process.  The new process (child) begins executing from the statement that contained the call to fork().&lt;br /&gt;
    - fork() returns zero it means the child process is running.&lt;br /&gt;
    - fork() returns &amp;gt; 0 it means the parent process is running.&lt;br /&gt;
    - fork() returns &amp;lt; 0 it means the fork() failed.&lt;br /&gt;
&lt;br /&gt;
Using fork() in a c program&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/* hello-world.c */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    fork();&lt;br /&gt;
    fork();&lt;br /&gt;
&lt;br /&gt;
    printf(&amp;quot;Hello world! I&#039;m %d.  My parent is %d\n&amp;quot;, getpid(), getppid());&lt;br /&gt;
    return 42;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What does the program do?&#039;&#039;&#039;&lt;br /&gt;
  - The first call to fork() clones a child process running the hello-world program.  The child begins operating as if it just called fork().  Only the value returned from fork() &lt;br /&gt;
    is different for the child than the parent.  The child process returns a zero.&lt;br /&gt;
  - Now there are two processes running concurrently, executing the same code.  A parent process and a child process.&lt;br /&gt;
  - The parent process calls fork() again creating another child process, and the first child process also creates a child process.  Now there are 4 processes running concurrently.&lt;br /&gt;
  - All 4 processes will print their process id and their parent&#039;s process id.&lt;br /&gt;
  - finally a return value of 42 is delivered to the parent of each process as it exits.&lt;br /&gt;
  - Important: The order of execution for each process is not deterministic.  We do not know which process will run next because the operating system decides.&lt;/div&gt;</summary>
		<author><name>Jagger</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Operating_Systems_(Fall_2017)&amp;diff=21056</id>
		<title>Operating Systems (Fall 2017)</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Operating_Systems_(Fall_2017)&amp;diff=21056"/>
		<updated>2017-09-29T22:02:14Z</updated>

		<summary type="html">&lt;p&gt;Jagger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Course Outline==&lt;br /&gt;
&lt;br /&gt;
[[Operating Systems (Fall 2017) Course Outline|Here]] is the course outline for COMP 3000: Operating Systems.&lt;br /&gt;
&lt;br /&gt;
==Lectures and Exams==&lt;br /&gt;
&lt;br /&gt;
Note that the topics below are primarily chapters from the class textbook, [http://pages.cs.wisc.edu/~remzi/OSTEP/ Operating Systems: Three Easy Pieces].  Note that while introductory and summary dialogues are not linked below, they are worth reading for an informal take on the material.&lt;br /&gt;
&lt;br /&gt;
Assigned readings are subject to change, please check this page each week.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%;&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;&lt;br /&gt;
    &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;Date&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;&lt;br /&gt;
    &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;Topic&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Sept. 7&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 1|Lecture 1]]: [http://pages.cs.wisc.edu/~remzi/OSTEP/intro.pdf Introduction]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Sept. 12&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 2|Lecture 2]]: [http://pages.cs.wisc.edu/~remzi/OSTEP/cpu-intro.pdf Processes], [http://pages.cs.wisc.edu/~remzi/OSTEP/cpu-api.pdf Process API]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Sept. 14&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 3|Lecture 3]]: [http://pages.cs.wisc.edu/~remzi/OSTEP/cpu-mechanisms.pdf Limited Direct Execution], [http://pages.cs.wisc.edu/~remzi/OSTEP/cpu-sched.pdf CPU Scheduling], [http://pages.cs.wisc.edu/~remzi/OSTEP/cpu-sched-mlfq.pdf MLFQ]  &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Sept. 19&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 4|Lecture 4]]: [http://pages.cs.wisc.edu/~remzi/OSTEP/vm-intro.pdf Address Spaces], [http://pages.cs.wisc.edu/~remzi/OSTEP/vm-api.pdf Memory API]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Sept. 21&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 5|Lecture 5]]: [http://pages.cs.wisc.edu/~remzi/OSTEP/file-disks.pdf Hard Disk Drives], [http://pages.cs.wisc.edu/~remzi/OSTEP/file-intro.pdf File and Directories]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Sept. 26&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 6|Lecture 6]]: [http://pages.cs.wisc.edu/~remzi/OSTEP/file-devices.pdf I/O Devices], [http://pages.cs.wisc.edu/~remzi/OSTEP/file-journaling.pdf FSCK and Journaling]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Sept. 28&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 7|Lecture 7]]: [http://pages.cs.wisc.edu/~remzi/OSTEP/file-implementation.pdf File System Implementation]&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Oct. 3&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 8|Lecture 8]]: Assignment/Tutorial help session (Akhil)&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Oct. 5&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 9|Lecture 9]]: [http://pages.cs.wisc.edu/~remzi/OSTEP/threads-intro.pdf Concurrency and Threads], [http://pages.cs.wisc.edu/~remzi/OSTEP/threads-locks.pdf Locks]&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Oct. 10&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 10|Lecture 10]]: [http://pages.cs.wisc.edu/~remzi/OSTEP/threads-locks-usage.pdf Concurrent Data Structures], [http://pages.cs.wisc.edu/~remzi/OSTEP/threads-sema.pdf Semaphores]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Oct. 12&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 11|Lecture 11]]: [http://pages.cs.wisc.edu/~remzi/OSTEP/vm-mechanism.pdf Address Translation], [http://pages.cs.wisc.edu/~remzi/OSTEP/vm-tlbs.pdf TLBs]&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Oct. 17&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 12|Lecture 12]]: [http://pages.cs.wisc.edu/~remzi/OSTEP/vm-segmentation.pdf Segmentation], [http://pages.cs.wisc.edu/~remzi/OSTEP/vm-freespace.pdf Free space management]&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Oct. 19&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 13|Lecture 13]]: [http://pages.cs.wisc.edu/~remzi/OSTEP/vm-paging.pdf Paging]&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Oct. 31&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 14|Lecture 14]]: Midterm Review&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Nov. 2&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 15|Lecture 15]]: Midterm Exam&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Nov. 7&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 16|Lecture 16]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Nov. 9&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 17|Lecture 17]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Nov. 14&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 18|Lecture 18]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Nov. 16&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 19|Lecture 19]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Nov. 21&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 20|Lecture 20]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Nov. 23&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 21|Lecture 21]]: TBD (US Thanksgiving)&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Nov. 28&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 22|Lecture 22]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Nov. 30&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 23|Lecture 23]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Dec. 5&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 24|Lecture 24]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Dec. 7&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 25|Lecture 25]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Tutorials==&lt;br /&gt;
&lt;br /&gt;
Each week you will get a progress grade from 0-4, given to you by a TA.  If you are being diligent, you should be able to get 4&#039;s every week.  The easiest way to get your grade is to come to tutorial and meet with your TA; alternately, you can meet a TA in their office hours or, at their discretion, discuss things with them online.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%;&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;&lt;br /&gt;
    &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;Date&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;&lt;br /&gt;
    &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;Tutorials&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Sept. 18,20&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F: Tutorial 1|Processes and System Calls]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Sept. 25, 27&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F: Tutorial 2|3000shell.c]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Oct. 2, 4&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F: Tutorial 3|TBA]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Oct. 16, 18&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F: Tutorial 4|TBA]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Nov. 6, 8&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F: Tutorial 5|TBA]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Nov. 13, 15&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F: Tutorial 6|TBA]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Nov. 20, 22&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F: Tutorial 7|TBA]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Nov. 27, 29&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F: Tutorial 8|TBA]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Assignments==&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%;&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;&lt;br /&gt;
    &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;Due Date&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;&lt;br /&gt;
    &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;Assignments&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Oct. 9&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F: Assignment 1|Assignment 1]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Oct. 23&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F: Assignment 2|Assignment 2]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Nov. 20&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F: Assignment 3|Assignment 3]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Dec. 4&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F: Assignment 4|Assignment 4]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Course Software==&lt;br /&gt;
&lt;br /&gt;
In this course we will primarily working with [http://www.ubuntu.com/ Ubuntu], a widely-used family of Linux distributions.   We will be using Ubuntu Server on the SCS&#039;s [http://openstack.scs.carleton.ca/ Openstack installation] (accessible only from the Carleton network).&lt;br /&gt;
&lt;br /&gt;
You may use other Linux distributions to complete the assigned work; there will be differences, however, in some aspects (such as installing software), particularly if you use a distribution not based on Ubuntu or Debian.&lt;br /&gt;
&lt;br /&gt;
==Contributing Notes==&lt;br /&gt;
&lt;br /&gt;
The instructions and guidelines for contributing notes to the wiki can be [[Contributing:Operating_Systems_(Fall_2017)|found here]].&lt;/div&gt;</summary>
		<author><name>Jagger</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Contributing:Operating_Systems_(Fall_2017)&amp;diff=21055</id>
		<title>Contributing:Operating Systems (Fall 2017)</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Contributing:Operating_Systems_(Fall_2017)&amp;diff=21055"/>
		<updated>2017-09-29T22:00:52Z</updated>

		<summary type="html">&lt;p&gt;Jagger: Add extra steps on how to make an account, some other rephrasing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Contributing Notes=&lt;br /&gt;
&lt;br /&gt;
Extra credit is available for students who contribute lecture notes to the class wiki. You can earn up to an additive 4% bonus to your final grade by contributing notes and improving existing notes.&lt;br /&gt;
&lt;br /&gt;
==How to contribute==&lt;br /&gt;
First you need to create an account to edit the wiki. [[Operating_Systems_(Fall_2017)_Course_Outline#Course_Information|Email Jagger De Leo or Anil Somayaji]] to have one of us make an account for you.&lt;br /&gt;
&lt;br /&gt;
Please provide the following information:&lt;br /&gt;
* Your full name&lt;br /&gt;
* Desired username (to see if it&#039;s available, check the user page &#039;&#039;homeostasis.scs.carleton.ca/wiki/index.php/User:&#039;&#039;&#039;&amp;lt;USERNAME&amp;gt;&#039;&#039;&#039;&#039;&#039;)&lt;br /&gt;
* An email address (so you can reset your password)&lt;br /&gt;
&lt;br /&gt;
Then, after your are sent your temporary password and set a new one, you can log in and click the edit button on the lecture page you want to contribute to. (&#039;&#039;example: [[Operating_Systems_2017F_Lecture_1|Lecture 1]]&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
==What to contribute==&lt;br /&gt;
* Bullet point summaries of topics covered in class&lt;br /&gt;
* Code samples from class plus comments or extra explanation&lt;br /&gt;
* Time marks to important points in lecture audio/videos&lt;br /&gt;
* Links to reliable supplementary information (e.g. page numbers in &#039;&#039;Operating Systems: Three Easy Pieces&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: read up on how Mediawiki formatting works before editing, and use the &#039;&#039;Show Preview&#039;&#039; button before saving your edits.&lt;br /&gt;
&lt;br /&gt;
==How do I get my bonus marks?==&lt;br /&gt;
TAs will be monitoring your changes and will see what you have added. If you make significant contributions that do not need to be edited or improved, you will get roughly 1% per lecture. Large contributions that need some small edits will get you somewhere between 0.5% and 1% bonus. Good smaller edits and contributions will get you around 0.5%. Things like fixing typos and formatting are appreciated but are not worth any extra marks. Bonus marks are granted at the TA&#039;s discretion and will show up in CuLearn.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re not sure if something is appropriate to be added to the wiki, or you have a question about the bonus marks, ask a TA.&lt;/div&gt;</summary>
		<author><name>Jagger</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=User:Jagger&amp;diff=21054</id>
		<title>User:Jagger</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=User:Jagger&amp;diff=21054"/>
		<updated>2017-09-29T19:23:18Z</updated>

		<summary type="html">&lt;p&gt;Jagger: Created page with &amp;quot;[https://www.jagger.co jagger.co]&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[https://www.jagger.co jagger.co]&lt;/div&gt;</summary>
		<author><name>Jagger</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Contributing:Operating_Systems_(Fall_2017)&amp;diff=21048</id>
		<title>Contributing:Operating Systems (Fall 2017)</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Contributing:Operating_Systems_(Fall_2017)&amp;diff=21048"/>
		<updated>2017-09-28T16:08:31Z</updated>

		<summary type="html">&lt;p&gt;Jagger: link to example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Contributing Notes=&lt;br /&gt;
&lt;br /&gt;
Extra credit is available for students who contribute lecture notes to the class wiki. You can earn up to an additive 4% bonus to your final grade by contributing notes and improving existing notes.&lt;br /&gt;
&lt;br /&gt;
==How to contribute==&lt;br /&gt;
First you need to create an account to edit the wiki. Email Jagger De Leo or Anil Somayaji to have an account made for you.&lt;br /&gt;
&lt;br /&gt;
Then, you can log in and click the edit button on the lecture page you want to contribute to. (&#039;&#039;example: [[Operating_Systems_2017F_Lecture_1|Lecture 1]]&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
==What to contribute==&lt;br /&gt;
* Bullet point summaries of topics covered in class&lt;br /&gt;
* Code samples from class plus comments or extra explanation&lt;br /&gt;
* Time marks to important points in lecture audio/videos&lt;br /&gt;
* Links to reliable supplementary information (e.g. page numbers in &#039;&#039;Operating Systems: Three Easy Pieces&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: read up on how Mediawiki formatting works before editing, and use the &#039;&#039;Show Preview&#039;&#039; button before saving your edits.&lt;br /&gt;
&lt;br /&gt;
==How do I get my bonus marks?==&lt;br /&gt;
TAs will be monitoring your changes and will see what you have added. If you make significant contributions that do not need to be edited or improved, you will get roughly 1% per lecture. Large contributions that need some small edits will get you somewhere between 0.5% and 1% bonus. Good smaller edits and contributions will get you around 0.5%. Things like fixing typos and formatting are appreciated but are not worth any extra marks. Bonus marks are granted at the TA&#039;s discretion and will show up in CuLearn.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re not sure if something is appropriate to be added to the wiki, or you have a question about the bonus marks, ask a TA.&lt;/div&gt;</summary>
		<author><name>Jagger</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Contributing:Operating_Systems_(Fall_2017)&amp;diff=21047</id>
		<title>Contributing:Operating Systems (Fall 2017)</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Contributing:Operating_Systems_(Fall_2017)&amp;diff=21047"/>
		<updated>2017-09-28T16:05:53Z</updated>

		<summary type="html">&lt;p&gt;Jagger: /* Contributing Notes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Contributing Notes=&lt;br /&gt;
&lt;br /&gt;
Extra credit is available for students who contribute lecture notes to the class wiki. You can earn up to an additive 4% bonus to your final grade by contributing notes and improving existing notes.&lt;br /&gt;
&lt;br /&gt;
==How to contribute==&lt;br /&gt;
First you need to create an account to edit the wiki. Email Jagger De Leo or Anil Somayaji to have an account made for you.&lt;br /&gt;
&lt;br /&gt;
Then log in and hit the edit button on the lecture page you want to contribute to.&lt;br /&gt;
&lt;br /&gt;
==What to contribute==&lt;br /&gt;
* Bullet point summaries of topics covered in class&lt;br /&gt;
* Code samples from class plus comments or extra explanation&lt;br /&gt;
* Time marks to important points in lecture audio/videos&lt;br /&gt;
* Links to reliable supplementary information (e.g. page numbers in &#039;&#039;Operating Systems: Three Easy Pieces&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: read up on how Mediawiki formatting works before editing, and use the &#039;&#039;Show Preview&#039;&#039; button before saving your edits.&lt;br /&gt;
&lt;br /&gt;
==How do I get my bonus marks?==&lt;br /&gt;
TAs will be monitoring your changes and will see what you have added. If you make significant contributions that do not need to be edited or improved, you will get roughly 1% per lecture. Large contributions that need some small edits will get you somewhere between 0.5% and 1% bonus. Good smaller edits and contributions will get you around 0.5%. Things like fixing typos and formatting are appreciated but are not worth any extra marks. Bonus marks are granted at the TA&#039;s discretion and will show up in CuLearn.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re not sure if something is appropriate to be added to the wiki, or you have a question about the bonus marks, ask a TA.&lt;/div&gt;</summary>
		<author><name>Jagger</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Operating_Systems_(Fall_2017)&amp;diff=21046</id>
		<title>Operating Systems (Fall 2017)</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Operating_Systems_(Fall_2017)&amp;diff=21046"/>
		<updated>2017-09-28T16:03:26Z</updated>

		<summary type="html">&lt;p&gt;Jagger: Add link to Contributing:Operating_Systems_(Fall_2017)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Course Outline==&lt;br /&gt;
&lt;br /&gt;
[[Operating Systems (Fall 2017) Course Outline|Here]] is the course outline for COMP 3000: Operating Systems.&lt;br /&gt;
&lt;br /&gt;
==Lectures and Exams==&lt;br /&gt;
&lt;br /&gt;
Note that the topics below are primarily chapters from the class textbook, [http://pages.cs.wisc.edu/~remzi/OSTEP/ Operating Systems: Three Easy Pieces].  Note that while introductory and summary dialogues are not linked below, they are worth reading for an informal take on the material.&lt;br /&gt;
&lt;br /&gt;
The guidelines for contribution to the wiki can be [[Contributing:Operating_Systems_(Fall_2017)|found here]].&lt;br /&gt;
&lt;br /&gt;
Assigned readings are subject to change, please check this page each week.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%;&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;&lt;br /&gt;
    &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;Date&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;&lt;br /&gt;
    &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;Topic&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Sept. 7&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 1|Lecture 1]]: [http://pages.cs.wisc.edu/~remzi/OSTEP/intro.pdf Introduction]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Sept. 12&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 2|Lecture 2]]: [http://pages.cs.wisc.edu/~remzi/OSTEP/cpu-intro.pdf Processes], [http://pages.cs.wisc.edu/~remzi/OSTEP/cpu-api.pdf Process API]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Sept. 14&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 3|Lecture 3]]: [http://pages.cs.wisc.edu/~remzi/OSTEP/cpu-mechanisms.pdf Limited Direct Execution], [http://pages.cs.wisc.edu/~remzi/OSTEP/cpu-sched.pdf CPU Scheduling], [http://pages.cs.wisc.edu/~remzi/OSTEP/cpu-sched-mlfq.pdf MLFQ]  &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Sept. 19&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 4|Lecture 4]]: [http://pages.cs.wisc.edu/~remzi/OSTEP/vm-intro.pdf Address Spaces], [http://pages.cs.wisc.edu/~remzi/OSTEP/vm-api.pdf Memory API]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Sept. 21&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 5|Lecture 5]]: [http://pages.cs.wisc.edu/~remzi/OSTEP/file-disks.pdf Hard Disk Drives], [http://pages.cs.wisc.edu/~remzi/OSTEP/file-intro.pdf File and Directories]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Sept. 26&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 6|Lecture 6]]: [http://pages.cs.wisc.edu/~remzi/OSTEP/file-devices.pdf I/O Devices], [http://pages.cs.wisc.edu/~remzi/OSTEP/file-journaling.pdf FSCK and Journaling]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Sept. 28&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 7|Lecture 7]]: [http://pages.cs.wisc.edu/~remzi/OSTEP/file-implementation.pdf File System Implementation]&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Oct. 3&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 8|Lecture 8]]: Assignment/Tutorial help session (Akhil)&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Oct. 5&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 9|Lecture 9]]: [http://pages.cs.wisc.edu/~remzi/OSTEP/threads-intro.pdf Concurrency and Threads], [http://pages.cs.wisc.edu/~remzi/OSTEP/threads-locks.pdf Locks]&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Oct. 10&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 10|Lecture 10]]: [http://pages.cs.wisc.edu/~remzi/OSTEP/threads-locks-usage.pdf Concurrent Data Structures], [http://pages.cs.wisc.edu/~remzi/OSTEP/threads-sema.pdf Semaphores]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Oct. 12&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 11|Lecture 11]]: [http://pages.cs.wisc.edu/~remzi/OSTEP/vm-mechanism.pdf Address Translation], [http://pages.cs.wisc.edu/~remzi/OSTEP/vm-tlbs.pdf TLBs]&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Oct. 17&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 12|Lecture 12]]: [http://pages.cs.wisc.edu/~remzi/OSTEP/vm-segmentation.pdf Segmentation], [http://pages.cs.wisc.edu/~remzi/OSTEP/vm-freespace.pdf Free space management]&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Oct. 19&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 13|Lecture 13]]: [http://pages.cs.wisc.edu/~remzi/OSTEP/vm-paging.pdf Paging]&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Oct. 31&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 14|Lecture 14]]: Midterm Review&amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Nov. 2&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 15|Lecture 15]]: Midterm Exam&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Nov. 7&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 16|Lecture 16]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Nov. 9&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 17|Lecture 17]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Nov. 14&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 18|Lecture 18]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Nov. 16&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 19|Lecture 19]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Nov. 21&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 20|Lecture 20]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Nov. 23&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 21|Lecture 21]]: TBD (US Thanksgiving)&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Nov. 28&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 22|Lecture 22]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Nov. 30&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 23|Lecture 23]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Dec. 5&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 24|Lecture 24]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Dec. 7&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F Lecture 25|Lecture 25]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Tutorials==&lt;br /&gt;
&lt;br /&gt;
Each week you will get a progress grade from 0-4, given to you by a TA.  If you are being diligent, you should be able to get 4&#039;s every week.  The easiest way to get your grade is to come to tutorial and meet with your TA; alternately, you can meet a TA in their office hours or, at their discretion, discuss things with them online.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%;&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;&lt;br /&gt;
    &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;Date&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;&lt;br /&gt;
    &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;Tutorials&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Sept. 18,20&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F: Tutorial 1|Processes and System Calls]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Sept. 25, 27&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F: Tutorial 2|3000shell.c]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Oct. 2, 4&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F: Tutorial 3|TBA]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Oct. 16, 18&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F: Tutorial 4|TBA]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Nov. 6, 8&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F: Tutorial 5|TBA]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Nov. 13, 15&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F: Tutorial 6|TBA]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Nov. 20, 22&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F: Tutorial 7|TBA]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Nov. 27, 29&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F: Tutorial 8|TBA]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Assignments==&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%;&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;&lt;br /&gt;
    &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;Due Date&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;&lt;br /&gt;
    &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;Assignments&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Oct. 9&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F: Assignment 1|Assignment 1]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Oct. 23&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F: Assignment 2|Assignment 2]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Nov. 20&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F: Assignment 3|Assignment 3]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Dec. 4&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[Operating Systems 2017F: Assignment 4|Assignment 4]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Course Software==&lt;br /&gt;
&lt;br /&gt;
In this course we will primarily working with [http://www.ubuntu.com/ Ubuntu], a widely-used family of Linux distributions.   We will be using Ubuntu Server on the SCS&#039;s [http://openstack.scs.carleton.ca/ Openstack installation] (accessible only from the Carleton network).&lt;br /&gt;
&lt;br /&gt;
You may use other Linux distributions to complete the assigned work; there will be differences, however, in some aspects (such as installing software), particularly if you use a distribution not based on Ubuntu or Debian.&lt;/div&gt;</summary>
		<author><name>Jagger</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Contributing:Operating_Systems_(Fall_2017)&amp;diff=21045</id>
		<title>Contributing:Operating Systems (Fall 2017)</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Contributing:Operating_Systems_(Fall_2017)&amp;diff=21045"/>
		<updated>2017-09-28T15:55:02Z</updated>

		<summary type="html">&lt;p&gt;Jagger: Initial creation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Contributing Notes=&lt;br /&gt;
&lt;br /&gt;
Extra credit is available for students who contribute lecture notes to the class wiki. You can earn up to an additive 4% bonus to your final grade.&lt;br /&gt;
&lt;br /&gt;
==How to contribute==&lt;br /&gt;
First you need to create an account to edit the wiki. Email Jagger De Leo or Anil Somayaji to have an account made for you.&lt;br /&gt;
&lt;br /&gt;
Then log in and hit the edit button on the lecture page you want to contribute to.&lt;br /&gt;
&lt;br /&gt;
==What to contribute==&lt;br /&gt;
* Bullet point summaries of topics covered in class&lt;br /&gt;
* Code samples from class plus comments or extra explanation&lt;br /&gt;
* Time marks to important points in lecture audio/videos&lt;br /&gt;
* Links to reliable supplementary information (e.g. page numbers in &#039;&#039;Operating Systems: Three Easy Pieces&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Important&#039;&#039;&#039;: read up on how Mediawiki formatting works before editing, and use the &#039;&#039;Show Preview&#039;&#039; button before saving your edits.&lt;br /&gt;
&lt;br /&gt;
==How do I get my bonus marks?==&lt;br /&gt;
TAs will be monitoring your changes and will see what you have added. If you make significant contributions that do not need to be edited or improved, you will get roughly 1% per lecture. Large contributions that need some small edits will get you somewhere between 0.5% and 1% bonus. Good smaller edits and contributions will get you around 0.5%. Things like fixing typos and formatting are appreciated but are not worth any extra marks. Bonus marks are granted at the TA&#039;s discretion and will show up in CuLearn.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re not sure if something is appropriate to be added to the wiki, or you have a question about the bonus marks, ask a TA.&lt;/div&gt;</summary>
		<author><name>Jagger</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Operating_Systems_2017F_Lecture_1&amp;diff=21043</id>
		<title>Operating Systems 2017F Lecture 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Operating_Systems_2017F_Lecture_1&amp;diff=21043"/>
		<updated>2017-09-28T04:56:04Z</updated>

		<summary type="html">&lt;p&gt;Jagger: Add notes (thanks Shaun!)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Audio==&lt;br /&gt;
&lt;br /&gt;
Audio from the lecture given on September 7, 2017 [http://homeostasis.scs.carleton.ca/~soma/os-2017f/lectures/comp3000-2017f-lec01-07Sep2017.m4a is now available].&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&#039;&#039;The following notes are based on those provided by a student. They do not necessarily cover all material. If you think something is missing, let us know!&#039;&#039;&lt;br /&gt;
==== What is an Operating System (OS)? ====&lt;br /&gt;
&lt;br /&gt;
* Resource Manager for all applications.&lt;br /&gt;
* Abstracts the hardware and provides an easy way for programs to access the virtualized hardware&lt;br /&gt;
&lt;br /&gt;
====Where did Operating Systems begin?====&lt;br /&gt;
* Started in the 60&#039;s when mainframes became popular&lt;br /&gt;
&lt;br /&gt;
====What is the goal of an Operating System?====&lt;br /&gt;
* Facilitates the sharing of resources (Hard disks, CPU, RAM, etc.) among many concurrent programs.&lt;br /&gt;
* Uses time slices to allocate resources and enforces usage rules so programs don&#039;t hog 100% of the available resources. Time was equivalent to cash during early computing.&lt;br /&gt;
* Store files persistently[[#ref1|&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;]]&lt;br /&gt;
* Handle problems related to concurrency (multiple programs running at the same time).[[#ref1|&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
===Architecture===&lt;br /&gt;
* Kernel:&lt;br /&gt;
** This is the first program that launches when we turn on a computer. The kernel provides the hardware abstraction and is the part of the operating system that dictates how the hardware is managed and accessed. The Kernel has absolute power over the hardware.&lt;br /&gt;
** The kernel controls program execution, for example with signals&lt;br /&gt;
*** Kill: stops execution immediately&lt;br /&gt;
*** Terminate: allows the program to stop gracefully&lt;br /&gt;
*** Stop: pauses execution&lt;br /&gt;
*** Continue: resumes execution&lt;br /&gt;
* Hypervisor:&lt;br /&gt;
** A Kernel that manages other kernels. An operating system may have several kernels that perform specific tasks; a hypervisor manages these kernels.&lt;br /&gt;
* Processes (An executable):&lt;br /&gt;
** One or more threads plus address space&lt;br /&gt;
** A thread is a function that runs in the same memory space as other functions&lt;br /&gt;
* Memory:&lt;br /&gt;
** A contiguous array of bytes. Every byte has a physical address.&lt;br /&gt;
** On modern machines, memory is virtualized so that it can be divided into segments. All of the segments are mapped to the physical memory space.&lt;br /&gt;
** Every time an operation occurs the memory map (MMU) is consulted.&lt;br /&gt;
** Each program is given a segment of memory; this is called virtual memory. All of the programs share the same physical memory.&lt;br /&gt;
* Interrupts:&lt;br /&gt;
** Allows the kernel to interrupt the CPU when other tasks take priority. The kernel uses a table to manage the various types of interrupts available. One example is a timer interrupt, it determines CPU time usage.&lt;br /&gt;
* Signals:&lt;br /&gt;
** Inter-Process communication; How the kernel communicates with a process.&lt;br /&gt;
** Can be initiated by the kernel or sent by programs to control other processes.&lt;br /&gt;
* System Calls:&lt;br /&gt;
** Special calls to the kernel. This is how the application asks for more resources.&lt;br /&gt;
** Not a function call, though higher level languages may wrap them in convenience functions.&lt;br /&gt;
** When called, transfer control to the OS and raises the hardware privilege level[[#ref1|&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;span id=ref1&amp;gt;1.&amp;lt;/span&amp;gt; Arpaci-Dusseau, Operating Systems: Three Easy Pieces, &#039;&#039;Introduction&#039;&#039;, p. 11-13 http://pages.cs.wisc.edu/~remzi/OSTEP/intro.pdf&lt;/div&gt;</summary>
		<author><name>Jagger</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Operating_Systems_2017F:_Tutorial_1&amp;diff=21022</id>
		<title>Operating Systems 2017F: Tutorial 1</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Operating_Systems_2017F:_Tutorial_1&amp;diff=21022"/>
		<updated>2017-09-20T17:02:45Z</updated>

		<summary type="html">&lt;p&gt;Jagger: Fix small typo: execp to execvp&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In this tutorial you will be learning about 1) the difference between system calls, function calls, and library calls and 2) how processes are created.&lt;br /&gt;
&lt;br /&gt;
==Getting started==&lt;br /&gt;
&lt;br /&gt;
To do the following exercises, bring up a terminal on a system running Linux, preferably Ubuntu Linux 16.04.&lt;br /&gt;
&lt;br /&gt;
For further help, please talk to the TAs in your lab.&lt;br /&gt;
&lt;br /&gt;
Local copies of Ubuntu Linux 16.04 [http://homeostasis.scs.carleton.ca/~soma/os-2017f/ubuntu-16.04.3-desktop-amd64.iso Desktop] and [http://homeostasis.scs.carleton.ca/~soma/os-2017f/ubuntu-16.04.3-server-amd64.iso Server] are available.  Download the Desktop version if you have a fast enough machine and want to use a GUI.  If your machine is slower, download the Server version, it is smaller and will take fewer resources (but only has a text interface by default).&lt;br /&gt;
&lt;br /&gt;
==Function calls, library calls, and system calls==&lt;br /&gt;
&lt;br /&gt;
For [http://homeostasis.scs.carleton.ca/~soma/os-2017f/code/tut1/hello.c hello.c], [http://homeostasis.scs.carleton.ca/~soma/os-2017f/code/tut1/syscall-hello.c syscall-hello.c], and later [http://homeostasis.scs.carleton.ca/~soma/os-2017f/code/tut1/csimpleshell.c csimpleshell.c] (after you&#039;ve done the part below on csimpleshell) do the following (substituting the appropriate source file for prog.c):&lt;br /&gt;
# Compile the program prog.c using &amp;lt;tt&amp;gt;gcc -O2 prog.c -o prog-dyn&amp;lt;/tt&amp;gt; and run prog-dyn.  What does it do?&lt;br /&gt;
# Statically compile and optimize prog.c by running &amp;lt;tt&amp;gt;gcc -O2 -static prog.c -o prog-static&amp;lt;/tt&amp;gt;.  How does the size compare with &amp;lt;tt&amp;gt;prog&amp;lt;/tt&amp;gt;?&lt;br /&gt;
# See what system calls prog-static produces by running &amp;lt;tt&amp;gt;strace -o syscalls-static.log ./prog-static&amp;lt;/tt&amp;gt;.  Do the same for &amp;lt;tt&amp;gt;prog-dyn&amp;lt;/tt&amp;gt;.  Which version generates more system calls?&lt;br /&gt;
# See what library calls prog-static produces by running &amp;lt;tt&amp;gt;ltrace -o library-static.log ./prog-static&amp;lt;/tt&amp;gt;.  Do the same for &amp;lt;tt&amp;gt;prog-dyn&amp;lt;/tt&amp;gt;.  Which version generates more library calls?  (If ltrace isn&#039;t installed, run &amp;lt;tt&amp;gt;sudo apt-get install ltrace&amp;lt;/tt&amp;gt;)&lt;br /&gt;
# Using the &amp;lt;tt&amp;gt;nm&amp;lt;/tt&amp;gt; command, see what symbols are defined in prog-static and prog-dyn.&lt;br /&gt;
# Run the command &amp;lt;tt&amp;gt;gcc -c -O2 prog.c&amp;lt;/tt&amp;gt; to produce an object file.  What file was produced?  What symbols does it define?&lt;br /&gt;
# Look at the assembly code of the program by running &amp;lt;tt&amp;gt;gcc -S -O2 prog.c&amp;lt;/tt&amp;gt;.  What file was produced?  Identify the following:&lt;br /&gt;
#* A function call&lt;br /&gt;
#* A system call (if any)&lt;br /&gt;
#* A global/static variable (if any)&lt;br /&gt;
#* A local variable&lt;br /&gt;
# Disassemble the object file using &amp;lt;tt&amp;gt;objdump -d&amp;lt;/tt&amp;gt;.  How does this disassembly compare with the output from gcc -S?&lt;br /&gt;
# Examine the headers of object file, dynamically linked executable, and the statically linked executable using &amp;lt;tt&amp;gt;objdump -h&amp;lt;/tt&amp;gt;&lt;br /&gt;
# Examine the contents of object file, dynamically linked executable, and the statically linked executable using &amp;lt;tt&amp;gt;objdump -s&amp;lt;/tt&amp;gt;&lt;br /&gt;
# Re-run all of the previous gcc commands adding the &amp;quot;-v&amp;quot; flag.  What is all of that output?&lt;br /&gt;
# (optional) Look up the documentation for each of the system calls made by the static versions of the programs.  You may need to append a 2 or 3 to the manpage invocation, e.g. &amp;quot;man 2 write&amp;quot; gets you the write system call documentation.&lt;br /&gt;
&lt;br /&gt;
==Creating processes, running executables==&lt;br /&gt;
&lt;br /&gt;
For this part you will be playing with and modifying [http://homeostasis.scs.carleton.ca/~soma/os-2017f/code/tut1/csimpleshell.c csimpleshell.c] by [https://web.archive.org/web/20170223203852/http://rik0.altervista.org/snippets/csimpleshell.html Enrico Franchi].  The source is also listed below.&lt;br /&gt;
&lt;br /&gt;
# In csimpleshell, change the prompt to be the current user (e.g., &amp;quot;student $&amp;quot;), as reported by the USER environment variable.&lt;br /&gt;
# Make csimpleshell not call &amp;lt;tt&amp;gt;wait()&amp;lt;/tt&amp;gt; on the command if there is an &amp;amp; as the last argument to a command; instead, just return another prompt.  Can you see the zombies that are now produced?&lt;br /&gt;
# Change the &amp;lt;tt&amp;gt;execvp()&amp;lt;/tt&amp;gt; call to [http://pubs.opengroup.org/onlinepubs/9699919799/functions/execve.html execve()].  Where do you get the extra argument?  (NOTE: When you switch to execve() you will have to specify the full path to commands, e.g. /bin/ls not ls.)&lt;br /&gt;
# Add an environment variable called LASTCOMMAND that contains the last command that was executed by csimpleshell.  This environment variable should be passed on to each new program that is run.  How can you check that your code works?&lt;br /&gt;
# Use [http://pubs.opengroup.org/onlinepubs/9699919799/functions/sigaction.html sigaction()] and [http://pubs.opengroup.org/onlinepubs/9699919799/functions/wait.html waitpid()] to create a signal handler for SIGCHLD that prevents the creation of zombies for background commands.&lt;br /&gt;
# (Advanced) Implement I/O redirection for STDIN (&amp;lt;) and STDOUT (&amp;gt;).  Do the same for arbitrary file descriptors (e.g., 2&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&lt;br /&gt;
===hello.c===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]) {&lt;br /&gt;
&lt;br /&gt;
        printf(&amp;quot;Hello world!\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===syscall-hello.c===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/syscall.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
char *buf = &amp;quot;Hello world!\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv) {&lt;br /&gt;
        size_t result;&lt;br /&gt;
&lt;br /&gt;
        /* &amp;quot;man 2 write&amp;quot; to see arguments to write syscall */&lt;br /&gt;
        result = syscall(SYS_write, 1, buf, 13);&lt;br /&gt;
&lt;br /&gt;
        return (int) result;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===csimpleshell.c===&lt;br /&gt;
&amp;lt;source line lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;errno.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
#define BUFFER_SIZE 1&amp;lt;&amp;lt;16&lt;br /&gt;
#define ARR_SIZE 1&amp;lt;&amp;lt;16&lt;br /&gt;
&lt;br /&gt;
void parse_args(char *buffer, char** args, &lt;br /&gt;
                size_t args_size, size_t *nargs)&lt;br /&gt;
{&lt;br /&gt;
    char *buf_args[args_size]; /* You need C99 */&lt;br /&gt;
    char **cp;&lt;br /&gt;
    char *wbuf;&lt;br /&gt;
    size_t i, j;&lt;br /&gt;
    &lt;br /&gt;
    wbuf=buffer;&lt;br /&gt;
    buf_args[0]=buffer; &lt;br /&gt;
    args[0] =buffer;&lt;br /&gt;
    &lt;br /&gt;
    for(cp=buf_args; (*cp=strsep(&amp;amp;wbuf, &amp;quot; \n\t&amp;quot;)) != NULL ;){&lt;br /&gt;
        if ((*cp != &#039;\0&#039;) &amp;amp;&amp;amp; (++cp &amp;gt;= &amp;amp;buf_args[args_size]))&lt;br /&gt;
            break;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    for (j=i=0; buf_args[i]!=NULL; i++){&lt;br /&gt;
        if(strlen(buf_args[i])&amp;gt;0)&lt;br /&gt;
            args[j++]=buf_args[i];&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    *nargs=j;&lt;br /&gt;
    args[j]=NULL;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[], char *envp[]){&lt;br /&gt;
    char buffer[BUFFER_SIZE];&lt;br /&gt;
    char *args[ARR_SIZE];&lt;br /&gt;
&lt;br /&gt;
    int *ret_status;&lt;br /&gt;
    size_t nargs;&lt;br /&gt;
    pid_t pid;&lt;br /&gt;
    &lt;br /&gt;
    while(1){&lt;br /&gt;
        printf(&amp;quot;$ &amp;quot;);&lt;br /&gt;
        fgets(buffer, BUFFER_SIZE, stdin);&lt;br /&gt;
        parse_args(buffer, args, ARR_SIZE, &amp;amp;nargs); &lt;br /&gt;
&lt;br /&gt;
        if (nargs==0) continue;&lt;br /&gt;
        if (!strcmp(args[0], &amp;quot;exit&amp;quot; )) exit(0);       &lt;br /&gt;
        pid = fork();&lt;br /&gt;
        if (pid){&lt;br /&gt;
            printf(&amp;quot;Waiting for child (%d)\n&amp;quot;, pid);&lt;br /&gt;
            pid = wait(ret_status);&lt;br /&gt;
            printf(&amp;quot;Child (%d) finished\n&amp;quot;, pid);&lt;br /&gt;
        } else {&lt;br /&gt;
            if( execvp(args[0], args)) {&lt;br /&gt;
                puts(strerror(errno));&lt;br /&gt;
                exit(127);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }    &lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jagger</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Operating_Systems_(Fall_2017)_Course_Outline&amp;diff=21011</id>
		<title>Operating Systems (Fall 2017) Course Outline</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Operating_Systems_(Fall_2017)_Course_Outline&amp;diff=21011"/>
		<updated>2017-09-18T14:54:05Z</updated>

		<summary type="html">&lt;p&gt;Jagger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Course Information==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Course Number:&#039;&#039;&#039; COMP 3000&lt;br /&gt;
*&#039;&#039;&#039;Term:&#039;&#039;&#039; Fall 2017&lt;br /&gt;
*&#039;&#039;&#039;Title:&#039;&#039;&#039; Operating Systems&lt;br /&gt;
*&#039;&#039;&#039;Institution:&#039;&#039;&#039; Carleton University, School of Computer Science&lt;br /&gt;
*&#039;&#039;&#039;Instructor:&#039;&#039;&#039; [http://people.scs.carleton.ca/~soma Anil Somayaji] (anil.somayaji at carleton.ca): Mon., Wed. 2:30-3:30 PM in HP 5137&lt;br /&gt;
*&#039;&#039;&#039;Teaching Assistants:&#039;&#039;&#039; (in new TA room 4125 HP)&lt;br /&gt;
**Jean-Elie Jean-Gilles (jeaneliejeangilles at cmail.carleton.ca): Tuesday and Thursday 2:30-3:30 PM&lt;br /&gt;
**Jagger De Leo (jagger.deleo at carleton.ca): Wed. 3:30-4:30 PM, Fri. 10:00-11:00 AM&lt;br /&gt;
**Yuting Wang (yvonnewang at cmail.carleton.ca): Tuesday and Wednesday 11:30-12:30 AM&lt;br /&gt;
*&#039;&#039;&#039;Lectures:&#039;&#039;&#039; Tues. and Thurs. 1:05-2:25 PM in AT 102&lt;br /&gt;
*&#039;&#039;&#039;Tutorials (in HP 4155):&#039;&#039;&#039;&amp;lt;br&amp;gt;Monday 11:35-12:55 PM&amp;lt;br&amp;gt;Monday 1:05-2:25 PM&amp;lt;br&amp;gt;Wednesday 8:35-9:55 AM&lt;br /&gt;
*&#039;&#039;&#039;Course Website&#039;&#039;&#039;: http://homeostasis.scs.carleton.ca/wiki/index.php/Operating_Systems_%28Fall_2017%29&lt;br /&gt;
&lt;br /&gt;
==Official Course Description==&lt;br /&gt;
&lt;br /&gt;
Operating system implementation course stressing fundamental issues in design and how they relate to modern computer architectures. Assignments involve the modification and extension of a multitasking operating system.&lt;br /&gt;
&lt;br /&gt;
==Learning Outcomes==&lt;br /&gt;
&lt;br /&gt;
By the end of this course, students should:&lt;br /&gt;
* be able to write C code that uses low-level Linux services and should be able to implement simple Linux kernel extensions (modules),&lt;br /&gt;
* have a strong conceptual model of how an operating system works that allows them to determine the relative role of application and operating system code when debugging software, and&lt;br /&gt;
* understand the basic use and architecture of virtual-machine based cloud architectures.&lt;br /&gt;
&lt;br /&gt;
Note that in order to achieve these objectives students should have come into this course with a strong background in C programming and general application development.&lt;br /&gt;
&lt;br /&gt;
==Grading==&lt;br /&gt;
&lt;br /&gt;
The marking scheme for this course is:&lt;br /&gt;
&lt;br /&gt;
* 20% for tutorial participation&lt;br /&gt;
* 20% for the assignments&lt;br /&gt;
* 25% for the midterm on November 2 (Thursday) during class&lt;br /&gt;
* 35% for the final exam (date TBA)&lt;br /&gt;
&lt;br /&gt;
I also calculate grades using alternative marking schemes at the end of the semester, assigning the highest grade for each student from any of the marking schemes.  Thus your final grade may be higher than might be suggested by strict following of the above scheme.&lt;br /&gt;
&lt;br /&gt;
==Communication==&lt;br /&gt;
&lt;br /&gt;
This wiki page is the canonical source of information on this course.  Please refer to it for updates.  When significant changes are made to this document it will be either announced in lecture and/or posted in the course discussion forum.&lt;br /&gt;
&lt;br /&gt;
Course discussions will be on [https://culearn.carleton.ca cuLearn].  While you may discuss assignments there, do not post outright answers to them.  You may post in either the Questions and Answers forum or the General Discussion forum.&lt;br /&gt;
&lt;br /&gt;
You may get an account on class wiki so you can edit content there.  Email Prof. Somayaji to get one with your preferred username and email address to which a password should be sent.  (Note this is not a requirement.)&lt;br /&gt;
&lt;br /&gt;
==Collaboration==&lt;br /&gt;
&lt;br /&gt;
Collaboration on all work is allowed except for the two tests. Collaboration, however, should be clearly acknowledged.&lt;br /&gt;
&lt;br /&gt;
For assignments, while you may get help from others and even collaboratively solve technical problems, the code and answers submitted should all be your own work.  For example, you may not divide an assignment into parts, give a part to another student or anyone else to solve, and then submit that work as your own.  You have to have participated in the creation of every part of your submitted work.  An easy way to make sure this happens is never share files regarding coursework or copy and paste answers into email.  Instead, meet together to work on an assignment and then separate to write up your solutions.&lt;br /&gt;
&lt;br /&gt;
The final project may be a group project, but again there it should be clearly documented what contribution was made by each group member.&lt;br /&gt;
&lt;br /&gt;
Similarity between submitted assignments and projects that has not been appropriately documented will be treated as plagiarism - the same as copying on a midterm or a final - and will be submitted to the Dean for disciplinary action.&lt;br /&gt;
&lt;br /&gt;
==Course Notes/Multimedia==&lt;br /&gt;
&lt;br /&gt;
Audio and sometimes video from lectures will be available via the [[Operating Systems (Fall 2017)|lecture pages on the main course website]].  These same pages will also contain notes.&lt;br /&gt;
&lt;br /&gt;
Do not rely upon the lectures and notes to cover all material related to this class.  You are expected to keep up with the assigned textbook readings and material covered in the tutorials.&lt;br /&gt;
&lt;br /&gt;
==Required Textbooks==&lt;br /&gt;
&lt;br /&gt;
The course will be using the textbook [http://pages.cs.wisc.edu/~remzi/OSTEP/ Operating Systems: Three Easy Pieces].  The chapters of this textbook are available for free online; you can also buy a full epub, PDF, or paper copy if you wish.&lt;br /&gt;
&lt;br /&gt;
Individual chapters will be linked with the lectures associated with them.  You should plan on reading the assigned chapters &#039;&#039;&#039;before&#039;&#039;&#039; coming to class, as the material in lectures will be easier to understand then.  The lectures are designed to supplement the textbook, not replace them.&lt;br /&gt;
&lt;br /&gt;
==Course Software==&lt;br /&gt;
&lt;br /&gt;
In this course we will primarily working with [http://www.lubuntu.net/ Lubuntu], a low-resource variant of [http://www.ubuntu.com/ Ubuntu] Linux distribution.  You may use other Linux distributions in the tutorials to complete the assigned work; there will be differences, however, in some aspects (such as installing software), particularly if you use a distribution not based on Ubuntu or Debian.&lt;br /&gt;
&lt;br /&gt;
==University Policies &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
===Undergraduate Academic Advisor===&lt;br /&gt;
&lt;br /&gt;
The undergraduate advisor for the School of Computer Science is available in Room&lt;br /&gt;
5302C HP, by telephone at 520-2600, ext. 4364 or by email at&lt;br /&gt;
undergraduate_advisor@scs.carleton.ca. The advisor can assist with information about&lt;br /&gt;
prerequisites and preclusions, course substitutions/equivalencies, understanding your&lt;br /&gt;
academic audit and the remaining requirements for graduation. The undergraduate&lt;br /&gt;
advisor will also refer students to appropriate resources such as the Science Student&lt;br /&gt;
Success Centre, Learning Support Services and the Writing Tutorial Services.&lt;br /&gt;
&lt;br /&gt;
===Student Academic Integrity Policy===&lt;br /&gt;
&lt;br /&gt;
Every student should be familiar with the Carleton University student academic integrity policy. A student found in violation of academic integrity standards may be awarded penalties which range from a reprimand to receiving a grade of F in the course or even being expelled from the program or University. Some examples of offences are: plagiarism and unauthorized co-operation or collaboration. Information on this policy may be found in the Undergraduate Calendar.&lt;br /&gt;
&lt;br /&gt;
===Plagiarism===&lt;br /&gt;
&lt;br /&gt;
As defined by Senate, &amp;quot;plagiarism is presenting, whether intentional or not, the ideas, expression of ideas or work of others as one&#039;s own&amp;quot;. Such reported offences will be reviewed by the office of the Dean of Science.&lt;br /&gt;
&lt;br /&gt;
===Unauthorized Co-operation or Collaboration===&lt;br /&gt;
&lt;br /&gt;
Senate policy states that &amp;quot;to ensure fairness and equity in assessment of term work, students shall not co-operate or collaborate in the completion of an academic assignment, in whole or in part, when the instructor has indicated that the assignment is to be completed on an individual basis&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Please see above for the specific collaboration policy for this course.&lt;br /&gt;
&lt;br /&gt;
===Academic Accommodations for Students with Disabilities===&lt;br /&gt;
&lt;br /&gt;
The Paul Menton Centre for Students with Disabilities (PMC) provides services to students with Learning Disabilities (LD), psychiatric/mental health disabilities, Attention Deficit Hyperactivity Disorder (ADHD), Autism Spectrum Disorders (ASD), chronic medical conditions, and impairments in mobility, hearing, and vision. If you have a disability requiring academic accommodations in this course, please contact PMC at 613-520-6608 or pmc@carleton.ca for a formal evaluation. If you are already registered with the PMC, contact your PMC coordinator to send me your Letter of Accommodation at the beginning of the term, and no later than two weeks before the first in-class scheduled test or exam requiring accommodation (if applicable). After requesting accommodation from PMC, meet with me to ensure accommodation arrangements are made. Please consult the PMC website for the deadline to request accommodations for the formally-scheduled exam (if applicable) at https://www.carleton.ca/pmc/new-and-current-students/dates-and-deadlines&lt;br /&gt;
&lt;br /&gt;
===Religious Obligation===&lt;br /&gt;
&lt;br /&gt;
Write to the instructor with any requests for academic accommodation during the first two weeks of class, or as soon as possible after the need for accommodation is known to exist. For more details visit the Equity Services website: https://www.carleton.ca/equity/&lt;br /&gt;
&lt;br /&gt;
===Pregnancy Obligation===&lt;br /&gt;
&lt;br /&gt;
Write to the instructor with any requests for academic accommodation during the first two weeks of class, or as soon as possible after the need for accommodation is known to exist. For more details visit the Equity Services website: https://www.carleton.ca/equity/&lt;br /&gt;
&lt;br /&gt;
===Medical Certificate===&lt;br /&gt;
&lt;br /&gt;
The following is a link to the official medical certificate accepted by Carleton University for the deferral of final examinations or assignments in undergraduate courses. To access the form, please go to https://www.carleton.ca/registrar/forms&lt;/div&gt;</summary>
		<author><name>Jagger</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Operating_Systems_(Fall_2017)_Course_Outline&amp;diff=21009</id>
		<title>Operating Systems (Fall 2017) Course Outline</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Operating_Systems_(Fall_2017)_Course_Outline&amp;diff=21009"/>
		<updated>2017-09-18T14:50:28Z</updated>

		<summary type="html">&lt;p&gt;Jagger: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Course Information==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Course Number:&#039;&#039;&#039; COMP 3000&lt;br /&gt;
*&#039;&#039;&#039;Term:&#039;&#039;&#039; Fall 2017&lt;br /&gt;
*&#039;&#039;&#039;Title:&#039;&#039;&#039; Operating Systems&lt;br /&gt;
*&#039;&#039;&#039;Institution:&#039;&#039;&#039; Carleton University, School of Computer Science&lt;br /&gt;
*&#039;&#039;&#039;Instructor:&#039;&#039;&#039; [http://people.scs.carleton.ca/~soma Anil Somayaji] (anil.somayaji at carleton.ca): Mon., Wed. 2:30-3:30 PM in HP 5137&lt;br /&gt;
*&#039;&#039;&#039;Teaching Assistants:&#039;&#039;&#039; (in new TA room 4125 HP)&amp;lt;br&amp;gt;Jean-Elie Jean-Gilles (jeaneliejeangilles at cmail.carleton.ca): Tuesday and Thursday 2:30-3:30 PM&amp;lt;br&amp;gt;Jagger De Leo (jagger.deleo at carleton.ca): Wed. 3:30-4:30 PM, Fri. 10:00-11:00 AM&amp;lt;br&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Lectures:&#039;&#039;&#039; Tues. and Thurs. 1:05-2:25 PM in AT 102&lt;br /&gt;
*&#039;&#039;&#039;Tutorials (in HP 4155):&#039;&#039;&#039;&amp;lt;br&amp;gt;Monday 11:35-12:55 PM&amp;lt;br&amp;gt;Monday 1:05-2:25 PM&amp;lt;br&amp;gt;Wednesday 8:35-9:55 AM&lt;br /&gt;
*&#039;&#039;&#039;Course Website&#039;&#039;&#039;: http://homeostasis.scs.carleton.ca/wiki/index.php/Operating_Systems_%28Fall_2017%29&lt;br /&gt;
&lt;br /&gt;
==Official Course Description==&lt;br /&gt;
&lt;br /&gt;
Operating system implementation course stressing fundamental issues in design and how they relate to modern computer architectures. Assignments involve the modification and extension of a multitasking operating system.&lt;br /&gt;
&lt;br /&gt;
==Learning Outcomes==&lt;br /&gt;
&lt;br /&gt;
By the end of this course, students should:&lt;br /&gt;
* be able to write C code that uses low-level Linux services and should be able to implement simple Linux kernel extensions (modules),&lt;br /&gt;
* have a strong conceptual model of how an operating system works that allows them to determine the relative role of application and operating system code when debugging software, and&lt;br /&gt;
* understand the basic use and architecture of virtual-machine based cloud architectures.&lt;br /&gt;
&lt;br /&gt;
Note that in order to achieve these objectives students should have come into this course with a strong background in C programming and general application development.&lt;br /&gt;
&lt;br /&gt;
==Grading==&lt;br /&gt;
&lt;br /&gt;
The marking scheme for this course is:&lt;br /&gt;
&lt;br /&gt;
* 20% for tutorial participation&lt;br /&gt;
* 20% for the assignments&lt;br /&gt;
* 25% for the midterm on November 2 (Thursday) during class&lt;br /&gt;
* 35% for the final exam (date TBA)&lt;br /&gt;
&lt;br /&gt;
I also calculate grades using alternative marking schemes at the end of the semester, assigning the highest grade for each student from any of the marking schemes.  Thus your final grade may be higher than might be suggested by strict following of the above scheme.&lt;br /&gt;
&lt;br /&gt;
==Communication==&lt;br /&gt;
&lt;br /&gt;
This wiki page is the canonical source of information on this course.  Please refer to it for updates.  When significant changes are made to this document it will be either announced in lecture and/or posted in the course discussion forum.&lt;br /&gt;
&lt;br /&gt;
Course discussions will be on [https://culearn.carleton.ca cuLearn].  While you may discuss assignments there, do not post outright answers to them.  You may post in either the Questions and Answers forum or the General Discussion forum.&lt;br /&gt;
&lt;br /&gt;
You may get an account on class wiki so you can edit content there.  Email Prof. Somayaji to get one with your preferred username and email address to which a password should be sent.  (Note this is not a requirement.)&lt;br /&gt;
&lt;br /&gt;
==Collaboration==&lt;br /&gt;
&lt;br /&gt;
Collaboration on all work is allowed except for the two tests. Collaboration, however, should be clearly acknowledged.&lt;br /&gt;
&lt;br /&gt;
For assignments, while you may get help from others and even collaboratively solve technical problems, the code and answers submitted should all be your own work.  For example, you may not divide an assignment into parts, give a part to another student or anyone else to solve, and then submit that work as your own.  You have to have participated in the creation of every part of your submitted work.  An easy way to make sure this happens is never share files regarding coursework or copy and paste answers into email.  Instead, meet together to work on an assignment and then separate to write up your solutions.&lt;br /&gt;
&lt;br /&gt;
The final project may be a group project, but again there it should be clearly documented what contribution was made by each group member.&lt;br /&gt;
&lt;br /&gt;
Similarity between submitted assignments and projects that has not been appropriately documented will be treated as plagiarism - the same as copying on a midterm or a final - and will be submitted to the Dean for disciplinary action.&lt;br /&gt;
&lt;br /&gt;
==Course Notes/Multimedia==&lt;br /&gt;
&lt;br /&gt;
Audio and sometimes video from lectures will be available via the [[Operating Systems (Fall 2017)|lecture pages on the main course website]].  These same pages will also contain notes.&lt;br /&gt;
&lt;br /&gt;
Do not rely upon the lectures and notes to cover all material related to this class.  You are expected to keep up with the assigned textbook readings and material covered in the tutorials.&lt;br /&gt;
&lt;br /&gt;
==Required Textbooks==&lt;br /&gt;
&lt;br /&gt;
The course will be using the textbook [http://pages.cs.wisc.edu/~remzi/OSTEP/ Operating Systems: Three Easy Pieces].  The chapters of this textbook are available for free online; you can also buy a full epub, PDF, or paper copy if you wish.&lt;br /&gt;
&lt;br /&gt;
Individual chapters will be linked with the lectures associated with them.  You should plan on reading the assigned chapters &#039;&#039;&#039;before&#039;&#039;&#039; coming to class, as the material in lectures will be easier to understand then.  The lectures are designed to supplement the textbook, not replace them.&lt;br /&gt;
&lt;br /&gt;
==Course Software==&lt;br /&gt;
&lt;br /&gt;
In this course we will primarily working with [http://www.lubuntu.net/ Lubuntu], a low-resource variant of [http://www.ubuntu.com/ Ubuntu] Linux distribution.  You may use other Linux distributions in the tutorials to complete the assigned work; there will be differences, however, in some aspects (such as installing software), particularly if you use a distribution not based on Ubuntu or Debian.&lt;br /&gt;
&lt;br /&gt;
==University Policies &amp;amp; Resources==&lt;br /&gt;
&lt;br /&gt;
===Undergraduate Academic Advisor===&lt;br /&gt;
&lt;br /&gt;
The undergraduate advisor for the School of Computer Science is available in Room&lt;br /&gt;
5302C HP, by telephone at 520-2600, ext. 4364 or by email at&lt;br /&gt;
undergraduate_advisor@scs.carleton.ca. The advisor can assist with information about&lt;br /&gt;
prerequisites and preclusions, course substitutions/equivalencies, understanding your&lt;br /&gt;
academic audit and the remaining requirements for graduation. The undergraduate&lt;br /&gt;
advisor will also refer students to appropriate resources such as the Science Student&lt;br /&gt;
Success Centre, Learning Support Services and the Writing Tutorial Services.&lt;br /&gt;
&lt;br /&gt;
===Student Academic Integrity Policy===&lt;br /&gt;
&lt;br /&gt;
Every student should be familiar with the Carleton University student academic integrity policy. A student found in violation of academic integrity standards may be awarded penalties which range from a reprimand to receiving a grade of F in the course or even being expelled from the program or University. Some examples of offences are: plagiarism and unauthorized co-operation or collaboration. Information on this policy may be found in the Undergraduate Calendar.&lt;br /&gt;
&lt;br /&gt;
===Plagiarism===&lt;br /&gt;
&lt;br /&gt;
As defined by Senate, &amp;quot;plagiarism is presenting, whether intentional or not, the ideas, expression of ideas or work of others as one&#039;s own&amp;quot;. Such reported offences will be reviewed by the office of the Dean of Science.&lt;br /&gt;
&lt;br /&gt;
===Unauthorized Co-operation or Collaboration===&lt;br /&gt;
&lt;br /&gt;
Senate policy states that &amp;quot;to ensure fairness and equity in assessment of term work, students shall not co-operate or collaborate in the completion of an academic assignment, in whole or in part, when the instructor has indicated that the assignment is to be completed on an individual basis&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Please see above for the specific collaboration policy for this course.&lt;br /&gt;
&lt;br /&gt;
===Academic Accommodations for Students with Disabilities===&lt;br /&gt;
&lt;br /&gt;
The Paul Menton Centre for Students with Disabilities (PMC) provides services to students with Learning Disabilities (LD), psychiatric/mental health disabilities, Attention Deficit Hyperactivity Disorder (ADHD), Autism Spectrum Disorders (ASD), chronic medical conditions, and impairments in mobility, hearing, and vision. If you have a disability requiring academic accommodations in this course, please contact PMC at 613-520-6608 or pmc@carleton.ca for a formal evaluation. If you are already registered with the PMC, contact your PMC coordinator to send me your Letter of Accommodation at the beginning of the term, and no later than two weeks before the first in-class scheduled test or exam requiring accommodation (if applicable). After requesting accommodation from PMC, meet with me to ensure accommodation arrangements are made. Please consult the PMC website for the deadline to request accommodations for the formally-scheduled exam (if applicable) at https://www.carleton.ca/pmc/new-and-current-students/dates-and-deadlines&lt;br /&gt;
&lt;br /&gt;
===Religious Obligation===&lt;br /&gt;
&lt;br /&gt;
Write to the instructor with any requests for academic accommodation during the first two weeks of class, or as soon as possible after the need for accommodation is known to exist. For more details visit the Equity Services website: https://www.carleton.ca/equity/&lt;br /&gt;
&lt;br /&gt;
===Pregnancy Obligation===&lt;br /&gt;
&lt;br /&gt;
Write to the instructor with any requests for academic accommodation during the first two weeks of class, or as soon as possible after the need for accommodation is known to exist. For more details visit the Equity Services website: https://www.carleton.ca/equity/&lt;br /&gt;
&lt;br /&gt;
===Medical Certificate===&lt;br /&gt;
&lt;br /&gt;
The following is a link to the official medical certificate accepted by Carleton University for the deferral of final examinations or assignments in undergraduate courses. To access the form, please go to https://www.carleton.ca/registrar/forms&lt;/div&gt;</summary>
		<author><name>Jagger</name></author>
	</entry>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=Fundamentals_of_Web_Applications_(Winter_2016)&amp;diff=20528</id>
		<title>Fundamentals of Web Applications (Winter 2016)</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=Fundamentals_of_Web_Applications_(Winter_2016)&amp;diff=20528"/>
		<updated>2016-01-15T20:55:08Z</updated>

		<summary type="html">&lt;p&gt;Jagger: /* Course Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Course Outline==&lt;br /&gt;
&lt;br /&gt;
[[Fundamentals of Web Applications: Winter 2016 Course Outline|Here]] is the course outline.&lt;br /&gt;
&lt;br /&gt;
==Lectures and Exams==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%;&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;&lt;br /&gt;
    &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;Date&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;&lt;br /&gt;
    &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;Topic&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Jan. 7&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W Lecture 1|Lecture 1]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Jan. 12&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W Lecture 2|Lecture 2]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Jan. 14&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W Lecture 3|Lecture 3]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Jan. 19&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W Lecture 4|Lecture 4]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Jan. 21&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W Lecture 5|Lecture 5]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Jan. 26&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W Lecture 6|Lecture 6]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Jan. 28&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W Lecture 7|Lecture 7]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Feb. 2&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W Lecture 8|Lecture 8]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Feb. 4&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W Lecture 9|Lecture 9]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Feb. 9&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W Lecture 10|Midterm Review]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Feb. 11&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Midterm (in class)&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Feb. 23&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W Lecture 11|Lecture 11]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Feb. 25&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W Lecture 12|Lecture 12]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Mar. 1&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W Lecture 13|Lecture 13]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Mar. 3&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W Lecture 14|Lecture 14]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Mar. 8&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W Lecture 15|Lecture 15]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Mar. 10&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W Lecture 16|Lecture 16]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Mar. 15&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W Lecture 17|Lecture 17]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Mar. 17&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W Lecture 18|Lecture 18]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Mar. 22&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W Lecture 19|Lecture 19]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Mar. 24&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W Lecture 20|Lecture 20]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Mar. 29&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W Lecture 21|Lecture 21]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Mar. 31&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W Lecture 22|Lecture 22]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Apr. 5&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W Lecture 23|Lecture 23]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;April 7&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W Lecture 24|Lecture 24]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;TBA&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Final Exam&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Tutorials==&lt;br /&gt;
&lt;br /&gt;
Each week you will get a progress grade from 0-4, given to you by a TA.  If you are being diligent, you should be able to get 4&#039;s every week.  The easiest way to get your grade is to come to tutorial and meet with your TA; alternately, you can meet a TA in their office hours or, at their discretion, discuss things with them online.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%;&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;&lt;br /&gt;
    &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;Date&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;&lt;br /&gt;
    &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;Tutorials&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Jan. 13, 14, 15, 18&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W: Tutorial 1|Asynchronous Code in JavaScript]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Jan. 20, 21, 22, 25&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W: Tutorial 2|Tiny web server]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Jan. 27, 28, 29, Feb. 1&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W: Tutorial 3|Express, Form demo]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Feb. 3, 4, 5, 8&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W: Tutorial 4|TBA]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Feb. 24, 25, 26, 29&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W: Tutorial 5|TBA]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Mar. 2, 3, 4, 7&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W: Tutorial 6|TBA]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Mar. 9, 10, 11, 14&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W: Tutorial 7|TBA]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Mar. 16, 17, 18, 21&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W: Tutorial 8|TBA]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Mar. 23, 24, 25, 28&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W: Tutorial 9|TBA]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Mar. 30, 31, Apr. 1, 4&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W: Tutorial 10|TBA]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Assignments==&lt;br /&gt;
&amp;lt;table style=&amp;quot;width: 100%;&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;&lt;br /&gt;
    &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;Due Date&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;th&amp;gt;&lt;br /&gt;
    &amp;lt;p align=&amp;quot;left&amp;quot;&amp;gt;Assignments&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Jan. 20&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W: Assignment 1|Assignment 1]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Jan. 27&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W: Assignment 2|Assignment 2]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Feb. 3&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W: Assignment 3|Assignment 3]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Feb. 9, 2:30 PM&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W: Assignment 4|Assignment 4]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Mar. 2&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W: Assignment 5|Assignment 5]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Mar. 9&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W: Assignment 6|Assignment 6]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Mar. 16&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W: Assignment 7|Assignment 7]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Mar. 23&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W: Assignment 8|Assignment 8]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Mar. 30&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W: Assignment 9|Assignment 9]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;Apr. 6&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;[[WebFund 2016W: Assignment 10|Assignment 10]]&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Course Software==&lt;br /&gt;
&lt;br /&gt;
In this course we will be developing web applications using [http://nodejs.org/ node.js] and [http://www.mongodb.org/ mongoDB].  You are welcome to use whatever operating system and development tools you like; however, we will supporting the use of a course virtual machine appliance running [http://www.lubuntu.net/ Lubuntu], a low-resource variant of [http://www.ubuntu.com/ Ubuntu] Linux distribution.&lt;br /&gt;
&lt;br /&gt;
===In the labs===&lt;br /&gt;
&lt;br /&gt;
In the SCS labs you should be able to run the course VM by starting Virtualbox (listed in the Applications menu) and selecting the COMP 2406 virtual machine image.  After the VM has fully booted up you can login to the student account using the password &amp;quot;tneduts!&amp;quot;.  This account has administrative privileges; in addition, there is the admin account in case your student account gets corrupted for any reason.  The password for it is &amp;quot;nimda!&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We highly recommend running your VM in full-screen mode (select from the menu, not by maximizing the window).  Do all of your work inside of the VM; it should be fast enough and you won&#039;t have any issues with sharing files or with firewalls/network connectivity.&lt;br /&gt;
&lt;br /&gt;
You can save the work you do from the course VM (in the student account) to your SCS account and restore it to any other copy of the class VM (on your machines or in the labs) by running using the following commands:&lt;br /&gt;
&lt;br /&gt;
  save2406 &amp;lt;SCS username&amp;gt;&lt;br /&gt;
  restore2406 &amp;lt;SCS username&amp;gt;&lt;br /&gt;
  compare2406 &amp;lt;SCS username&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you use these commands, &#039;&#039;&#039;use them consistently&#039;&#039;&#039;.  That means run &amp;lt;tt&amp;gt;restore2406&amp;lt;/tt&amp;gt; when you first log in, and run &amp;lt;tt&amp;gt;save2406&amp;lt;/tt&amp;gt; just before logging out.  If you don&#039;t do this, you will &#039;&#039;&#039;erase&#039;&#039;&#039; the work that you had done previously when you save.&lt;br /&gt;
&lt;br /&gt;
If you forgot to restore and you want to save, try running this:&lt;br /&gt;
&lt;br /&gt;
   rsync -a -v --progress ~/ &amp;lt;SCS username&amp;gt;@access.scs.carleton.ca:COMP2406/&lt;br /&gt;
&lt;br /&gt;
This is the same as the &amp;lt;tt&amp;gt;save2406&amp;lt;/tt&amp;gt; command minus the options (--delete and --force) that deletes files in the destination that don&#039;t exist in the source.  As a check, you may want to add the &amp;lt;tt&amp;gt;-n&amp;lt;/tt&amp;gt; option to do a dry run.&lt;br /&gt;
&lt;br /&gt;
===Running the VM on your own machines===&lt;br /&gt;
&lt;br /&gt;
If you want to run the VM appliance on your own system (running essentially any desktop operating system you want), just download the [http://homeostasis.scs.carleton.ca/~soma/VMs/COMP%202406,%20Winter%202016.ova virtual appliance file] and import into [http://www.virtualbox.org VirtualBox] or VMware Workstation/Fusion ([https://secure.scs.carleton.ca/vmware/ free to Carleton SCS students]).  The SHA1 hash of this file is:&lt;br /&gt;
&lt;br /&gt;
    97fc4de4544505178b580d27487085a20961e91e [http://homeostasis.scs.carleton.ca/~soma/VMs/COMP%202406,%20Winter%202016.ova COMP 2406, Winter 2016.ova]&lt;br /&gt;
&lt;br /&gt;
On Windows you can compute this hash for your downloaded file using the command &amp;lt;a href=&amp;quot;http://support.microsoft.com/kb/889768&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;FCIV -sha1 COMP 2406 &amp;amp; 3000, Fall 2015.ova&amp;lt;/tt&amp;gt;&amp;lt;/a&amp;gt;.  If the hash is different from above, your download has been corrupted.&lt;br /&gt;
&lt;br /&gt;
If your virtualization platform is not VirtualBox, you&#039;ll need to:&lt;br /&gt;
* Have the VM platform ignore any errors in the structure of the appliance found during the import process;&lt;br /&gt;
* Uninstall the VirtualBox guest additions by typing starting a terminal application and running&lt;br /&gt;
   sudo /opt/VBoxGuestAdditions-*/uninstall.sh&lt;br /&gt;
* Install your platform&#039;s own Linux guest additions, if available.&lt;br /&gt;
&lt;br /&gt;
===Configuring Linux===&lt;br /&gt;
&lt;br /&gt;
If you already run Linux and you want to use the same packages we do in class, you should do the following:&lt;br /&gt;
&lt;br /&gt;
* Install the latest node.js version using [https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager a package manager].  (You generally don&#039;t use the version that comes with your distribution, it is probably too old.)&lt;br /&gt;
* Install [http://www.mongodb.org/ mongoDB] - it probably goes by mongodb in your package manager.  The version doesn&#039;t matter too much.&lt;br /&gt;
&lt;br /&gt;
Note that the binary of the node.js executable may be &amp;lt;tt&amp;gt;node&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;nodejs&amp;lt;/tt&amp;gt;, or something similar.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it!&lt;br /&gt;
&lt;br /&gt;
===Configuring Windows===&lt;br /&gt;
&lt;br /&gt;
It is also possible to do everything in this class in Windows.  Here are some tips on getting things running.&lt;br /&gt;
&lt;br /&gt;
* You can just install the [http://nodejs.org/download/ windows node package] to get basic node and npm functionality.&lt;br /&gt;
* [[Run MongoDB on Windows]].&lt;br /&gt;
* If you want to run Emacs on Windows, look at the [[Running Emacs on Windows|following tips]].&lt;br /&gt;
&lt;br /&gt;
===Configuring Mac OS X===&lt;br /&gt;
&lt;br /&gt;
It is possible, and recommended, to configure Node and mongoDB to run on your Mac.&lt;br /&gt;
&lt;br /&gt;
====Homebrew method (recommended)====&lt;br /&gt;
Homebrew is a package manager for OS X that works similarly to Linux-style package managers like &amp;lt;tt&amp;gt;apt&amp;lt;/tt&amp;gt;. Homebrew provides access to thousands of Linux and BSD packages to install natively on your Mac. You have a perfectly capable UNIX system in front of you. Make good use of it!&lt;br /&gt;
&lt;br /&gt;
* Install [http://brew.sh/ Homebrew] (copy the installation text on that page to Terminal.app)&lt;br /&gt;
* Install Node and mongoDB&lt;br /&gt;
&lt;br /&gt;
Run the following commands in your terminal:&lt;br /&gt;
&lt;br /&gt;
    brew update&lt;br /&gt;
    brew install node&lt;br /&gt;
    brew install mongo&lt;br /&gt;
&lt;br /&gt;
That&#039;s it!&lt;br /&gt;
&lt;br /&gt;
====Manual method====&lt;br /&gt;
Alternatively, you can download and install Node and mongo directly.&lt;br /&gt;
&lt;br /&gt;
* Download and install the &#039;&#039;Mac OS X Installer&#039;&#039; from [https://nodejs.org/en/download/stable/ the download page].&lt;br /&gt;
* Download the binaries from [https://www.mongodb.org/downloads#production MongoDB&#039;s download page]&lt;br /&gt;
* Follow [https://docs.mongodb.org/manual/tutorial/install-mongodb-on-os-x/#install-mongodb-community-edition-manually these instructions]&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
&lt;br /&gt;
In general any text published by [http://www.oreilly.com/ O&#039;Reilly] is worth your time.  Many (but not all) of the texts below are published by them.&lt;br /&gt;
&lt;br /&gt;
===JavaScript===&lt;br /&gt;
&lt;br /&gt;
[http://shop.oreilly.com/product/9780596517748.do JavaScript: The Good Parts] by Douglas Crockford is an excellent text on JavaScript and it is short.  We highly suggest you obtain a copy and read it.&lt;br /&gt;
&lt;br /&gt;
The easiest way to get started with JavaScript and get basic understanding of web technologies is to go through the interactive lessons on [http://codeacademy.com Code Academy].  I suggest you go through their JavaScript, Web Fundamentals, and jQuery tracks.  They shouldn&#039;t take you very long to do given that you already know how to program.&lt;br /&gt;
&lt;br /&gt;
Crockford also has a lot of online resources on JavaScript, including videos of talks he&#039;s given that cover much of the content in his book.  Look at his [http://javascript.crockford.com/ JavaScript page] and this [http://yuiblog.com/crockford/ page of his videos].&lt;br /&gt;
&lt;br /&gt;
Another good book is [http://eloquentjavascript.net/ Eloquent JavaScript: A Modern Introduction to Programming] by Marijn Haverbeke.  A version of this book is available online for free.  The for-sale version is apparently updated and edited.&lt;br /&gt;
&lt;br /&gt;
The standard reference for JavaScript is [http://shop.oreilly.com/product/9780596805531.do JavaScript: The Definitive Guide] by David Flanagan.  It is a big book, but it is comprehensive.&lt;br /&gt;
&lt;br /&gt;
===Node===&lt;br /&gt;
&lt;br /&gt;
[http://shop.oreilly.com/product/0636920024606.do Learning Node] by Shelley Powers is the recommended resource for learning about Node.&lt;br /&gt;
&lt;br /&gt;
Another introduction to node.js is [http://www.nodebeginner.org/ The Node Beginner Book] by Manuel Kiessling.&lt;br /&gt;
&lt;br /&gt;
[http://evanhahn.com/understanding-express-js/ This page by Evan Hahn] has a good overview of the express/connect/node software stack.&lt;br /&gt;
&lt;br /&gt;
===MongoDB===&lt;br /&gt;
&lt;br /&gt;
[http://shop.oreilly.com/product/0636920028031.do MongoDB: The Definitive Guide] by Kristina Chodorow (1st or 2nd ed) is the recommended text for learning more about MongoDB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Lecture Notes Guidelines==&lt;br /&gt;
&lt;br /&gt;
As specified in the course outline you can get up to 6% extra credit on your final grade (2% per time) for writing up notes from lecture.  Here are the guidelines for those notes.&lt;br /&gt;
&lt;br /&gt;
Lee Croft (LeeCroft at cmail.carleton.ca) will be handling course notes.  Please contact him if you would like to volunteer.  Note that you should email him in advance and he will give you the next available slot.  There are over 200 students in class and only 20 lectures so opportunities may go fast!&lt;br /&gt;
&lt;br /&gt;
Lee or Anil will set you up with an account on this wiki.  You&#039;ll enter your initial draft notes here and then work with Lee to make sure they are of sufficient quality.  This may require a few rounds of revisions; however, if you follow the guidelines below it shouldn&#039;t be too bad.&lt;br /&gt;
&lt;br /&gt;
You should plan on organizing your notes as follows:&lt;br /&gt;
* Organize them in at least the following sections: Topics &amp;amp; Readings, Audio &amp;amp; Video, and Notes.&lt;br /&gt;
* The Topics &amp;amp; Readings section lists the main topics covered in the course, e.g. &amp;quot;Scoping rules in JavaScript&amp;quot;.  Please use an unordered bulleted list (using *&#039;s in wiki markup).  In this section also list readings relevant to the lecture that were mentioned in class.&lt;br /&gt;
* Leave the Audio and Video section blank.  Anil will fill this out.&lt;br /&gt;
* Put your notes in the Notes section.&lt;br /&gt;
&lt;br /&gt;
Use (nested) lists if appropriate for the notes; however, please have some text that isn&#039;t bulleted.  Please try to make the notes even if you did not attend lecture; however, you don&#039;t need to cover every small bit of information that was covered.  In particular the notes do not need to include digressions into topics only tangentially related to the course.  Complete sentences are welcome but not required.&lt;/div&gt;</summary>
		<author><name>Jagger</name></author>
	</entry>
</feed>