Bài giảng Nguyên lý hệ điều hành - Chương 2: Quản lý tiến trình

„Lựachọnmộtnạnnhân–cựctiểu hóa cost. „Rollback – trởvềtrạng thái an toàn, khởi động lạitiến trình cho trạng tháiđó. „Chếtđói – mộttiếntrìnhcóthểluôn bị lựachọnlànạn nhân

pdf159 trang | Chia sẻ: tuanhd28 | Lượt xem: 2851 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Nguyên lý hệ điều hành - Chương 2: Quản lý tiến trình, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
3/12/2008 Nguyên lý Hệ điều hành 2 1. Tiến trình „ Khái niệm về tiến trình „ Lập lịch tiến trình „ Các thao tác trên tiến trình „ Hợp tác giữa các tiến trình „ Luồng „ Truyền thông giữa các tiến trình 3/12/2008 Nguyên lý Hệ điều hành 3 1.1. Khái niệm về tiến trình „ Một HĐH thực hiện nhiều chương trình ‰ Hệ thống xử lý theo lô: công việc (job) ‰ Hệ thống chia sẻ thời gian: tác vụ(task) „ Ở đây chúng ta dùng tiến trình và công việc với cùng ý nghĩa 3/12/2008 Nguyên lý Hệ điều hành 4 Tiến trình „ Chương trình đang được thực hiện ‰ Phần văn bản ‰ Ngăn xếp ‰ Phần dữ liệu ‰ Giá trị bộ đếm chương trình, thanh ghi „ CPU xử lý tiến trình tuần tự „ Thực thể hoạt động ‰ vs. chương trình Nguyên lý Hệ điều hành 5 Cấu trúc bộ nhớ tiến trình 3/12/2008 Nguyên lý Hệ điều hành 6 Trạng thái tiến trình „ Tiến trình thay đổi trạng thái trong khi thực hiện ‰ New ‰ Running ‰ Waiting ‰ Ready ‰ Terminated „ Tại một thời điểm chỉ có một tiến trình ở trạng thái running 3/12/2008 Nguyên lý Hệ điều hành 7 Trạng thái tiến trình 3/12/2008 Nguyên lý Hệ điều hành 8 Khối điều khiển tiến trình (PCB) 3/12/2008 Nguyên lý Hệ điều hành 9 Chuyển đổi CPU giữa các tiến trình 3/12/2008 Nguyên lý Hệ điều hành 10 1.2. Lập lịch tiến trình „ Mục đích của đa chương trình ‰ Tăng tính tận dụng CPU „ Mục đích của phân chia thời gian ‰ Người dùng có thể tương tác với tiến trình trong lúc nó đang thực thi ÆXử lý nhiều tiến trình Æ Lập lịch tiến trình 3/12/2008 Nguyên lý Hệ điều hành 11 Các hàng đợi lập lịch tiến trình „ Hàng đợi công việc ‰ Một tập các tiến trình trong hệ thống „ Hàng đợi sẵn sàng ‰ Tập các tiến trình trong bộ nhớ trong, sẵn sàng và chỉ chờ thực hiện „ Hàng đợi thiết bị ‰ Tập các tiến trình chờ một thiết bị vào/ra „ Các tiến trình di trú từ hàng đợi này đến hàng đợi khác 3/12/2008 Nguyên lý Hệ điều hành 12 Hàng đợi sẵn sàng và các hàng đợi thiết bị khác nhau 3/12/2008 Nguyên lý Hệ điều hành 13 Biểu diễn việc lập lịch tiến trình - Biểu đồ hàng đợi 3/12/2008 Nguyên lý Hệ điều hành 14 Vòng đời của một tiến trình ‰ Khởi tạo: hàng đợi sẵn sàng ‰ Các sự kiện có thể xảy ra khi tiến trình đã được gán CPU „ Sinh ra một yêu cầu I/O, đi vào hàng đợi I/O „ Tạo ra một tiến trình con và đợi cho nó kết thúc „ Bị tước quyền sử dụng CPU ‰ Tiếp tục vòng lặp đến khi kết thúc „ Bị xóa khỏi tất cả các hàng đợi „ PCB và tất cả các tài nguyên bị thu hồi. 3/12/2008 Nguyên lý Hệ điều hành 15 Các bộ lập lịch „ Tiến trình lưu trú trong nhiều loại hàng đợi ‰ Các bộ lập lịch chọn các tiến trình từ các hàng đợi 3/12/2008 Nguyên lý Hệ điều hành 16 Các bộ lập lịch (tt) „ Bộ lập lịch dài hạn ‰ Lập lịch công việc – job scheduler ‰ Chọn các tiến trình trong tập tiến trình và tải nó vào bộ nhớ để thực hiện. „ Bộ lập lịch ngắn hạn (lập lịch CPU) ‰ Chọn trong số các tiến trình trong hàng đợi sẵn sàng để thực hiện. 3/12/2008 Nguyên lý Hệ điều hành 17 Bộ lập lịch ngắn hạn vs. dài hạn „ Tần số thực thi ‰ Ngắn hạn: „ Thường xuyên „ Đòi hỏi thực thi nhanh ‰ Dài hạn: „ Không thường xuyên bằng „ Thể hiện mức độ “đa chương trình” 3/12/2008 Nguyên lý Hệ điều hành 18 Bộ lập lịch dài hạn „ Hai loại tiến trình: ‰ Giới hạn I/O ‰ Giới hạn CPU „ Chọn một kết hợp tốt các tiến trình giới hạn vào/ra và các tiến trình giới hạn CPU. „ Một số hệ thống phân chia thời gian không có bộ lập lịch dài hạn (Unix) 3/12/2008 Nguyên lý Hệ điều hành 19 Bộ lập lịch trung hạn „ Sử dụng trong một số HĐH phân chia thời gian 3/12/2008 Nguyên lý Hệ điều hành 20 Chuyển đổi ngữ cảnh „ Chuyển đổi CPU cho một tiến trình khác ‰ Ngữ cảnh tiến trình „ Hoạt động chuyển đổi ngữ cảnh ‰ Kernel lưu lại ngữ cảnh của tiến trình cũ trong PCB và tải ngữ cảnh được lưu của tiến trình mới được lập lịch 3/12/2008 Nguyên lý Hệ điều hành 21 Chuyển đổi ngữ cảnh (tt) „ Thời gian chuyển đổi ngữ cảnh: lãng phí ‰ Phụ thuộc vào máy, thông thường từ 1 đến 1000 micro giây ‰ Phụ thuộc vào sự hỗ trợ của phần cứng ‰ Các kĩ thuật quản lý bộ nhớ ‰ Bottleneck Æ sử dụng các cấu trúc mới như thread để tránh nút cổ chai này 3/12/2008 Nguyên lý Hệ điều hành 22 1.3. Các thao tác trên tiến trình „ Tạo tiến trình „ Hủy tiến trình 3/12/2008 Nguyên lý Hệ điều hành 23 Tạo tiến trình „ Một tiến trình có thể tạo ra nhiều tiến trình con, qua lời gọi hệ thống create_process ‰ Tiến trình cha ‰ Tiến trình con 3/12/2008 Nguyên lý Hệ điều hành 24 Cây tiến trình 3/12/2008 Nguyên lý Hệ điều hành 25 Tạo tiến trình(tt) „ Chia sẻ tài nguyên ‰ Tất cả các tài nguyên ‰ Một phần tài nguyên ‰ Không chia sẻ tài nguyên „ Thực thi ‰ Thực thi đồng thời ‰ Tiến trình tuần tự 3/12/2008 Nguyên lý Hệ điều hành 26 Tạo tiến trình trong Unix „ Mỗi tiến trình có một ID (PID) „ Gọi lời gọi hệ thống fork() để tạo tiến trình mới ‰ Tiến trình cha có thể đợi hoặc thực hiện đồng thời với tiến trình con ‰ Không gian địa chỉ của tiến trình con là một BẢN SAO của không gian địa chỉ tiến trình cha ‰ Mã trả về từ fork() ‰ Tiến trình con có thể gọi lời gọi hệ thống execlp() để tải một chương trình mới vào thực hiện 3/12/2008 Nguyên lý Hệ điều hành 27 3/12/2008 Nguyên lý Hệ điều hành 28 Hủy tiến trình „ Tiến trình thực thi xong ‰ HĐH thực hiện lệnh exit ‰ (có thể) trả về dữ liệu cho tiến trình cha ‰ Hủy các tài nguyên đã được phân phối cho tiến trình „ Tiến trình bị hủy bởi một tiến trình khác (tiến trình cha) ‰ Tiến trình cha cần biết chỉ số của tiến trình con 3/12/2008 Nguyên lý Hệ điều hành 29 Hủy tiến trình (tt) „ Tiến trình cha dừng sự hoạt động của tiến trình con vì ‰ Tiến trình con dùng quá tài nguyên cho phép ‰ Nhiệm vụ của tiến trình con không còn quan trọng ‰ Tiến trình cha thoát và HĐH thực thi cơ chế “hủy theo dây chuyền”(cascading termination) „ Không thực hiện cơ chế hủy theo dây chuyền, tiến trình init thành tiến trình cha 3/12/2008 Nguyên lý Hệ điều hành 30 1.4. Hợp tác giữa các tiến trình „ Các tiến trình cộng tác ‰ Tiến trình độc lập „ Không bị ảnh hưởng bởi tiến trình khác „ Không chia sẻ dữ liệu ‰ Tiến trình hợp tác „ Bị ảnh hưởng bởi tiến trình khác „ Dùng chung dữ liệu „ Cần các kĩ thuật giao tiếp/ đồng bộ tiến trình 3/12/2008 Nguyên lý Hệ điều hành 31 Vì sao hợp tác tiến trình? „ Chia sẻ thông tin ‰ Đồng thời truy cập đến tài nguyên chia sẻ „ Tăng tốc độ tính toán ‰ Chia thành các bài toán con, thực thi song song ‰ Chỉ có được trong các hệ thống có nhiều thành phần xử lý (đa CPU, đa kênh vào/ra) „ Tính module hóa: Chia nhỏ các chức năng „ Tiện dụng ‰ Có thể thực hiện nhiều nhiệm vụ tại một thời điểm 3/12/2008 Nguyên lý Hệ điều hành 32 Bài toán “Producer - Consumer” (1) „ Nhà sản xuất (producer) ‰ Sinh sản phẩm (thông tin) „ Người tiêu dùng (consumer) ‰ Dùng thông tin do Nhà sản xuất sinh ra „ Bộ đệm chung ‰ Không giới hạn ‰ Giới hạn ‰ Hỗ trợ bởi hệ điều hành (thông qua IPC) ‰ Do lập trình viên tạo ra bằng cách sử dụng bộ nhớ chia sẻ 3/12/2008 Nguyên lý Hệ điều hành 33 Bài toán Producer – Consumer(2) „ Các biến chia sẻ 3/12/2008 Nguyên lý Hệ điều hành 34 Bài toán Producer – Consumer (3) „ Mã cho Producer 3/12/2008 Nguyên lý Hệ điều hành 35 Bài toán Producer – Consumer (4) „ Mã lệnh cho Consumer 3/12/2008 Nguyên lý Hệ điều hành 36 1.5. Truyền thông giữa các tiến trình „ Các tiến trình có thể giao tiếp thông qua tính năng truyền thông giữa các tiến trình (IPC) của HĐH „ IPC cho phép các tiến trình không gian địa chỉ giao tiếp và đồng bộ „ Hệ thống truyền thông báo 3/12/2008 Nguyên lý Hệ điều hành 37 Hệ thống truyền thông báo (1) „ Giao tiếp giữa các tiến trình người dùng không cần chia sẻ dữ liệu mà thông qua việc truyền thông báo „ Hai thao tác chính ‰ Gửi ‰ Nhận 3/12/2008 Nguyên lý Hệ điều hành 38 Hệ thống truyền thông báo (2) „ Thông báo ‰ Kích thước cố định ‰ Kích thước thay đổi „ Hai tiến trình P & Q truyền thông bằng cách gửi và nhận thông báo ‰ Tạo thành một kết nối truyền thông 3/12/2008 Nguyên lý Hệ điều hành 39 Hệ thống truyền thông báo (3) „ Các phương pháp để thiết lập liên kết và các thao tác gửi/nhận ‰ Truyền thông trực tiếp/ gián tiếp ‰ Truyền thông đối xứng/ bất đối xứng ‰ Gửi bản sao hay gửi tham chiếu ‰ Các thông điệp kích thước cố định hoặc thay đổi 3/12/2008 Nguyên lý Hệ điều hành 40 Định danh Các tiến trình muốn giao tiếp với nhau cần có một cách thức để tham chiếu đến nhau! 3/12/2008 Nguyên lý Hệ điều hành 41 Truyền thông trực tiếp (1) „ Phải khai báo tên của người nhận/gửi trong khi giao tiếp ‰ send (P, message) ‰ receive (Q, message) „ Tính chất ‰ Tự động thiết lập liên kết khi cần giao tiếp ‰ Mỗi liên kết có đúng hai tiến trình ‰ Có đúng một liên kết giữa bất kì 2 cặp tiến trình 3/12/2008 Nguyên lý Hệ điều hành 42 Truyền thông trực tiếp (2) „ Hệ thống vừa xét: đối xứng địa chỉ „ Hệ thống bất đối xứng địa chỉ ‰ Chỉ có người gửi định danh người nhận ‰ Người nhận không cần định danh người gửi „ Send(P, message) „ Receive(id, message) ‰ Thay đổi tên một tiến trìnhÆ duyệt lại toàn bộ các tiến trình 3/12/2008 Nguyên lý Hệ điều hành 43 Truyền thông gián tiếp (1) „ Gửi và nhận thông qua hòm thư hoặc cổng „ Mỗi hòm thư có một số định danh „ Các thao tác gửi/nhận ‰ Send(A, message) – A là hòm thư ‰ Receive(A, message) – nhận một thông báo từ hòm thư A 3/12/2008 Nguyên lý Hệ điều hành 44 Truyền thông gián tiếp (2) „ Tính chất ‰ Một liên kết được thiết lập giữa hai tiến trình chỉ khi cả hai là thành viên của một hòm thư ‰ Một liên kết có thể có nhiều hơn hai tiến trình ‰ Giữa hai tiến trình có thể có nhiều liên kết 3/12/2008 Nguyên lý Hệ điều hành 45 Đồng bộ hóa „ Truyền thông báo có thể là phong tỏa hay không phong tỏa(đồng bộ hoặc không đồng bộ) ‰ Phong tỏa gửi ‰ Không phong tỏa gửi ‰ Phong tỏa nhận ‰ Không phong tỏa nhận 3/12/2008 Nguyên lý Hệ điều hành 46 Lưu trữ bộ đệm „ Hàng đợi tạm: các cách thiết kế ‰ Zero capacity ‰ Bounded capacity ‰ Unbounded capacity 3/12/2008 Nguyên lý Hệ điều hành 47 1.6. Luồng „ Tại sao đa luồng? ‰ Trình duyệt Web „ Hiển thị ảnh, hoặc văn bản „ Nhận dữ liệu từ mạng ‰ Trình word „ Hiển thị văn bản „ Đọc kí tự từ người dùng „ Thực hiện kiểm tra ngữ pháp và chính tả ngầm 3/12/2008 Nguyên lý Hệ điều hành 48 Tiến trình đơn luồng và tiến trình đa luồng 3/12/2008 Nguyên lý Hệ điều hành 49 Tại sao đa luồng? (2) „ Một ứng dụng đơn cần thực hiện một số nhiệm vụ tương tự đồng thời ‰ Ví dụ: Máy chủ web „ Giải pháp đa tiến trình trước đây ‰ Nặng nề hơn ‰ Lãng phí do các tiến trình cùng thực hiện một số nhiệm vụ tương tự 3/12/2008 Nguyên lý Hệ điều hành 50 Lợi ích „ Tính đáp ứng „ Chia sẻ tài nguyên „ Kinh tế ‰ Phân phối tài nguyên và bộ nhớ cho tiến trình tốn kém „ Tận dụng các kiến trúc đa xử lý 3/12/2008 Nguyên lý Hệ điều hành 51 Luồng mức người dùng (User-Thread) „ Quản lý luồng được thực hiện bởi thư viện luồng ở mức người dùng „ Examples - POSIX Pthreads - Mach C-threads - Solaris threads 3/12/2008 Nguyên lý Hệ điều hành 52 Luồng mức nhân „ Hỗ trợ trực tiếp bởi hệ điều hành „ Examples - Windows 95/98/NT/2000 - Solaris - Tru64 UNIX - BeOS - Linux 3/12/2008 Nguyên lý Hệ điều hành 53 Các mô hình đa luồng „ Mô hình Many-to-One „ Mô hình One-to-One „ Mô hình Many-to-Many 3/12/2008 Nguyên lý Hệ điều hành 54 Mô hình Many-to-One 3/12/2008 Nguyên lý Hệ điều hành 55 Mô hình One-to-One 3/12/2008 Nguyên lý Hệ điều hành 56 Mô hình Many-to-Many 3/12/2008 Nguyên lý Hệ điều hành 57 Pthreads „ Chuẩn Posix (IEEE 1003.1c), API cho việc tạo và đồng bộ tiến trình „ API xác định giao diện của thư viện,thực thi tùy thuộc vào cài đặt thư viện. „ Phổ biến trong dòng hệ điều hành Unix. 3/12/2008 Nguyên lý Hệ điều hành 58 3/12/2008 Nguyên lý Hệ điều hành 59 2. Lập lịch CPU „ Các khái niệm cơ bản „ Điều kiện lập lịch „ Các thuật toán lập lịch 3/12/2008 Nguyên lý Hệ điều hành 60 2.1. Các khái niệm cơ bản „ Tận dụng tối đa CPU trong đa chương trình „ Chu kỳ của các CPU-I/O burst – Việc thực thi tiến trình là một chu kì của các thực thi bởi CPU và chờ đợi vào ra „ Phân phối CPU burst 3/12/2008 Nguyên lý Hệ điều hành 61 Luân phiên giữa các CPU và I/O burst 3/12/2008 Nguyên lý Hệ điều hành 62 Biểu đồ tần suất của các CPU burst theo thời gian 3/12/2008 Nguyên lý Hệ điều hành 63 Bộ lập lịch CPU „ Chọn trong số các tiến trình trong bộ nhớ trong và ở trạng thái ready để thực hiện (trao quyền sử dụng CPU cho tiến trình đó) „ Việc lập lịch có thể được thực hiện trong một số trường hợp 1. Tiến trình trạng thái running chuyển sang waiting 2. Tiến trình trạng thái running chuyển sang trạng thái ready 3. Có một tiến trình ở trạng thái waiting chuyển sang trạng thái ready 4. Tiến trình hiện tại kết thúc thực thi „ Lập lịch trong chỉ trong các trường hợp 1 và 4 gọi là lập lịch không chiếm đoạt (hay còn gọi là cộng tác) „ Các trường hợp còn lại gọi là lập lịch chiếm đoạt 3/12/2008 Nguyên lý Hệ điều hành 64 Bộ điều vận „ Bộ điều vận có nhiệm vụ chuyển điều khiển CPU cho tiến trình được lựa chọn bởi bộ lập lịch ngắn hạn „ Chức năng của bộ điều vận bao gồm ‰ Chuyển đổi ngữ cảnh ‰ Chuyển sang user mode ‰ Chuyển điều khiển đến một vị trí xác định trong chương trình người dùng để khởi động lại chương trình „ Độ trễ điều vận ‰ Thời gian dừng một tiến trình để bắt đầu thực thi tiến trình khác 3/12/2008 Nguyên lý Hệ điều hành 65 2.2. Điều kiện lập lịch „ Tính tận dụng CPU ‰ Thông thường từ 40-90% „ Thông lượng „ Thời gian quay vòng (turnaround time) „ Thời gian chờ „ Thời gian phản ứng 3/12/2008 Nguyên lý Hệ điều hành 66 Vấn đề tối ưu các điều kiện „ Cực đại hóa tính tận dụng CPU „ Cực đại hóa thông lượng „ Cực tiểu hóa thời gian quay vòng „ Cực tiểu hóa thời gian đợi „ Cực tiểu hóa thời gian phản ứng 3/12/2008 Nguyên lý Hệ điều hành 67 2.3. Các thuật toán lập lịch „ Đến trước – Phục vụ trước (FCFS) „ Công việc ngắn nhất trước (SJF) „ Lập lịch với độ ưu tiên „ Lập lịch Round-Robin(RR) „ Lập lịch đa hàng đợi „ Lập lịch với hàng đợi phản hồi 3/12/2008 Nguyên lý Hệ điều hành 68 “Đến trước – Phục vụ trước” (FCFS) „ Ba tiến trình đến theo thứ tự là P1, P2, P3 ‰ Thời gian thực hiện của P1, P2 và P3 lần lượt là 24, 3 và 3 „ Biểu đồ Gantt trong lập lịch FCFS „ Thời gian chờ của P1 = 0; P2= 24; P3 = 27 „ Thời gian chờ trung bình: (0 + 24 + 27)/3= 17 P1 P2 P3 24 27 300 3/12/2008 Nguyên lý Hệ điều hành 69 “Đến trước – Phục vụ trước” (FCFS) (tt) „ Nếu các tiến trình đến theo thứ tự P2, P3, P1 „ Biểu đồ Gantt cho lập lịch „ Thời gian chờ của P1 = 6; P2 = 0; P3 = 3 „ Thời gian chờ trung bình: (6 + 0 + 3)/3 = 3 „ Tốt hơn nhiều so với trường hợp trên „ Convoy effect P1P3P2 63 300 3/12/2008 Nguyên lý Hệ điều hành 70 Công việc ngắn nhất trước (SJF) „ Liên kết mỗi tiến trình độ dài của “CPU burst” tiếp theo. Sử dụng độ dài này để lập lịch tiến trình với thời gian ngắn nhất. „ Hai dạng ‰ Không chiếm đoạt – Một khi CPU đã được gán cho tiến trình, CPU không thể bị chiếm đoạt bởi một tiến trình nào khác. ‰ Chiếm đoạt – Nếu một tiến trình mới đến với độ dài CPU burst nhỏ hơn thời gian thực thi còn lại của tiến trình sở hữu CPU, tiến trình mới được chiếm hữa CPU – Dạng “Thời gian còn lại ngắn nhất trước” (SRJF) „ SJF tối ưu thời gian chờ 3/12/2008 Nguyên lý Hệ điều hành 71 SJF không chiếm đoạt: Ví dụ „ SJF (không chiếm đoạt) „ Thời gian chờ trung bình:(0 + 6 + 3 + 7)/4 = 4 P1 P3 P2 73 160 P4 8 12 3/12/2008 Nguyên lý Hệ điều hành 72 SJF chiếm đoạt: Ví dụ „ SJF (chiếm đoạt) „ Thời gian chờ trung bình= (9 + 1 + 0 + 2)/4=3 P1 P3P2 42 110 P4 5 7 P2 P1 16 3/12/2008 Nguyên lý Hệ điều hành 73 Xác định độ dài của CPU burst tiếp theo „ Ước lượng độ dài nhờ độ dài của các CPU burst trước đó :Define 4. 10 , 3. burst CPU next the for value predicted 2. burst CPU of lenght actual 1. 1 ≤≤ = = + αα τ n th n nt ( ) .11 nnn t ταατ −+== 3/12/2008 Nguyên lý Hệ điều hành 74 Xác định độ dài của CPU burst tiếp theo 3/12/2008 Nguyên lý Hệ điều hành 75 Lập lịch với độ ưu tiên „ Mỗi tiến trình liên kết với một độ ưu tiên (số nguyên) xác định „ CPU được phân phối cho tiến trình với độ ưu tiên cao nhất (giá trị độ ưu tiến nhỏ nhất) ‰ Chiếm đoạt ‰ Không chiếm đoạt „ SJF là lập lịch với độ ưu tiên trong đó độ ưu tiên chính là khoảng CPU burst tiếp theo „ Vấn đề: “Chết đói” – Những tiến trình với độ ưu tiên thấp có thể sẽ không bao giờ được gán CPU ‰ Giải pháp: các tiến trình tăng độ ưu tiên theo thời gian 3/12/2008 Nguyên lý Hệ điều hành 76 Round Robin (RR) „ Mỗi tiến trình được gán một lượng tử thời gian (thường từ 10 – 100 mili giây) „ Hết lượng tử thời gian, tiến trình hiện tại bị tước CPU và đặt vào hàng đợi sẵn sàng „ Hiệu năng ‰ FIFO ‰ Q phải đủ lớn so với thời gian chuyển giao ngữ cảnh 3/12/2008 Nguyên lý Hệ điều hành 77 Ví dụ: RR với lượng tử thời gian = 20 Process Burst Time P1 53 P2 17 P3 68 P4 24 „ Biểu đồ Gantt: RR có thời gian quay vòng trung bình cap hơn SJF nhưng có tính phản ứng tốt hơn P1 P2 P3 P4 P1 P3 P4 P1 P3 P3 0 20 37 57 77 97 117 121 134 154 162 3/12/2008 Nguyên lý Hệ điều hành 78 Thời gian lượng tử và thời gian chuyển đổi ngữ cảnh 3/12/2008 Nguyên lý Hệ điều hành 79 Biến đổi thời gian quay vòng theo thời gian lượng tử 3/12/2008 Nguyên lý Hệ điều hành 80 Lập lịch với Hàng đợi nhiều mức „ Sử dụng nhiều hơn một hàng đợi sẵn sàng ‰ Ví dụ: hàng đợi nền trước (foreground queue) cho các chương trình tương tác, hàng đợi nền sau (background) cho các chương trình duy trì hệ thống, các chương trình theo lô „ Sử dụng các thuật toán lập lịch khác nhau cho các hàng đợi ‰ Ví dụ: RR cho hàng đợi nền trước, FCFS „ Chia thời gian cho các hàng đợi ‰ Ví dụ: 80% thời gian cho hàng đợi nền trước, 20% cho nền sau 3/12/2008 Nguyên lý Hệ điều hành 81 Hàng đợi nhiều mức 3/12/2008 Nguyên lý Hệ điều hành 82 Hàng đợi nhiều mức phản hồi „ Không cố định tiến trình trên một hàng đợi „ Ví dụ: các hàng đợi với các độ ưu tiên khác nhau ‰ Các tiến trình gắn với Vào/Ra ở hàng đợi có độ ưu tiên cao ‰ Chuyển các tiến trình sử dụng CPU đến các hàng đợi có độ ưu tiên thấp ‰ Chuyển các tiến trình phải đợi lâu đều đặn lên phía trên 3/12/2008 Nguyên lý Hệ điều hành 83 Lập lịch các luồng trong Java „ JVM sử dụng thuật toán Preemptive, và dựa trên độ ưu tiên trong lập lịch „ Hàng đợi FIFO được sử dụng nếu có nhiều luồng cùng mức ưu tiên 3/12/2008 Nguyên lý Hệ điều hành 84 Lập lịch các luồng trong Java JVM lập lịch khi: 1. Tiến trình đang chạy ra khỏi trạng thái runnable 2. Một tiến trình có độ ưu tiên cao hơn vào trạng thái runnable 3/12/2008 Nguyên lý Hệ điều hành 85 Time-Slicing Do JVM không hỗ trợ cắt thời gian (Time- Slicing), hàm yield() có thể được sử dụng: while (true) { // perform CPU-intensive task . . . Thread.yield(); } Thread.yield()chuyển điều khiển cho luồng khác 3/12/2008 Nguyên lý Hệ điều hành 86 Các độ ưu tiên của luồng Priority Ý nghĩa Thread.MIN_PRIORITY Nhỏ nhất Thread.MAX_PRIORITY Lớn nhất Thread.NORM_PRIORITY Ngầm định Phương thức setPriority() setPriority(Thread.NORM_PRIORIT Y + 2) 3/12/2008 Nguyên lý Hệ điều hành 87 Nội dung đã học „ Lý do lập lịch „ Các dạng lập lịch ‰ FCFS ‰ SJF ‰ RR ‰ MFQ „ Lập lịch trong Java 3/12/2008 Nguyên lý Hệ điều hành 88 3. Đồng bộ hóa tiến trình „ Nền tảng „ Vấn đề “Đoạn tới hạn” „ Giải pháp của Peterson „ Đồng bộ nhờ phần cứng „ Semaphores „ 3 bài toán đồng bộ điển hình „ Monitors 3/12/2008 Nguyên lý Hệ điều hành 89 3.1. Nền tảng „ Truy nhập đồng thời đến dữ liệu chia sẻ có thể gây ra sự không nhất quán về dữ liệu ÆCần các kĩ thuật để việc thực thi tuần tự của các tiến trình cộng tác „ Vấn đề cộng tác tiến trình (phần 1) ‰ Bài toán “Sản xuất – Tiêu dùng” ‰ Bộ nhớ chia sẻ (có giới hạn) ‰ Biến count lưu số các items trong buffer 3/12/2008 Nguyên lý Hệ điều hành 90 Mã nguồn cho Producer và Consumer „ Producer while (true) { //produce an item while (count == BUFFER_SIZE); // do nothing buffer [in] = nextProduced; in = (in + 1) % BUFFER_SIZE; count++; } „ Consumer while (1) { while (count == 0) ; // do nothing nextConsumed = buffer[out]; out = (out + 1) % BUFFER_SIZE; count--; /*consume the item in } 3/12/2008 Nguyên lý Hệ điều hành 91 Chạy đua „ count++ có thể được thực hiện như sau register1 = count register1 = register1 + 1 count = register1 „ count– có thể được thực hiện như sau register2 = count register2 = register2 - 1 count = register2 „ Giả sử ban đầu “count = 5”: S0: producer thực thi register1 = count {register1 = 5} S1: producer thực thi register1 = register1 + 1 {register1 = 6} S2: consumer thực thi register2 = count {register2 = 5} S3: consumer thực thi register2 = register2 - 1 {register2 = 4} S4: producer thực thi count = register1 {count = 6 } S5: consumer thực thi count = register2 {count = 4} 3/12/2008 Nguyên lý Hệ điều hành 92 Chạy đua „ Chạy đua: Tình huống nhiều tiến trình cùng truy cập và xử lý dữ liệu dùng chung đồng thời. Giá trị cuối cùng của dữ liệu phụ thuộc vào tiến trình sẽ kết thúc cuối. „ Để tránh việc chạy đua, các tiến trình đồng thời cần phải được đồng bộ hóa 3/12/2008 Nguyên lý Hệ điều hành 93 3.2. Vấn đề đoạn tới hạn „ n tiến trình cùng muốn truy cập đến dữ liệu chia sẻ „ Mỗi tiến trình có một đoạn mã gọi là “đoạn tới hạn”, trong “đoạn tới hạn”dữ liệu chia sẻ mới được truy cập tới. „ Vấn đề - đảm bảo rằng khi một tiến trình đang trong đoạn tới hạn của nó, các tiến trình khác không được phép thực thi đoạn tới hạn của chúng. 3/12/2008 Nguyên lý Hệ điều hành 94 Giải pháp cho vấn đề “đoạn tới hạn” 1. Loại trừ lẫn nhau. Nếu tiến trình Pi đang trong đoạn tới hạn, không tiến trình nào khác được phép ở trong đoạn tới hạn. 2. Phát triển. Nếu không tiến trình nào ở trong đoạn tới hạn và có một số tiến trình muốn vào đoạn tới hạn, việc lựa chọn một tiến trình vào đoạn tới hạn sẽ không bị trì hoãn mãi. 3. Chờ đợi có cận. Phải có một cận về số lần mà các tiến trình khác được phép vào đoạn tới hạn sau khi một tiến trình đã yêu cầu vào đoạn tới hạn và trước khi yêu cầu đó được đáp ứng. y Giả thiết rằng mỗi tiến trình thực thi với tốc độ khác không y Không có giả thiết về mối tương quan tốc độ của n tiến trình. 3/12/2008 Nguyên lý Hệ điều hành 95 3.3. Giải pháp của Peterson „ Giải pháp đồng bộ cho hai tiến trình „ Giả sử hai lệnh LOAD và STORE là các lệnh nguyên tử (thao tác không thể phân chia) „ Các tiến trình chia sẻ các biến sau: ‰ int turn; ‰ Boolean flag[2] „ Biến turn cho biết tiến trình nào được vào đoạn tới hạn. „ Mảng flag chỉ xem liệu một tiến trình có sẵn sàng vào đoạn tới hạn hay không. ‰ flag[i] = true là tiến trình Pi sẵn sàng vào đoạn tới hạn! 3/12/2008 Nguyên lý Hệ điều hành 96 Thuật toán cho tiến trình Pi do { flag[i] = TRUE; turn = j; while ( flag[j] && turn == j); CRITICAL SECTION flag[i] = FALSE; REMAINDER SECTION } while (TRUE); 3/12/2008 Nguyên lý Hệ điều hành 97 3.4. Đồng bộ hóa nhờ phần cứng „ Nhiều hệ thống cung cấp sự hỗ trợ của phần cứng cho vấn đề đoạn tới hạn „ Các hệ đơn xử lý – có thể bỏ chức năng ngắt ‰ Mã được thực thi mà không có sự chiếm đoạt ‰ Thông thường không hiệu quả trên các hệ thống đa xử lý „ Các hệ điều hành với chiến lược này thường không khả cỡ „ Các máy tính hiện đại cung cấp các lệnh phần cứng nguyên tử „ Nguyên tử = không phân chia ‰ Kiểm tra từ nhớ và thiết lập giá trị ‰ Tráo đổi nội dung của hai từ nhớ 3/12/2008 Nguyên lý Hệ điều hành 98 Lệnh TestAndSet „ Định nghĩa: boolean TestAndSet (boolean *target) { boolean rv = *target; *target = TRUE; return rv: } 3/12/2008 Nguyên lý Hệ điều hành 99 Giải pháp dùng TestAndSet „ Biến chia sẻ lock, được khởi tạo bằng false „ Giải pháp: do { while ( TestAndSet (&lock )) ; /* do nothing // critical section lock = FALSE; // remainder section } while ( TRUE); 3/12/2008 Nguyên lý Hệ điều hành 100 Lệnh Swap „ Định nghĩa: void Swap (boolean *a, boolean *b) { boolean temp = *a; *a = *b; *b = temp: } 3/12/2008 Nguyên lý Hệ điều hành 101 Giải pháp dùng Swap „ Biến chia sẻ lock, được khởi tạo bằng false; mỗi tiến trình có một biến Boolean cục bộ „ Giải pháp: do { key = TRUE; while ( key == TRUE) Swap (&lock, &key ); // critical section lock = FALSE; // remainder section } while ( TRUE); 3/12/2008 Nguyên lý Hệ điều hành 102 3.5. Semaphores „ Công cụ đồng bộ không đòi hỏi “chờ-bận” „ Semaphore S – biến nguyên „ Hai thao tác “nguyên tử” để sửa đổi S: wait (S) { while S <= 0; // no-op S--; } signal (S) { S++; } 3/12/2008 Nguyên lý Hệ điều hành 103 Semaphore – Công cụ đồng bộ tổng quát „ Hai loại semaphore ‰ Semaphore đếm „ Giá trị của semaphore là số các tài nguyên available ‰ Semaphore nhị phân „ Semaphore chỉ nhận hai giá trị 0 và 1 „ Còn được gọi là mutex lock „ Loại trừ lẫn nhau dùng semaphore ‰ Semaphore S; // initialized to 1 ‰ wait (S); Critical Section signal (S); 3/12/2008 Nguyên lý Hệ điều hành 104 Cài đặt Semaphore „ Cần đảm bảo rằng không có hai tiến trình nào có thể cùng thực thi wait() và signal() trên cùng 1 semaphore tại cùng 1 thời điểm „ Thực thi semaphore bản thân nó cũng là bài toán đoạn tới hạn ‰ Mã cho wait() và signal() được đặt trong đoạn tới hạn ‰ Có thể cài đặt cơ chế “chờ-bận” hoặc không „ Chờ-bận ‰ Mã nguồn đơn giản ‰ Chấp nhận được trong TH đoạn tới hạn ít khi được truy nhập tới 3/12/2008 Nguyên lý Hệ điều hành 105 Cài đặt Semaphore không chờ-bận „ Mỗi semaphore liên kết với một hàng đợi. Mỗi phần tử của hàng đợi có hai phần ‰ Giá trị (kiểu nguyên) ‰ Con trỏ đến bản ghi tiếp theo trong danh sách „ Hai thao tác: ‰ Block – đặt tiến trình gọi thao tác này vào hàng đợi semaphore. ‰ Wakeup – gỡ bỏ một trong số các tiến trình trong hàng đợi và đặt nó vào hàng đợi sẵn sàng 3/12/2008 Nguyên lý Hệ điều hành 106 Cài đặt Semaphore không chờ-bận „ Implementation of wait: Wait (S) { value--; if (value < 0) { //add this process to waiting //queue block(); } „ Implementation of signal: Signal (S) { value++; if (value <= 0) { //remove a process P from //the waiting queue wakeup(P); } 3/12/2008 Nguyên lý Hệ điều hành 107 Bế tắc và Chết đói „ Bế tắc – hai hay nhiều tiến trình chờ vô hạn trên một sự kiện gây ra bởi một trong các tiến trình đang chờ „ S và Q là hai semaphores được khởi tạo bằng 1 P0 P1 wait (S); wait (Q); wait (Q); wait (S); . . . . . . signal (S); signal (Q); signal (Q); signal (S); „ Chết đói – bị block vô hạn. Một tiến trình có thể bị gỡ khỏi hàng đợi của semaphore. 3/12/2008 Nguyên lý Hệ điều hành 108 3.6. Các bài toán đồng bộ kinh điển „ Bộ đệm giới hạn „ Bài toán đọc và ghi „ Bài toán “bữa ăn của các triết gia” 3/12/2008 Nguyên lý Hệ điều hành 109 Bài toán “Bộ đệm giới hạn” „ N bộ đệm, mỗi bộ đệm có item „ Semaphore mutex được khởi tạo bằng 1 „ Semaphore full được khởi tạo bằng 0 „ Semaphore empty được khởi tạo bằng N. 3/12/2008 Nguyên lý Hệ điều hành 110 Bài toán “Bộ đệm giới hạn” „ Tiến trình “producer” do { // produce an item wait (empty); wait (mutex); // add the item to the buffer signal (mutex); signal (full); } while (true); „ Tiến trình “consumer” do { wait (full); wait (mutex); // remove an item from buffer signal (mutex); signal (empty); // consume the removed item } while (true); 3/12/2008 Nguyên lý Hệ điều hành 111 Bài toán “Đọc-ghi” „ Một tập dữ liệu được chia sẻ giữa một số tiến trình đồng thời ‰ Reader – chỉ đọc dữ liệu; không thực hiện bất kì một thao tác cập nhật. ‰ Writers – có thể vừa đọc vừa ghi. „ Vấn đề ‰ Cho phép nhiều reader đọc cùng một thời điểm. Chỉ có một writer có thể truy nhập đến dữ liệu chia sẻ tại cùng một thời điểm. „ Dữ liệu chia sẻ ‰ Tập dữ liệu ‰ Semaphore mutex được khởi tạo bằng 1. ‰ Semaphore wrt được khởi tạo bằng 1. ‰ Số nguyên readcount được khởi tạo bằng 0. 3/12/2008 Nguyên lý Hệ điều hành 112 Bài toán “Đọc-ghi” „ Tiến trình ghi (writer) do { wait (wrt) ; // writing is performed signal (wrt) ; } while (true) „ Tiến trình đọc (reader) do { wait (mutex) ; readcount ++ ; if (readercount == 1) wait (wrt) ; signal (mutex) // reading is performed wait (mutex) ; readcount - - ; if redacount == 0) signal (wrt) ; signal (mutex) ; } while (true) 3/12/2008 Nguyên lý Hệ điều hành 113 Bài toán “Bữa ăn của các triết gia” „ Dữ liệu chia sẻ ‰ Cơm (tập dữ liệu) ‰ Semaphore chopstick [5] được khởi tạo bằng 1 3/12/2008 Nguyên lý Hệ điều hành 114 Bài toán “Bữa ăn của các triết gia” „ Mã lệnh cho Triết gia thứ I Do { wait ( chopstick[i] ); wait ( chopStick[ (i + 1) % 5] ); // eat signal ( chopstick[i] ); signal (chopstick[ (i + 1) % 5] ); // think } while (true) ; 3/12/2008 Nguyên lý Hệ điều hành 115 Vấn đề của Semaphores „ Không sử dụng đúng các thao tác trên semaphore ‰ signal (mutex) . wait (mutex) ‰ wait (mutex) wait (mutex) ‰ Bỏ qua wait (mutex) hay signal (mutex) (hoặc cả hai) 3/12/2008 Nguyên lý Hệ điều hành 116 3.7. Monitors „ Trừu tượng mức cao cung cấp phương thức hữu hiệu cho đồng bộ tiến trình „ Chỉ có một tiến trình chỉ có thể active trong monitor tại một thời gian monitor monitor-name { // shared variable declarations procedure P1 () { . } procedure Pn () {} Initialization code ( .) { } } } 3/12/2008 Nguyên lý Hệ điều hành 117 Monitor 3/12/2008 Nguyên lý Hệ điều hành 118 Các biến điều kiện „ condition x, y; „ Hai thao tác trên biến điều kiện: ‰ x.wait () – tiến trình gọi thao tác này sẽ bị block. ‰ x.signal () – khôi phục thực thi của một trong số các tiến trình (nếu có) đã gọi thao tác x.wait () 3/12/2008 Nguyên lý Hệ điều hành 119 Monitor với các biến điều kiện 3/12/2008 Nguyên lý Hệ điều hành 120 Giải pháp cho bài toán “Bữa ăn của các triết gia” monitor DP { enum { THINKING; HUNGRY, EATING) state [5] ; condition self [5]; void pickup (int i) { state[i] = HUNGRY; test(i); if (state[i] != EATING) self [i].wait; } void putdown (int i) { state[i] = THINKING; // test left and right neighbors test((i + 4) % 5); test((i + 1) % 5); } void test (int i) { if ( (state[(i + 4) % 5] != EATING) && (state[i] == HUNGRY) && (state[(i + 1) % 5] != EATING) ) { state[i] = EATING ; self[i].signal () ; } } initialization_code() { for (int i = 0; i < 5; i++) state[i] = THINKING; } } 3/12/2008 Nguyên lý Hệ điều hành 121 4. Bế tắc „ Vấn đề “Bế tắc” „ Mô hình hệ thống „ Các đặc điểm của bế tắc „ Các phương pháp xử lý bế tắc „ Ngăn chặn bế tắc „ Tránh bế tắc „ Khôi phục sau bế tắc 3/12/2008 Nguyên lý Hệ điều hành 122 4.1. Vấn đề “Bế tắc” „ Một tập các tiến trình bị block, mỗi tiến trình giữ một tài nguyên và chờ một tài nguyên bị chiếm giữ bởi một tiến trình khác trong tập „ Ví dụ ‰ Một hệ thống có 2 băng từ ‰ P1 và P2 mỗi tiến trình giữ một băng từ và đòi hỏi băng từ được giữ bởi tiến trình kia. „ Ví dụ ‰ semaphores A và B, được khởi tạo bằng 1 P0 P1 wait (A); wait(B) wait (B); wait(A 3/12/2008 Nguyên lý Hệ điều hành 123 4.2. Mô hình hệ thống „ Các kiểu tài nguyên R1, R2, . . ., Rm CPU cycles, memory space, I/O devices „ Mỗi tài nguyên Ri cóWi thể hiện. „ Mỗi tiến trình sử dụng tài nguyên như sau: ‰ request ‰ use ‰ release 3/12/2008 Nguyên lý Hệ điều hành 124 4.3. Các đặc điểm của bế tắc „ Bế tắc có thể xảy ra nếu cả bốn điều kiện sau xảy ra đồng thời ‰ Loại trừ lẫn nhau: chỉ một tiến trình được sử dụng tài nguyên tại một thời điểm. ‰ Giữ và chờ: một tiến trình giữ ít nhất một tài nguyên và chờ các tài nguyên khác đang được giữ bởi các tiến trình khác. ‰ Không chiếm đoạt: một tài nguyên chỉ có thể được giải phóng một cách tự nguyện bởi tiến trình giữ nó, sau khi tiến trình đó hoàn thành công việc của nó. ‰ Chờ đợi vòng tròn: Một tập các tiến trình đang chờ {P0, P1, , Pn} , trong đó P0 chờ một tài nguyên bị giữ bởi P1, P1 chờ một tài nguyên bị giữ bởi P2, , Pn–1chờ một tài nguyên được giữ bởi Pn, và Pn đang chờ một tài nguyên P0. 3/12/2008 Nguyên lý Hệ điều hành 125 Đồ thị phân phối tài nguyên „ Có một tập các đỉnh V và một tập các cạnh E ‰ V được chia thành hai tập: „ P = {P1, P2, , Pn}, tập chứa tất cả các tiến trình trong hệ thống. „ R = {R1, R2, , Rm}, tập chứa tất cả các kiểu tài nguyên trong hệ thống. ‰ Cạnh request – cạnh có hướng P1 → Rj ‰ Cạnh assignment – cạnh có hướng Rj→ Pi 3/12/2008 Nguyên lý Hệ điều hành 126 Đồ thị phân phối tài nguyên „ Tiến trình „ Kiểu tài nguyên với 4 thể hiện „ Pi yêu cầu một thể hiện của Rj „ Pi giữ một thể hiện của Rj Pi Pi Rj Rj 3/12/2008 Nguyên lý Hệ điều hành 127 Ví dụ về một đồ thị phân phối tài nguyên 3/12/2008 Nguyên lý Hệ điều hành 128 Đồ thị phân phối tài nguyên với một bế tắc 3/12/2008 Nguyên lý Hệ điều hành 129 Đồ thị với một chu trình nhưng không có bế tắc 3/12/2008 Nguyên lý Hệ điều hành 130 Tiên đề „ Nếu một đồ thị không có chu trình⇒ không có bế tắc. „ Nếu đồ thị có một chu trình⇒ ‰ Nếu mỗi tài nguyên chỉ có một thể hiện thì xuất hiện bế tắc. ‰ Nếu mỗi loại tài nguyên có một vài thể hiện thì có thể có bế tắc. 3/12/2008 Nguyên lý Hệ điều hành 131 4.4. Các phương pháp xử lý bế tắc „ Đảm bảo hệ thống sẽ không bao giờ đi vào trạng thái bế tắc „ Cho phép hệ thống vào trạng thái bế tắc sau đó khôi phục „ Bỏ qua vấn đề này và xem rằng bế tắc không bao giờ xảy ra trong hệ thống; được sử dụng bởi hầu hết các hệ điều hành, bao gồm cả UNIX. 3/12/2008 Nguyên lý Hệ điều hành 132 4.5. Ngăn chặn bế tắc „ Ràng buộc cách thức yêu cầu tài nguyên của các tiến trình ‰ Loại trừ lẫn nhau – không cần thỏa mãn với các tài nguyên có thể chia sẻ; cần thỏa mãn với các tài nguyên không thể chia sẻ (ví dụ máy in). ‰ Giữ và chờ – phải đảm bảo rằng khi một tiến trình yêu cầu một tài nguyên, nó không được giữ bất kì tài nguyên nào khác. „ Tiến trình phải yêu cầu và được phân phối tất cả các tài nguyên trước khi nó bắt đầu thực thi „ Cho phép tiến trình yêu cầu tài nguyên chỉ khi nó không chiếm hữu tài nguyên nào. „ Tính tận dụng tài nguyên thấp; có thể xảy ra “chết đói”. 3/12/2008 Nguyên lý Hệ điều hành 133 Ngăn chặn bế tắc (2) „ Không chiếm đoạt – ‰ Nếu một tiến trình hiện đang giữ một số tài nguyên nào đó và yêu cầu tài nguyên khác (chưa thể phân phối cho nó ngay lập tức), tất cả các tài nguyên đang bị giữ sẽ được giải phóng. ‰ Các tài nguyên bị chiếm đoạt được thêm vào danh sách các tài nguyên mà tiến trình đó đang chờ. ‰ Tiến trình sẽ bắt đầu thực thi lại chỉ khi nó có thể lấy lại các tài nguyên cũ cũng như chiếm cả tài nguyên mới mà nó đang yêu cầu. „ Chờ đợi vòng tròn – áp đặt một trình tự tổng thể của tất cả các loại tài nguyên, và ràng buộc các tiến trình yêu cầu tài nguyên theo thứ tự tăng dần. 3/12/2008 Nguyên lý Hệ điều hành 134 4.6. Tránh bế tắc „ Yêu cầu hệ thống phải có trước một số thông tin (prior information available). ‰ Mô hình đơn giản: mỗi tiến trình khai báo số tài nguyên lớn nhất thuộc mỗi loại mà nó cần. ‰ Thuật toán tránh bế tắc kiểm tra trạng thái phân phối tài nguyên để đảm bảo rằng không bao giờ có điều kiện “chờ đợi vòng tròn” xảy ra. ‰ Trạng thái phân phối tài nguyên được xác định bằng số các tài nguyên rỗi, số tài nguyên đã được phân phối và số cực đại yêu cầu của các tiến trình. 3/12/2008 Nguyên lý Hệ điều hành 135 Trạng thái an toàn „ Chừng nào một tiến trình yêu cầu một tài nguyên rỗi, cần xác định xem việc phân phối đó có đặt hệ thống vào trạng thái không an toàn không. „ Hệ thống trong trạng thái an toàn nếu tồn tại một “chuỗi an toàn” của tất cả các tiến trình. „ Chuỗi là an toàn đối với mỗi Pi, các tài nguyên mà Pi cần đều có thể phân phối bởi các tài nguyên đang rỗi hoặc các tài nguyên đăng bị chiếm hữu bởi tất cả các tiến trình Pj (với j<i). ‰ Nếu Pi cần tài nguyên không rỗi ngay lập tức, thì Pi có thể đợi cho đến khi tất cả các Pj hoàn thành. ‰ Khi Pj đã hoàn thành, Pi có thể chiếm hữu tài nguyên mà nó âần, thực thi và trả lại tài nguyên đã được phân phối và kết thúc. ‰ Khi Pi kết thức, Pi+1 có thể chiếm hữu tài nguyên mà nó cần. 3/12/2008 Nguyên lý Hệ điều hành 136 Tiên đề „ Nếu một hệ thống trong trạng thái an toàn⇒ không có bế tắc „ Nếu một hệ thống ở trong trạng thái không an toàn⇒ có thể có bế tắc. „ Tránh bế tắc⇒ đảm bảo rằng hệ thống không bao giờ rơi vào trạng thái không an toàn. 3/12/2008 Nguyên lý Hệ điều hành 137 Trạng thái an toàn, không an toàn và bế tắc 3/12/2008 Nguyên lý Hệ điều hành 138 Thuật toán đồ thị phân phối tài nguyên „ Claim Pi→ Rj chỉ rằng một tiến trình Pj có thể yêu cầu tài nguyên Rj; được biểu diễn bởi đường đứt quảng. „ Cạnh Claim được biến đổi thành cạnh request nếu một tiến trình yêu cầu một tài nguyên. „ Khi một tiến trình giải phóng tài nguyên, cạnh assignment được chuyển lại thành cạnh claim. „ Các tài nguyên phải có một độ ưu tiên trong hệ thống. 3/12/2008 Nguyên lý Hệ điều hành 139 Đồ thị phân phối tài nguyên để tránh bế tắc 3/12/2008 Nguyên lý Hệ điều hành 140 Trạng thái không an toàn trong đồ thị phân phối tài nguyên 3/12/2008 Nguyên lý Hệ điều hành 141 Thuật toán Banker „ Các tài nguyên có nhiều thể hiện. „ Mỗi tiến trình khi mới vào hệ thống cần phải khai báo số cực đại tài nguyên mà nó cần. „ Khi một tiến trình yêu cầu tài nguyên, hệ thống kiểm tra xem liệu việc phân phối tài nguyên đó có đảm bảo hệ thống trong trạng thái an toàn hay không ‰ Nếu không, tiến trình có thể phải chờ „ Khi một tiến trình đã được phân phối tài nguyên, nó phải trả lại các tài nguyên này trong một thời gian xác định. 3/12/2008 Nguyên lý Hệ điều hành 142 Cấu trúc dữ liệu cho thuật toán Banker „ Gọi n = số tiến trình, and m = số loại tài nguyên. ‰ Available: vector độ dài m. Nếu available [j] = k, có k thể hiện của tài nguyên Rj rỗi. ‰ Max: n x m matrix. Nếu Max [i,j] = k, tiến trình Pi có thể đòi hỏi nhiều nhất là k thể hiện của loại tài nguyên Rj. ‰ Allocation: n x m matrix. Nếu Allocation[i,j] = k , tiến trình Pi hiện được phân phối k thể hiện của Rj. ‰ Need: n x m matrix. Nếu Need[i,j] = k, tiến trình Pi có thể cần thêm k thể hiện của Rj để hoàn thành nhiệm vụ của nó. Need [i,j] = Max[i,j] – Allocation [i,j]. 3/12/2008 Nguyên lý Hệ điều hành 143 Thuật toán Safety 1. Gọi Work and Finish là các vectors có độ dài lần lượt là m và n. Khởi tạo: Work = Available Finish [i] = false for i - 1,3, , n. 2. Tìm i thỏa mãn hai điều kiện sau: (a) Finish [i] = false (b) Needi ≤ Work Nếu không tìm được i, nhảy đến bước 4. 3. Work = Work + Allocationi Finish[i] = true Nhảy đến bước 2. 4. Nếu Finish [i] == true với tất cả i, hệ thống trong trạng thái an toàn. 3/12/2008 Nguyên lý Hệ điều hành 144 Thuật toán phân phối yêu cầu tài nguyên cho tiến trình Pi Request = vector yêu cầu của Pi . Nếu Requesti [j] = k, Pi cần k thể hiện của Rj. 1. Nếu Requesti ≤ Needi nhảy đến bước 2. Nếu không, lỗi (tiến trình cần nhiều hơn số yêu cầu khai báo ban đầu). 2. Nếu Requesti ≤ Available, nhảy đến bước 3. Nếu không Pi phải chờ vì tất cả tài nguyên đều không rỗi. 3. Thử phân phối tài nguyên được yêu cầu cho Pi bằng cách thay đổi trạng thái như sau: Available = Available - Requesti ; Allocationi = Allocationi + Requesti ; Needi = Needi – Requesti ; z Nếu an toàn⇒ tài nguyên được phân phối cho Pi. z Nếu không an toàn⇒ Pi phải đợi, trạng thái phân phối tài nguyên cũ được khôi phục lại 3/12/2008 Nguyên lý Hệ điều hành 145 Ví dụ về thuật toán Banker „ 5 tiến trình từ P0 đến P4 „ 3 loại tài nguyên A (10 thể hiện), B (5 thể hiện), và C (7 thể hiện). „ Hệ thống tại thời điểm T0: Allocation Max Available A B C A B C A B C P0 0 1 0 7 5 3 3 3 2 P1 2 0 0 3 2 2 P2 3 0 2 9 0 2 P3 2 1 1 2 2 2 P4 0 0 2 4 3 3 3/12/2008 Nguyên lý Hệ điều hành 146 Ví dụ (Cont.) „ Nội dung của ma trận Need. Need được định nghĩa là Max – Allocation. Need A B C P0 7 4 3 P1 1 2 2 P2 6 0 0 P3 0 1 1 P4 4 3 1 „ Hệ thống trong trạng thái an toàn vì chuỗi < P1, P3, P4, P2, P0> thỏa mãn điều kiện an toàn. 3/12/2008 Nguyên lý Hệ điều hành 147 Ví dụ: P1 yêu cầu (1,0,2) (Cont.) „ Kiểm tra thấy Request ≤ Available (hay, (1,0,2) ≤ (3,3,2) ⇒ true). Allocation Need Available A B C A B C A B C P0 0 1 0 7 4 3 2 3 0 P1 3 0 2 0 2 0 P2 3 0 1 6 0 0 P3 2 1 1 0 1 1 P4 0 0 2 4 3 1 „ Thực thi thuật toán safety cho thấy chuỗi <P1, P3, P4, P0, P2> thỏa mãn yêu cần an toàn. „ Yêu cầu (3,3,0) của P4 có thể được gán hay không? „ Yêu cầu (0,2,0) của P0 có thể được gán hay không? 3/12/2008 Nguyên lý Hệ điều hành 148 4.7. Khôi phục sau bế tắc „ Cho phép trạng thái vào trạng thái bế tắc „ Thuật toán phát hiện bế tắc „ Phương pháp khôi phục 3/12/2008 Nguyên lý Hệ điều hành 149 Mỗi loại tài nguyên có một thể hiện „ Duy trì đồ thị wait-for ‰ Các node là các tiến trình. ‰ Pi→ Pj nếu Pi đang chờ Pj. „ Định kì thực hiện thuật toán tìm chu trình trong đồ thị. „ Một giải thuật kiểm tra chu trình trong đồ thị cần n2 thao tác, ở đây n là số đỉnh trong đồ thị. 3/12/2008 Nguyên lý Hệ điều hành 150 Đồ thị phân phối tài nguyên và đồ thị Wait-for Đồ thị phân phối tài nguyên Đồ thị wait-for tương ứng 3/12/2008 Nguyên lý Hệ điều hành 151 Mỗi tài nguyên có nhiều hơn một thể hiện „ Available: Vector độ dài m chỉ số các trường hợp còn rỗi đối với mỗi tài nguyên. „ Allocation: Ma trận n x m xác định số tài nguyên của mỗi loại được phân phối cho tiến trình. „ Request: Ma trận n x m chỉ yêu cầu hiện tại của tiến trình. Nếu Request [ij] = k, tiến trình Pi đang cần thêm k trường hợp tài nguyên Rj. 3/12/2008 Nguyên lý Hệ điều hành 152 Thuật toán phát hiện 1. Gọi Work and Finish là các vector độ dài m và n tương ứng. Khởi tạo : (a) Work = Available (b) For i = 1,2, , n, if Allocationi ≠ 0, then Finish[i] = false;otherwise, Finish[i] = true. 2. Tìm một chỉ số i thỏa mãn: (a) Finish[i] == false (b) Requesti ≤ Work Nếu không tồn tại i nhảy đến bước 4. 3/12/2008 Nguyên lý Hệ điều hành 153 Thuật toán phát hiện (Cont.) 3.Work = Work + Allocationi Finish[i] = true go to step 2. 4.If Finish[i] == false, for some i, 1 ≤ i ≤ n, then hệ thống trong trạng thái bế tắc. Hơn nữa, if Finish[i] == false, then Pi bị bế tắc. Độ phức tạo của thuật toán là O(m x n2). 3/12/2008 Nguyên lý Hệ điều hành 154 Ví dụ về thuật toán phát hiện „ 5 tiến trình P0 đến P4; ba loại tài nguyên: A (7 trường hợp), B (2 trường hợp), and C (6 trường hợp). „ Hệ thống tại thời điểm T0: Allocation Request Available A B C A B C A B C P0 0 1 0 0 0 0 0 0 0 P1 2 0 0 2 0 2 P2 3 0 3 0 0 0 P3 2 1 1 1 0 0 P4 0 0 2 0 0 2 „ Chuỗi dẫn đến Finish[i] = true với mọi i. 3/12/2008 Nguyên lý Hệ điều hành 155 Ví dụ (Cont.) „ P2 yêu cầu thêm một thể hiện của C. Request A B C P0 0 0 0 P1 2 0 1 P2 0 0 1 P3 1 0 0 P4 0 0 2 „ Trạng thái của hệ thống? ‰ Tồn tại bế tắc, bao gồm các tiến trình P1, P2, P3, và P4. 3/12/2008 Nguyên lý Hệ điều hành 156 Sử dụng thuật toán phát hiện „ Thời điểm, mức độ thường xuyên phụ thuộc vào: ‰ Mức độ thường xuyên của bế tắc? ‰ Bao nhiêu tiến trình cần phải quay lui? „ Một đối với mỗi chu trình (các chu trình không giao) „ Nếu thuật toán phát hiện được gọi tùy ý, có thể có rất nhiều chu trình trong đồ thị tài nguyên và vì thế chúng ta không thể phát hiện tiến trình nào trong số các tiến trình đó gây ra bế tắc. 3/12/2008 Nguyên lý Hệ điều hành 157 Khôi phục sau bế tắc: Kết thúc tiến trình „ Dừng thực thi của toàn bộ tiến trình bế tắc. „ Dừng một tiến trình một cho đến khi mất đi chu trình bế tắc. „ Thứ tự dừng? ‰ Độ ưu tiên của tiến trình. ‰ Tiến trình đã được thực thi và còn phải thực thi trong bao lâu. ‰ Các tài nguyên mà tiến trình hiện đang sử dụng. ‰ Các tài nguyên mà tiến trình cần thêm. ‰ Số tiến trình cần phải kết thúc. ‰ Tiến trình là tương tác hay batch? 3/12/2008 Nguyên lý Hệ điều hành 158 Khôi phục sau bế tắc: chiếm đoạt tài nguyên „ Lựa chọn một nạn nhân – cực tiểu hóa cost. „ Rollback – trở về trạng thái an toàn, khởi động lại tiến trình cho trạng thái đó. „ Chết đói – một tiến trình có thể luôn bị lựa chọn là nạn nhân 3/12/2008 Nguyên lý Hệ điều hành 159 Kết thúc chương 2

Các file đính kèm theo tài liệu này:

  • pdfchuong2_5896.pdf
Tài liệu liên quan