ex06a There are task 0, task 1, and task 2. Since we give the highest priority to task 2, then task 2 is started first until it finishes. After that, it continues to the lower priority, in this case: task 1. Task 0 has the lowest priority, that is why it runs at the end. ex06b The output is different with the output from ex06a. Since task 1 and task 2 have the same priority, task 1 is running first because it was first queued in the waiting queue of the scheduler. We can see from the looping that task 1 is created and started first rather than task 2. Finally, task 0 runs at the end as it has the lowest priority. ex06c On the half-way execution of the highest priority task (task 2), there are another two tasks (task 0 and task 1) which are set to have higher priority. So, these two tasks are run immediately. After task 0 and task 1 finish, it will automatically continue to finish the task 2. ex06d There are task 0, task 1, and task 2. From the output, we can see that at the first time task 2 has the highest priority. On its half-way execution, task 2 is modified to be the lowest priority. So, task 2 is delayed. Then the execution will continue to the next highest priority, in this case: task 1. On its half-way execution of task 1, there is another task that has higher priority, in this case: task 0. So, the execution will continue to run task 0. In conclusion, execution of a low-priority task is interrupted when a high-priority task is ready to execute.