1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Hệ điều hành: Chương 4 - ThS. Nguyễn Thị Hải Bình

64 67 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 64
Dung lượng 1,82 MB

Nội dung

Chương 4 trình bày về Tương tranh và đồng bộ. Nội dung cụ thể của chương này gồm có: Các khái niệm cơ bản; Độc quyền truy xuất – giải pháp phần mềm; Đồng bộ hóa – Giải pháp phần cứng; Giải pháp đồng bộ hóa cơ bản. Mời các bạn cùng tham khảo.

TƯƠNG TRANH VÀ ĐỒNG BỘ ThS Nguyễn Thị Hải Bình Khoa CNTT, ĐH Giao thông vận tải Email: calmseahn@gmail.com Website: calmseahn.weebly.com VÍ DỤ VỀ TƯƠNG TRANH TƯƠNG TRANH VÀ ĐỒNG BỘ • Race condition • Thuật ngữ • Tranh đoạt điều khiển • Tình tương tranh • Xảy • Nhiều tiến trình thao tác liệu chung kết thao tác phụ thuộc vào thứ tự thực tiến trình • Process synchronization • Thuật ngữ: đồng hố tiến trình • Để tránh tình tương tranh, tiến trình cần đồng theo phương thức BÀI TỐN SẢN XUẤT – TIÊU THỤ • Thuật ngữ • The producer – consumer problem • u cầu tốn • Tiến trình sản xuất (producer process) tạo thơng tin • Cịn tiến trình tiêu thụ (consumer process) sử dụng thơng tin tạo • Bộ đệm: • Chứa thơng tin tạo tiến trình sản xuất • Tiến trình tiêu thụ lấy thông tin từ đệm để sử dụng • Bộ đệm cho phép tiến trình thực thi đồng thời • Vấn đề • Tiến trình tiêu thụ không sử dụng thông tin chưa tạo • Nếu đệm rỗng tiến trình tiêu thụ phải chờ • Nếu đệm đầy tiến trình sản xuất phải chờ KHAI BÁO BIẾN TIẾN TRÌNH SẢN XUẤT item newItem; while( true ) { /* Produce an item and store it in newItem */ newItem = makeNewItem( ); /* Wait for space to become available */ while( counter == BUFFER_SIZE) ; /* Do nothing */ /* And then store the item and repeat the loop */ buffer[in] = newItem; in = (in + 1) % BUFFER_SIZE; counter++; } TIẾN TRÌNH TIÊU THỤ item usedItem; while( true ) { /* Wait for an item to become available */ while( counter == 0) ; /* Do nothing */ /* Get the next available item */ usedItem = buffer[out]; out = (out+1) % BUFFER_SIZE; counter ; /* Consume the item in usedItem (do something with it) */ } TƯƠNG TRANH? • Lệnh “counter++” “counter ” cài đặt ngơn ngữ máy (typical machine language) sau counter++ counter register1 = counter; register2 = counter; register1= register1 + 1; register2= register2 - 1; counter = register1; counter = register2; TƯƠNG TRANH? Giải pháp phần mềm – Độc quyền truy xuất Giải pháp phần cứng – Đồng hoá XỬ LÝ TƯƠNG TRANH Giải pháp đồng 10 VẤN ĐỀ ĐỌC GHI • Vấn đề đọc ghi thứ • Tiến trình đọc ưu tiên • Nếu khơng có tiến trình ghi truy cập vào liệu, tiến trình đọc cấp quyền truy cập liệu yêu cầu • Tiến trình ghi bị chết đói (starvation) • Vấn đề đọc ghi thứ hai • Tiến trình ghi ưu tiên • Khi tiến trình ghi muốn truy cập vào liệu, đưa vào đầu hàng đợi Ngay liệu sẵn sàng, tiến trình ghi cấp quyền truy cập • Tiến trình đợi bị chế đói 50 VẤN ĐỀ ĐỌC GHI THỨ NHẤT • Biến chung • read_count • Sử dụng tiến trình đọc • Đếm số lượng tiến trình đọc truy cập vào liệu • mutex • Sử dụng tiến trình đọc • Kiểm sốt truy cập vào readcount • rw_mutex • Sử dụng để block release tiến trình ghi • Tiến trình đọc truy cập vào liệu thiết lập giá trị để block • Tiến trình đọc cuối truy cập vào liệu thiết lập giá trị để release 51 52 53 BỮA ĂN TỐI CỦA TRIẾT GIA • Mỗi triết gia suy nghĩ (thinking) ăn (eat) • Các triết gia khơng trao đổi với 54 GIẢI PHÁP DÙNG SEMAPHORE DEADLOCK? 55 GIẢI PHÁP CHO VẤN ĐỀ BẾ TẮC • Chỉ cho phép tối đa triết gia ăn lúc • Chỉ cho phép triết gia nhặt đũa khơng bị sử dụng • Giải pháp phi đối xứng (asymmetric solution) • Đánh số triết gia • Triết gia có số thứ tự lẻ phải lấy đũa phía bên trái trước • Triết gia có số thứ tự chẵn phải lấy đũa phía bên phải trước • Vấn đề “chết đói” (starvation) chưa giải 56 HẠN CHẾ CỦA SEMAPHORE • Sử dụng semaphore khơng cách dẫn đến bế tắc lỗi trình tự thực tiến trình • Sử dụng không cách gây lỗi lập trình người lập trình khơng cộng tác 57 MONITOR (PHƯƠNG PHÁP DÙNG TRÌNH THƯ KÝ) • Cấu trúc ngơn ngữ lập trình bậc cao dùng để phục vụ thao tác đồng hố • Các thành phần monitor • Initialization code: thực thi lần tạo monitor • Private data (bao gồm private procedures): sử dụng bên monitor • Monitor procedures: hàm/thủ tục gọi từ bên ngồi monitor • Monitor entry queue: hàng đợi tiến trình chờ thực thi monitor procedures 58 59 60 MONITOR • Monitor đảm bảo thời điểm có tiến trình hoạt động bên monitor • Các hàm/thủ tục monitor truy cập vào biến cục tham số hình thức 61 CONDITION • Khai báo • Sử dụng: toán tử wait signal • x.wait(): chuyển tiến trình sang trạng thái chờ • x.signal(): tiến trình gọi x.signal() đánh thức tiến trình gọi x.wait() • Đánh thức tiến trình chờ • Nếu khơng có tiến trình chờ, x.signal() khơng có tác dụng • Chú ý: signal() semaphore làm thay đổi giá trị semaphore 62 SIGNAL WAIT/CONTINUE • Giả sử có tiến trình P Q • Q gọi x.wait() • P gọi x.signal() • Hai khả • Signal-and-wait: P chờ đến Q rời monitor chờ điều kiện khác • Signal-and-continue: Q chờ đến P rời monitor chờ điều kiện khác 63 TỰ ĐỌC • Giải tốn bữa tối triết gia monitor • Cài đặt monitor semaphore 64 ... (atomically) • Các thị đơn vị bị ngắt (uninterruptible unit) 27 CHỈ THỊ TEST_AND_SET 28 CHỈ THỊ TEST_AND_SET • Biến chung • Boolean lock = false; 29 CHỈ THỊ COMPARE_AND_SWAP 30 CHỈ THỊ COMPARE_AND_SWAP... (last-in, first-out) 45 NHỮNG VẤN ĐỀ ĐỒNG BỘ KINH ĐIỂN • Vấn đề đệm giới hạn (the bounded-buffer proble) • Vấn đề đọc – ghi (the readers and writers problem) • Bữa ăn tối triết gia (the dining-philosophers... problem) 46 VẤN ĐỀ BỘ ĐỆM GIỚI HẠN • Bài tốn sản xuất – tiêu thụ • Biến chung • n – kích thước đệm • mutex – kiểm sốt việc truy cập vào đệm • empty full để đếm số ô trống đầy đệm 47 48 49 VẤN ĐỀ

Ngày đăng: 10/01/2020, 23:45

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN