Bài giảng Nguyên lý hệ điều hành: Chương 6 - Phạm Quang Dũng

6 117 0
Bài giảng Nguyên lý hệ điều hành: Chương 6 - Phạm Quang Dũng

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

Thông tin tài liệu

Chương 6 của bài giảng Nguyên lý hệ điều hành trình bày một số nội dung liên quan đến đồng bộ hóa tiến trình như: Cơ sở đồng bộ hóa tiến trình, vấn đề đoạn găng, giải pháp của Peterson, phần cứng đồng bộ hóa, kỹ thuật cờ báo (Semaphores). Mời các bạn cùng tham khảo để nắm bắt chi tiết nội dung bài giảng.

Nội dung BÀI GIẢNG NGUYÊN LÝ HỆ ĐIỀU HÀNH „ Cơ sở „ Vấn đề đoạn găng „ Giải pháp Peterson Chương 6: Đồng hóa tiến trình „ Phần cứng đồng hóa „ Kỹ thuật cờ báo (Semaphores) Phạm Quang Dũng Bộ mơn Khoa học máy tính Khoa Công nghệ thông tin Trường Đại học Nông nghiệp Hà Nội Website: fita.hua.edu.vn/pqdung 5.2 Bài giảng Nguyên lý Hệ điều hành 6.1 Cơ sở Phạm Quang Dũng ©2008 Producer „ Sự truy nhập đồng thời đến liệu chia sẻ gây while (true) { mâu thuẫn /* produce an item and put in nextProduced */ „ Để trì tính qn liệu cần có chế đảm bảo thực while (count == BUFFER_SIZE) tiến trình hợp tác theo thứ tự ; // nothing buffer [in] = nextProduced; „ Giả sử muốn đưa giải pháp cho vấn đề tiến trình sản xuất - tiến trình tiêu thụ mà điền vào buffer Chúng ta làm cách có biến nguyên count để theo dõi số phần tử buffer in = (in + 1) % BUFFER_SIZE; count++; } z Khởi tạo count=0 z Nó tăng tiến trình sản xuất thêm vào buffer phần tử z Nó bị giảm tiến trình tiêu thụ lấy khỏi buffer phần tử Bài giảng Nguyên lý Hệ điều hành 5.3 Phạm Quang Dũng ©2008 Bài giảng Nguyên lý Hệ điều hành 5.4 Phạm Quang Dũng ©2008 Consumer Trạng thái tranh đua (Race condition) „ count++ thực thi sau: while (true) { register1 = count register1 = register1 + count = register1 while (count == 0) ; // nothing „ count thực thi sau: nextConsumed = buffer[out]; register2 = count register2 = register2 - count = register2 out = (out + 1) % BUFFER_SIZE; count ; „ Xét thực đan xen với ban đầu “count = 5”: S0: producer execute register1 = count S1: producer execute register1 = register1 + S2: consumer execute register2 = count S3: consumer execute register2 = register2 - S4: producer execute count = register1 S5: consumer execute count = register2 /* consume the item in nextConsumed } Bài giảng Nguyên lý Hệ điều hành 5.5 Phạm Quang Dũng ©2008 6.2 Vấn đề đoạn găng (Critical-Section) 5.6 Bài giảng Nguyên lý Hệ điều hành {register1 = 5} {register1 = 6} {register2 = 5} {register2 = 4} {count = 6} {count = 4} Phạm Quang Dũng ©2008 Cấu trúc tổng quát tiến trình Pi „ Xét hệ thống gồm n tiến trình {P0, P1, …, Pn-1} { „ Mỗi tiến trình có đoạn mã, gọi đoạn găng, mà tiến trình thay đổi biến chung, cập nhật bảng, ghi tệp… đoạn vào „ Đặc điểm quan trọng hệ thống thời điểm có đoạn găng tiến trình thực đoạn găng ⇔ thực đoạn găng loại trừ lẫn theo thời gian đoạn „ Vấn đề đoạn găng thiết kế giao thức mà tiến trình sử đoạn lại dụng để hợp tác Mỗi tiến trình phải yêu cầu cho phép để } while (TRUE) ; bước vào đoạn găng Đoạn mã thực yêu cầu gọi đoạn vào Sau đoạn găng có đoạn Bài giảng Nguyên lý Hệ điều hành 5.7 Phạm Quang Dũng ©2008 Bài giảng Nguyên lý Hệ điều hành 5.8 Phạm Quang Dũng ©2008 Giải pháp cho vấn đề đoạn găng Một giải pháp cho vấn đề đoạn găng phải thỏa mãn yêu cầu: Các phương pháp xử lý đoạn găng „ trước chạy kernel mode; tiến trình chạy cho Loại trừ lẫn nhau: tiến trình Pi thực đoạn đến khỏi kernel mode găng tiến trình khác khơng thực đoạn găng chúng Chọn tiến trình vào đoạn găng: khơng có tiến trình đoạn găng số tiến trình muốn vào đoạn găng chúng tiến trình kernel không ưu tiên trước: không cho phép tiến trình bị ưu tiên „ z Khơng gây tình trạng đua tranh cấu trúc z Windows 2000/XP, UNIX cũ, Linux trước phiên 2.6 kernel có ưu tiên trước: cho phép tiến trình bị ưu tiên trước chạy kernel mode z khơng đoạn lại ứng cử viên Chờ đợi có hạn: tồn giới hạn số lần tiến trình khác phép vào đoạn găng chúng sau tiến trình yêu cầu vào đoạn găng đến trước yêu cầu đáp ứng Bài giảng Nguyên lý Hệ điều hành 5.9 Cần thiết kế cẩn thận để tránh tình trạng đua tranh, với kiến trúc đa xử lý đối xứng (SMP) Vì sao? Phạm Quang Dũng ©2008 z Thích hợp với lập trình thời gian thực, cho phép tiến trình thời gian thực ưu tiên trước tiến trình khác chạy kernel z Linux 2.6, số phiên thương mại UNIX (Solaris, IRIX) 5.10 Bài giảng Nguyên lý Hệ điều hành 6.3 Giải pháp Peterson Phạm Quang Dũng ©2008 Thuật tốn cho tiến trình Pi „ Giải pháp cho tiến trình P0, P1 „ Giả sử lệnh LOAD STORE nguyên tử (atomic); nghĩa bị ngắt „ Hai tiến trình chia sẻ biến: while (true) { flag[i] = TRUE; turn = j; while (flag[j] && turn == j); z int turn; ĐOẠN_GĂNG z boolean flag[2] flag[i] = FALSE; „ Biến turn 0/1 turn==i Pi phép vào đoạn găng „ flag[i]=true cho biết tiến trình Pi sẵn sàng vào đoạn găng ĐOẠN_CỊN_LẠI } Chứng minh thuật toán thỏa mãn điều kiện giải pháp? Bài giảng Nguyên lý Hệ điều hành 5.11 Phạm Quang Dũng ©2008 Bài giảng Nguyên lý Hệ điều hành 5.12 Phạm Quang Dũng ©2008 6.4 Phần cứng đồng hóa Lệnh TestAndSet „ Nhiều HĐH cung cấp hỗ trợ phần cứng cho mã đoạn găng „ Định nghĩa: „ Đơn xử lý – vơ hiệu ngắt z Đoạn mã chạy thực mà không bị giành ưu tiên z Nói chung khơng hiệu với hệ thống đa xử lý boolean TestAndSet (boolean *target) {  Việc chuyển thông điệp đến tất xử lý tốn nhiều boolean rv = *target; thời gian, làm trễ vào đoạn găng tiến trình *target = TRUE; return rv; „ Nhiều HĐH đại cung cấp lệnh phần cứng nguyên tử }  Nguyên tử = bị ngắt z Hoặc test từ nhớ (memory word) set giá trị z Hoặc hoán đổi (swap) nội dung từ nhớ 5.13 Bài giảng Nguyên lý Hệ điều hành Phạm Quang Dũng ©2008 Bài giảng Nguyên lý Hệ điều hành Giải pháp dùng TestAndSet 5.14 Phạm Quang Dũng ©2008 Lệnh Swap „ Biến boolean chia sẻ lock, khởi tạo false „ Giải pháp cho tiến trình: „ Định nghĩa: while (true) { while (TestAndSet (&lock)) ; /* nothing // void Swap (boolean *a, boolean *b) { boolean temp = *a; *a = *b; *b = temp; } đoạn găng lock = FALSE; // đoạn lại } Bài giảng Nguyên lý Hệ điều hành 5.15 Phạm Quang Dũng ©2008 Bài giảng Nguyên lý Hệ điều hành 5.16 Phạm Quang Dũng ©2008 Giải pháp dùng Swap 6.5 Kỹ thuật dùng cờ báo (Semaphore) „ Biến boolean chia sẻ lock, khởi tạo false; Mỗi tiến „ Cơng cụ đồng hóa dễ dùng với người lập trình ứng dụng „ Semaphore S – biến integer trình có biến boolean cục key „ Hai hoạt động nguyên tử chuẩn thay đổi S: „ Giải pháp cho tiến trình: z wait() signal(), gọi P() V() while (true) { key = TRUE; wait (S) { while (key == TRUE) while S

Ngày đăng: 30/01/2020, 01:30

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan