summaryrefslogtreecommitdiff
path: root/labs
diff options
context:
space:
mode:
authorFrans Kaashoek <[email protected]>2019-07-24 20:30:20 -0400
committerFrans Kaashoek <[email protected]>2019-07-24 20:30:20 -0400
commitaef3e0f5a41c3b45eeb47e407cacb6cfa59168a0 (patch)
treed7f10d4c537518e45f6d811a44c2b7b2e1e57c97 /labs
parent61dc67b5d2febd302c96cee2821ac190fdd24c4a (diff)
downloadxv6-labs-aef3e0f5a41c3b45eeb47e407cacb6cfa59168a0.tar.gz
xv6-labs-aef3e0f5a41c3b45eeb47e407cacb6cfa59168a0.tar.bz2
xv6-labs-aef3e0f5a41c3b45eeb47e407cacb6cfa59168a0.zip
sieve exercise
Diffstat (limited to 'labs')
-rw-r--r--labs/xv6.html42
1 files changed, 31 insertions, 11 deletions
diff --git a/labs/xv6.html b/labs/xv6.html
index a5df08d..fcbb234 100644
--- a/labs/xv6.html
+++ b/labs/xv6.html
@@ -1,6 +1,6 @@
<html>
<head>
-<title>Homework: xv6</title>
+<title>Lab: xv6</title>
<link rel="stylesheet" href="homework.css" type="text/css" />
</head>
<body>
@@ -115,18 +115,10 @@ initial file system. You just ran one of them: <tt>ls</tt>.
</pre>
<p>Optional: write an uptime program that prints the uptime in terms
- of ticks using the <tt>uptime</tt> system call.
+ of ticks using the <tt>uptime</tt> system call.
<h2>pingpong</h2>
-
-<p>In the previous exercise, if you made an error in sleep, the
- program may have exited prematurely, but it didn't affect other
- processes because xv6 isolates processes. Sometimes you want
- processes to interact with each other. Xv6 provides two ways to do:
- either through the file system (one process can create a file and
- another process can read that file) or through pipes. In this
- exercise you explore interprocess communication through pipes.
-
+
<p> Write a program that uses UNIX system calls to ``ping-pong'' a
byte between two processes over a pair of pipes, one for each
direction. The parent sends by writing a byte to <tt>fd[1]</tt> and
@@ -140,6 +132,32 @@ initial file system. You just ran one of them: <tt>ls</tt>.
<li>Use <tt>fork</tt> to create a child.
<li>Use <tt>read</tt> to read from the pipe, and <tt>write</tt> to write to the pipe.
</ul>
+
+<h2>primes</h2>
+
+ <p>Write a concurrent version of prime sieve using pipes. This idea
+ is due to Doug McIlroy, inventor of Unix pipes. The picture
+ halfway down <a href="http://swtch.com/~rsc/thread/">the page</a>
+ and the text surrounding it explain how to do it.
+
+ <p>Your goal is to use <tt>pipe</tt> and <tt>fork</tt> to set up
+ the pipeline. The first process feeds the numbers 2 through 35
+ into the pipeline. For each prime number, you will arrange to
+ create one process that reads from its left neighbor over a pipe
+ and writes to its right neighbor over another pipe. Since xv6 has
+ limited number of file descriptors and processes, the first
+ process can stop at 35.
+
+<p>Some hints:
+ <ul>
+ <li>Be careful to close file descriptors that a process doesn't
+ need, because otherwise your program will run xv6 out of resources
+ before the first process reaches 35.
+
+ <li>Once the first process reach 35, you should arrange that the
+ pipeline terminates cleanly (Hint: read will return an end-of-file
+ when the write-side of the pipe is closed).
+ </ul>
<h2>find</h2>
@@ -161,6 +179,8 @@ initial file system. You just ran one of them: <tt>ls</tt>.
</ul>
<h2>Optional: modify the shell</h2>
+
+<p>Modify the shell to support wait.
<p>Modify the shell to support lists of commands, separated by ";"