Semaphore là gì? Loại nhị phân, đếm với ví dụ

Mục lục:

Anonim

Semaphore là gì?

Semaphore chỉ đơn giản là một biến không âm và được chia sẻ giữa các luồng. Semaphore là một cơ chế báo hiệu, và một luồng đang đợi trên 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.

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.

Trong hướng dẫn Hệ điều hành (OS) này, bạn sẽ học:

  • Đặc điểm của Semaphore
  • Semaphore là gì?
  • Các loại Semaphores
  • Ví dụ về Semaphore
  • Hoạt động Chờ và Báo hiệu trong Semaphores
  • Đếm Semaphore so với Binary Semaphore
  • Sự khác biệt giữa Semaphore và Mutex
  • Ưu điểm của Semaphores
  • Bất lợi của semaphores

Đặc điểm của Semaphore

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

  • Nó là một cơ chế có thể được sử dụng để cung cấp sự đồng bộ của các tác vụ.
  • Nó là một 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 triển khai bằng cách sử dụng các hoạt động kiểm tra và ngắt, những hoạt động này sẽ được thực thi bằng cách sử dụng bộ mô tả tệp.

Các loại Semaphores

Hai loại semaphores phổ biến là

  • Đếm số bán nguyệt san
  • Semaphores nhị phân.

Đếm Semaphores

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

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

Binary Semaphores

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

Ví dụ về Semaphore

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

Shared var mutex: semaphore = 1;Process ibegin… P(mutex);execute CS;V(mutex);… End;

Hoạt động Chờ và Báo hiệu trong Semaphores

Cả hai thao tác 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ờ hoạt động

Loại hoạt động semaphore này giúp bạn kiểm soát việc nhập một nhiệm vụ vào phần quan trọng. Tuy nhiên, nếu giá trị của đợi là dương, thì giá trị của đối số chờ X sẽ giảm. Trong trường hợp giá trị âm hoặc 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 bị giảm, trở thành giá trị âm, lệnh được giữ 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--;}

Hoạt động tín hiệu

Loại hoạt động Semaphore này được sử dụng để kiểm soát việc thoát ra khỏi một nhiệm vụ từ 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 Binary Semaphore

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

Đếm Semaphore Binary 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 vị trí Chỉ một chỗ trống
Cung cấp một tập hợp các Quy trình Nó có cơ chế loại trừ lẫn nhau.

Sự khác biệt giữa Semaphore và Mutex

Thông số Semaphore Mutex
Cơ chế Nó là một loại cơ chế báo hiệu. Nó 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ờ và báo hiệu có thể sửa đổi một semaphore. Nó chỉ được sửa đổi bởi quy 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 là miễn phí, thì quá trình yêu cầu một tài nguyên sẽ 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 đợi. 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.
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 đồng thời.
Quyền sở hữu Giá trị có thể được thay đổi bởi bất kỳ quá trình nào giải phóng hoặc lấy tài nguyên. Khóa đối tượng chỉ được phát hành bởi quá trình đã lấy được khóa trên đó.
Các loại Các loại Semaphore là đếm semaphore và semaphore nhị phân và Mutex không có kiểu phụ.
Hoạt động Giá trị Semaphore được sửa đổi bằng thao tác wait () và signal (). Đối tượng Mutex bị khóa hoặc mở khóa.
Chiếm tài nguyên Nó bị chiếm dụng nếu tất cả cá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 hoạt động wait () và tự chặn cho đến khi số lượng semaphore trở thành> 1. Trong trường hợp nếu đối tượng đã bị khóa, quá trình yêu cầu tài nguyên sẽ đợi và được hệ thống xếp hàng trước khi khóa được phát hành.

Ư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 luồng truy cập vào phần quan trọng
  • Semaphores không phụ thuộc vào máy móc.
  • Semaphores được triển khai trong mã độc lập với máy của kênh vi mô.
  • Họ không cho phép nhiều quy trình vào phần quan trọng.
  • Vì phải chờ đợi trong semaphore bận rộn, nên không bao giờ lãng phí thời gian xử lý và tài nguyên.
  • Chúng độc lập với máy, nên được chạy trong mã độc lập với máy của kênh vi mô.
  • Chúng cho phép quản lý linh hoạt các nguồn lực.

Bất lợi 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 ư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 cho semaphore.
  • Việc sử dụng chúng không bao giờ được thực thi mà chỉ theo quy ước.
  • Để tránh deadlock trong semaphore, các hoạt động Wait và Signal yêu cầu phải được thực hiện theo đúng thứ tự.
  • Lập trình Semaphore là một công việc phức tạp, vì vậy có khả năng không đạt được 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 trên quy mô lớn vì việc sử dụng chúng 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 của người lập trình.

Tóm lược:

  • Semaphore được định nghĩa là một biến không âm và được chia sẻ giữa các luồng.
  • Nó là một cơ chế có thể được sử dụng để cung cấp sự đồng bộ của các tác vụ.
  • Đếm semaphore sử dụng một số đếm giúp tác vụ được thu nhận hoặc giải phóng nhiều lần.
  • Các semaphores nhị phân khá giống với đếm các semaphores, 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
  • Hoạt động semaphore tín hiệu được sử dụng để kiểm soát việc thoát ra khỏi một nhiệm vụ từ một phần quan trọng
  • Semaphore đếm không có loại trừ lẫn nhau trong khi Semaphore nhị phân có 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 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 ưu tiên.