Chng 3 Qun l cc qu trnh ng
- Slides: 44
Chương 3 Quản lý các quá trình đồng thời 1
Mục đích và yêu cầu Mục đích: • Hiểu được các quá trình thực thi đồng thời và “Critical-Section” • Hiểu được các nguyên lý cơ bản trong giải quyết tranh chấp bằng phần mềm, phần cứng và Semaphore. Yêu cầu: • Áp dụng lý thuyết để thực hiện được một số bài tập liên quan 2
Nội dung • • • Khái niệm cơ bản Bài toán “ Critical-Section” Các giải pháp phần mềm Đồng bộ bằng phần cứng Semaphore 3
Khái niệm cơ bản 4
Bounded Buffer (t, t) 5
Race Condition 6
Ví dụ về Condition 7
Critical Section 8
Critical Section và Mutual Exclusion 9
Cấu trúc tổng quát 10
Ràng buộc của bài toán tranh chấp 11
Phân loại giải pháp 12
Giải pháp phần mềm 13
Giải thuật 1 14
Giải thuật 1(t. t) 15
Giải thuật 2 16
Giải thuật 3 (Peterson) 17
Giải thuật Peterson-2 process 18
Giải thuật 3: Tính đúng đắn 19
Giải thuật 3: Tính đúng đắn (t. t) 20
Trường hợp process bị “chết” 21
Giải thuật Bakery: N process 22
Giải thuật Bakery: N process(t. t) 23
Từ software đến hardware 24
Cấm ngắt 25
Dùng các lệnh đặc biệt 26
Lệnh test – and – set(TSL) 27
Lệnh test – and – set(t. t) 28
Thảo luận lệnh test-and-set • Cũng giống như các giải pháp phần cứng khác. TSL giảm nhẹ công việc lập trình để giải quyết vấn đề, nhưng lại không dễ dàng để cài đặt TLS sao cho được xử lý một cách không thể phân chia, nhất là trên máy với cấu hình nhiều bộ xử lý. • Các giải pháp buộc quá trình phải liên tục kiểm tra điều kiện để phát hiện thời điểm thích hợp được vào CS như thế được gọi các giải pháp “ busy waiting”. Việc kiểm tra tốn nhiều thời gian sử dụng CPU do vậy quá trình đang chờ vẫn chiếm dụng CPU. Xu hướng giải quyết vấn đề đồng bộ hoá nên tránh các giải pháp “ busy waiting”. 29
Giải pháp “SLEEP and WAKEUP” Để loại bỏ các bất tiện của “busy waiting”. Chúng ta có thể tiếp cận theo hướng cho một quá trình chưa đủ cond vào CS chuyển sang trạng thái blocked, từ bỏ quyền sử dụng CPU. Để phục vụ điều này cần hai thủ tục do Os cung cấp là SLEEP and WAKEUP • SLEEP : tạm dừng hoạt của quá trình (Blocked) gọi nó và chờ đến khi được một quá trình khác “đánh thức”. • WAKEUP: nhận một tham số duy nhất: quá trình sẽ được tái kích hoạt (đặt về trạng thái ready). 30
Cấu trúc chương trình trong SLEEP and WAKEUP Int busy // 1 nếu CS bị chiếm Int blocked // số lượng quá trình đang bị khoá While {true} { if (busy) { blocked = blocked +1; sleep(); } else busy =1; critical-section(); busy =0; if (blocked) { wakeup(process); blocked = blocked -1; } Non critical- section(); } 31
Semaphore • Được Dijkstra đề xuất vào năm 1965. một semaphore s là một biến cố có các thuộc tính sau: • Một giá trị nguyên dương e(s) • Một hàng đợi f(s) lưu danh sách các quá trình đang bị khoá (chờ) trên semaphore s • chỉ có hai thao tác được định nghĩa trên semaphore • Down(s): giảm giá trị của semaphore đi 1 nếu semaphore có giá trị e(s)>0, và tiếp tục xử lý. Ngược lại, nếu e(s)<=0 quá trình đến khi e(s)>0 • Up(s): tăng giá trị của semaphore s lên 1 nếu có 1 hoặc nhiều quá trình đang chờ trên semaphore s, bi khoá bởi thao tác down. Thì hệ thống sẽ chọn một trong các quá trình này để kết thúc thao tác Down và cho tiếp tục xử lý 32
Hiện thực Semaphore 33
Hiện thực Semaphore (t. t) 34
Hiện thực Semaphore (t. t) 35
Hiện thực Mutex với Semephore 36
Đồng bộ process bằng Semaphore 37
Nhận xét 38
Nhận xét (t. t) 39
Deadlock và Starvation 40
Các loại semaphore 41
Hiện thực counting semaphore (S) bằng Binary Semaphore v. Cấu trúc dữ liệu binary-semaphore S 1, S 2; Int C; v. Khởi tạo: S 1 = 1 S 2 = 0 C = initial value of semaphore S 42
Hiện thực counting semaphore (S) bằng Binary Semaphore (t. t) q Tác vụ wait(S) Wait(S 1); C--; If (C<0) { Signal(S 1); Wait(S 2); } q Tác vụ signal(S) Wait(S 1); C++ If (C<=0) Signal(S 2): Else Signal(S 1); 43
Câu hỏi • Nắm được các giải thuật và semaphore 44