How to test progress and bounded waiting in Peterson's algorithm?

  • Comp Sci
  • Thread starter shivajikobardan
  • Start date
In summary, Petersons's solution for critical section problem satisfied all three. Mutual exclusion was achieved, progress was tested, and bounded waiting was verified.
  • #1
shivajikobardan
674
54
Homework Statement
How to test progress and bounded waiting in Peterson's algorithm?
Relevant Equations
How to test progress and bounded waiting in Peterson's algorithm?
This is Petersons's solution for critical section problem. I want to test mutual exclusion, progress and bounded waiting for it. Of course, it satisfied all three.

Code:
Process0

while(true)
{
intendToEnter0=true;
turn=1;
while(intendToEnter1==T && turn==1);
critical section
intendToEnter0=false;
non-critical section
}Process1while(true)
{
intendToEnter1=true;
turn=0;
while(intendToEnter0==T && turn==0);
critical section
intendToEnter1=false;
non-critical section
}

1) Mutual Exclusion

Definition:

No two cooperating processes can enter into their critical section at the same time. For example, if a process P1 is executing in its critical section, no other cooperating process can enter in the critical section until P1 finishes with it.

Test:

Say P1 is in its critical section.
That means turn=0 & intendToEnter1=true.

Now, P0 attempts to enter its critical section.
That means it sets intendToEnter0=true & turn=1.

In AND condition if any condition is false, the output is false. Both condition are true here, so it waits.So, mutual exclusion is achieved.2) Progress

Definition:

If no process is in its CS and there are one or more processes that wish to enter their CS, this selection cannot be postponed indefinitely.

No process in remainder section can participate in this decision.

How to test?

3) Bounded Waiting

Definition:

After a prcess P has made a request to enter its CS, there is a limit on the number of times that the other processes are allowed to enter their CS, before P's request is granted.
How to test?

How to test?
 
Physics news on Phys.org
  • #2
Here is a discussion on the nuances of implementing a critical section, with multiple examples.
https://rosettacode.org/wiki/Events

It is not merely a single "flavor" which may be why you are confused.
 
  • #3
At the design level, this type of code would normally be tested by exhaustive inspection. At the atomic operation level, each place in the code where shared memory is either set of read is identified. Then all possible combinations of preemption at those points is considered and it is demonstrate by argument that none will allow execution of both critical sections at the same time - while also allowing for eventual execution after proper waiting. Of course, in this case, the design is well known and well documented. So that kind of testing is done.

At the implementation level, I would suggest a couple of shared variables RunningProcess0CS and RunningProcess1CS. I'll leave it to you exactly how you would use and check those variables. Hopefully the OS you are working with has some king of "yield" to prompt context switching. This can sometime be done by "waiting 0 seconds".

Right away, I will tell you that all shared variables (turn, intentToEnter*, RunningProcess*CS) must be declared volatile. Also, you must be running in a system where preemption is possible and that each of the two process while loops has the potential of being preempted by the other process.
 

FAQ: How to test progress and bounded waiting in Peterson's algorithm?

How do you test for mutual exclusion in Peterson's algorithm?

To test for mutual exclusion in Peterson's algorithm, you can ensure that no two processes are in their critical sections simultaneously. This can be done by running multiple processes and checking that when one process is in the critical section, the other process is not. You can use flags or counters to verify that the critical section is accessed exclusively by one process at a time.

How do you verify bounded waiting in Peterson's algorithm?

Bounded waiting in Peterson's algorithm can be verified by ensuring that there is a limit on the number of times other processes can enter their critical sections after a process has made a request to enter its critical section and before the requesting process is granted access. You can implement counters to track the number of entries and exits to the critical section and confirm that the waiting time is bounded.

How can you test the progress condition in Peterson's algorithm?

To test the progress condition, you need to ensure that if no process is in the critical section and there are processes that wish to enter, then only those processes that are not in their remainder sections can participate in deciding which process enters the critical section next. You can simulate multiple processes and check that when the critical section is free, a waiting process is always able to proceed.

What are some common pitfalls when testing Peterson's algorithm?

Common pitfalls include not properly simulating concurrent execution, failing to account for all possible interleavings of process execution, and not correctly implementing the algorithm's entry and exit protocols. Another pitfall is not adequately handling the shared variables used for coordination, leading to incorrect test results.

How can you automate the testing of Peterson's algorithm?

Automating the testing of Peterson's algorithm can be achieved by writing test scripts that simulate multiple processes trying to enter and exit their critical sections. These scripts can include assertions to check mutual exclusion, bounded waiting, and progress conditions. Additionally, using tools like model checkers can help verify the correctness of the algorithm under various scenarios.

Similar threads

Replies
4
Views
1K
Replies
12
Views
2K
Replies
14
Views
4K
Replies
1
Views
974
Replies
15
Views
2K
Back
Top