Khi hai hoặc nhiều process hợp tác với nhau, thứ tự thực hiện của chúng phải được duy trì nếu không có thể có xung đột trong process thực hiện của chúng và có thể tạo ra các đầu ra không phù hợp.
Quy trình hợp tác là quy trình có thể ảnh hưởng đến việc thực hiện quy trình khác hoặc có thể bị ảnh hưởng bởi việc thực hiện quy trình khác. Các quy trình như vậy cần phải được đồng bộ hóa để có thể đảm bảo thứ tự thực thi của chúng.
Các bài viết liên quan:
Thủ tục liên quan đến việc duy trì thứ tự thực hiện thích hợp của các quy trình hợp tác được gọi là Đồng bộ hóa Quy trình. Có nhiều cơ chế đồng bộ hóa khác nhau được sử dụng để đồng bộ hóa các quy trình.
Race Condition
Race condition thường xảy ra khi hai hoặc nhiều luồng cố gắng đọc, ghi và có thể đưa ra quyết định dựa trên bộ nhớ mà chúng đang truy cập đồng thời.
Critical Section
Các khu vực của một chương trình cố gắng truy cập các tài nguyên được chia sẻ và có thể gây ra các điều kiện đua được gọi là Critical section. Để tránh tình trạng chạy đua giữa các quy trình, chúng ta cần đảm bảo rằng chỉ một quy trình tại một thời điểm có thể thực thi trong phần quan trọng.
Vấn đề Critical Section
Critical Section là một phần của chương trình cố gắng truy cập các tài nguyên được chia sẻ. Tài nguyên đó có thể là bất kỳ tài nguyên nào trong máy tính như vị trí bộ nhớ, Cấu trúc dữ liệu, CPU hoặc bất kỳ thiết bị IO nào.
Critical Section không thể được thực hiện bởi nhiều quá trình cùng một lúc; hệ điều hành gặp khó khăn trong việc cho phép và không cho phép các tiến trình đi vào Critical Section.
Vấn đề Critical Section được sử dụng để thiết kế một tập hợp các giao thức có thể đảm bảo rằng điều kiện Race giữa các quy trình sẽ không bao giờ phát sinh.
Để đồng bộ hóa các quy trình hợp tác, nhiệm vụ chính của chúng tôi là giải quyết vấn đề Critical Section. Chúng tôi cần cung cấp một giải pháp sao cho các điều kiện sau có thể được thỏa mãn.
Yêu cầu của cơ chế Synchronization
Primary
- Mutual Exclusion
Giải pháp của chúng tôi phải cung cấp sự Mutual Exclusion. Theo Mutual Exclusion, chúng tôi muốn nói rằng nếu một quá trình đang thực thi bên trong Critical Section thì quá trình kia không được nhập vào Critical Section.
- Progess
Progress có nghĩa là nếu một quy trình không cần thực hiện vào Critical Section thì nó không nên dừng các quy trình khác để đi vào Critical Section.
Secondary
- Bounded Waiting. Chúng ta có thể dự đoán thời gian chờ đợi để mọi quá trình đi vào Critical Section. Quá trình không được chờ đợi liên tục để đi vào Critical Section.
- Architectural Neutrality. Cơ chế của chúng ta phải tự nhiên về mặt kiến trúc. Có nghĩa là nếu giải pháp của chúng tôi hoạt động tốt trên một kiến trúc thì nó cũng sẽ chạy trên các kiến trúc khác.