Rate this post

Đây là một cơ chế phần mềm được thực hiện ở chế độ người dùng. Đó là một giải pháp chờ đợi bận rộn chỉ có thể được thực hiện cho hai process. Nó sử dụng hai variables turn variable và interested variable.

Các bài viết liên quan:

Mã của giải pháp được đưa ra dưới đây

# define N 2   
# define TRUE 1  
# define FALSE 0   
int interested[N] = FALSE;  
int turn;   
voidEntry_Section (int process)   
{  
    int other;   
    other = 1-process;  
    interested[process] = TRUE;  
    turn = process;   
    while (interested [other] =True && TURN=process);  
}  
voidExit_Section (int process)  
{  
    interested [process] = FALSE;  
}  

Cho đến nay, mỗi giải pháp của chúng tôi đều bị ảnh hưởng bởi vấn đề này hoặc vấn đề khác. Tuy nhiên, giải pháp Peterson cung cấp cho bạn tất cả các yêu cầu cần thiết như Mutual Exclusion, Progress, Bounded Waiting và Portability.

Xem thêm Toán tử Query và Projection trong MongoDB

Phân tích Giải pháp Peterson

voidEntry_Section (int process)   
{  
    1. int other;   
    2. other = 1-process;  
    3. interested[process] = TRUE;  
    4. turn = process;   
    5. while (interested [other] =True && TURN=process);  
}  
  
Critical Section   
  
voidExit_Section (int process)  
{  
    6. interested [process] = FALSE;  
}  

Đây là một giải pháp hai quá trình. Chúng ta hãy xem xét hai quá trình hợp tác P1 và P2. Phần vào và phần thoát được hiển thị bên dưới. Ban đầu, giá trị của các biến quan tâm và biến lần lượt là 0.

Ban đầu quá trình P1 đến và muốn đi vào phần quan trọng. Nó đặt biến quan tâm của nó thành True (dòng lệnh 3) và cũng đặt biến thành 1 (dòng số 4). Vì điều kiện đưa ra trong dòng số 5 hoàn toàn được thỏa mãn bởi P1 nên nó sẽ được đưa vào phần quan trọng.

  1. P1 → 1 2 3 4 5 CS   

Trong khi đó, quá trình P1 được ưu tiên và quá trình P2 đã được lên lịch. P2 cũng muốn nhập vào phần quan trọng và thực hiện các hướng dẫn 1, 2, 3 và 4 của phần nhập. Ở hướng dẫn 5, nó bị mắc kẹt vì nó không thỏa mãn điều kiện (giá trị của biến quan tâm khác vẫn đúng). Do đó, nó rơi vào tình trạng chờ đợi bận rộn.

  1. P2 → 1 2 3 4 5   

P1 lại được lên lịch và kết thúc phần quan trọng bằng cách thực hiện lệnh số. 6 (đặt biến quan tâm thành false). Bây giờ nếu P2 kiểm tra thì nó sẽ thỏa mãn điều kiện vì biến quan tâm của process khác trở thành sai. P2 cũng sẽ được vào phần quan trọng.

  1. P1 → 6   
  2. P2 → 5 CS  

Bất kỳ quá trình nào cũng có thể nhập vào phần quan trọng nhiều lần. Do đó thủ tục xảy ra theo thứ tự tuần hoàn.

Xem thêm Kiểm tra các biện pháp bảo vệ chống lại việc lạm dụng ứng dụng

Mutual Exclusion

Phương pháp này chắc chắn cung cấp sự Mutual Exclusion. Trong phần nhập, điều kiện while liên quan đến tiêu chí cho hai biến, do đó một quá trình không thể nhập vào phần quan trọng cho đến khi quá trình khác quan tâm và quá trình là lần cuối cùng cập nhật biến.

Progress

Một quá trình không quan tâm sẽ không bao giờ ngăn quá trình quan tâm khác tham gia vào phần quan trọng. Nếu quá trình khác cũng được quan tâm thì quá trình này sẽ đợi.

Bounded Waiting

Cơ chế biến quan tâm không thành công vì nó không cung cấp thời gian chờ có giới hạn. Tuy nhiên, trong giải pháp Peterson, một deadlock không bao giờ có thể xảy ra vì quá trình đầu tiên đặt biến lần lượt sẽ chắc chắn đi vào phần quan trọng. Do đó, nếu một process được ưu tiên sau khi thực hiện dòng số 4 của phần mục nhập thì nó chắc chắn sẽ đi vào phần quan trọng trong cơ hội tiếp theo.

Portability

Đây là giải pháp phần mềm hoàn chỉnh và do đó nó có thể di động trên mọi phần cứng.

Xem thêm Phương pháp tấn công Blind SQL Injection

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now