Chng 3 Qun l cc qu trnh ng

  • Slides: 44
Download presentation
Chương 3 Quản lý các quá trình đồng thời 1

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

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

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

Khái niệm cơ bản 4

Bounded Buffer (t, t) 5

Bounded Buffer (t, t) 5

Race Condition 6

Race Condition 6

Ví dụ về Condition 7

Ví dụ về Condition 7

Critical Section 8

Critical Section 8

Critical Section và Mutual Exclusion 9

Critical Section và Mutual Exclusion 9

Cấu trúc tổng quát 10

Cấu trúc tổng quát 10

Ràng buộc của bài toán tranh chấp 11

Ràng buộc của bài toán tranh chấp 11

Phân loại giải pháp 12

Phân loại giải pháp 12

Giải pháp phần mềm 13

Giải pháp phần mềm 13

Giải thuật 1 14

Giải thuật 1 14

Giải thuật 1(t. t) 15

Giải thuật 1(t. t) 15

Giải thuật 2 16

Giải thuật 2 16

Giải thuật 3 (Peterson) 17

Giải thuật 3 (Peterson) 17

Giải thuật Peterson-2 process 18

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 19

Giải thuật 3: Tính đúng đắn (t. t) 20

Giải thuật 3: Tính đúng đắn (t. t) 20

Trường hợp process bị “chết” 21

Trường hợp process bị “chết” 21

Giải thuật Bakery: N process 22

Giải thuật Bakery: N process 22

Giải thuật Bakery: N process(t. t) 23

Giải thuật Bakery: N process(t. t) 23

Từ software đến hardware 24

Từ software đến hardware 24

Cấm ngắt 25

Cấm ngắt 25

Dùng các lệnh đặc biệt 26

Dùng các lệnh đặc biệt 26

Lệnh test – and – set(TSL) 27

Lệnh test – and – set(TSL) 27

Lệnh test – and – set(t. t) 28

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.

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”.

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

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

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 33

Hiện thực Semaphore (t. t) 34

Hiện thực Semaphore (t. t) 34

Hiện thực Semaphore (t. t) 35

Hiện thực Semaphore (t. t) 35

Hiện thực Mutex với Semephore 36

Hiện thực Mutex với Semephore 36

Đồng bộ process bằng Semaphore 37

Đồng bộ process bằng Semaphore 37

Nhận xét 38

Nhận xét 38

Nhận xét (t. t) 39

Nhận xét (t. t) 39

Deadlock và Starvation 40

Deadlock và Starvation 40

Các loại semaphore 41

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

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)

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

Câu hỏi • Nắm được các giải thuật và semaphore 44