B – 1: So sánh đặc điểm của CISC và RISC
5.3 Truyền thông và đồng bộ 1 Semaphore
5.3.1 Semaphore
Hình 5-5: truyền thông quá trình
Semaphores là một cấu trúc dữ liệu được định nghĩa để loại trừ khả năng xung đột trong quá trình chia sẻ tài nguyên của các tác vụ trong hoạt động của hệ thống.
Semaphores hỗ trợ hai hoạt động chính như sau:
wait(semaphore): giảm và khoá cho tới khi semaphore được mở
signal(semaphore): tăng và cho phép thêm một luồng mới được tham gia hoạt động
Trong hoạt động phối hợp cùng với semaphore có một hàng đợi gồm các tác vụ cần được thực thi sẽ có một số tình huống hoạt động cơ bản như sau:
Khi một luồng (thread) gọi wait():
Nếu semaphore được mở thì luồng đó sẽ được gia nhập và tiếp tục thực thi
Nếu semaphore đang bị đóng thì nhánh đó sẽ bị khoá và phải nằm chờ trong hàng đợi cho tới khi nào semaphore được mở
signal() sẽ mở semaphore:
nếu một luồng đang nằm trong hàng đợi và không bị khoá
nếu không có luồng nào trong hàng đợi và tín hiệu signal sẽ được nhớ và dành cho luồng tiếp theo
Các loại Semaphore
Mutex semaphore
Cho phép điều khiển hoạt động truy nhập đơn lẻ vào tài nguyên chia sẻ của hệ thống.
Đảm bảo loại trừ xung đột trong hoạt động truy nhập đồng thời của nhiều tác vụ, và chỉ có một tác vụ được thực thi tại mỗi thời điểm.
Counting semaphore
Điều khiển tài nguyên mà có thể phục vụ cùng một lúc nhiều tác vụ hoặc một nguồn tài nguyên cho phép phục vụ một số nhất định các tác vụ không đồng bộ và hoạt động đồng thời.
Nhiều luồng có thể truyền Semaphore
Số lượng luồng được quyết định bởi biến đếm N của Semaphore
Thực chất mutex semaphore là một dạng đặc biệt của counting semaphore với biến đếm N=1.
Sử dụng Semaphore trong việc đồng bộ hai quá trình tạo và sử dụng hạng mục thông qua bộ đệm trung gian.
Nhận xét:
Semaphores có thể được sử dụng để giải quyết bất kỳ một bài toán hay vấn đề đồng bộ truyền thống nào
Tuy nhiên chúng có một số nhược điểm
động đồng bộ nên có thể truy nhập bất kỳ đâu trong hệ thống khó kiểm soát
o Không có sự liên kết chặt chẽ giữa semaphore và dữ liệu mà được nó điều khiển.
o Được sử dụng đồng thời cho cả việc loại trừ xung đột (mutual exclusion) và hoạt động đồng bộ cho các tác vụ (scheduling)
5.3.2 Monitor
Monitor là một ngôn ngữ lập trình được xây dựng để điều khiển việc truy nhập vào vùng dữ liệu chia sẻ trong hoạt động của hệ thống. Mã chương trình đồng bộ được bổ sung vào trong bộ biên dịch và thực thi khi chạy chương trình.
Monitor là một modul đóng gói
Các cấu trúc dữ liệu được chia sẻ
Các thủ tục hoạt động thao tác trên các cấu trúc dữ liệu chia sẻ
Đồng bộ các luồng thực thi đồng thời mà có thể kích hoạt các thủ tục trong hoạt động hệ thống
Monitor có thể bảo vệ dữ liệu khỏi sự truy nhập không có cấu trúc. Nó đảm bảo rằng các luồng truy nhập vào dữ liệu thông qua các thủ tục tương tác theo những cách hợp pháp và có kiểm soát.
Monitor đảm bảo loại trừ xung đột
Chỉ có một luồng có thể thực thi bất kỳ thủ tục nào tại mỗi một thời điểm (luồng trong monitor)
Nếu có một luồng đang thực thi bên trong một monitor nó sẽ khoá các luồng khác muốn vào, do đó monitor cũng phải có một hàng đợi.