Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 23 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
23
Dung lượng
1,01 MB
Nội dung
22/12/2014 Nội dung NGUYÊN LÝ HỆ ĐIỀU HÀNH Phần 2: TIẾN TRÌNH Các khái niệm Khái niệm tiến trình Các khái niệm Điều phối tiến trình Liên lạc tiến trình Đồng tiến trình Tình trạng tắc nghẽn Tiến trình Thuật ngữ: Process (tiến trình/quá trình) Là chương trình thực Được xem đơn vị làm việc HĐH Có hai loại tiến trình: Tiến trình HĐH Tiến trình NSD 22/12/2014 Tiến trình gồm Đoạn mã lệnh (code) Đoạn liệu Đoạn ngăn xếp heap (stack/heap) Các hoạt động thể qua trỏ lệnh nội dung ghi (registers) xử lý Chú ý: Tiến trình thực thể chủ động Chương trình thực thể bị động Mục đích cho nhiều tiến trình hoạt động đồng thời Tăng hiệu suất sử dụng CPU Tiến trình trải qua nhiều chu kỳ CPU IO CPU IO CPU CPU IO CPU CPU IO Tiến trình CPU IO Tiến trình CPU IO Mục đích cho nhiều tiến trình hoạt động đồng thời Mục đích cho nhiều tiến trình hoạt động đồng thời Tăng mức độ đa nhiệm Tăng tốc độ xử lý Mỗi tiến trình thực thi luân phiên thời gian ngắn Một số tốn xử lý song song Vd: kq = a*b + c*d 22/12/2014 Luồng Luồng Thread: Tiểu trình, Luồng Một tiến trình tạo nhiều luồng Các luồng tiến trình Dùng chung không gian địa Con trỏ lệnh, tập ghi, stack riêng Luồng tạo luồng Các luồng liên lạc thơng qua biến tồn cục tiến trình Một chương trình xử lý văn có luồng: 1 luồng nhận ký tự nhập từ bàn phím 1 luồng hiển thị văn 1 luồng ghi văn vào đĩa 22/12/2014 Các thread tiến trình dùng chung mục cột 1, thread có riêng mục cột Các trạng thái tiến trình Sơ đồ chuyển trạng thái tiến trình [3] [5] [1] [2] [6] [4] Các trạng thái tiến trình New: tiến trình tạo nhớ tạm đĩa cứng Ready: tiếng trình nhớ chờ cấp phát CPU Running: tiến trình nhớ thực thi Blocked (wait): tiến trình nhớ chờ cấp phát tài nguyên, nhập xuất kiện End: tiến trình nhớ hồn tất xử lý Bộ điều phối (scheduler) thực chuyển trạng thái tiến trình Tại thời điểm: có tiến trình running Có thể có nhiều tiến trình blocked hay ready 22/12/2014 Chuyển trạng thái tiến trình Chuyển trạng thái tiến trình Cung 1: Tiến trình tạo, nhớ trống đưa vào nhớ sẵn sàng nhận CPU: New Ready Cung 2: Bộ điều phối cấp phát cho tiến trình khoảng thời gian sử dụng CPU cho tiến trình thực hiện: Ready Running Cung 3: Tiến trình kết thúc việc thực hiện: Running End Cung 4: Khi tiến trình yêu cầu tài nguyên chờ thao tác nhập xuất chờ kiện: Running Blocked Cung 5: Tiến trình tạm dừng hết thời gian sử dụng CPU: Running Ready Cung 6: Tài nguyên sẵn sàng để cấp phát thao tác nhập xuất hồn tất: Blocked Ready Khối quản lý tiến trình Khối quản lý tiến trình - PCB HĐH sử dụng Bảng tiến trình (process table) Mỗi mục bảng: Khối quản lý tiến trình (PCB – Process Control Block) PCB lưu thơng tin tiến trình Định danh tiến trình: Mã số TT Trạng thái tiến trình Ngữ cảnh tiến trình: mơ tả tài ngun sử dụng Trạng thái CPU: ghi, IP (PC – Program Counter) Số hiệu xử lý Bộ nhớ Tài nguyên sử dụng Tài nguyên tạo lập Thông tin giao tiếp Tiến trình cha/Tiến trình Độ ưu tiên Thông tin thống kê: thời gian sd CPU, thời gian chờ… 22/12/2014 Khối quản lý tiến trình - PCB Các thao tác tiến trình Tạo lập tiến trình Mỗi tiến trình tạo nhiều tiến trình Tiến trình cha – Tiến trình Cây tiến trình Tiến trình HĐH cấp phát tài nguyên tiến trình cha cho thừa hưởng số tài nguyên ban đầu Tiến trình cha: Xử lý đồng hành với tiến trình Chờ tiến trình kết thúc Các thao tác tiến trình Các thao tác tiến trình Tạo lập tiến trình Các cơng việc cần thực hiện: Tạo lập tiến trình Các thời điểm TT tạo Định danh cho tiến trình Đưa TT vào DS quản lý hệ thống Xác định độ ưu tiên cho TT Cấp phát tài nguyên ban đầu cho TT Tạo PCB lưu trữ thông tin TT Thời điểm khởi tạo hệ thống Thời điểm thực thi lời gọi tạo TT Thời điểm NSD y/c tạo TT Thời điểm khởi đầu công việc theo lô (batch job) 22/12/2014 Các thao tác tiến trình Kết thúc tiến trình TT kết thúc hồn tất lệnh cuối TT sử dụng lời gọi hệ thống để y/c HĐH hủy bỏ Cần thực hiện: Thu hồi tài nguyên cấp phát cho TT Hủy TT khỏi tất DS quản lý Hệ thống Hủy bỏ PCB TT Các thao tác tiến trình Tạo lập tiến trình (create) Kết thúc tiến trình (destroy) Tạm dừng tiến trình (suspend) Tái kích hoạt tiến trình (resume) Thay đổi độ ưu tiên tiến trình (change priority) Khơng cho phép TT tồn TT có thể: kết thúc bình thường; Có lỗi tự kết thúc; Bị kết thúc TT khác Khối quản lý tài nguyên Thay đổi trạng thái tiến trình Resouce Control Block – RCB Mỗi tài nguyên HĐH quản lý RCB Lưu ngữ cảnh CPU: ghi, trỏ lệnh Cập nhật PCB TT Di chuyển PCB TT đến hàng đợi Chọn TT khác thực Cập nhật PCB TT vừa chọn Cập nhật thông tin liên quan đến quản lý nhớ Khôi phục lại ngữ cảnh CPU Định danh TN Trạng thái TN Hàng đợi TN Bộ cấp phát TN TT truy xuất đồng thời Thời gian trì hỗn chấp nhận Tối ưu hóa sử dụng TN 22/12/2014 ĐIỀU PHỐI TIẾN TRÌNH 2.1 Mục tiêu điều phối HĐH điều phối tiến trình: Sự cơng bằng: chia sẻ CPU cơng bằng, khơng có TT đợi vơ hạn Tính hiệu quả: tận dụng CPU 100% thời gian Thời gian đáp ứng hợp lý: cực tiểu hóa thời gian hồi đáp Thời gian lưu lại hệ thống Thông lượng tối đa: cực đại hóa số cơng việc xử lý đơn vị thời gian Bộ điều phối (scheduler): lựa chọn tiến trình Bộ phân phối (dispatcher): cập nhật ngữ cảnh tiến trình tạm dừng trao CPU cho tiến trình chọn 2.2 Các đặc tính tiến trình 2.3 Các ngun lý điều phối Tính hướng nhập/xuất Tính hướng xử lý Tiến trình tương tác hay xử lý theo lơ Độ ưu tiên tiến trình Thời gian sử dụng CPU tiến trình Thời gian cịn lại tiến trình cần để hoàn tất Điều phối độc quyền TT nhận CPU độc chiếm CPU đến hoàn tất xử lý tự nguyện giải phóng CPU Giải thuật đơn giản, dễ cài đặt Ngăn cản tiến trình cịn lại hệ thống có hội để xử lý Điều phối không độc quyền TT sử dụng CPU đến hồn tất tự nguyện giải phóng Nếu xuất TT có độ ưu tiên cao chuyển quyền 22/12/2014 Đồng hồ ngắt thời gian Độ ưu tiên tiến trình Bộ đếm thời gian qui định thơng số thời gian t thích hợp ứng với lượt cấp CPU cho tiến trình Sau khoảng thời gian t xảy ngắt báo hiệu hết thời gian sử dụng CPU tiến trình hành HĐH thu hồi CPU điều phối định tiến trình cấp phát Độ ưu tiên tiến trình: giá trị giúp phân định tầm quan trọng tiến trình 2.4 Tổ chức điều phối 2.5 Các thuật toán điều phối Các danh sách điều phối Thuật toán FIFO DS tác vụ (job list): TT tạo, PCB chèn vào DS tác vụ, đợi nhớ đủ chỗ DS sẵn sàng (ready list): TT nạp từ đĩa vào nhớ Bộ điều phối chọn TT DS sẵn sàng để cấp CPU Danh sách chờ đợi (waiting list): TT thực chuyển sang DS chờ đợi đợi thao tác nhập xuất, y/c tài nguyên… Mỗi tài nguyên có ds chờ riêng Độ ưu tiên tĩnh: Được gán sẵn cho tiến trình ta Không thay đổi Độ ưu tiên động: thay đổi theo thời gian môi trường xử lý tiến trình CPU cấp phát cho tiến trình DS sẵn sàng Điều phối theo nguyên tắc độc quyền 22/12/2014 2.5 Các thuật toán điều phối 2.5 Các thuật toán điều phối Thuật toán FIFO Thuật toán phân phối xoay vòng Cấp cho TT DSSS khoảng thơi gian sử dụng CPU (quantum) Điều phối theo nguyên tắc không độc quyền CPU cấp phát cho tiến trình DS sẵn sàng Điều phối theo nguyên tắc độc quyền Tiến trình Thời điểm vào DSSS Thời gian xử lý P1 P2 P1 24 24 P2 P3 P3 27 30 Thời gian chờ trung bình: (0+23+25)/3=16ms 2.5 Các thuật toán điều phối 2.5 Các thuật toán điều phối Thuật tốn phân phối xoay vịng Thuật tốn độ ưu tiên Cấp cho TT DSSS khoảng thơi gian sử dụng CPU (quantum) Điều phối theo nguyên tắc khơng độc quyền Tiến trình Thời điểm vào DSSS Thời gian xử lý P1 24 P2 P3 Mỗi tiến trình gán độ ưu tiên Độ ưu tiên cao chọn để cấp CPU Nguyên tắc độc quyền không độc quyền Thời gian chờ trung bình: (6+3+5)/3 = 4.66ms 10 22/12/2014 2.5 Các thuật toán điều phối 2.5 Các thuật toán điều phối Thuật tốn độ ưu tiên Thuật tốn cơng việc ngắn Mỗi tiến trình gán độ ưu tiên Độ ưu tiên cao chọn để cấp CPU Nguyên tắc độc quyền không độc quyền Tiến trình Thời điểm vào DSSS Độ ưu tiên Thời gian xử lý P1 24 P2 1 P3 2 Trường hợp đặc biệt giải thuật điều phối với độ ưu tiên Độ ưu tiên p = 1/t = nghịch đảo t/g xử lý cịn lại (p lớn độ ưu tiên lớn) Thời gian chờ trung bình: Độc quyền: (0+23+25)/3 = 16ms Khơng: (6+0+2)/3 = 2.7ms 2.5 Các thuật tốn điều phối 2.5 Các thuật toán điều phối Thuật toán công việc ngắn Trường hợp đặc biệt giải thuật điều phối với độ ưu tiên Độ ưu tiên p = 1/t = nghịch đảo t/g xử lý lại (p lớn độ ưu tiên lớn) Tiến trình Thời điểm vào DSSS Thời gian xử lý P1 P2 P3 P4 Thuật toán nhiều mức độ ưu tiên Thời gian chờ trung bình: Độc quyền: (0+11+6+3)/4 = 5ms Khơng: (2+11+6+0)/4=6.33ms 11 22/12/2014 Đồng tiến trình Miền găng (critical section): Miền găng đoạn mã TT có khả xảy lỗi truy xuất tài nguyên dùng chung if (taikhoan>=tienrut) taikhoan=taikhoan-tienrut; else error () [ex] Hai TT sử dụng chung biến Count Tiến trình P1 Begin Tiến trình P2 Begin L1 = Count; L1 = L1 + 1; Count = L1 L2 = Count; L2 = L2 + 1; Count = L2 End End Đồng tiến trình Miền găng (critical section) Đồng tiến trình bảo đảm TT xử lý song song không tác động sai lệnh đến Yêu cầu đồng Điều kiện giải tốt toán miền găng: Yêu cầu độc quyền truy xuất: thời điểm, có TT quyền truy xuất tài nguyên chia sẻ Yêu cầu phối hợp: TT cần hợp tác với để hoàn thành cơng việc Khơng có tiến trình miền găng Không phụ thuộc vào tốc độ tiến trình Một tiến trình tạm dừng bên ngồi miền găng khơng ngăn cản tiến trình khác vào miền găng Khơng có tiến trình phải chờ vơ hạn để vào miền găng 12 22/12/2014 Các giải pháp đồng Các giải pháp đồng Giải pháp Busy waiting (bận đợi) Có nhóm giải pháp để giải toán đồng bộ: Các giải pháp phần mềm: Thuật toán 1: Sử dụng cờ hiệu (biến khố) Busy Waiting (bận đợi) Sleep And Wakeup Semaphore Monitor Message Các TT dùng chung biến lock Lock = 0: khơng có TT miền găng Lock = 1: có TT miền găng Ban đầu lock = TT muốn vào miền găng: Kiểm tra giá trị lock Nếu lock = 0: TT đặt lock = vào miền găng Nếu lock = 1: TT chờ bên miền găng lock =0 Các giải pháp đồng Giải pháp Busy waiting (bận đợi) Giải thuật sử dụng biến khoá để đồng while (1) { while (lock==1);// wait lock=1; critical_section(); lock=0; Noncritical_section(); } Giải pháp vi phạm điều kiện 1: TT miền găng thời điểm Thuật toán 2: Kiểm tra luân phiên Hai tiến trình A, B (cùng muốn vào miền găng) sử dụng chung biến turn để thứ tự luân phiên Nếu turn==0: tiến trình A vào miền găng Nếu turn==1: tiến trình B vào miền găng Turn gán giá trị ban đầu (A vào trước) Khi A rời khỏi miền găng, đặt turn = (cho phép B vào) Có thể vi phạm điều kiện: TT bị ngăn chặn vào miền găng TT khác không miền găng 13 22/12/2014 Các giải pháp đồng Giải pháp Busy waiting (bận đợi) Giải thuật tiến trình A Giải thuật tiến trình B while (1) { while (turn == 1);// wait critical_section(); turn=1; non_critical_section(); } while (1) { while (turn == 0);// wait critical_section(); turn=0; non_critical_section(); } P0 (i=0): While (true) { flag[0] = true; //P0 muon vao turn = 1; //thu de nghi P1 vao while (turn ==1 && flag[1] == true); //cho P1 critical_section(); flag[0] = false; //P0 ngoai noncritical_section(); } Thuật toán Peterson 2 TT P0 P1 sử dụng chung Biến turn = i (0, 1): đến lượt Pi vào Flag[2] (0, 1): khởi tạo flag[0] = flag[1] = false Pi muốn vào miền găng: Flag[i] = true: thông báo TT Pi muốn vào miền găng Turn = j: thử đề nghị Pj vào mg Nếu Pj không vào (flag[j] = false) Pi vào Nếu Pj vào (flag[j] = true) Pi chờ đến flag[j] = false Khi Pi rời mg: flag[i] = false P1 (i=2): While (true) { flag[1] = true; //P1 muon vao turn = 0; //thu de nghi P0 vao while (turn ==0 && flag[0] == true); //cho P0 critical_section(); flag[1] = false; //P1 ngoai noncritical_section(); } 14 22/12/2014 Các giải pháp đồng Giải pháp Busy waiting (bận đợi) Các giải pháp đồng Giải pháp SLEEP and WAKEUP Giải pháp phần cứng Sử dụng lệnh SLEEP WAKEUP Cấm ngắt: Dùng cặp thị STI & CLI CLI //cấm ngắt =setting interrupt Critical_section(); STI //mở ngắt = clean interrupt Đơn giản, dễ cài đặt Dễ gây tượng treo tồn hệ thống Khơng sử dụng hệ thống miltiprocessor Dùng thị TSL (Test and Set Lock) Cho phép kiểm tra cập nhật vùng nhớ thao tác độc quyền (không thể phân chia được) HĐH cung cấp lệnh sleep wakeup TT gọi sleep TT chuyển sang DSSS TT gọi wakeup HĐH chọn TT DSSS cho thực 1 TT chưa đủ điều kiện vào miên găng gọi sleep để tự khóa, đến có TT khác gọi wakeup để giải phóng cho 1 TT gọi wakeup khỏi miền găng để đánh thức TT chờ Giải pháp Semaphore Int busy = false; //true: có TT mg, false: khơng Int blocked = 0; //số lượng tt bị khóa while (1) { if (busy) { blocked=blocked+1; sleep(); } else busy=true; critical_section(); busy=false; if (blocked > 0) { wakeup(); blocked=blocked-1; } noncritical_section(); } Có thể TT miền găng lúc Semaphore s cấu trúc gồm: 1 giá trị nguyên dương e (khả phục vụ tài nguyên găng) 1 hàng đợi f lưu ds TT chờ semaphore s Có thao tác: Down(s): e = e – 1, e