1. Trang chủ
  2. » Tất cả

vn_ch6_ProcessSynchronization 8.49.11 AM 8.49.11 AM 8.49.11 AM 8.49.11 AM 8.49.11 AM

24 14 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 24
Dung lượng 443 KB

Nội dung

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

Ngày đăng: 18/04/2022, 15:39

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w