diff options
author | Tucker Evans <tuckerevans24@gmail.com> | 2017-11-24 18:12:18 -0500 |
---|---|---|
committer | Tucker Evans <tuckerevans24@gmail.com> | 2017-11-24 18:12:18 -0500 |
commit | 2177f0712fb47a95b2970c6838a4a4d978174b3b (patch) | |
tree | fe66e6a05d978e9fb91560d03774ee88c862db4c /sync/assign.rst | |
parent | 0e15942312c9c20fcac5ac9f2368d94b80fda230 (diff) |
CS3871/assignments/sync: Initial Commit
Diffstat (limited to 'sync/assign.rst')
-rw-r--r-- | sync/assign.rst | 41 |
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 |