aboutsummaryrefslogtreecommitdiff
path: root/sync/assign.rst
blob: ea4a566d3d5eec7c18d44948ad100e39cb197702 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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