-----
5 Liên lạc và đồng bộ hóa giữa các tiến trình
5.1
Liên lạc giữa các tiến trình
Đọc tài liệu sau
(trang 63 > 68): https://drive.google.com/file/d/1P_zsBstk_qvbf531CAV_-rV9GxSE7WwV/view
Xem clip sau: https://www.youtube.com/watch?v=AflseTYHQwg&list=PL67CJL04EcjOMkwHc4F5cdhpauFF-8bi_&index=32
Tiến trình độc lập và tiến trình hợp tác?
Một tiến trình không bị ảnh hưởng bởi một tiến trình khác gọi
là tiến trình độc lập, ngược lại gọi là tiến trình hợp tác (cooperation
process).
Các tiến trình cần phải hợp tác và liên lạc với nhau là để
chia sẻ thông tin, như dùng chung tập tin, bộ nhớ, hoặc hợp tác hoàn thành công
việc.
Cơ chế liên lạc giữa
các tiến trình
Tuy nhiên, do mỗi tiến trình có một không gian địa chỉ riêng
biệt nên chúng không thể dễ dàng trực tiếp liên hệ với nhau, vì vậy, hệ điều
hành sẽ cung cấp các cơ chế để các tiền trình có thể liên lạc được với nhau.
Khi đó, hệ điều hành cần phải giải quyết các vấn đề chính sau:
– Liên kết tường minh hay tiềm ẩn
– Liên lạc theo chế độ đồng bộ hay không đồng bộ
– Liên lạc giữa các tiến trình trong hệ thống tập trung và hệ
thống phân tán
Ví dụ một số cơ chế để liên lạc giữa các tiến trình,
– Liên lạc bằng tín hiệu (signal)
– Liên lạc bằng đường ống (pipe)
– Liên lạc qua vùng nhớ chia sẻ (shared memory)
– Liên lạc bằng thông điệp (message)
– Liên lạc qua socket
5.1.1
Liên lạc bằng tín hiệu
Mỗi tiến trình sở hữu một bảng tín hiệu, mỗi tín hiệu được sử
dụng để thông báo cho tiến trình về một sự kiện nào đó xảy ra. Với mỗi tín hiệu
sẽ có một hàm xử lý tín hiệu (signal handler) do phần cứng hoặc hệ điều hành
cung cấp.
5.1.2
Liên lạc bằng đường ống
Là một kênh liên lạc trực tiếp giữa hai tiến trình, dữ liệu
xuất của tiến trình này được chuyển thành dữ liệu nhập của tiến trình kia dưới
dạng một dòng các byte (theo một chiều duy nhất).
5.1.3 Liên lạc qua vùng nhớ chia sẻ
Có một vùng nhớ vật lý mà các tiến trình cần liên lạc nhau đều
truy cập được.
5.1.4
Liên lạc bằng thông điệp
Các tiến trình không chia sẻ tài nguyên chung và liên lạc với
nhau bằng cách gửi/nhận các thông điệp.
5.1.5
Liên lạc qua socket
Là thiết bị truyền thông hai chiều tương tự như tập tin, có
thể đọc/ghi lên đó, các thao tác đọc/ghi chính là sự trao đổi dữ liệu (có thể
trao đổi giữa các máy khác nhau).
5.2
Đồng
bộ hóa giữa các tiến trình
Đồng bộ các tiến trình là gì ?
Đồng bộ các tiến
trình là bảo đảm các tiến trình xử lý song song không tác động sai lệch đến
nhau.
Tại sao phải đồng bộ giữa các tiến trình ?
– Yêu cầu độc quyền
truy xuất (mutual exclusion) : tại một thời điểm, chỉ có một tiến trình được
quyền truy xuất một tài nguyên không thể chia sẻ.
– Yêu cầu phối hợp
(synchronization) : các tiến trình cần hợp
tác với nhau để hoàn thành công việc. Ví dụ chương trình in sẽ xuất kí tự vào
buffer, chương trình điều khiển máy in (printer driver) sẽ lấy kí tự trong
buffer ra để in. Hai tiến trình này phải phối hợp với nhau để làm sao chương
trình in không được xuất kí tự vào buffer khi buffer đầy mà phải chờ printer
driver lấy bớt dữ liệu trong buffer ra.
Từ hai yêu cầu
trên, chúng ta có hai "bài toán đồng bộ" cần giải quyết là bài toán "độc
quyền truy xuất" (bài toán miền găng) và bài toán "phối hợp thực hiện".
5.2.1 Miền găng
Miền găng (critical
section) là một đoạn mã của tiến trình có khả năng xảy ra lỗi khi truy xuất tài
nguyên dùng chung (ví dụ biến, tập tin).
Bốn điều kiện của
bài toán miền găng :
(1) Tại một thời
điểm không có hai tiến trình cùng ở trong miền găng
(2) Không có giả
thiết về tốc độ của các tiến trình, cũng như về số lượng bộ xử lý
(3) Một tiến
trình bên ngoài miền găng không được ngăn cản các tiến trình khác vào miền găng
(4) Không có tiến
trình nào phải chơ vô hạn để được vào miền găng
5.2.2 Các giải pháp đồng bộ
Có năm nhóm giải
pháp để giải quyết bài toán đồng bộ là :
– Busy waiting
– Sleep and wakeup
– Semaphore
– Monitor
– Message
5.2.3 Nhóm giải pháp Busy waiting (bận thì đợi)
Giải pháp này
chia thành hai loại:
– Sử dụng phần mềm
– Sử dụng phần cứng
Giải pháp phần mềm :
– Thuật toán 1 :
– Thuật toán 2 :
– Thuật toán Peterson :
Giải pháp phần cứng (đọc
thêm)
– Cấm ngắt :
– Sử dụng lệnh TSL (test and set lock) :
5.2.4
Nhóm giải pháp Sleep and wakeup (ngủ và đánh thức)
– Sử dụng lệnh Sleep
và Wakeup :
– Sử dụng cấu trúc Semaphore :
5.2.5
Sử dụng cấu trúc monitor
Bài toán "năm
nhà hiền triết ăn tối".
5.3
Tình trạng tắc nghẽn (deadlock)
Đọc thêm.
5.4
Thực hành
Lab 11. Lập trình bài toán Người sản xuất – Người tiêu thụ. Tham khảo: https://drive.google.com/open?id=0B4FOelgeetqJX1VuN1dBNkJQaHM
Mã nguồn tham khảo: https://drive.google.com/open?id=123su00r2bDIK4Tx_GudI8vqtgo4QFQyN
Lab 12. Lập trình bài toán “Dining philosophers”.
Tham khảo (trang 94, 95): https://drive.google.com/file/d/1P_zsBstk_qvbf531CAV_-rV9GxSE7WwV/view
5.5
Câu hỏi ôn tập
1. Có
năm nhóm giải pháp để giải quyết bài toán đồng bộ là :
A. Busy waiting, Peterson, Semaphore, Monitor, Message
B. Semaphore, Busy waiting, Sleep and wakeup, Monitor, Message
C. Monitor, Busy waiting, Sleep and wakeup, TSL, Message
D. Sleep and wakeup, Busy waiting, Semaphore, Deadlock, Message
2. Ví
dụ một số cơ chế để liên lạc giữa các tiến trình :
A. Signal, pipe, Shared memory, Message, Socket
B. Pipe, Shared memory, Signal, Monitor, Socket
C. Shared memory, Signal, Pipe, Sleep and wakeup, Message,
D. Pipe, Signal, Message, Port, Shared memory
3.
Bài
1, Bài 2 (trang 90, 91): https://drive.google.com/file/d/1P_zsBstk_qvbf531CAV_-rV9GxSE7WwV/view
--------Cập nhật: [09/10/2019]
-------
Bài tiếp theo: Hệ điều hành (5) - Quản lý bộ nhớ & bộ nhớ ảo
Danh sách các bài học