aboutsummaryrefslogtreecommitdiff
path: root/sync/assign.rst
diff options
context:
space:
mode:
authorTucker Evans <tuckerevans24@gmail.com>2017-11-24 18:12:18 -0500
committerTucker Evans <tuckerevans24@gmail.com>2017-11-24 18:12:18 -0500
commit2177f0712fb47a95b2970c6838a4a4d978174b3b (patch)
treefe66e6a05d978e9fb91560d03774ee88c862db4c /sync/assign.rst
parent0e15942312c9c20fcac5ac9f2368d94b80fda230 (diff)
CS3871/assignments/sync: Initial Commit
Diffstat (limited to 'sync/assign.rst')
-rw-r--r--sync/assign.rst41
1 files changed, 41 insertions, 0 deletions
diff --git a/sync/assign.rst b/sync/assign.rst
new file mode 100644
index 0000000..ea4a566
--- /dev/null
+++ b/sync/assign.rst
@@ -0,0 +1,41 @@
+================
+Syncronization 1
+================
+
+Write a program that uses semaphores to implement a readers/writers solution. Your program should:
+
+ - be written in C and use the standard kernel IPC mechanisms (semget,semop,shmget etc)
+ - be written as a single top level source file compiled as: gcc –o myprog myprog.c
+ - take two arguments on the command line: myprog NR NW where NR,NW are each integers specifying the number of reader/writer processes respectively
+ - use fork/exec to create the readers/writers
+
+The shared memory segment should be 16k bytes in size, with all bytes initialized to 0x30
+
+Reader:
+
+.. code ::
+
+ open a file (for append) named reader.N, where N is the reader number
+ while (1) {
+ for (i=0; i<16k; i++) {
+ read the next byte of the shared memory segment
+ write that byte to the file
+ flush the file
+ }
+ sleep a random number of seconds, between 0 and N inclusive
+ }
+
+Writer:
+
+.. code ::
+
+ while (1) {
+ for (i=0; i<16k; i++)
+ shared memory segment[i] = N + 0x30;
+ sleep a random number of seconds between 0 and 2*N inclusive
+ }
+
+readers and writers should be mutually exclusive
+multiple concurrent readers are allowed
+writers have priority over readers
+writers are mutually exclusive relative to each other