You are on page 1of 72

TRƯỜNG ĐẠI HỌC SÀI GÒN

CHƯƠNG 2
BÀI: ĐỒNG BỘ HÓA TIẾN TRÌNH
GV: LƯƠNG MINH HUẤN
NỘI DUNG
I. Tổng quan giao tiếp tiến trình
II. Tài nguyên găng, đoạn găng
III. Vấn đề đồng bộ hóa
IV. Giải pháp phần mềm
V. Các giải pháp phần cứng
VI. Semaphore
VII.Monitors
VIII.Giải pháp trao đổi thông điệp.
IX. Các ví dụ kinh điển
I. TỔNG QUAN GIAO TIẾP TIẾN TRÌNH
➢Tiến trình độc lập: không ảnh hưởng và không bị ảnh hưởng bởi
việc thực thi của các tiến trình khác.
➢Tiến trình hợp tác (không độc lập): có thể ảnh hưởng và bị ảnh
hưởng bởi việc thực thi của các tiến trình khác.
➢Ưu điểm của việc hợp tác tiến trình:
▪ Chia sẻ thông tin
▪ Tăng tốc tính toán (xử lý song song): thời gian I/O và thời gian CPU
▪ Tính module hóa
▪ Tiện lợi
HỢP TÁC BẰNG VIỆC CHIA SẺ
➢Các tiến trình sử dụng và cập nhập dữ liệu chia sẻ như các biến,
file và cơ sở dữ liệu dùng chung.
➢Thao tác ghi phải độc lập từng đôi một để ngăn ngừa tình trạng
đụng độ, có thể dẫn đến tính không toàn vẹn dữ liệu.
➢Các miền găng dùng để cung cấp sự toàn vẹn dữ liệu.
➢Một tiến trình đòi hỏi miền găng phải không bị chờ mãi mãi:
deadlock hoặc starvation.
HỢP TÁC BẰNG VIỆC GIAO TIẾP
➢Giao tiếp cung cấp phương cách để đồng bộ hóa nhiều hoạt động.
➢Có khả năng deadlock
▪ Mỗi tiến trình đều chờ thông điệp từ một tiến trình khác.
➢Có khả năng xảy ra tình trạng đói (starvation)
▪ Hai tiến trình gởi thông điệp cho nhau trong khi một tiến trình khác
chờ thông điệp.
CÁC VẤN ĐỀ
➢Tranh chấp
▪ Nhiều tiến trình truy xuất đồng thời một tài nguyên mang bản chất
không chia sẻ được.
• Vấn đề tranh đoạt điều khiển (race condition)
▪ Kết quả?
• Khó biết, nhưng thường là sai.
▪ Luôn luôn nguy hiểm?
• Nếu cân nhắc kỹ càng có thể giảm bớt sự nguy hiểm.
CÁC VẤN ĐỀ
➢Phối hợp
▪ Các tiến trình không biết tương quan xử lý của nhau để điều chỉnh
hoạt động nhịp nhàng.
• Phối hợp xử lý (Rendez-vous)
▪ Kết quả: khó biết, thường không ăn khớp.
TRANH ĐOẠT ĐIỀU KHIỂN
➢Ai sẽ thắng?
PHỐI HỢP HÀNH ĐỘNG
PHỐI HỢP HÀNH ĐỘNG
II. TÀI NGUYÊN GĂNG – ĐOẠN GĂNG
➢Những tài nguyên có nguy cơ bị hư hỏng, sai lệch khi được hệ điều
hành chia sẻ đồng thời cho nhiều tiến trình được gọi là tài nguyên
găng (critical resource).
➢Tài nguyên găng có thể là thiết bị vật lý hoặc dữ liệu dùng chung
➢Ví dụ:
TÀI NGUYÊN GĂNG
➢Trường hợp chỉ còn 1 vé (SCA=1):
➢Tài nguyên găng là biến SCA đã bị tranh chấp.
ĐOẠN GĂNG
➢Đoạn găng (Critical Section) hay miền găng là đoạn mã có tác
động đến các tài nguyên găng, chỉ cho phép một tiểu trình (tiến
trình) thi hành tại một thời điểm.
▪ Tiểu trình (tiến trình) được gọi là đi vào miền găng.
▪ Loại trừ hỗ tương và miền găng là hai khái niệm cùng một mục đích.
ĐOẠN GĂNG
➢Cấu trúc chương trình khi có đoạn găng
<noncritical section>
<entercritical section> {kiểm tra và xác lập quyền vào đoạn găng}
<critical section>
<exitcritical section> {xác nhận khi rời đoạn găng}
<noncritical section>
III. VẤN ĐỀ ĐỒNG BỘ HÓA
➢Khi có nhiều tiến trình sử dụng tài nguyên găng thì phải đồng bộ.
➢Mục đích là để đảm bảo không có một tiến trình nằm trong đoạn
găng.
➢Cần thỏa mãn 3 điều kiện:
▪ Loại trừ lẫn nhau (Mutual Exclusion).
▪ Tiến triển (Progress)
▪ Chờ đợi hữu hạn (Bounded waiting).
III. VẤN ĐỀ ĐỒNG BỘ HÓA
➢Mutual Exclusion: Không có hai tiến trình cùng ở trong miền
găng cùng lúc.
➢Progess: Một tiến trình tạm dừng 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
➢Bounded Waiting: Không có tiến trình nào phải chờ vô hạn để
được vào miền găng.
CÁC GIẢI PHÁP ĐỒNG BỘ HÓA
➢Nhóm giải pháp Busy Waiting: tiếp tục tiêu thụ CPU trong khi chờ
đợi vào miền găng. Không đòi hỏi sự trợ giúp của hệ điều hành.
▪ Phần mềm
• Giải pháp của Peterson
• Sử dụng các biến cờ hiệu
• Sử dụng việc kiểm tra luân phiên
▪ Phần cứng
• Cấm ngắt
• Chỉ thị TSL
CÁC GIẢI PHÁP ĐỒNG BỘ HÓA
➢Nhóm giải pháp Sleep wakeup: từ bỏ CPU khi chưa được vào CS
(miền găng). Khi CS trống sẽ được đánh thức để vào CS. Cần
được hệ điều hành hổ trợ.
▪ Semophore
▪ Monitor
▪ Message
IV. GIẢI PHÁP PHẦN MỀM
➢Sử dụng biến cờ hiệu:
IV. GIẢI PHÁP PHẦN MỀM
➢Có thể mở rộng cho n tiến trình.
➢Không bảo đảm mutual exclusion.
➢Bản thân đoạn code kiểm tra và dành quyền cũng là miền găng
(CS).
IV. GIẢI PHÁP PHẦN MỀM
➢Kiểm tra luân phiên:
IV. GIẢI PHÁP PHẦN MỀM
IV. GIẢI PHÁP PHẦN MỀM
➢Chỉ dành cho 2 tiến trình
➢Bảo đảm mutual exclusion.
▪ Chỉ có 1 biến turn tại 1 thời điểm, chỉ cho 1 tiến trình vào CS.
➢Không bảo đảm progress.
▪ Mở cửa cho tiến trình khác thì tự đóng lấy chính mình.
IV. GIẢI PHÁP PHẦN MỀM
➢Giải pháp Peterson
➢Giải quyết P0, P1 chia sẻ 2 biến chung, kết hợp 2 ý tưởng ở trên.
▪ int turn; //đến phiên ai
▪ int interest[2] = FALSE; //interest[i] = T : Pi muốn vào CS
IV. GIẢI PHÁP PHẦN MỀM
IV. GIẢI PHÁP PHẦN MỀM
➢ Giải pháp phần mềm Peterson đáp ứng được cả 3 điều kiện:
➢ Mutual Exclusion :
▪ Pi chỉ có thể vào CS khi: interest[j] == F hay turn == i
▪ Nếu cả 2 muốn về thì do turn chỉ có thể nhận giá trị 0 hay 1 nên chỉ có 1
tiến trình vào CS
➢ Progress
▪ Sử dụng 2 biến interest[i] riêng biệt => trạng thái đối phương không khóa
được mình.
➢ Bounded Wait : interest[i] và turn đều có thay đổi giá trị.
➢ Không thể mở rộng cho N tiến trình
IV. GIẢI PHÁP PHẦN MỀM
➢Nhìn chung đối với các giải pháp phần mềm:
▪ Không cần sự hổ trợ của hệ thống.
▪ Khó mở rộng.
▪ Dễ dẫn đến sai.
V. GIẢI PHÁP PHẦN CỨNG
➢Giải pháp cấm ngắt:
➢Disable Interrupt: cấm mọi ngắt, kể cả ngắt đồng hồ
➢Enable Interrupt: cho phép ngắt.
V. GIẢI PHÁP PHẦN CỨNG
➢Thiếu thận trọng
➢Nếu tiến trình bị khóa trong CS ?
▪ System Halt
➢Cho phép tiến trình sử dụng một đặc quyền
▪ Quá ...liều !
▪ Máy có N CPUs ?
➢Không bảo đảm được Mutual Exclusion
V. GIẢI PHÁP PHẦN CỨNG
➢Giải pháp chỉ thị TSL:
▪ CPU hỗ trợ primitive Test and Set Lock
• Trả về giá trị hiện hành của 1 biến, và đặt lại giá trị True cho biến
• Thực hiện một cách không thể phân chia
TSL (boolean &target)
{
TSL = target;
target = TRUE;
}
V. GIẢI PHÁP PHẦN CỨNG
➢Áp dụng TSL
V. GIẢI PHÁP PHẦN CỨNG
➢Nhìn chung đối với các giải pháp phần cứng:
▪ Dễ mở rộng cho n tiến trình.
▪ Cần được sự hổ trợ của cơ chế phần cứng.
• Đối với các máy có nhiều vi xử lý, điều này không dễ.
VI. SEMAPHORE
➢Được đề nghị bởi Dijkstra năm 1965
➢Các đặc tính: Semaphore s;
▪ Có 1 giá trị nguyên dương
▪ Chỉ được thao tác bởi 2 primitives :
• Down(s)
• Up(s)
▪ Các primitive Down và Up được thực hiện không thể phân chia
VI. SEMAPHORE
➢Semaphore được xem như là một resource
▪ Các tiến trình “yêu cầu” semaphore : gọi Down(s)
• Nếu không hoàn tất được Down(s) : chưa được cấp resource
– Blocked, được đưa vào s.L
➢Cần có sự hỗ trợ của HĐH
▪ Sleep() & Wakeup()
VI. SEMAPHORE
VI. SEMAPHORE
➢Tổ chức “độc quyền truy xuất”
VI. SEMAPHORE
➢Tổ chức “hò hẹn”
VI. SEMAPHORE
➢Là một cơ chế tốt để thực hiện đồng bộ
▪ Dễ dùng cho N tiến trình
➢Nhưng ý nghĩa sử dụng không rõ ràng
▪ MutualExclusion : Down & Up
▪ Rendez-vous : Down & Up
▪ Chưa phân biệt qua mô hình
➢Khó sử dụng đúng
▪ Dễ nhầm lẫn
VII. MONITOR
➢Đề xuất bởi Hoare(1974) & Brinch (1975)
➢Là cơ chế đồng bộ hóa do NNLT cung cấp
▪ Hỗ trợ các chức năng như Semaphore
▪ Dễ sử dụng và kiểm soát hơn Semaphore
• Đảm bảo Mutual Exclusion một cách tự động
• Sử dụng biến điều kiện để thực hiện Synchronization
MONITOR : NGỮ NGHĨA VÀ TÍNH CHẤT
➢Là một module chương trình định nghĩa
▪ Các CTDL, đối tượngdùng chung
▪ Các phương thứcxử lý các đối tượng này
▪ Đảm bảo tính encapsulation
➢Các tiến trình muốn truyxuất dữ liệu bên
trong monitor phải dùng các phương thức
của monitor :
▪ P1 : M.C() // i=5
▪ P2: M.B() // printf(j)
MONITOR : NGỮ NGHĨA VÀ TÍNH CHẤT
➢Tự động bảo đảm Mutual Exclusion
▪ Tại 1 thời điểm chỉ có 1 tiến trình thực hiện các phương thức của
Monitor
▪ Các tiến trình không vào được Monitor sẽ được đưa vào Entry queue của
Monitor
➢Ví dụ
▪ P1 : M.A();
▪ P6 : M.B();
▪ P7 : M.A();
▪ P8 : M.C();
MONITOR : NGỮ NGHĨA VÀ TÍNH CHẤT
MONITOR : NGỮ NGHĨA VÀ TÍNH CHẤT
➢Hỗ trợ Synchronization với
các condition variables
▪ Wait(c) : Tiến trình gọi hàm
sẽ bị blocked
▪ Signal(c): Giải phóng 1 tiến
trình đang bị blocked trên
biến điều kiện c
▪ C.queue: danh sách các tiến
trình blocked trên c
MONITOR : NGỮ NGHĨA VÀ TÍNH CHẤT
➢Trạng thái tiến trình sau khi
gọi Signal?
▪ Blocked. Nhường quyền
vào monitor chotiến trình
được đánh thức.
▪ Tiếp tục xử lý hết chu kỳ,
rồi blocked
SỬ DỤNG MONITOR
VIII. GIẢI PHÁP TRAO ĐỔI THÔNG ĐIỆP
➢Được hỗ trợ bởi HĐH
➢Đồng bộ hóa trên môi trường phân tán
➢2 primitive Send & Receive
▪ Cài đặt theo mode blocking
IX. VÍ DỤ KINH ĐIỂN
➢Producer –Consumer
➢Readers –Writers
➢Dinning Philosophers
PRODUCER -CONSUMER (BOUNDED-BUFFER PROBLEM)
➢Mô tả : 2 tiến trình P và C hoạt
động đồng hành
▪ P sản xuất hàng và đặt vào Buffer
▪ C lấy hàng từ Buffer đi tiêu thụ
▪ Buffer có kích thước giới hạn
➢Tình huống
▪ P và C đồng thời truy cập Buffer ?
▪ P thêm hàng vào Buffer đầy ?
▪ C lấy hàng từ Buffer trống ?
PRODUCER –CONSUMMER: GIẢI PHÁP SEMAPHORE
➢Các biến chung giữa P và C
▪ BufferSize = N; // số chỗ trong bộ đệm
▪ semaphore mutex = 1 ; // kiểm soát truy xuất độc quyền
▪ semaphore empty = BufferSize; // số chỗ trống
▪ semaphore full = 0; // số chỗ đầy
▪ int Buffer[BufferSize];// bộ đệm dùng chung
PRODUCER –CONSUMMER: GIẢI PHÁP SEMAPHORE
PRODUCER –CONSUMMER: GIẢI PHÁP SEMAPHORE
PRODUCER –CONSUMMER : GIẢI PHÁP MONITOR
PRODUCER –CONSUMMER : GIẢI PHÁP MONITOR
PRODUCER –CONSUMMER: GIẢI PHÁP MESSAGE
READERS & WRITERS
➢ Mô tả: N tiến trình Ws và Rs hoạt động đồng hành
▪ Rs và Ws chia sẻ CSDL
▪ W cập nhật nội dung CSDL
▪ Rs truy cập nội dung CSDL
➢ Tình huống
▪ Các Rs cùng truy cập CSDL ?
▪ W đang cập nhật CSDL thì các Rs truy cập CSDL ?
▪ Các Rs đang truy cập CSDL thì W muốn cập nhật CSDL ?
READERS-WRITERS VỚI “ACTIVE READERS”
READERS-WRITERS VỚI MỘT “ACTIVE WRITER”
Ưu tiên ai hơn đây?
READERS & WRITERS
➢W độc quyền truy xuất CSDL
➢W hiện tại kết thúc cập nhật CSDL : ai vào?
▪ Cho W khác vào, các Rs phải đợi
• Ưu tiên Writer, Reader có thể starvation
▪ Cho các Rs vào, Ws khác phải đợi
• Ưu tiên Reader, Writer có thể starvation
READERS & WRITERS : GIẢI PHÁP SEMAPHORE
➢Các biến dùng chung giữa Rs và Ws
▪ semaphore db = 1; // Kiểm tra truy xuất CSDL
READERS & WRITERS : GIẢI PHÁP SEMAPHORE
READERS & WRITERS : GIẢI PHÁP SEMAPHORE
➢Các biến dùng chung giữa Rs và Ws
▪ semaphore db = 1; // Kiểm tra truy xuất CSDL
➢Các biến dùng chung giữa Rs
▪ int rc; // Số lượng tiến trình Reader
▪ semaphore mutex = 1; // Kiểm tra truy xuất rc
READERS & WRITERS : GIẢI PHÁP SEMAPHORE
R&W : Giải pháp Semaphore (Thinking...)
R&W: GIẢI PHÁP MONITOR
R&W: GIẢI PHÁP MONITOR
R&W: GIẢI PHÁP MONITOR
DINING PHILOSOPHERS
➢Năm triết gia ngồi chung quanh bàn ăn món
spaghetti
▪ Trên bàn có 5 cái nĩa được đặt giữa 5 cái đĩa
(xem hình)
▪ Để ăn món spaghetti mỗi người cần có 2 cái
nĩa
➢Triết gia thứ i:
▪ Thinking...
▪ Eating...
Dining Philosophers: Tình huống nguy hiểm
➢2 triết gia “giành giật” cùng 1 cái nĩa
▪ Tranh chấp
▪ Cần đồng bộ hóa hoạt động của các triết gia
Dining Philosophers : Giải pháp đồng bộ
semaphore fork[5] = 1;
Philosopher (i)
{
while(true)
{
down(fork[i]);
down(fork[i+1 mod 5])
eat;
up(fork[i]);
up(fork[i+1 mod 5]);
think;
}
DINING PHILOSOPHERS : THÁCH THỨC
➢Cần đồng bộ sao cho:
▪ Không có deadlock
▪ Không có starvation

You might also like