Chương II KIẾN TRÚC HỆ ĐIỀU HÀNH ĐỒNG BỘ HOÁ QUÁ TRÌNH I Mục tiêu Sau khi học xong chương này, người học nắm được những kiến thức sau • Hiểu vấn đề vùng tương trục • Hiểu cơ chế hoạt động hiệu báo Sem[.]
ĐỒNG BỘ HỐ Q TRÌNH I Mục tiêu Sau học xong chương này, người học nắm kiến thức sau: • Hiểu vấn đề vùng tương trục • Hiểu chế hoạt động hiệu báo Semaphores để đồng hóa q trình • Hiểu chế hoạt động Monitors để đồng hóa q trình • Vận dụng giải pháp để giải toán đồng hóa II Giới thiệu Một trình hợp tác q trình gây ảnh hưởng hay bị ảnh hưởng tới trình khác thực thi hệ thống Các trình hợp tác chia sẻ trực tiếp khơng gian địa luận lý (mã liệu), hay phép chia sẻ liệu thông qua tập tin Trường hợp đầu đạt thông qua việc sử dụng q trình có trọng lượng nhẹ hay luồng Truy xuất đồng hành liệu chia sẻ dẫn tới việc không đồng liệu Trong chương thảo luận chế đảm bảo việc thực thi có thứ tự q trình hợp tác chia sẻ khơng gian địa để tính đắn liệu ln trì III Tổng quan Trong chương trước, phát triển mơ hình hệ thống chứa số lượng q trình hợp tác tuần tự, tất chúng chạy bất đồng chia sẻ liệu Chúng ta hiển thị mơ hình với chế vùng đệm có kích thước giới hạn, đại diện cho hệ điều hành Chúng ta xét giải pháp nhớ chia sẻ cho tốn vùng đệm có kích thước giới hạn Giải pháp cho phép có nhiều BUFFER_SIZE –1 sản phẩm vùng đệm thời điểm Giả sử muốn hiệu chỉnh giải thuật để giải thiếu sót Một khả thêm biến đếm số nguyên counter, khởi tạo counter tăng thêm sản phẩm tới vùng đệm bị giảm lấy sản phẩm khỏi vùng đệm Mã cho q trình người sản xuất hiệu chỉnh sau: while (1){/*tạo sản phẩm nextProduced*/ while (counter==BUFFER_SIZE); /*khơng làm cả*/ buffer[in] = nextProduced; in = ( in + ) % BUFFER_SIZE; counter++; } Mã cho q trình người tiêu dùng hiệu chỉnh sau: while (1){ while (counter == 0) ; nextConsumed = buffer[out]; /*khơng làm cả*/ out = ( out + ) % BUFFER_SIZE; counter ; /*tiêu thụ sản phẩm nextConsumed*/ } Mặc dù hai thủ tục người sản xuất người tiêu dùng thực thi tách biệt chúng không thực chức thực thi đồng hành Như minh hoạ đây, giả sử giá trị biến counter thủ tục người sản xuất người tiêu dùng thực thi đồng hành câu lệnh “counter++” “counter ” Theo sau việc thực thi hai câu lệnh này, giá trị biến counter 4, hay 6! Kết biến counter==5, tạo trình người sản xuất người tiêu dùng thực thi riêng biệt Chúng ta minh hoạ giá trị counter khơng sau Chú ý, câu lệnh “counter++” cài đặt ngơn ngữ máy (trên máy điển hình) sau: register1 = counter register1 = register1 + counter = register1 Ở register1 ghi CPU cục Tương tự, câu lệnh “counter ” cài đặt sau: register2 = counter register2 = register2 - counter = register2 Ở register2 ghi CPU cục Dù register1 register2 dùng ghi vật lý, nội dung ghi lưu lại lấy lại quản lý ngắt Thực thi đồng hành “counter++” “counter ” tương tự thực thi câu lệnh cấp thấp diện trước bị phủ lắp thứ tự (nhưng thứ tự bên câu lệnh cấp cao lưu giữ) Một phủ lắp là: T0: producer T1: producer T2: consumer T3: consumer T4: producer T5: consumer thực thi thực thi thực thi thực thi thực thi thực thi register1 = counter {register1 = 5} register1 = register1 + {register1 = 6} register2 = counter {register2 = 5} register2 = register2 – {register2 = 4} counter = register1 {counter = 6} counter = register2 {counter = 4} Chú ý rằng, xem xét tình trạng khơng “counter==4” theo có vùng đệm đầy, thực tế có vùng đệm đầy Nếu chúng đổi ngược lại thứ tự câu lệnh T4 T5, có trạng thái không “counter ==6” Chúng ta đến trạng thái khơng cho phép hai trình thao tác đồng thời biến counter Trường hợp tương tự, nhiều trình truy xuất thao tác liệu đồng hành kết việc thực thi phụ thuộc vào thứ tự xác định việc truy xuất xảy ra, gọi điều kiện cạnh tranh (race condition) Để ngăn chặn điều kiện cạnh tranh trên, cần đảm bảo trình thời điểm thao tác biến counter Để thực việc đảm bảo thế, yêu cầu vài hình thức đồng hố q trình Những trường hợp xảy thường xuyên hệ điều hành phần khác hệ thống thao tác tài nguyên muốn thay đổi không gây trở ngại thay đổi khác Phần chương tập trung vào vấn đề đồng hoá cộng tác trình IV Vấn đề vùng tương trục Xét hệ thống gồm n trình (P0, P1, … ,Pn-1 ) Mỗi q trình có phân đoạn mã, gọi vùng tương trục (critical section), trình thay đổi biến dùng chung, cập nhật bảng, viết đến tập tin, Đặc điểm quan trọng hệ thống chỗ, q trình thực thi vùng tương trục, khơng có q trình khác phép thực thi vùng tương trục Do đó, việc thực thi vùng tương trục trình loại trừ hỗ tương Vấn đề vùng tương trục thiết kế giao thức mà trình dùng để cộng tác Mỗi q trình phải yêu cầu quyền để vào vùng tương trục Vùng mã thực yêu cầu phần vào (entry section) Vùng tương trục theo sau phần kết thúc (exit section) Mã lại phần lại (remainder section) { entry section critical section exit section remainder section } while (1); Hình 0-1 Cấu trúc chung trình điển hình Pi Một giải pháp vấn đề vùng tương trục phải thoả mãn ba yêu cầu sau: • Loại trừ hỗ tương (Mutual Exclusion): Nếu trình Pi thực thi vùng tương trục khơng q trình khác thực thi vùng tương trục • Tiến trình (Progress): khơng có q trình thực thi vùng tương trục có vài q trình muốn vào vùng tương trục q trình khơng thực thi phần cịn lại tham gia vào việc định trình vào vùng tương trục chọn lựa trì hỗn vơ hạn định • Chờ đợi có giới hạn (bounded wait): giới hạn số lần trình khác phép vào miền tương trục sau trình thực yêu cầu để vào miền tương trục trước yêu cầu gán Chúng ta giả sử trình thực thi với tốc độ khác Tuy nhiên, thực khơng có giả thuyết quan tâm tốc tương đối n trình Trong phần nghiên cứu để nắm giải pháp thoả ba yêu cầu Những giải pháp không quan tâm đến thị phần cứng hay số lượng xử lý mà phần cứng hỗ trợ Tuy nhiên giả sử thị ngôn ngữ máy (chỉ thị load, store test) thực mang tính nguyên tử (atomically) Nghĩa là, hai thị thực thi đồng hành kết tương tự thực thi thứ tự khơng xác định Do đó, thị load store thực thi đồng hành load nhận giá trị cũ hay khơng có kết hợp vừa cũ vừa Khi trình bày giải thuật, định nghĩa biến dùng cho mục đích đồng mơ tả q trình điển hình Pi mà cấu trúc hiển thị hình V.1 Phần vào kết thúc bao hình chữ nhật để nhấn mạnh đoạn mã quan trọng { while (turn!=i) ; critical section turn = j; remainder section } while (1); Hình 0-2-Cấu trúc trình Pi giải thuật V Giải pháp Có nhiều giải pháp để thực việc loại trừ hỗ tương Các giải pháp này, tuỳ thuộc vào cách tiếp cận xử lý q trình bị khố, phân biệt thành hai lớp: chờ đợi bận (busy waiting) nghẽn đánh thức (sleep and wakeup) V.1 V.1.1 Giải pháp “chờ đợi bận” Giải pháp hai trình (two-Process Solution) Trong phần này, giới hạn việc quan tâm tới giải thuật áp dụng hai trình lúc Những trình đánh số P0 P1 Để thuận lợi, trình bày Pi, dùng Pj để q trình cịn lại, nghĩa j = – i V.1.1.1 Giải thuật Tiếp cận để hai trình chia sẻ biến số nguyên chung turn khởi tạo (hay 1) Nếu turn == trình Pi phép thực thi vùng tương trục Cấu trúc q trình Pi hiển thị Hình V.-2 Giải pháp đảm bảo q trình thời điểm vùng tương trục Tuy nhiên, khơng thoả mãn u cầu tiến trình u cầu thay đổi nghiêm khắc trình việc thực thi vùng tương trục Thí dụ, turn == P1 sẳn sàng vào vùng tương trục P1 khơng thể vào vùng tương trục chí P0 phần cịn lại .V.1.1.2 Giải thuật Vấn đề với giải thuật khơng giữ lại đủ thơng tin trạng thái q trình; nhớ q trình phép vào miền tương trục Để giải vấn đề này, thay biến turn với mảng sau: Boolean flag[2]; Các phần tử mảng khởi tạo tới flase Nếu flag[i] true, giá trị hiển thị Pi sẳn sàng vào vùng tương trục Cấu trúc trình Pi hiển thị hình V.-3 đây: do{ flag[i] = true; while (flag[j]); critical section flag[i] = false; remainder section } while(1); Hình 0-3 –Cấu trúc trình Pi giải thuật Trong giải thuật này, trình Pi trước tiên thiết lập flag[i] tới true, hiển thị sẳn sàng vào miền tương trục Sau đó, Pi kiểm tra q trình q trình Pj khơng sẳn sàng vào miền tương trục Nếu Pj sẳn sàng Pi chờ Pj hiển thị khơng cịn cần vùng tương trục (nghĩa flag[j] false) Tại thời điểm này, Pi vào miền tương trục Thoát khỏi miền tương trục, Pi đặt flag[i] false, cho phép trình khác (nếu chờ) vào miền tương trục Trong giải pháp này, yêu cầu loại trừ hỗ tương thoả mãn Tuy nhiên, yêu cầu tiến trình không thoả mãn Để minh hoạ vấn đề này, xem xét thứ tự thực thi sau: T0: P0 thiết lập flag[0] = true; T1: P1 thiết lập flag[1] = true; Bây P0 P1 lập mãi câu lệnh while tương ứng chúng Giải thuật phụ thuộc chủ yếu vào thời gian xác hai q trình Thứ tự phát sinh mơi trường nơi có nhiều xử lý thực thi đồng hành hay nơi ngắt (chẳng hạn ngắt định thời) xảy sau bước T0 thực thi CPU chuyển từ trình tới trình khác Chú ý chuyển đổi thứ tự thị lệnh để thiết lập flag[i] kiểm tra giá trị flag[j] không giải vấn đề Hơn có trường hợp hai q trình vùng tương trục lúc, vi phạm yêu cầu loại trừ hỗ tương .V.1.1.3 Giải thuật Giải thuật gọi giải pháp Peterson Bằng cách kết hợp hai ý tưởng quan trọng giải thuật 2, đạt giải pháp tới với vấn đề vùng tương trục, hai yêu cầu thoả Các trình chia sẻ hai biến: Boolean flag[2] Int turn; Khởi tạo flag[0] = flag[1] = false giá trị turn không xác định (hoặc hay 1) Cấu trúc trình Pi hiển thị hình sau: do{ flag[i] = true; turn = j; while (flag[j] &&turn ==j); critical section flag[i] = false; remainder section } while (1); Hình 0-4 Cấu trúc trình Pi giải thuật Để vào miền tương trục, trình Pi trước tiên đặt flag[i] true sau đặt turn tới giá trị j, xác định trình khác muốn vào miền tương trục Nếu hai trình vào miền tương trục lúc turn đặt hai i j xấp xỉ thời điểm Chỉ hai phép gán kết cuối Giá trị cuối turn định trình hai trình cho phép vào miền tương trục trước Bây chứng minh giải pháp Chúng ta cần hiển thị rằng: 1) Loại trừ hỗ tương bảo toàn 2) Yêu cầu tiến trình thoả 3) Yêu cầu chờ đợi có giới hạn thoả Chứng minh thuộc tính 1, ý Pi vào miền tương trục flag[j] ==false hay turn ==i Cũng ý rằng, hai q trình thực thi vùng tương trục chúng thời điểm flag[0] == flag[1] ==true Hai nhận xét ngụ ý P0 P1 khơng thể thực thi thành cơng vịng lặp while chúng thời điểm giá trị turn hay Do đó, q trình-Pj phải thực thi thành công câu lệnh while, ngược lại Pi phải thực thi câu lệnh bổ sung (“turn==j”) Tuy nhiên, thời điểm đó, flag[j] ==true turn ==j, điều kiện không đổi với điều kiện Pj vùng miền tương trục nó, kết sau việc loại trừ hỗ tương bảo vệ { flag[i] = true; turn = j; while (flag[j] && turn ==j); critical section flag[i] = false; Remainder section }while (1); Hình 0-5-Cấu trúc trình Pi giải thuật Để chứng minh thuộc tính 3, ý trình Pi ngăn chặn từ việc vào miền tương truc bị kẹt vịng lặp while với điều kiện flag[j] == true turn == j Nếu Pj không sẳn sàng vào miền tương trục flag[j] == false Pi vào miền tương trục Nếu Pj đặt flag[j] true thực thi câu lệnh while turn == i hay turn == j Nếu turn == i Pi vào miền tương trục Nếu turn ==j Pj vào miền tương trục Tuy nhiên, Pj vùng tương trục đặt lại flag[j] tới false, cho phép Pi vào miền tương trục Nếu Pj đặt lại flag[j] tới true, phải đặt turn tới i Do đó, Pi khơng thay đổi giá trị biến turn thực thi câu lệnh while, nên Pi vào miền tương trục (tiến trình) sau nhiều Pj vào (chờ có giới hạn) V.1.2 Giải pháp nhiều trình Giải thuật giải vấn đề miền tương trục cho hai trình Bây phát triển giải thuật để giải vấn đề miền tương trục cho n trình Giải thuật gọi giải thuật Bakery dựa sở giải thuật định thời thường dùng cửa hiệu bánh mì, cửa hàng kem, nơi mà thứ tự hỗn độn Giải thuật phát triển cho môi trường phân tán, thời điểm tập trung khía cạnh giải thuật liên quan tới môi trường tập trung Đi vào cửa hàng, khách hàng nhận số Khách hàng với số thấp phục vụ Tuy nhiên, giải thuật Bakery khơng thể đảm bảo hai q trình (khách hàng) không nhận số Trong trường hợp ràng buộc, trình với tên thấp phục vụ trước Nghĩa là, Pi Pj nhận số (i < j) Pi phục vụ trước Vì tên trình xếp thứ tự nên giải thuật hồn tồn mang tính “may rủi” (deterministic) Cấu trúc liệu chung boolean choosing[n]; int number[n]; Đầu tiên, cấu trúc liệu khởi tạo tới false tương ứng Để tiện dụng, định nghĩa ký hiệu sau: • (a, b) < (c, d) a< c hay a==c b< d • max(a0,…,an-1) số k ≥ với i = 0,…,n-1 Cấu trúc trình Pi dùng giải thuật Bakery, hiển thị hình { } choosing[i] = true; number[i] = max(number[0], number[i],…,number[n-1]) + 1; choosing[i] = false; for (j=0; j < n; j++){ while (choosing[j]); while ((number[j]!=0)&&((number[ j ], j )