% HOMEWORK #2
% re: processes 
%
\documentstyle[11pt,fullpage]{article}
\pagestyle{empty}
\begin{document}

\begin{center}
{\large\bf BACI Projects for an OS Course} 
 
\end{center}

\begin{enumerate}
\item {\bf A's and B's:} For the following 
program outline in Ben-Ari Concurrent Pascal, 
\begin{tabbing}
xxxxxx \= xxx \= \kill 
\> PROGRAM As\_and\_Bs; \\
\\
\> VAR \\
\>\> \{ semaphore declarations \}  \\
\\
\> PROCEDURE A; \\
\> BEGIN (P's and V's only) END; \\
\\
\> PROCEDURE B; \\
\> BEGIN (P's and V's only) END; \\
\\
\> BEGIN \\
\>\> \{ semaphore initializations \} \\
\>\> COBEGIN A;A;A;B;B; COEND; \\
\> END. 
\end{tabbing}
complete the program using {\it general} semaphores so that the
processes ALWAYS terminate in the order A (any copy), B (any copy), A
(any copy), A, B. In addition to the program, 
hand in the results of FIVE executions of the
program using the -apt option. 
Include an explanation (or proof, if you prefer) of why the
program works like it should.

\item {\bf Binary Semaphores:} 
Repeat problem 1 using only BINARY semaphores. In addition, you
can use assignment, incrementing, and decrementing auxiliary INTEGER
variables, along with IF-(testing INTEGER expressions)-THEN-ELSE. 
Consider why this problem can not be solved without counting 
variables. 

\item {\bf More A's and B's:}
Repeat the A and B problem using four concurrent processes 
(A, A, A, and B) such that they terminate in the order A (any copy), 
B, A, A. 

\item {\bf Even More A's and B's:} 
Repeat the A and B problem using eight concurrent processes (A, A, A, A,
B, B, B, B) such that they terminate in the order AABABABB. {\bf
Tough one!} 

\item {\small\bf Busy Waiting versus Semaphores:} 
Using the program developed in the 
general semaphore project above (ABAAB), consider
the performance effect of its execution with your fair and 
your unfair (random) semaphore implementations.
That is, calculate the total number of 
busy waiting loops that occur in each implementation. 
Compare the performance of these two semaphore implementations 
with a busy waiting implementation, i.e., an implementation that
uses the exchange operation for synchronization. In each case, 
use a large number of executions (say,
1000) to obtain better statistics. 
Discuss your results, explaining why one implementation is preferred
over another. 


\end{enumerate}


\end{document}
