Operating Systems Exercises
Operating Systems Exercises
Operating Systems Exercises
09022200 1
(c) 20082009 All Rights Reversed, All Wrongs Corrected Permission is granted for whatever you can imagine
Operating Systems Exercises
http://rms46.vlsm.org/2/171.pdf
Rahmat M. SamikIbrahim
vLSM.org, Pamulang 15417, Banten
Table of Contents
Shorter Questions....................................................................................................................................................1
Operating Systems Concepts...................................................................................................................................4
Intellectual Property Rights.....................................................................................................................................5
Process State I.........................................................................................................................................................5
Process State II........................................................................................................................................................6
Process State III.......................................................................................................................................................6
Process State IV......................................................................................................................................................6
Process State V........................................................................................................................................................7
Memory I.................................................................................................................................................................7
Linux ThreeLevel Page Table I..............................................................................................................................7
Linux ThreeLevel Page Table II.............................................................................................................................7
Linux ThreeLevel Page Table III...........................................................................................................................8
Buddy Algorithm I..................................................................................................................................................8
Buddy Algorithm II.................................................................................................................................................8
Buddy Algorithm III...............................................................................................................................................8
HardDisk (I/O) I......................................................................................................................................................9
HardDisk (I/O) II.....................................................................................................................................................9
Disk Partitions I.......................................................................................................................................................9
Disk Partitions II...................................................................................................................................................10
Disk Partitions III..................................................................................................................................................10
File System I..........................................................................................................................................................11
File System II.........................................................................................................................................................11
Fork I.....................................................................................................................................................................12
Fork II....................................................................................................................................................................12
Fork III...................................................................................................................................................................13
Fork IV..................................................................................................................................................................13
Fork V....................................................................................................................................................................14
MultiThreads.........................................................................................................................................................15
Synchronization I...................................................................................................................................................16
Synchronization II.................................................................................................................................................17
Synchronization III................................................................................................................................................19
Shorter Questions
a) Explain briefly, the two basic functions that Operating Systems perform!
b) One of the Operating Systems' basic function is to present the user with the equivalent of an
extended machine. Explain what an extended machine is!
d) One of the Operating Systems' basic function is managing resources. Explain what an
managing resources is!
Operating Systems Exercises Rahmat M. SamikIbrahim http://rms46.vlsm.org/2/171.pdf – rev. 09022200 2
(c) 20082009 All Rights Reversed, All Wrongs Corrected Permission is granted for whatever you can imagine
e) These following are fundamental principles of an Operating System:
(a) Processes, (b) Interprocess Communications, (c) Semaphores, (d) Message
Passing, (e) Schedulling Algorithm, (f) Input/Output (g) Deadlocks, (h) Device
Drivers, (i) Memory Management, (j) Paging Algorithm, (k) File Systems, and (l)
Security & Protections.
Explain briefly three (3) fundamental principles from the list above!
f) What is a Real Time system? Give an illustration!
g) What is a Hard Real Time system? Give an illustration!
h) What is a Soft Real Time system? Give an illustration!
i) What are the differences between a System Program and an Application Program?
j) Give an example of a System Program!
k) Give an example of a Application Program!
l) What are the differences between a System Program and a System Call? Give an illustration
(eg. ''creating a directory'')!
m) How is Win32 API (Application Program Interface) related to a System Call.
n) Explain what a Critical Region is!
o) Explain what a Race Condition is!
p) Explain what a Busy Waiting is! How to overcome it?
q) What is a Deadlock? Explain briefly!
r) How does Unix handle the Deadlock problem? Explain briefly!
s) What is a Starvation? Explain briefly!
t) How does these following systems handle the deadlock problem:
● Unix
● Windows
● JVM
Explain briefly!
u) What is a binary semaphore?
v) Explain briefly, how to use binary semaphores for access control of a critical section!
w) What is a counting semaphore?
x) Explain briefly, how to use counting semaphores for access control of a resource with a finite
number of instances?
Operating Systems Exercises Rahmat M. SamikIbrahim http://rms46.vlsm.org/2/171.pdf – rev. 09022200 3
(c) 20082009 All Rights Reversed, All Wrongs Corrected Permission is granted for whatever you can imagine
y) Explain the differences between running a process in kernel mode and user mode?
z) Give two examples/illustration of running a process in ''kernel mode''.
aa)Give two examples/illustration of running a process in ''user mode''.
ab)Explain what ''multiprogramming'' means. Give an example!
ac) Explain what ''multiusers'' means. Give an example!
ad)Explain what a ''process table'' is. Give an illustration!
ae)Explain what a ''file system'' is. Give an example!
af) Explain what a ''pipe'' is. Give an illustration!
ag)Explain what a ''socket'' is. Give an illustration!
ah)In a three state process model (''running'', ''blocked'', and ''ready”), explain briefly about each
process state.
ai) In a three state process model (''running'', ''blocked'', and ''ready”), explain why a ''running''
state process transits to ''blocked'' state.
aj) In a three state process model (''running'', ''blocked'', and ''ready”), explain why a ''running''
state process transits to ''ready'' state.
ak) In a three state process model (''running'', ''blocked'', and ''ready”), explain why a ''ready'' state
process transits to ''running'' state.
al) In a three state process model (''running'', ''blocked'', and ''ready”), explain why a ''blocked''
state process transits to ''ready'' state.
am)In a three state process model (''running'', ''blocked'', and ''ready”), explain why there is no
''blocked'' state process transits to ''running'' state.
an)In a three state process model (''running'', ''blocked'', and ''ready”), explain why there is no
''ready'' state process transits to ''blocked'' state.
ao)What is a ''CPU bound'' process? Give an illustration!
ap)What is a ''I/O bound'' process? Give an illustration!
aq)What is a ''preemptive'' process? Give an illustration!
ar) What is a ''nonpreemptive'' process? Give an illustration!
as) Explain briefly the ''Readers/Writers'' problem. How to avoid ''deadlock'' in the
''Readers/Writers'' problem.
at) Explain briefly the ''Readers/Writers'' problem. Where is the ''critical section'' of the ''Readers/
Operating Systems Exercises Rahmat M. SamikIbrahim http://rms46.vlsm.org/2/171.pdf – rev. 09022200 4
(c) 20082009 All Rights Reversed, All Wrongs Corrected Permission is granted for whatever you can imagine
Writers'' problem.
au)Explain briefly the ''Consumer/Producer'' problem. How to avoid ''deadlock'' in the ''Consumer/
Producer'' problem.
av) Explain briefly the Consumer/Producer problem. Where is the critical section of the
Consumer/Producer problem.
aw)What are the differences and similarities between the Consumer/Producer problem and
Readers/Writers problem? Explain briefly!
ax) Explain how a ''preemptive'' system can improve performance!
ay) What will improve, if more ''RAM'' is added to a system? Give illustrations!
az) What will improve, if the ''CPU'' of the system is replaced with a faster one? Give illustrations!
ba)What will improve, if the ''DISK'' of the system is replaced with a faster transfer rate? Give
illustrations!
bb)What will improve, if the ''I/O Bus'' of the system is replaced with a faster transfer rate? Give
illustrations!
bc) Which task should have more priority: writing to a disk or reading from a disk? Explain!
bd)Explain how a higher ''RPM rate'' can improve disk transfer rate!
be)Explain how a higher ''disk density'' can improve disk transfer rate!
bf) Explain how a DMA scheme can improve the system performance
bg)What is a ''Hard Real Time System''? Give an example!
bh)What is a ''Soft Real Time System''? Give an example!
bi) Compare the performance between a ''pipe'' and ''file''. Explain!
bj) Compare the performance between a ''pipe'' and ''socket''. Explain!
bk) Compare the performance between a ''socket'' and ''file''? Explain!
Operating Systems Concepts
a) Describe briefly, what a system program is!
b) Give some examples of point 'a'.
c) Describe briefly, what a system call is!
d) Give some examples of point 'c'.
e) Is “disk format” a system program or a system call? Explain!
Operating Systems Exercises Rahmat M. SamikIbrahim http://rms46.vlsm.org/2/171.pdf – rev. 09022200 5
(c) 20082009 All Rights Reversed, All Wrongs Corrected Permission is granted for whatever you can imagine
Intellectual Property Rights
a) Describe briefly the similarities between the Open Source Software and the Free Software
concept!
b) Describe briefly the differences between the Open Source Software and the Free Software
concept!
c) Describe briefly the differences between Free Software and Copyleft!
d) Give an example of a Free Software that is not Copyleft!
Process State I
● At t=0, all processes (P1, P2, P3, P4) are in the ''RDY''
state.
● The ''RUN/W'' (Wait) state patterns of each process are RDY
as following:
➢ P1 (2, 9, 2, 9, 2, 9, ...)
➢ P2 (1, 9, 1, 9, 1, 9, ...)
➢ P3 (2, 6, 2, 6, 2, 6, ...) RUN
➢ P4 (1, 6, 1, 6, 1, 6, ...) W
● Only one process can be in the ''RUN'' state at any
time.
● Many processes can be in the ''W'' and/or ''RDY'' states.
● The ''RDY'' to ''RUN'' transition rules are as following:
➢ Priority is for the process with the shortest waiting time (from recent arrival in ''RDY'').
➢ If ''tie'', priority is given to the process with the smallest index.
➢ If ''RUN'' is empty, a process can directly transit from ''W'' via ''RDY'' to ''RUN''.
a) Please fill the first 25 time units of this following Gantt Chart:
➢ The state of each processes (P1, P2, P3, P4).
➢ Which process is in the RUN state (RUN).
➢ How many processes are in the Ready state (RDY).
RDY 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
P1
RDY 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
P2
RDY 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
P3
RDY 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
P4
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
RUN
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
RDY
b) Calculate (in %), how much the CPU utilization is.
c) What is the average load (in %) of the RDY state?
Operating Systems Exercises Rahmat M. SamikIbrahim http://rms46.vlsm.org/2/171.pdf – rev. 09022200 6
(c) 20082009 All Rights Reversed, All Wrongs Corrected Permission is granted for whatever you can imagine
Process State II
There exists four processes, P1(0:2.0), P2(5:4.9), P3(10:2.9), P4(15:3.3); [where Pn(A:B) means
n=process number; A=starting time; B=CPU time] with this following CPU utilization table:
(I/O Wait = 60%) Multiprogramming Degree
1 2 3 4
CPU busy 40% 64% 78% 88%
CPU busy per process 40% 32% 26% 22%
Please draw a ''processes/time relation'' chart:
P1
P2
P3
P4
5 10 15 20 25 30
Process State III
(See Process State II) There exists four processes, P1(0:4.0), P2(10:4.9), P3(15:2.9), P4(20:3.3);
[where Pn(A:B) means n=process number; A=starting time; B=CPU time].
Process State IV
There exists four processes, A(90: 34.6), B(80: 50), C(70: 46), D(60: 28); [where X(Y:Z) means
X=process; Y=I/O Wait (%); Z=CPU time] with this following CPU utilization table:
Multiprogramming Combination (%)
A B C D A+B A+C A+D B+C B+D C+D A+B+C A+B+D A+C+D B+C+D A+B+
C+D
CPU utilization per proses A 10 9.3 9.3 9.2 8.3 8.1 7.8 7
CPU utilization per proses B 20 19 18 17 17 16 15 14
CPU utilization per proses C 30 28 26 25 25 23 22 21
CPU utilization per proses D 40 37 35 33 32 31 30 28
All processes terminate at the same time. Please draw a ''processes/time relation'' chart and
calculate the starting time of all processes!
A
B
C
D
Operating Systems Exercises Rahmat M. SamikIbrahim http://rms46.vlsm.org/2/171.pdf – rev. 09022200 7
(c) 20082009 All Rights Reversed, All Wrongs Corrected Permission is granted for whatever you can imagine
Process State V
(See Process State IV) There exists four processes, A(90: 0: 1), B(80: 10: 8), C(70: 20: 4.8), D(60:
30: 6.5); [where P(X:Y:Z) means P=process; X=I/O Wait (%); Y=arrival time; Z=CPU time] with this
following CPU utilization table above. Please draw a process/time relation at the diagram above.
Memory I
Explain briefly these following terms:
a) logical address
b) demand paging
c) page fault
d) reference string
e) copy on write
Linux ThreeLevel Page Table I
This following, 008 0200 8004(HEX), is a valid 43 bit Linux Virtual Address with three level
page tables: Global Directory (10 bits), Page Middle Directory (10 bits), and Page Table (10 bits).
a) Convert the base16 address above into base2.
b) Complete the diagram above with its table names, indexes (in base16), pointers (in arrow form), and
memory contents (whatever/random). You may use dotes ''. . .'' for ''and so on''.
c) What is the size of a memory frame?
43 40 32 24 16 8 0
index content
index pointer index pointer index pointer
Linux ThreeLevel Page Table II
What if the address is 004 0100 4002(HEX)?
Operating Systems Exercises Rahmat M. SamikIbrahim http://rms46.vlsm.org/2/171.pdf – rev. 09022200 8
(c) 20082009 All Rights Reversed, All Wrongs Corrected Permission is granted for whatever you can imagine
Linux ThreeLevel Page Table III
What if the address is 000 0000 0000(HEX)?
Buddy Algorithm I
Basically, the ''Buddy Algorithm'' allocates pages in the powerof2. The request will be rounded
up to the next highest power of 2. Give a simple illustration of the this algorithm. Suppose, there
exists a single contiguous memory of 64 pages.
(a) Process A requests 7 pages. (b) Process B requests 3 pages. (c) Process C requests 9
pages. (d) Process B returns its request. (e) Process D requests 9 pages.
initial a b c d e
64 pages
Buddy Algorithm II
(See picture above). (a) Process A requests 9 pages. (b) Process B requests 7 pages. (c) Process C
requests 3 pages. (d) Process B returns its request. (e) Process D requests 1 page.
Buddy Algorithm III
(See picture above). (a) Process A requests 5 pages; (b) Process B requests 3 pages; (c) Process
C requests 5 pages; (d) Process B returns its request; (e) Process D requests 2 pages.
Operating Systems Exercises Rahmat M. SamikIbrahim http://rms46.vlsm.org/2/171.pdf – rev. 09022200 9
(c) 20082009 All Rights Reversed, All Wrongs Corrected Permission is granted for whatever you can imagine
HardDisk (I/O) I
Buffer #1
5 MB/s Buffer #2
disk
Buffer #n
● The disk rotates at 6000 RPM. Each track holds 1000 sectors @ 10 kbytes.
● Whenever one of these two buffers (@10 kbytes) is empty, the system will refill it at a constant
rate of 5 Mbytes per second.
● At t=0, the disk head is at sector=0, Buffer #1 is full, and Buffer #2 is empty.
a) BEST CASE: For a maximal effective transfer rate, at least how many buffers are needed?
How much will be that effective transfer rate? Explain!
b) WORST CASE: For a maximal effective transfer rate, at least how many buffers are needed?
How much will be that effective transfer rate? Explain!
HardDisk (I/O) II
(See picture above)
a) How long will it take to write down 1Mbytes on the same track starting sector 0, sector 1, and
so on?
b) How long will it take to write down 1Mbytes on the same track starting sector 999, sector 998,
sector 997, and so on?
Disk Partitions I
Select device ----first---- --geom/last-- ------sectors-----
Device Cyl Head Sec Cyl Head Sec Base Size Kb
/dev/c0d1 32 16 63
0 0 0 31 15 62 0 32256 16128
Num Sort Type
0 p0 81 MINIX __ __ __ __ __ __ 63 _____ _____
1 p1 81 MINIX __ __ __ __ __ __ ____ _____ _____
2 p2 81 MINIX __ __ __ __ __ __ ____ _____ _____
3 p3 81 MINIX __ __ __ __ __ __ ____ _____ _____
a) Divide a disk into four (4) main partitions. The first partition size is 2048 kbytes. the second one is
4096 kbytes, and the third one is 8192 kbytes. Please fill the blanks of the scheme above.
b) Why does the first partition not start from track #0?
Operating Systems Exercises Rahmat M. SamikIbrahim http://rms46.vlsm.org/2/171.pdf – rev. 09022200 10
(c) 20082009 All Rights Reversed, All Wrongs Corrected Permission is granted for whatever you can imagine
Disk Partitions II
Please fill the blanks of this following scheme:
Select device ----first---- --geom/last-- ------sectors-----
Device Cyl Head Sec Cyl Head Sec Base Size Kb
/dev/c0d1 65 16 63
0 0 0 64 15 62 0 65520 32760
Num Sort Type
0 p0 81 MINIX 0 1 0 __ __ __ 63 _____ _____
1 p1 81 MINIX 4 3 0 __ __ __ 4221 _____ _____
2 p2 81 MINIX 12 5 0 __ __ __ 12411 _____ _____
3 p3 81 MINIX 28 9 0 __ __ __ 28971 _____ _____
Disk Partitions III
Select device ----first---- --geom/last-- ------sectors-----
Device Cyl Head Sec Cyl Head Sec Base Size Kb
/dev/c0d3 65 16 63
0 0 0 64 15 62 0 65520 32760
Num Sort Type
0 p0 81 MINIX ___ ___ ___ ___ ___ ___ 63 _____ 8032
1 p1 81 MINIX ___ ___ ___ ___ ___ ___ ____ _____ 16632
2 p2 81 MINIX ___ ___ ___ ___ ___ ___ ____ _____ 4032
3 p3 81 MINIX ___ ___ ___ ___ ___ ___ ____ _____ _____
a) Please fill the blanks of this following scheme.
b) What is the size of partition /dev/c0d3p2?
c) What is the size of partition /dev/c0d3p1s2?
Operating Systems Exercises Rahmat M. SamikIbrahim http://rms46.vlsm.org/2/171.pdf – rev. 09022200 11
(c) 20082009 All Rights Reversed, All Wrongs Corrected Permission is granted for whatever you can imagine
File System I
data
data
data
data
data …
direct blocks
…
data
data
single indirect
…
double indirect data
This file system is using an inode (unix) alike allocation method. The pointer size is 4 bytes.
Supposed there are 12 pointers in the inode. The first 10 ones point to ''direct blocks'', i.e. the
content (data) of the file. The next one points to a single ''single indirect block'', which points to
''direct blocks''. The last one points to a single ''double indirect block'', which points to ''single
indirect blocks''.
a) If the block size is 100 bytes, what will be the maximum size of the file?
b) If the block size is 1000 bytes, what will be the maximum size of the file?
c) If the block size is N bytes, what will be the maximum size of the file?
File System II
a) (See picture above). This file system is using an inode (unix) alike allocation method. The pointer
size is 2 bytes and the block size is 1000 bytes. Supposed there are 12 pointers in the inode. The
first 10 ones point to ''direct blocks'', ie. the content (data) of the file. The next one points to a
single ''single indirect block'', which points to ''direct blocks''. The last one points to a single
''double indirect block'', which points to ''single indirect blocks''. What is the maximum size of a
file?
b) What is the maximum size of a file if the pointer size is PS bytes, the block size is BS bytes, and
there are PTR pointers in the inode?
Operating Systems Exercises Rahmat M. SamikIbrahim http://rms46.vlsm.org/2/171.pdf – rev. 09022200 12
(c) 20082009 All Rights Reversed, All Wrongs Corrected Permission is granted for whatever you can imagine
Fork I
001 /************************************************************/
002 /* doublefork (c) 2006 Rahmat M. SamikIbrahim, GPLlike */
005 /************************************************************/
006 #include <stdio.h>
007 #include <stdlib.h>
008 /*************************************************** main ***/
009 main()
010 {
011 int pid1, pid2, pid3, pid4;
012
013 pid1=(int) getpid(); /* what is my PID ? */
014 pid2=(int) fork(); /* split parent and child */
015 wait (NULL); /* parent wait for its child */
016 pid3=(int) fork();
017 wait (NULL);
018 pid4=(int) getpid();
019 printf("[%4d] [%4d] [%4d] [%4d]\n", pid1, pid2, pid3, pid4);
020 }
021 /*************************************************************/
Suppose the process ID (PID) is 5000. Assume that each new child process will have the next
sequential PID that is available (5001, 5002, etc.). Please write down the output of these processes!
Fork II
Please write down the output of this following Cprogram ''isengfork1''!
01 /********************************************************/
02 /* isengfork1 (c)2007 Rahmat M. SamikIbrahim, GPLlike */
03 /********************************************************/
04 #include <sys/types.h>
05 #include <stdio.h>
06 #include <unistd.h>
08 main()
09 {
10 int ii=0;
11 if (fork() > 0) ii++;
12 wait(NULL);
13 if (fork() == 0) ii++;
14 wait(NULL);
15 if (fork() < 0) ii++;
16 wait(NULL);
17 printf ("Result = %3.3d \n",ii);
18 }
19 / *******************************************************/
Operating Systems Exercises Rahmat M. SamikIbrahim http://rms46.vlsm.org/2/171.pdf – rev. 09022200 13
(c) 20082009 All Rights Reversed, All Wrongs Corrected Permission is granted for whatever you can imagine
Fork III
Please write down the output of this following Cprogram ''isengfork1''!
01 /********************************************************/
02 /* isengfork2 (c)2008 Rahmat M. SamikIbrahim, GPLlike */
03 /********************************************************/
04 #include <sys/types.h>
05 #include <stdio.h>
06 #include <unistd.h>
08 main()
09 {
10 int ii=2;
11 if (fork() > 0) ii;
12 wait(NULL);
13 if (fork() == 0) ii;
14 wait(NULL);
15 if (fork() < 0) ii;
16 wait(NULL);
17 printf ("Result = %3.3d \n",ii);
18 }
19 / *******************************************************/
Fork IV
01 /* cascafork (c) 2008 Rahmat M. Samik-Ibrahim, GPL-like */
02 /*********************************************************** */
03 #include <sys/types.h>
04 #include <sys/wait.h>
05 #include <stdio.h>
06 #include <stdlib.h>
07 #include <unistd.h>
08 #define DISPLAY "This is PID[%5.5d]\n"
09 /*************************************************** main ** */
10 main(void) {
11 if (fork() != (pid_t) 0) {
12 sleep(1);
13 if (fork() == (pid_t) 0) {
14 sleep(1);
15 if (fork() != (pid_t) 0) {
16 sleep(1);
17 if (fork() == (pid_t) 0) {
18 sleep(1);
19 }
20 }
21 }
22 }
23 printf(DISPLAY, (int) getpid());
24 waitpid(-1,NULL,0);
25 waitpid(-1,NULL,0);
26 exit (0);
27 }
28 /************************************************************/
a) Suppose the process ID (PID) is 5000. Assume that each new child process will have the next
sequential PID that is available (5001, 5002, etc.). Please write down the output sequences of
these processes!
b) What happen if we delete line 12, 14, 16, and 18 [ sleep() ] ?
c) What happen if we delete line 24 and 25 [ waitpid(-1, NULL, 0) ]?
Operating Systems Exercises Rahmat M. SamikIbrahim http://rms46.vlsm.org/2/171.pdf – rev. 09022200 14
(c) 20082009 All Rights Reversed, All Wrongs Corrected Permission is granted for whatever you can imagine
Fork V
Please write down the output of program ''fork6''! Assume the first PID is 5000.
MultiThreads
009 // MultiThreads (c)2006 Rahmat M. SamikIbrahim, GPLlike //
010 // ************************************* MultiThreads *** //
011 public class MultiThreads {
012 public static void main(String args[]) {
013 Engine engine = new Engine(THREAD_COUNT);
014 Thread[] player = new Thread[THREAD_COUNT];
015 for (int ii=0; ii<THREAD_COUNT ; ii++) {
016 player[ii] = new Thread(new Player(ii,engine));
017 player[ii].start();
018 }
019 }
020 private static final int THREAD_COUNT = 4;
021 }
022 // ******************************************* Player *** //
023 class Player implements Runnable {
024 Player(int count, Engine eng) {
025 engine = eng;
026 player_count = count;
027 }
028 public void run() {
029 engine.play(player_count);
030 }
031 private Engine engine;
032 private int player_count;
033 }
034 // ******************************************* Engine *** //
035 class Engine {
036 public Engine(int count) {
037 idx = count1;
038 control = new Semaphore[count];
039 for (int ii=0; ii<count ; ii++) {
040 control[ii] = new Semaphore();
041 }
042 }
043 public void play(int ii) {
044 if (ii < idx) {
045 control[ii+1].acquire();
046 }
047 System.out.println("Player " + ii + " is up...");
048 control[ii].release();
049 }
050 private int idx;
051 private Semaphore[] control;
052 }
053 // **************************************** Semaphore *** //
054 class Semaphore {
055 public Semaphore() {
056 value = 0;
057 }
058 public synchronized void acquire() {
059 while (value == 0) {
060 try { wait(); }
061 catch (InterruptedException e) { }
062 }
063 value;
064 }
065 public synchronized void release() {
066 value++;
067 notify();
068 }
069 private int value;
070 }
a) Please write down the output of this java program!
b) Please explain briefly, the purpose of using the semaphores in this java program!
c) Please, slightly modify the ''Engine class'' so that the output sequence will be the opposite of point
(a). (Hint: 3 lines only, lah! :).
Operating Systems Exercises Rahmat M. SamikIbrahim http://rms46.vlsm.org/2/171.pdf – rev. 09022200 16
(c) 20082009 All Rights Reversed, All Wrongs Corrected Permission is granted for whatever you can imagine
Synchronization I
a) How many semaphore objects are used in this following Java program? Name them one by one!
b) Write down the output of the Java program!
001 /**********************************************************/
002 /* Sakit (c)2007 Rahmat M. SamikIbrahim, GPLlike */
003 /**********************************************************/
004
005 public class Sakit {
006 public static void main(String args[]) {
007 Engine engine = new Engine(strings, strseq);
008 Thread[] printer = new Thread[strings.length];
009 for (int ii = 0; ii < strings.length; ii++) {
010 printer[ii]=new Thread(new Printer(ii, engine));
011 printer[ii].start();
012 }
013 }
014 private final static String strings[]=
015 {"Bapak", "Budi", "kepala", "si", "sakit"};
016 private final static int strseq[]= {0,3,1,4,2};
017 }
020 class Engine {
021 Engine(String str[],int strseq[]) {
022 this.str = str;
023 this.strseq = strseq;
024 semaphore = new Semaphore[str.length];
025 for (int ii=0; ii<str.length; ii++) {
026 semaphore[ii] = new Semaphore();
027 }
028 sequence = 0;
029 semaphore[strseq[sequence++]].release();
030 }
031 public void go(int ii) {
032 semaphore[ii].acquire();
033 System.out.print(str[ii] + " ");
034 if (sequence < strseq.length)
035 semaphore[strseq[sequence++]].release();
036 else
037 System.out.println();
038 }
039 private Semaphore[] semaphore;
040 private String str[];
041 private int strseq[];
042 private int sequence;
043 }
046 class Printer implements Runnable {
047 Printer(int ii, Engine ee) {
048 number = ii;
049 engine = ee;
050 }
051 public void run() {
052 engine.go(number);
053 }
054 private int number;
055 private Engine engine;
056 }
Operating Systems Exercises Rahmat M. SamikIbrahim http://rms46.vlsm.org/2/171.pdf – rev. 09022200 17
(c) 20082009 All Rights Reversed, All Wrongs Corrected Permission is granted for whatever you can imagine
058 /**********************************************************/
059 class Semaphore {
060 public Semaphore() { value = 0; }
061 public Semaphore(int v) { value = v; }
062 public synchronized void acquire() {
063 while (value == 0) {
064 try { wait(); }
065 catch (InterruptedException e) { }
066 }
067 value;
068 }
069 public synchronized void release() {
070 value++;
071 notify();
072 }
073 private int value;
074 }
Synchronization II
01 /**************************************************************/
02 /* MultiStrings (c) 2008 Rahmat M. Samik-Ibrahim, GPL-like */
03 /* $Date: 2008/06/25 12:12:30 $ $Revision: 1.1 $ */
04 /**************************************************************/
05
06 public class MultiStrings {
07 public static void main(String args[]) {
08 Engine engine = new Engine(strings, strseq);
00 Thread[] printer = new Thread[strings.length];
00
09 for (int ii = 0; ii < strings.length; ii++) {
10 printer[ii]=new Thread(new Printer(ii, engine));
11 printer[ii].start();
12 }
13 }
14 private final static String strings[]= { "a", "an", "and",
15 "as", "Design", "Extended", "Implementation", "Machine",
16 "Manager", "Operating", "Resource", "Systems", "The"};
17 private final static int string_array[][] =
18 {{12,9,11,3,1,5,7}, {12,9,11,3,0,10,8}, {9,11,4,2,6}};
19 /* NameA=0 NameC=1 NameE=2
NameB=0 NameD=1 NameF=2 */
21 private final static int strseq[] = string_array[VALUE];
22 }
23
24 /*
25 /**************************************************************/
26 class Engine {
27 Engine(String str[],int strseq[]) {
28 this.str = str;
29 this.strseq = strseq;
30 semaphore = new Semaphore[str.length];
31 for (int ii=0; ii<str.length; ii++) {
32 semaphore[ii] = new Semaphore();
33 }
34 display = true;
35 sequence = 0;
36 semaphore[strseq[sequence++]].release();
37 }
Operating Systems Exercises Rahmat M. SamikIbrahim http://rms46.vlsm.org/2/171.pdf – rev. 09022200 18
(c) 20082009 All Rights Reversed, All Wrongs Corrected Permission is granted for whatever you can imagine
a) See line 19 for the ''VALUE'' of line 21. What is the output of this program?
b) What is the value of ''strseq.length'' in line 42?
c) What is the value of ''str.length'' in line 47?
d) What is the purpose of the loop in line (47 to 49)? What happen if we delete those lines?
Operating Systems Exercises Rahmat M. SamikIbrahim http://rms46.vlsm.org/2/171.pdf – rev. 09022200 19
(c) 20082009 All Rights Reversed, All Wrongs Corrected Permission is granted for whatever you can imagine
Synchronization III
001 // (c) 2003 Silberschatz, Galvin and Gagne.
002 // Slightly modified by Rahmat M. SamikIbrahim
003
004 import java.util.*;
005
006 public class ProducerConsumer
007 {
008 public static void main(String args[]) {
009 BoundedBuffer server = new BoundedBuffer();
010 Thread producerThread = new Thread(new Producer(server));
011 Thread consumerThread = new Thread(new Consumer(server));
012
013 producerThread.start();
014 consumerThread.start();
015 }
016 }
017
018 class Producer implements Runnable
019 {
020 private int prod_time;
021 private BoundedBuffer buffer;
022 private static final int DEFAULT_TIME = 3;
023
024 public Producer(BoundedBuffer bf) { init(bf, DEFAULT_TIME); }
025 public Producer(BoundedBuffer bf, int time) { init(bf, time); }
026
027 private void init(BoundedBuffer bf, int time) {
028 buffer = bf;
029 prod_time = time;
030 }
031
032 public void run() {
033 Date message;
034 while (true) {
035 System.out.println("Producer processing");
036 DelayUtilities.process_time(prod_time);
037 message = new Date();
038 System.out.println("Producer produced " + message);
039 buffer.insert(message);
040 }
041 }
042 }
043
044 class Consumer implements Runnable
045 {
046 private BoundedBuffer buffer;
047 private int cons_time;
048 private static final int DEFAULT_TIME = 3;
049
050 public Consumer(BoundedBuffer bf) { init(bf, DEFAULT_TIME); }
051 public Consumer(BoundedBuffer bf, int time) { init(bf, time); }
052
053 public void run() {
054 Date message;
055 while (true) {
056 System.out.println("Consumer processing");
057 DelayUtilities.process_time(cons_time);
058 System.out.println("Consumer wants to consume.");
059 message = (Date)buffer.remove();
060 }
061 }
062
063 private void init(BoundedBuffer bf, int time) {
064 buffer = bf;
065 cons_time = time;
066 }
067 }
068
Operating Systems Exercises Rahmat M. SamikIbrahim http://rms46.vlsm.org/2/171.pdf – rev. 09022200 20
(c) 20082009 All Rights Reversed, All Wrongs Corrected Permission is granted for whatever you can imagine
069 class BoundedBuffer
070 {
071 private static final int DEFAULT_SIZE = 2;
072 private Semaphore mutex, empty, full;
073 private int count, in, out, buffer_size;
074 private Object[] buffer;
075
076 public BoundedBuffer(int bfsize) { init(bfsize); }
077 public BoundedBuffer() { init(DEFAULT_SIZE); }
078
079 public void insert(Object item) {
080 empty.acquire();
081 mutex.acquire();
082 ++count;
083 buffer[in] = item;
084 in = (in + 1) % buffer_size;
085 System.out.print("INSERT: " + item);
086 if (count == buffer_size)
087 System.out.println(" Buffer Size (FULL)");
088 else
089 System.out.println(" Buffer Size (" + count + ")");
090 mutex.release();
091 full.release();
092 }
094 public Object remove() {
095 full.acquire();
096 mutex.acquire();
097 count;
098 Object item = buffer[out];
099 out = (out + 1) % buffer_size;
100 System.out.print("REMOVE: " + item);
101 if (count == 0)
102 System.out.println(" Buffer Size (EMPTY)");
103 else
104 System.out.println(" Buffer Size (" + count + ")");
105 mutex.release();
106 empty.release();
107 return item;
108 }
109
110 private void init(int bfsize) {
111 count = 0;
112 in = 0;
113 out = 0;
114 buffer_size = bfsize;
115 buffer = new Object[bfsize];
116 mutex = new Semaphore(1);
117 empty = new Semaphore(bfsize);
118 full = new Semaphore(0);
119 }
120 }
121
122 class Semaphore
123 {
124 private int value;
125
126 public Semaphore(int value) { this.value = value; }
127
128 public synchronized void acquire() {
129 while (value <= 0) {
130 try { wait(); }
131 catch (InterruptedException e) { }
132 }
133 value;
134 }
135
136 public synchronized void release() {
137 ++value;
138 notify();
139 }
140 }
141
Operating Systems Exercises Rahmat M. SamikIbrahim http://rms46.vlsm.org/2/171.pdf – rev. 09022200 21
(c) 20082009 All Rights Reversed, All Wrongs Corrected Permission is granted for whatever you can imagine
142 class DelayUtilities
143 {
144 public static void process_time(){ process_time(PROCESS_TIME); }
145 public static void process_time(int duration) {
146 int sleeptime = (int) (duration * Math.random() );
147 try { Thread.sleep(sleeptime*1000); }
148 catch (InterruptedException e) {}
149 }
150 private static final int PROCESS_TIME = 5;
151 }
Analyze this ProducerConsumer.java program.
a) Modify class ProducerConsumer (ONLY) so that these following variables can be easily
assigned: “Bounded Buffer Size (BBS)”, “Producer Process Time (PPT)”, “Consumer Process
Time (CPT)”. For example, BBS=3, PPT=4; CPT=5. Do not rewrite the class, just explain the
changes!
b) Replace class “ProducerConsumer” with “ProducerDistributorConsumer” with two buffers and
add a new class “Distributor”. The first buffer is between Producer and Distributor and the
second class is between Distributor and Consumer.