Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 56 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
56
Dung lượng
1,21 MB
Nội dung
CT107 Hệ Điều Hành Chương Đồng Bộ Hóa Tiến Trình Giảng viên: Trần Công Án (tcan@cit.ctu.edu.vn) Bộ môn Mạng máy tính & Truyền thông Khoa Công Nghệ Thông Tin & Truyền Thông Đại học Cần Thơ 2014 [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Mục Tiêu Giới thiệu vấn đề miền tương trục giải pháp để giải vấn đề miền tương trục, nhằm đảm bảo quán liệu chia sẻ tiến trình cạnh tranh miền tương trục TS Trần Công Án (Khoa CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Nội Dung Giới thiệu (Background) Vấn đề miền tương trục (Critical-section problem) Các giải pháp cho vấn đề miền tương trục Đồng hóa phần mềm (Software Sync.) Đồng hóa phần cứng (Hardware Sync.) Hiệu báo (Semaphores) Các toán đồng hóa Monitors TS Trần Công Án (Khoa CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Giới thiệu (Background) Cạnh tranh quán liệu Cạnh Tranh Và Sự Nhất Quan Dữ Liệu Các tiến trình thực thi đồng thời, chia sẻ liệu dùng chung dẫn đến tình trạng không quán (inconsistency) liệu Nhất quán = đắn xác; tùy thuộc vào ngữ cảnh, giao dịch Có lý để thực đồng thời (cạnh tranh) tiến trình: Tăng hiệu suất sử dụng tài nguyên hệ thống Giảm thời gian đáp ứng trung bình hệ thống Việc trì quán liệu yêu cầu chế để đảm bảo thực thi cách có thứ tự tiến trình có hợp tác với TS Trần Công Án (Khoa CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Giới thiệu (Background) Cạnh tranh quán liệu Ví Dụ – Giao Dịch Cạnh Tranh Cho hai giao dịch: T1: A mua hàng trị giá 50$ P (50$: A → P) T2: B mua hàng trị giá 100$ P (100$: B → P) Khởi tạo ban đầu: A=500; B=500; P=1000 T1 T2 R(A) A = A - 50 W(A) R(P) P = P + 50 W(P) R(A) A = A - 100 W(A) R(P) P = P + 100 W(P) Yêu cầu tính quán: (A + B + P) không đổi; cụ thể hơn: giá trị A, B, P sau thực T1, T2 là: A=450; B=400; P=1150 Nhận xét: Nếu thực T1 → T2 T2 → T1, liệu quán Nếu thực cạnh tranh (đồng thời), liệu quán??? TS Trần Công Án (Khoa CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Giới thiệu (Background) Cạnh tranh quán liệu Ví Dụ – Giao Dịch Cạnh Tranh T1 T2 R(A) A = A - 50 W(A) A/B P T1 T2 A/B P R(A) A = A – 50 450 R(B) B = B - 100 W(B) R(B) B = B - 100 W(B) 400 W(A) R(P) P = P + 50 W(P) R(P) P = P + 50 R(P) W(P) 1050 P = P + 100 W(P) Schedule 1100 400 450 1050 R(P) P = P + 100 W(P) 1150 Schedule TS Trần Công Án (Khoa CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Giới thiệu (Background) Cạnh tranh quán liệu Ví Dụ – Bài Toán Nhà SX - Người Tiêu Thụ Dữ liệu chia sẻ (kho hàng, có giới hạn): #define struct { } item; item buffer[BUFFER_SIZE]; int in_item = 0; int out_item = 0; int counter = 0; TS Trần Công Án (Khoa CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Giới thiệu (Background) Cạnh tranh quán liệu Ví Dụ – Bài Toán Nhà SX - Người Tiêu Thụ Nhà sản xuất (S): while (true) { /* produce an item in next produced */ while (counter == BUFFER SIZE) ; /* nothing */ buffer[in_item] = next_produced; in_item = (in_item + 1) % BUFFER SIZE; counter++; } TS Trần Công Án (Khoa CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Giới thiệu (Background) Cạnh tranh quán liệu Ví Dụ – Bài Toán Nhà SX - Người Tiêu Thụ Người tiêu thụ (T): while (true) { while (counter == 0) ; /* nothing */ next_consumed = buffer[out_item]; out_item = (out_item + 1) % BUFFER SIZE; counter ; /* consume the item in next consumed */ } TS Trần Công Án (Khoa CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Giới thiệu (Background) Cạnh tranh quán liệu Ví Dụ – Bài Toán Nhà SX - Người Tiêu Thụ Dữ liệu chia sẻ producer consumer: biến counter Điều kiện để đảm bảo tính quán biến counter: câu lệnh counter++ counter phải thực thi cách “nguyên tử” “cô lập” Nguyên tử: chia nhỏ (hoặc “hoặc tất cả, không”) Cô lập: t/trình không truy xuất g/trị không quán Vấn đề xảy counter? counter++ ngôn ngữ máy: counter ngôn ngữ máy: register1 = counter register2 = counter register1 = register1 + register2 = register2 - counter = register1 counter = register2 TS Trần Công Án (Khoa CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình 10 [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Các toán đồng hóa Bài toán Bộ đọc – Bộ ghi (Readers–Writers Problem) Cấu Trúc Các Tiến Trình Đọc – Ghi Bộ ghi { wait(rw_mutex); writing is performed signal(rw_mutex); } while (true); Bộ đọc { wait(mutex); read_count++; if (read_count == 1) wait(rw_mutex); signal(mutex); reading is performed wait(mutex); read_count ; if (read_count == 0) signal(rw_mutex); signal(mutex); } while (true); TS Trần Công Án (Khoa CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình 42 [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Các toán đồng hóa Bài toán Năm triết gia ăn tối Bài Toán Năm Triết Gia Ăn Tối 222 Chapter Process Synchronization Các triết gia ngồi suy nghĩ, không giao tiếp với triết gia khác Khi đói, họ cố gắng lấy đũa (lần lượt chiếc) gần để ăn cơm Một triết gia lấy đũa dùng triết gia khác Khi có đũa, triết gia ăn đặt đũa xuống sau ăn xong; sau suy nghĩ tiếp 3 RICE Figure 5.13 The situation of the dining philoso Dữ liệu chia sẻ: semaphore chopstick[5], khởi tạo • In applications where it is easy to identify which proce data and which processes only write shared data • In applications that have more readers than writers TS Trần Công Án (Khoa CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình 43Th [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Các toán đồng hóa Bài toán Năm triết gia ăn tối Cấu Trúc Của Tiến Trình Triết Gia i { wait(chopstick[i]); wait(chopstick[(i+1) % 5]); eat signal(chopstick[i]); signal(chopstick[(i+1) % 5]); think } while (true); Giải thuật gặp phải vấn đề gì? TS Trần Công Án (Khoa CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình 44 [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Các toán đồng hóa Bài toán Năm triết gia ăn tối Ngăn Khóa Chết (Deadlock) Giải thuật đảm bảo trường hợp hai láng giềng ăn lúc (sử dụng đũa) Tuy nhiên, xảy tình trạng khóa chết – triết gia đói người lấy đũa Giải pháp: Cho phép nhiều triết gia ngồi bàn Chỉ cho phép triết gia lấy đũa đũa sẵn sàng Dùng giải pháp bất đối xứng: triết gia lẻ lấy đũa trái trước, triết gia chẵn lấy đũa phải trước TS Trần Công Án (Khoa CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình 45 [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Monitors Monitors Là cấu trúc liệu trừu tượng, cung cấp ngôn ngữ lập trình cấp cao, cho phép thực việc đồng hóa cách dễ dàng, hiệu Một cấu trúc monitor bao gồm: Tập hợp thao tác (hàm) cho phép truy xuất đến liệu bên monitor Các biến liệu (biến) cục Một đoạn mã khởi tạo (initialization code) TS Trần Công Án (Khoa CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình 46 [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Monitors Cấu Trúc Monitor 226 Chapter Process Synchronization monitor monitor_name { shared variable declarations entry queue shared data procedure P1( .) { } procedure Pn( .) { } initialization_code ( .) { } } //monitor operations initialization code Figure 5.16 Schematic view of a monitor TS Trần Công Án (Khoa CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình 47 [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Monitors Đặc Tính Của Monitor Các biến cục truy xuất thủ tục monitor Tiến trình vào monitor cách gọi thủ tục Chỉ có tối đa tiến trình vào monitor thời điểm ⇒ điều kiện loại trừ hỗ tương đảm bảo TS Trần Công Án (Khoa CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình 48 [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Monitors Biến Điều Kiện (Condition Variable) Nhằm cho phép tiến trình đợi monitor, ta dùng biến điều kiện: condition x, y; Biến điều kiện cục (chỉ truy xuất bên monitor) Hai thao tác biến điều kiện: x.wait(): tiến trình gọi thị sẻ bị ngưng x.signal() gọi x.signal(): “đánh thức” tiến trình ngưng gọi x.wait() (nếu tiến trình ngưng không làm cả) TS Trần Công Án (Khoa CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình 49 [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Monitors Biến Điều Kiện (Condition Variable) 5.8 Monitors 227 entry queue shared data queues associated with x, y conditions x y ••• operations initialization code Figure 5.17 Monitor with condition variables TS Trần Công Án (Khoa CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình 50 [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Monitors Biến Điều Kiện (Condition Variable) entry queue monitor waiting area entrance MONITOR c1.wait local data condition variables procedure condition c1 condition cn cn.wait urgent queue cx.signal procedure k initialization code exit TS Trần Công Án (Khoa CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình 51 [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Monitors Các Tùy Biến Khi Gọi Hàm signal() Nếu tiến trình P gọi x.signal() tiến trình Q đợi biến (Q gọi x.wait() trước đó), để tránh hai tiến trình thực thi đồng thời monitor: Signal and wait: P chờ Q rời khỏi monitor Signal and continue: Q chờ P rời khỏi monitor Nhiều ngôn ngữ lập trình cài đặt chế đồng hóa dựa ý tưởng monitor (Java, C#) TS Trần Công Án (Khoa CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình 52 [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Monitors Ví Dụ Bài Toán Các Triết Gia Ăn Tối Với Monitor monitor DiningPhilosopiers { enum {thinking, hungry, eating} state[5]; condition self[5]; //wait on chopstick i void pickup(int i); //pick up the chopstick i void putdown(int i); //put down the chopstick i void test(int i); //test the availability of the chopstick i void init() { for (int i = 0; i < 5; i++) state[i] = thinking; } } TS Trần Công Án (Khoa CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình 53 [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Monitors Ví Dụ Bài Toán Các Triết Gia Ăn Tối Với Monitor void test(int i) { if ((state[(i + 4) % 5] != eating) && (state[i] == hungry) && (state[(i+1) % 5] != eating)) { state[i] = eating; self[i].signal(); } } TS Trần Công Án (Khoa CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình 54 [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Monitors Ví Dụ Bài Toán Các Triết Gia Ăn Tối Với Monitor void pickup(int i) { state[i] = hungry; test(i); if (state[i] != eating) self[i].wait(); } void putdown(int i) { state[i] = thinking; //test right+left neighbors test((i+4) % 5); test((i+1) % 5); } Tiến trình triết gia i: DiningPhilosophiers.pickup(i); EAT DiningPhilosophiers.putdown(i); Tính chất: Loại trừ hỗ tương: Tránh deadlock: Tránh chết đói: TS Trần Công Án (Khoa CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình 55 [...]... CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình 35 [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Các bài toán đồng bộ hóa Các Bài Toán Đồng Bộ Hóa 1 Bài toán Nhà sản xuất – Người tiêu dùng với vùng đệm giới hạn (Producer–Consummer with Bounded-Buffer) 2 Bài toán Bộ đọc – Bộ ghi (Readers–Writers) 3 Bài toán Các triết gia ăn tối (Dining-Philosophy) TS Trần Công Án (Khoa CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình 36 ... Trần Công Án (Khoa CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình 30 [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Hiệu báo (Semaphores) Đồng bộ hóa dùng Semaphore Đồng Bộ Hóa Dùng Semaphore – Ví Dụ Có 2 tiến trình: P1 với lệnh S1 và P2 với lệnh S2 Yêu cầu: S2 phải thực thi sau khi S1 hoàn thành Cài đặt: Sử dụng semaphore flag, khởi tạo với giá trị 0 Tiến trình Pi : Tiến trình P2 : S1 ; signal(flag); wait(flag);... CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Loại trừ hỗ tương: Tiến triển: Chờ đợi hữu hạn: 19 [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Đồng bộ hóa bằng phần mềm (Software Sync.) Giải thuật cho trường hợp có n tiến trình Giải Thuật Bakery Miền tương trục cho n tiến trình: Mỗi t /trình sẽ nhận được 1 số trước khi vào miền tương trục Tiến trình có số nhỏ nhất sẽ có quyền ưu tiên cao nhất Nếu hai tiến trình Pi và Pj... CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình 21 [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Đồng bộ hóa bằng phần cứng (Hardware Sync.) Đồng Bộ Hóa Bằng Phần Cứng Ý tưởng cơ bản của hầu hết các giải pháp bằng phần cứng là bảo vệ miền tương trục bằng khóa Giải pháp đơn giản nhất: vô hiệu hóa các ngắt – cho phép tiến trình người dùng vô hiệu hóa các ngắt khi vào miền tương trục, cho đến khi t /trình ra khỏi miền... Ch5 Đồng Bộ Hóa Tiến Trình 16 [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Đồng bộ hóa bằng phần mềm (Software Sync.) Giải thuật cho trường hợp có 2 tiến trình GT1 – Giải Thuật Chờ Bận 1 (Busy Wait) Điều khiển cạnh tranh giữa 2 tiến trình Pi và Pj Dùng 1 biến khóa chia sẻ để đ/khiển việc vào miền tương trục int turn = 0; //initialise turn=0 turn = i ⇒ Pi có thể vào miền tương trục Tổ chức đoạn mã của 1 tiến trình. .. Không có tiến trình nào khác có thể thực thi khi một tiến trình đã vào miền tương trục ⇒ tránh tình trạng cạnh tranh Chỉ có thể áp dụng cho hệ thống không trưng dụng Không khả thi cho hệ thống đa xử lý (vô hiệu hóa các ngắt trên hệ thống đa xử lý mất nhiều chi phí ⇒ hiệu năng giảm) TS Trần Công Án (Khoa CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình 22 [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Đồng bộ hóa bằng... quá trình cạnh tranh cần phải được đồng bộ hóa (synchronize) TS Trần Công Án (Khoa CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình 12 [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Vấn đề miền tương trục (Critical-section problem) Vấn Đề Miền Tương Trục (CSP) Xét 1 hệ thống có n tiến trình đang cạnh tranh {P0 , P1 , , Pn−1 } Miền tương trục (critical section): là một đoạn mã lệnh của các tiến trình có chứa các hành. .. waiting[1 n] = false; TS Trần Công Án (Khoa CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình 28 [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Hiệu báo (Semaphores) Hiệu Báo (Semaphores) Semephore là công cụ đồng bộ hóa tránh được chờ đợi bận: Tiến trình chờ đợi vào miền tương trục sẽ ngủ/nghẽn Tiến trình đang ngủ/nghẽn sẽ được đánh thức bởi các tiến trình khác Semaphore S: là một biến integer, được truy cập qua 2... Ch5 Đồng Bộ Hóa Tiến Trình 23 [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Đồng bộ hóa bằng phần cứng (Hardware Sync.) Chỉ thị test_and_set Chỉ Thị test_and_set Cho phép đọc và sửa nội dung của một word một cách nguyên tử Định nghĩa của chỉ thị test_and_set: boolean test_and_set(boolean *target) { boolean rv = *target; *target = true; return rv; } TS Trần Công Án (Khoa CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình. .. CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình 29 [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Hiệu báo (Semaphores) Đồng bộ hóa dùng Semaphore Đồng Bộ Hóa Dùng Semaphore Các loại semaphore: Semaphore đếm (counting semaphore): giá trị semaphore không giới hạn Semaphore nhị phân (binary semaphore): có giá trị 0 hoặc 1, còn gọi là mutex lock; cài đặt đơn giản hơn Dữ liệu chia sẻ: semaphore mutex = 1; Tiến trình Pi : do ... [CT107] Ch5 Đồng Bộ Hóa Tiến Trình 39 [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Các toán đồng hóa Bài toán Bộ đọc – Bộ ghi (Readers–Writers Problem) Bài Toán Bộ Đọc – Bộ Ghi Nhiều tiến trình thực thi đồng. .. CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình 41 [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Các toán đồng hóa Bài toán Bộ đọc – Bộ ghi (Readers–Writers Problem) Cấu Trúc Các Tiến Trình Đọc – Ghi Bộ ghi { wait(rw_mutex);... TS Trần Công Án (Khoa CNTT&TT) [CT107] Ch5 Đồng Bộ Hóa Tiến Trình 35 [CT107] Ch5 Đồng Bộ Hóa Tiến Trình Các toán đồng hóa Các Bài Toán Đồng Bộ Hóa Bài toán Nhà sản xuất – Người tiêu dùng với