<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://homeostasis.scs.carleton.ca/wiki/index.php?action=history&amp;feed=atom&amp;title=DistOS_2021F_2021-09-09</id>
	<title>DistOS 2021F 2021-09-09 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://homeostasis.scs.carleton.ca/wiki/index.php?action=history&amp;feed=atom&amp;title=DistOS_2021F_2021-09-09"/>
	<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2021F_2021-09-09&amp;action=history"/>
	<updated>2026-05-12T22:22:33Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2021F_2021-09-09&amp;diff=23284&amp;oldid=prev</id>
		<title>Soma: Created page with &quot;==Notes==  &lt;pre&gt; Lecture 1 ---------  Outline stuff  - grad students have to do a project  - undergrads can do exam only  - reading responses or quiz is for every assigned rea...&quot;</title>
		<link rel="alternate" type="text/html" href="https://homeostasis.scs.carleton.ca/wiki/index.php?title=DistOS_2021F_2021-09-09&amp;diff=23284&amp;oldid=prev"/>
		<updated>2021-09-16T22:03:03Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==Notes==  &amp;lt;pre&amp;gt; Lecture 1 ---------  Outline stuff  - grad students have to do a project  - undergrads can do exam only  - reading responses or quiz is for every assigned rea...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Notes==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Lecture 1&lt;br /&gt;
---------&lt;br /&gt;
&lt;br /&gt;
Outline stuff&lt;br /&gt;
 - grad students have to do a project&lt;br /&gt;
 - undergrads can do exam only&lt;br /&gt;
 - reading responses or quiz is for every assigned reading&lt;br /&gt;
   - make sure you read it&lt;br /&gt;
   - can always turn in a response by the night before&lt;br /&gt;
   - quiz (when available) should be turned in an hour before class time&lt;br /&gt;
   - rationale: you should prove you&amp;#039;ve read things, and I need extra&lt;br /&gt;
     time to read responses before class&lt;br /&gt;
   - meant to be participation grades, should mostly be getting 100%&lt;br /&gt;
&lt;br /&gt;
group discussions&lt;br /&gt;
 - will happen most classes&lt;br /&gt;
 - when they do, you should submit a group report&lt;br /&gt;
 - normally, will take up half of a class&lt;br /&gt;
 - group reports are one per group&lt;br /&gt;
 - groups will normally be randomized each time&lt;br /&gt;
   - but I will allow a blacklist for each of you&lt;br /&gt;
 - groups will be normally 3-4 people&lt;br /&gt;
&lt;br /&gt;
implementation experiences&lt;br /&gt;
 - this is new!&lt;br /&gt;
 - idea is two of these over the term where you&amp;#039;ll play with kubernetes&lt;br /&gt;
 - grades will be based on tasks completed&lt;br /&gt;
   - you&amp;#039;ll know what you need to do to get an A&lt;br /&gt;
 - if you decide to do an implementation-focused project, you&amp;#039;ll probably want to build on what you learned in the experiences&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Projects&lt;br /&gt;
 - can be implementation-based, literature review, or research proposal&lt;br /&gt;
 - should be individual normally.  I will allow pairs, but then I expect 2x the work, and it should be clear who did what&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
What is an operating system?&lt;br /&gt;
 - &amp;quot;controls and multiplexes access to resources&amp;quot;&lt;br /&gt;
 - turns the computer you have into the computer that you want to program&lt;br /&gt;
   - abstraction, resource management, protection&lt;br /&gt;
&lt;br /&gt;
A distributed OS is an operating system that does the above, but for multiple&lt;br /&gt;
computers connected by a network&lt;br /&gt;
&lt;br /&gt;
So, is a distributed OS harder to make than a regular OS?&lt;br /&gt;
 - YES&lt;br /&gt;
 - but why?&lt;br /&gt;
&lt;br /&gt;
In general, is it easy to parallize a sequential algorithm efficiently?&lt;br /&gt;
 - not at all&lt;br /&gt;
&lt;br /&gt;
Using 10 systems to accomplish a task doesn&amp;#039;t mean we&amp;#039;ll get a 10x speedup over one system&lt;br /&gt;
&lt;br /&gt;
Problem is coordination (synchronization is part of this)&lt;br /&gt;
  - how to split up the problem&lt;br /&gt;
  - how to communicate about the work as it is done&lt;br /&gt;
  - latency, bandwidth impact performance speedups&lt;br /&gt;
 &lt;br /&gt;
resource management is hard because in a big enough distributed system, things fail all the time&lt;br /&gt;
 - so you have to achieve fault tolerance somehow&lt;br /&gt;
 - communication, computation, and storage can all fail in arbitrary ways&lt;br /&gt;
&lt;br /&gt;
on single systems, failures happen but most are masked/recovered from at the hardware level&lt;br /&gt;
 - can&amp;#039;t do this in a distributed system easily&lt;br /&gt;
&lt;br /&gt;
heterogeneity is also an issue, can lead to compatibility issues, but that can be managed&lt;br /&gt;
 - difficult but not fundamentally hard&lt;br /&gt;
&lt;br /&gt;
In fact, most of what distributed OSs support are tasks that are embarassingly parallel&lt;br /&gt;
 - in other words, they can be decomposed almost arbitrarily and distributed without significant performance penalty&lt;br /&gt;
 - if it isn&amp;#039;t embarassingly parallel, it probably won&amp;#039;t scale&lt;br /&gt;
&lt;br /&gt;
Modern day cloud infrastructures are primitive implementations of a distributed OS&lt;br /&gt;
  - definitely do resource management, but abstraction is often poor&lt;br /&gt;
    - you have to manage the systems individually&lt;br /&gt;
&lt;br /&gt;
The real secret of distributed OSs is that we can&amp;#039;t solve problems generally&lt;br /&gt;
 - instead, we come up with good enough solutions to specific problems&lt;br /&gt;
 - have to specialize in order to circumvent the limitations of being distributed&lt;br /&gt;
   - the distributed nature of the system leaks unless you limit your scope&lt;br /&gt;
&lt;br /&gt;
So, in a sense distributed OSs don&amp;#039;t exist the way single system OSs do&lt;br /&gt;
  - nothing as general as Linux or Windows&lt;br /&gt;
&lt;br /&gt;
Things like kubernetes is as close as we get&lt;br /&gt;
  - but as you&amp;#039;ll see, the abstraction level is very poor&lt;br /&gt;
&lt;br /&gt;
We are going to talk about containers a lot!&lt;br /&gt;
&lt;br /&gt;
We&amp;#039;ll also discuss virtual machines&lt;br /&gt;
&lt;br /&gt;
Embarassingly parallel - I can get linear speedups by adding resources (cores)&lt;br /&gt;
2 cores is 2X as fast, etc&lt;br /&gt;
  - very few problems are like this&lt;br /&gt;
  - but most cloud workloads are!&lt;br /&gt;
&lt;br /&gt;
Web applications are mostly built to be as embarassingly parallel as possible&lt;br /&gt;
 - state coordination happens in the database, and there we have to use other techniques&lt;br /&gt;
&lt;br /&gt;
Hardest problem at web scale that is mostly &amp;quot;solved&amp;quot; (ish) is search&lt;br /&gt;
 - and even that is mostly parallelizable&lt;br /&gt;
    - crawling the web&lt;br /&gt;
    - indexing&lt;br /&gt;
 - key example: Google search&lt;br /&gt;
    - and they invented many of the technologies we&amp;#039;ll discuss&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
What do single system operating systems look like?&lt;br /&gt;
 - Windows, Linux, MacOS, etc&lt;br /&gt;
&lt;br /&gt;
Specifically, what is the unit of computation?&lt;br /&gt;
 - processes&lt;br /&gt;
&lt;br /&gt;
One approach to making a distributed OS is just to distribute processes&lt;br /&gt;
 - older approaches tried this&lt;br /&gt;
 - but it doesn&amp;#039;t work&lt;br /&gt;
&lt;br /&gt;
Consider process p on machine A, want to move to machine B&lt;br /&gt;
What do you do with p&amp;#039;s&lt;br /&gt;
 - open files?&lt;br /&gt;
 - network connections?&lt;br /&gt;
 - other processes it depends on?&lt;br /&gt;
   - shared memory?&lt;br /&gt;
&lt;br /&gt;
UNIX/Windows processes were never meant to migrate between hosts, and it shows&lt;br /&gt;
&lt;br /&gt;
elegant solution to this is Plan 9&lt;br /&gt;
 - makes UNIX run across a cluster of systems&lt;br /&gt;
&lt;br /&gt;
But a Plan 9 type solution of distributing processes didn&amp;#039;t allow for true scalability&lt;br /&gt;
 - didn&amp;#039;t really support parallel workloads&lt;br /&gt;
&lt;br /&gt;
So we got some very different stuff, as we&amp;#039;ll see.&lt;br /&gt;
&lt;br /&gt;
Don&amp;#039;t distribute processes, distributed operating systems&lt;br /&gt;
 - a container is just a regular OS minus the kernel&lt;br /&gt;
 - a hardware virtual machine is an entire os that is abstracted so it can run&lt;br /&gt;
   on arbitrary hardware (and share it with another OS)&lt;br /&gt;
&lt;br /&gt;
But then, how do we get all these individual OSs to work together?&lt;br /&gt;
 - orchestration (kubernetes)&lt;br /&gt;
 - specialized applications (gfs, mapreduce)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Soma</name></author>
	</entry>
</feed>