With the priority ceiling protocol, it is possible to calculate the maximum time any task can be blocked by the operation of a lower-priority task. What is the rule for calculating this blocking? Illustrate the answer by calculating the maximum blocking time for each task in the following example. A program consists of five tasks, $a, b, c, d, e$ (these are listed in priority order with $a$ having the highest priority), and six resources $R 1, \ldots, R 6$ (protected by semaphores implementing the priority ceiling protocol). The resource accesses have worst case execution times given in Table 11.24.
$$
\begin{array}{cccccc}
\hline \boldsymbol{R 1} & \boldsymbol{R 2} & \boldsymbol{R 3} & \boldsymbol{R} \mathbf{4} & \boldsymbol{R 5} & \boldsymbol{R} \mathbf{6} \\
\hline 50 \mathrm{~ms} & 150 \mathrm{~ms} & 75 \mathrm{~ms} & 300 \mathrm{~ms} & 250 \mathrm{~ms} & 175 \mathrm{~ms} \\
\hline
\end{array}
$$
Resources are used by the tasks according to Table 11.25.
$$
\begin{array}{cc}
\hline \text { Task } & \text { Uses } \\
\hline a & R 3 \\
b & R 1, R 2 \\
c & R 3, R 4, R 5 \\
d & R 1, R 5, R 6 \\
e & R 2, R 6 \\
\hline
\end{array}
$$