Đồng bộ hóa quy trình là gì?
Đồng bộ hóa quy trình là nhiệm vụ phối hợp thực hiện các quy trình theo cách mà không có quy trình nào có thể có quyền truy cập vào cùng một dữ liệu và tài nguyên được chia sẻ.
Nó đặc biệt cần thiết trong một hệ thống đa quy trình khi nhiều quy trình đang chạy cùng nhau và nhiều tiến trình cố gắng truy cập vào cùng một tài nguyên hoặc dữ liệu được chia sẻ cùng một lúc.
Điều này có thể dẫn đến sự không nhất quán của dữ liệu được chia sẻ. Vì vậy, thay đổi được thực hiện bởi một quy trình không nhất thiết được phản ánh khi các quy trình khác truy cập vào cùng một dữ liệu được chia sẻ. Để tránh kiểu dữ liệu không nhất quán này, các quy trình cần được đồng bộ hóa với nhau.
Trong hướng dẫn về hệ điều hành này, bạn sẽ học:
- Đồng bộ hóa quy trình là gì?
- Đồng bộ hóa quy trình hoạt động như thế nào?
- Các phần của một chương trình
- Vấn đề phần quan trọng là gì?
- Quy tắc cho Phần quan trọng
- Giải pháp cho Phần quan trọng
Đồng bộ hóa quy trình hoạt động như thế nào?
Ví dụ, quá trình A thay đổi dữ liệu trong một vị trí bộ nhớ trong khi một quá trình B khác đang cố gắng đọc dữ liệu từ cùng một vị trí bộ nhớ. Có khả năng cao là dữ liệu được đọc bởi quy trình thứ hai sẽ bị sai sót.
Các phần của một chương trình
Dưới đây là bốn yếu tố thiết yếu của phần quan trọng:
- Mục nhập: Là một phần của quy trình quyết định việc nhập của một quy trình cụ thể.
- Phần quan trọng: Phần này cho phép một quy trình nhập và sửa đổi biến được chia sẻ.
- Phần Exit: Phần Exit cho phép tiến trình khác đang đợi trong Phần Entry đi vào các Phần quan trọng. Nó cũng kiểm tra xem một quy trình đã kết thúc quá trình thực thi có nên bị xóa thông qua Phần này hay không.
- Phần Phần còn lại: Tất cả các phần khác của Quy tắc, không nằm trong Phần Quan trọng, Đầu vào và Thoát, được gọi là Phần Phần còn lại.
Vấn đề phần quan trọng là gì?
Phần quan trọng là một đoạn mã có thể được truy cập bằng quy trình tín hiệu tại một thời điểm cụ thể. Phần này bao gồm các tài nguyên dữ liệu được chia sẻ cần được truy cập bởi các quy trình khác.
- Mục nhập vào phần quan trọng được xử lý bởi hàm wait () và nó được biểu diễn dưới dạng P ().
- Lối ra từ phần quan trọng được điều khiển bởi hàm signal (), được biểu diễn dưới dạng V ().
Trong phần quan trọng, chỉ có thể thực hiện một quy trình duy nhất. Các quy trình khác, đang chờ thực hiện phần quan trọng của chúng, cần phải đợi cho đến khi quy trình hiện tại hoàn thành việc thực thi.
Quy tắc cho Phần quan trọng
Phần quan trọng cần phải thực thi cả ba quy tắc:
- Loại trừ lẫn nhau: Loại trừ lẫn nhau là một loại semaphore nhị phân đặc biệt được sử dụng để kiểm soát quyền truy cập vào tài nguyên được chia sẻ. Nó bao gồm một cơ chế kế thừa ưu tiên để tránh các vấn đề đảo ngược ưu tiên mở rộng. Không quá một quy trình có thể thực thi trong phần quan trọng của nó cùng một lúc.
- Tiến trình: Giải pháp này được sử dụng khi không có ai ở trong phần quan trọng và ai đó muốn tham gia. Sau đó, những quy trình không nằm trong phần nhắc nhở của họ sẽ quyết định ai nên đi vào, trong một thời gian hữu hạn.
- Ràng buộc chờ đợi: Khi một quy trình đưa ra yêu cầu tham gia vào phần quan trọng, có một giới hạn cụ thể về số lượng các quy trình có thể tham gia vào phần quan trọng của chúng. Vì vậy, khi đạt đến giới hạn, hệ thống phải cho phép yêu cầu tiến trình đi vào phần quan trọng của nó.
Giải pháp cho Phần quan trọng
Trong Đồng bộ hóa quy trình, phần quan trọng đóng vai trò chính để vấn đề phải được giải quyết.
Dưới đây là một số phương pháp được sử dụng rộng rãi để giải quyết vấn đề phần quan trọng.
Giải pháp Peterson
Giải pháp của Peterson là giải pháp được sử dụng rộng rãi cho các vấn đề phần quan trọng. Thuật toán này được phát triển bởi một nhà khoa học máy tính Peterson, đó là lý do tại sao nó được đặt tên là giải pháp của Peterson.
Trong giải pháp này, khi một quá trình đang thực thi ở trạng thái quan trọng, thì quá trình kia chỉ thực thi phần còn lại của đoạn mã và điều ngược lại có thể xảy ra. Phương pháp này cũng giúp đảm bảo rằng chỉ một quy trình duy nhất chạy trong phần quan trọng tại một thời điểm cụ thể.
Thí dụ
PROCESS PiFLAG[i] = truewhile( (turn != i) AND (CS is !free) ){ wait;}CRITICAL SECTION FLAG[i] = falseturn = j; //choose another process to go to CS
- Giả sử có N quy trình (P1, P2,… PN) và mọi quy trình tại một thời điểm nào đó yêu cầu phải vào Phần quan trọng
- Một mảng FLAG [] có kích thước N được duy trì, theo mặc định là false. Vì vậy, bất cứ khi nào một quy trình yêu cầu nhập phần quan trọng, nó phải đặt cờ của nó là đúng. Ví dụ, nếu Pi muốn nhập, nó sẽ đặt FLAG [i] = TRUE.
- Một biến khác được gọi là TURN cho biết số tiến trình hiện đang muốn nhập vào CS.
- Quy trình đi vào phần quan trọng trong khi thoát sẽ thay đổi TURN thành một số khác từ danh sách các quy trình sẵn sàng.
- Ví dụ: lượt là 2 thì P2 đi vào phần Quan trọng và trong khi thoát ra, lượt = 3 và do đó P3 thoát ra khỏi vòng lặp chờ.
Đồng bộ hóa phần cứng
Một số vấn đề của Phần quan trọng cũng được giải quyết bằng phần cứng. Một số hệ điều hành cung cấp chức năng khóa trong đó Quy trình có được khóa khi vào phần Quan trọng và giải phóng khóa sau khi rời khỏi nó.
Vì vậy, khi một tiến trình khác đang cố gắng vào phần quan trọng, nó sẽ không thể vào được vì nó đã bị khóa. Nó chỉ có thể làm như vậy nếu nó miễn phí bằng cách mua chính khóa.
Mutex Locks
Đồng bộ hóa phần cứng không phải là phương pháp đơn giản để thực hiện cho tất cả mọi người, vì vậy phương pháp phần mềm nghiêm ngặt được gọi là Mutex Locks cũng đã được giới thiệu.
Theo cách tiếp cận này, trong phần nhập của mã, một KHÓA được lấy trên các tài nguyên quan trọng được sử dụng trong phần quan trọng. Trong phần thoát khóa đó được phát hành.
Giải pháp Semaphore
Semaphore chỉ đơn giản là một biến không âm và được chia sẻ giữa các luồng. Đó là một thuật toán hoặc giải pháp khác cho vấn đề phần quan trọng. Nó là một cơ chế báo hiệu và một luồng đang đợi trên một semaphore, có thể được báo hiệu bởi một luồng khác.
Nó sử dụng hai hoạt động nguyên tử, 1) chờ và 2) tín hiệu cho quá trình đồng bộ hóa.
Thí dụ
WAIT ( S ):while ( S <= 0 );S = S - 1;SIGNAL ( S ):S = S + 1;
Tóm lược:
- Đồng bộ hóa quy trình là nhiệm vụ phối hợp thực hiện các quy trình theo cách mà không có hai quy trình nào có thể có quyền truy cập vào cùng một dữ liệu và tài nguyên được chia sẻ.
- Bốn yếu tố của phần quan trọng là 1) Phần tiếp theo 2) Phần quan trọng 3) Phần thoát 4) Phần nhắc nhở
- Phần quan trọng là một đoạn mã có thể được truy cập bằng quy trình tín hiệu tại một thời điểm cụ thể.
- Ba quy tắc phải thực thi theo phần quan trọng là: 1) Loại trừ lẫn nhau 2) Giải pháp quy trình 3) Ràng buộc chờ đợi
- Loại trừ lẫn nhau là một loại semaphore nhị phân đặc biệt được sử dụng để kiểm soát quyền truy cập vào tài nguyên được chia sẻ.
- Giải pháp quy trình được sử dụng khi không có ai ở trong phần quan trọng và ai đó muốn tham gia.
- Trong giải pháp chờ ràng buộc, sau khi một quy trình đưa ra yêu cầu tham gia vào phần quan trọng của nó, sẽ có giới hạn về số lượng các quy trình khác có thể vào phần quan trọng của chúng.
- Giải pháp của Peterson là giải pháp được sử dụng rộng rãi cho các vấn đề phần quan trọng.
- Các vấn đề của Phần quan trọng cũng được giải quyết bằng cách đồng bộ hóa phần cứng
- Đồng bộ hóa phần cứng không phải là một phương pháp đơn giản để thực hiện cho tất cả mọi người, vì vậy phương pháp phần mềm nghiêm ngặt được gọi là Mutex Locks cũng đã được giới thiệu.
- Semaphore là một thuật toán hoặc giải pháp khác cho vấn đề phần quan trọng.