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
|