Là gì Semaphore? Đếm, kiểu nhị phân có ví dụ

Là gì Semaphore?

Semaphore chỉ đơn giản là một biến không âm và được chia sẻ giữa các luồng. Một semaphore là một cơ chế báo hiệu và một luồng đang chờ semaphore có thể được báo hiệu bởi một luồng khác. Nó sử dụng hai thao tác nguyên tử, 1) Wait và 2) Signal để đồng bộ hóa quá trình.

Một semaphore cho phép hoặc không cho phép truy cập vào tài nguyên, điều này phụ thuộc vào cách nó được thiết lập.

Đặc trưng của Semaphore

Đây là đặc điểm của một semaphore:

  • Đây là cơ chế có thể được sử dụng để đồng bộ hóa các tác vụ.
  • Đây là cơ chế đồng bộ hóa cấp thấp.
  • Semaphore sẽ luôn giữ một giá trị nguyên không âm.
  • Semaphore có thể được thực hiện bằng cách sử dụng các hoạt động thử nghiệm và ngắt, nên được thực hiện bằng cách sử dụng trình mô tả tệp.

các loại Semaphores

Hai loại ngữ nghĩa phổ biến là

  • Đếm các ngữ nghĩa
  • Các ngữ nghĩa nhị phân.

Đếm Semaphores

Đây là loại Semaphore sử dụng số đếm giúp nhiệm vụ được tiếp nhận hoặc giải phóng nhiều lần. Nếu số đếm ban đầu = 0, semaphore đếm phải được tạo ở trạng thái không khả dụng.

Đếm Semaphores
Đếm Semaphores

Tuy nhiên, nếu số lượng > 0, semaphore được tạo ở trạng thái khả dụng và số lượng mã thông báo mà nó có bằng với số lượng của nó.

Nhị phân Semaphores

Các semaphore nhị phân khá giống với các semaphore đếm, nhưng giá trị của chúng bị giới hạn ở 0 và 1. Trong loại semaphore này, thao tác chờ chỉ hoạt động nếu semaphore = 1 và thao tác tín hiệu thành công khi semaphore = 0. Rất dễ dàng để thực hiện hơn là đếm các ngữ nghĩa.

Nhị phân Semaphores

Nhị phân Semaphores

Ví dụ về Semaphore

Chương trình dưới đây là quá trình triển khai từng bước, bao gồm việc sử dụng và khai báo semaphore.

Shared var mutex: semaphore = 1;
Process i
    begin
    .
    .
    P(mutex);
    execute CS;
    V(mutex);
    .
    .
    End;

Đợi và Signal Operacác vấn đề trong Semaphores

Cả hai hoạt động này đều được sử dụng để thực hiện đồng bộ hóa quy trình. Mục tiêu của hoạt động semaphore này là loại trừ lẫn nhau.

Chờ Operasản xuất

Kiểu hoạt động semaphore này giúp bạn kiểm soát việc nhập một tác vụ vào phần quan trọng. Tuy nhiên, nếu giá trị wait là dương thì giá trị của đối số wait X sẽ giảm đi. Trong trường hợp giá trị âm hoặc bằng 0, không có thao tác nào được thực hiện. Nó còn được gọi là phép toán P(S).

Sau khi giá trị semaphore giảm xuống và trở thành âm, lệnh sẽ được giữ nguyên cho đến khi các điều kiện yêu cầu được thỏa mãn.

Copy CodeP(S)
{ 
    while (S<=0);
    S--;
}

Signal hoạt động

Đây là loại Semaphore hoạt động được sử dụng để kiểm soát việc thoát khỏi một tác vụ khỏi một phần quan trọng. Nó giúp tăng giá trị của đối số lên 1, được ký hiệu là V(S).

Copy CodeP(S)
{ 
    while (S>=0);
    S++;
}

Đếm Semaphore so với nhị phân Semaphore

Dưới đây là một số khác biệt chính giữa semaphore đếm và nhị phân:

Đếm Semaphore Nhị phân Semaphore
Không loại trừ lẫn nhau Loại trừ lẫn nhau
Bất kỳ giá trị số nguyên nào Chỉ có giá trị 0 và 1
Nhiều hơn một khe cắm Chỉ một chỗ trống
Cung cấp một bộ quy trình Nó có một cơ chế loại trừ lẫn nhau.

Sự khác biệt giữa Semaphore so với Mutex

Thông số Semaphore đột biến
Cơ chế Nó là một loại cơ chế báo hiệu. Đó là một cơ chế khóa.
Loại dữ liệu Semaphore là một biến số nguyên. Mutex chỉ là một đối tượng.
Sửa đổi Các hoạt động chờ đợi và báo hiệu có thể sửa đổi một semaphore. Nó chỉ được sửa đổi bởi quá trình có thể yêu cầu hoặc giải phóng tài nguyên.
Quản lý tài nguyên Nếu không có tài nguyên nào trống thì quy trình sẽ yêu cầu tài nguyên thực hiện thao tác chờ. Nó sẽ đợi cho đến khi số lượng semaphore lớn hơn 0. Nếu nó bị khóa, quá trình này phải chờ. Quá trình này nên được giữ trong một hàng đợi. Điều này chỉ cần được truy cập khi mutex được mở khóa.
Sợi chỉ Bạn có thể có nhiều chủ đề chương trình. Bạn có thể có nhiều luồng chương trình trong mutex nhưng không thể cùng lúc.
TINH THẦN TRÁCH NHIỆM Giá trị có thể được thay đổi bởi bất kỳ quá trình giải phóng hoặc lấy tài nguyên nào. Khóa đối tượng chỉ được giải phóng bởi quá trình đã lấy được khóa trên đó.
Các loại các loại Semaphore đang đếm semaphore và semaphore nhị phân và Mutex không có kiểu con.
Operasản xuất Semaphore giá trị được sửa đổi bằng cách sử dụng hoạt động wait() và signal(). Đối tượng Mutex bị khóa hoặc mở khóa.
Tài nguyên chiếm chỗ Nó bị chiếm dụng nếu tất cả tài nguyên đang được sử dụng và quá trình yêu cầu tài nguyên thực hiện thao tác chờ () và tự chặn cho đến khi số lượng semaphore trở thành >1. Trong trường hợp đối tượng đã bị khóa, quá trình yêu cầu tài nguyên sẽ chờ và được hệ thống xếp hàng đợi trước khi khóa được giải phóng.

Ưu điểm của Semaphores

Dưới đây là những ưu/lợi ích của việc sử dụng Semaphore:

  • Nó cho phép nhiều hơn một luồng truy cập vào phần quan trọng
  • Semaphores độc lập với máy.
  • Semaphores được triển khai trong mã độc lập với máy của vi hạt nhân.
  • Họ không cho phép nhiều tiến trình đi vào phần quan trọng.
  • Vì có nhiều sự chờ đợi trong semaphore nên không bao giờ có sự lãng phí về thời gian và tài nguyên của quy trình.
  • Chúng độc lập với máy, nên được chạy bằng mã độc lập với máy của vi nhân.
  • Chúng cho phép quản lý tài nguyên linh hoạt.

Nhược điểm của semaphores

Đây là nhược điểm/nhược điểm của semaphore

  • Một trong những hạn chế lớn nhất của semaphore là đảo ngược mức độ ưu tiên.
  • Hệ điều hành phải theo dõi tất cả các cuộc gọi để chờ và báo hiệu semaphore.
  • Việc sử dụng chúng không bao giờ được thực thi mà chỉ theo quy ước.
  • Để tránh tình trạng bế tắc trong semaphore, lệnh Wait và Signal các thao tác cần được thực hiện theo đúng thứ tự.
  • Semaphore lập trình rất phức tạp nên có nhiều khả năng không đạt được sự loại trừ lẫn nhau.
  • Nó cũng không phải là một phương pháp thực tế để sử dụng ở quy mô lớn vì việc sử dụng chúng sẽ dẫn đến mất tính mô đun.
  • Semaphore dễ bị lỗi lập trình viên hơn.
  • Nó có thể gây ra bế tắc hoặc vi phạm loại trừ lẫn nhau do lỗi lập trình viên.

Tổng kết

  • Semaphore được định nghĩa là một biến không âm và được chia sẻ giữa các luồng.
  • Đây là cơ chế có thể được sử dụng để đồng bộ hóa các tác vụ.
  • Việc đếm semaphore sử dụng số đếm giúp tác vụ được thực hiện hoặc giải phóng nhiều lần.
  • Các đèn hiệu nhị phân khá giống với các đèn hiệu đếm, nhưng giá trị của chúng bị giới hạn ở 0 và 1.
  • Thao tác chờ giúp bạn kiểm soát việc nhập một nhiệm vụ vào phần quan trọng
  • Signal hoạt động semaphore được sử dụng để kiểm soát việc thoát khỏi một tác vụ từ một phần quan trọng
  • Đếm Semaphore không có loại trừ lẫn nhau trong khi nhị phân Semaphore có sự loại trừ lẫn nhau
  • Semaphore có nghĩa là một cơ chế báo hiệu trong khi Mutex là một cơ chế khóa
  • Semaphore cho phép nhiều hơn một luồng truy cập vào phần quan trọng
  • Một trong những hạn chế lớn nhất của semaphore là đảo ngược mức độ ưu tiên.