Quy trình Syncđồng bộ hóa: Sự cố phần quan trọng trong hệ điều hành
Quy trình là gì Synchrozation?
Quy trình Syncsự hóa thân là nhiệm vụ điều phối việc 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ẻ.
Nó đặc biệt cần thiết trong hệ thống nhiều quy trình khi nhiều quy trình đang chạy cùng nhau và nhiều quy trình cố gắng giành quyền 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ẻ. Do đó, sự thay đổi do một quy trình thực hiện không nhất thiết phải được phản ánh khi các quy trình khác truy cập vào cùng dữ liệu được chia sẻ. Để tránh loại không nhất quán dữ liệu này, các quy trình cần được đồng bộ hóa với nhau.
Quy trình như thế nào Syncđồng bộ hóa hoạt động?
Ví dụ: tiến trình A thay đổi dữ liệu trong một vị trí bộ nhớ trong khi tiến trình B khác đang cố đọc dữ liệu từ tương tự vị trí bộ nhớ. Có khả năng cao là dữ liệu được đọc bởi tiến trình thứ hai sẽ bị sai.
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:
- Phần đầu vào: Đây là một phần của quy trình quyết định sự tham gia của một quy trình cụ thể.
- Phần quan trọng: Phần này cho phép một quá trình nhập và sửa đổi biến chia sẻ.
- Phần thoát: Phần thoát cho phép quá trình khác đang chờ trong Phần nhập vào vào Phần quan trọng. Nó cũng kiểm tra xem một quá trình đã hoàn tất quá trình thực thi của nó có bị loại bỏ thông qua Phần này hay không.
- Phần còn lại: Tất cả các phần khác của Mã, không nằm trong Phần Quan trọng, Đầu vào và Đầu ra, được gọi là 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ởi 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 thị dưới dạng P().
- Việc thoát khỏi phần quan trọng được điều khiển bởi hàm signal(), được biểu thị dưới dạng V().
Trong phần quan trọng, chỉ có một tiến trình duy nhất có thể được thực thi. Các quy trình khác, đang chờ thực thi phần quan trọng của chúng, cần đợi cho đến khi quy trình hiện tại hoàn tất quá trình thực thi của nó.
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 mức ưu tiên mở rộng. Không quá một tiến trình có thể thực thi trong phần quan trọng của nó cùng một lúc.
- Tiến độ: 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 sẽ tham gia trong một khoảng thời gian hữu hạn.
- Chờ đợi ràng buộc: Khi một quy trình đưa ra yêu cầu vào phần quan trọng, sẽ có một giới hạn cụ thể về số lượng quy trình có thể 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 quy trình đi vào phần quan trọng của nó.
Giải pháp cho phần quan trọng
Đang tiến hành Syncđồng bộ hóa, 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 đề về phần quan trọng. Thuật toán này được phát triển bởi 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 quy trình đang thực thi ở trạng thái quan trọng thì quy trình kia chỉ thực thi phần còn lại của 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ỉ có 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ể.
Ví dụ
PROCESS Pi FLAG[i] = true while( (turn != i) AND (CS is !free) ){ wait; } CRITICAL SECTION FLAG[i] = false turn = j; //choose another process to go to CS
- Giả sử có N tiến trình (P1, P2, … PN) và mọi tiến trình tại một thời điểm nào đó đều yêu cầu 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à sai. Vì vậy, bất cứ khi nào một quy trình yêu cầu vào phần quan trọng, nó phải đặt cờ của nó là đúng. Ví dụ Pi muốn vào sẽ đặt FLAG[i]=TRUE.
- Một biến khác gọi là TURN cho biết số tiến trình hiện đang muốn nhập vào CS.
- Quá trình đi vào phần quan trọng trong khi thoát ra 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 vào phần Quan trọng và khi thoát khỏi lượt = 3 và do đó P3 thoát ra khỏi vòng chờ.
Syncphần cứng đồng bộ hóa
Đôi khi các 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 lấy khóa khi vào phần Quan trọng và mở khóa sau khi rời khỏi phầ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ó rảnh bằng cách lấy chính chiếc khóa đó.
Khóa Mutex
SyncĐồng hồ hóa phần cứng không phải là phương pháp đơn giản để triển khai 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à Khóa Mutex cũng được giới thiệu.
Theo cách tiếp cận này, trong phần nhập mã, KHÓA được lấy đối với các tài nguyên quan trọng được sử dụng bên trong phần quan trọng. Trong phần thoát, khóa đó được giải phóng.
Semaphore Dung dịch
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 chờ 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 để đồng bộ hóa quy trình.
Ví dụ
WAIT ( S ): while ( S <= 0 ); S = S - 1; SIGNAL ( S ): S = S + 1;
Tổng kết
- Đồ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ể 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 đầu vào 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ởi quy trình tín hiệu tại một thời điểm cụ thể.
- Ba quy tắc bắt buộc phải được thực thi bởi phần quan trọng là: 1) Loại trừ lẫn nhau 2) Giải pháp xử lý 3) Chờ đợi ràng buộc
- 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à có 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 vào phần quan trọng của nó, sẽ có giới hạn về số lượng 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 đề về 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
- Syncphần cứng đồng bộ hóa 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à Khóa Mutex 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.