Bài giảng Hệ điều hành - Chương 2: Quản lý tiến trình - Phần 3: Đồng bộ tiến trình - Ngô Hữu Dũng
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Hệ điều hành - Chương 2: Quản lý tiến trình - Phần 3: Đồng bộ tiến trình - Ngô Hữu Dũng", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- bai_giang_he_dieu_hanh_chuong_2_quan_ly_tien_trinh_phan_3_do.pdf
Nội dung text: Bài giảng Hệ điều hành - Chương 2: Quản lý tiến trình - Phần 3: Đồng bộ tiến trình - Ngô Hữu Dũng
- HỆ ĐIỀU HÀNH (OPERATING SYSTEM CONCEPTS) Wiley - Operating System Concepts(Silberschatz).9th
- Giới thiệu môn học Mục tiêu môn học Vai trò của HĐH Nguyên lý hoạt động của HĐH đa nhiệm Nội dung Phần 1: Tổng quan (Overview) Phần 2: Quản lý tiến trình (Process Management) Phần 3: Quản lý bộ nhớ (Memory Management) Phần 4: Quản lý I/O (I/O Management) Phần 5: Quản lý hệ thống file (Storage Management) 1.2
- Process Management CHƯƠNG 2: QUẢN LÝ TIẾN TRÌNH – P3 ĐỒNG BỘ TIẾN TRÌNH 1.3
- Nội dung Các khái niệm chương trình và tiến trình các thao tác & trạng thái của tiến trình khối điều khiển tiến trình ProcessControlBlock Điều phối tiến trình Liên lạc giữa các tiến trình Đồng bộ tiến trình Deadlock 1.4
- Liên lạc giữa các tiến trình Các tiến trình trong hệ thống có thể độc lập hay có hợp tác với nhau Các tiến trình hợp tác với nhau xuất phát từ nhu cầu : Chia sẻ thông tin Tăng tốc độ tính toán Cấu trúc module của chương trình Khi hợp tác , các tiến trình cần giao tiếp với nhau ( interprocess communication – IPC ) 1.5
- Liên lạc giữa các tiến trình Do mỗi tiến trình sở hữu một không gian địa chỉ riêng => HĐH phải cung cấp cơ chế liên lạc giữa các tiến trình Các vấn đề nảy sinh trong liên lạc giữa các tiến trình : Liên kết tường minh hay tiềm ẩn Liên lạc theo chế độ đồng bộ hay bất đồng bộ Liên lạc giữa các tiến trình trong 1 máy tính khác biệt với liên lạc giữa các tiến trình giữa các máy tính khác nhau 1.6
- Các cơ chế liên lạc Tín hiệu – signal Pipe Vùng nhớ chia sẻ Trao đổi thông điệp Socket 1.7
- Communication models Tham khao : IPC share memory ( 1.8
- ĐỒNG BỘ TIẾN TRÌNH 1.9
- Khái niệm Sự cần thiết của đồng bộ hóa tiến trình trong hệ đa nhiệm ? Yêu cầu độc quyền truy suất Phát sinh do truy suất tài nguyên không thể chia sẻ Kết quả tác động đến tài nguyên làm ảnh hưởng lẫn nhau Yêu cầu phối hợp Có những tình huống, các tiến trình cần phối hợp hoạt động Việc xem xét sự đồng bộ giữa các tiến trình dựa trên giả định các tiến trình có khả năng liên lạc với nhau vùng nhớ chung 1.10
- Ví dụ 1 Ví dụ 1 : hai tiến trình cùng truy suất 1 biến chung characters = characters + 1; Lệnh máy tương đương read characters into register r1 increment r1 write register r1 to characters 1.11
- Ví dụ 1 2 tiến trình cùng thực hiện đếm số ký tự theo đoạn code trên: Ban đầu characters = 100 P1 : P2 : read characters into register r1 //r1 =100 read characters into register r2 //r2 =100 increment r2 //r2 = 101 write register r2 to characters //characters = 101 increment r1 //r1 = 101 write register r1 to characters //characters = 101 1.12
- Ví dụ 2 Vd2: Taikhoan = 800, P1 muốn rút 500, P2 muốn rút 400 P1 P2 If ( taikhoan >= tienrut ) If ( taikhoan >= tienrut ) taikhoan = taikhoan - taikhoan = taikhoan - tienrut ; tienrut ; Else Else error (“khong the rut !”); error (“khong the rut !”); 1.13
- Ví dụ 2 Taikhoan = 800 P1 P2 If ( taikhoan >= tienrut ) If ( taikhoan >= tienrut ) taikhoan = taikhoan - tienrut ; Else error (“hettien , ko the rut !”); taikhoan = taikhoan - tienrut ; else error (“hettien , ko the rut !”); 1.14
- Từ khóa Critical section (miền găng): đoạn mã nguồn đọc/ghi dữ liệu lên vùng nhớ chia sẻ Race condition (tranh đoạt điều khiển): có tiềm năng bị xen kẻ lệnh giữa các tiểu trình khác nhau trong miền găng Kết quả không xác định Mutual exclusion: cơ chế đồng bộ đảm bảo chỉ có một tiểu trình duy nhất được thực hiện trong miền găng tại một thời điểm Deadlock: tình trạng các tiểu trình bị khóa mãi mãi Starvation: đang thực thi nhưng không có tiến triển. 1.15
- Tranh đoạt điều khiển Tranh đoạt điều khiển là gì? (Race condition) if (taikhoan – tien_rut >= 0) taikhoan = taikhoan – tien_rut; else cout << “Không đủ tiền trong tài khoản”; Là tình huống mà kết quả của chương trình phụ thuộc vào sự điều phối của hệ thống 1.16
- Tranh đoạt điều khiển và Phương pháp giải quyết Miền găng: là đoạn mã nguồn truy cập tới vùng nhớ dùng chung //bắt đầu miền găng If(taikhoan – tienrut >= 0) taikhoan = taikhoan – tienrut; Else cout<<“Không đủ tiền trong tài khoản” //kết thúc miền găng Cách xử lý tranh chấp: Đảm bảo tính “độc quyền truy xuất” (mutual exclusion) cho miền găng Sự phối hợp giữa các tiến trình phải thực hiện theo một kịch bản định trước 1.17
- Bài toán đồng bộ hóa Mô hình đảm bảo độc Mô hình tổ chức phối hợp quyền truy xuất giữa 2 tiến trình Kiểm tra và dành quyền vào CS CS: Từ bỏ quyền sử dụng CS 1.18
- Bài toán đồng bộ hóa Các mô hình đưa ra cần đảm bảo 1. Chỉ một tiến trình được thực thi trong miền găng tại một thời điểm 2. Không có giả thiết về tốc độ CPU, số lượng CPU 3. Không có tiến trình ở ngoài miền găng có thể khóa không cho tiến trình khác vào miền găng 4. Không có tiến trình nào chờ đợi mãi mãi để vào miền găng 1.19
- Nhóm giải pháp Busy Waiting Giải pháp Phần mềm Sử dụng các biến cờ hiệu Sử dụng việc kiểm tra luân phiên Giải pháp của Peterson Giải pháp Phần cứng Cấm (Vô hiệu hóa) ngắt Chỉ thị TSL (Test-and-Set) Nhóm giải pháp Sleep & Wakeup Semaphore Monitor Message 1.20
- Nhóm giải pháp Busy Waiting Dùng biến cờ hiệu 1.21
- Nhóm giải pháp Busy Waiting Kiểm tra luân phiên Cả hai tiến trình đều ở ngoài miền găng, và turn = 0. 1.22
- Nhóm giải pháp Busy Waiting Giải pháp của Peterson Kết hợp ý tưởng của 1&2, các tiến trình chia sẻ int turn; //đến phiên ai int interest[2] = FALSE; //interest[i] = T:Pi muốn vào CS 1.23
- Nhóm giải pháp Busy Waiting Vô hiệu hóa ngắt Giải pháp đơn giản là khi một tiến trình vào miền găng thì nó vô hiệu hóa hết tất cả các ngắt Liệu cho phép các tiến trình người dùng có thể vô hiệu hết ngắt là khả thi! 1.24
- Nhóm giải pháp Busy Waiting Chỉ thị TSL (Test-and-Set) enter_region: TSL RX, LOCK | chép giá trị lock vào RX và gán lock = 1 CMP RX, #0 | so sánh với 0 JNE enter_region | jump nếu khác 0 RET | vào miền găng leave_region: MOVE LOCK, #0 | gán lock = 0 RET | trả về 1.25
- Giải pháp Peterson và TSL đều đúng, tuy nhiên chiếm thời gian CPU vì vòng lặp kiểm tra liên tục giải pháp sleep and wakeup 1.26
- Ý tưởng chính while (TRUE) { if (busy){ blocked = blocked + 1; sleep(); } else busy = 1; critical-section (); busy = 0; if(blocked){ wakeup(process); blocked = blocked - 1; } noncritical-section (); } 1.27
- Nhóm giải pháp Sleep & Wakeup Semaphore Semaphore Semaphore là một biến nguyên, ngoài thao tác khởi tạo chỉ có 2 thao tác là wait và signal Down ( Wait hay P): giảm S đi một, và kiểm tra xem process có bị blocked hay tiếp tục run? Up (Signal hay V): tăng S lên một, và kiểm tra xem có 1 process đang blocked thì đánh thức nó Hai thao tác này có tính nguyên tố, nghĩa là KHÔNG bị xen kẽ - bị ngắt giữa chừng 1.28
- Nhóm giải pháp Sleep & Wakeup Semaphore Cài đặt Semaphore Semaphore có thể khởi tạo 1 hoặc 0 1.29
- Nhóm giải pháp Sleep & Wakeup Semaphore Sử dụng Semaphore Tổ chức độc quyền truy xuất 1.30
- Nhóm giải pháp Sleep & Wakeup Semaphore Sử dụng Semaphore (1) Sử dụng semaphore để đảm bảo độc quyền truy suất : Sử dụng semaphore như lock ( khóa ) Semaphore dạng này gọi là Binary semaphore (Khởi tạo 1) Nguyên tắc : – trước khi vào miền găng => khóa, – sau khi vào miền găng => mở khóa , – kết quả, khi P1 nằm trong miền găng thì ko có tt nào được vào miền găng => độc quyền truy suất . 1.31
- Nhóm giải pháp Sleep & Wakeup Semaphore Sử dụng Semaphore (2) Sử dụng semaphore để phối hợp hoạt động giữa các tiến trình : Hai tiến trình : P1 cần thực hiện job1(), P2 cần thực hiện job2(). Trình tự thực hiện là : job2() chỉ được thực hiện sau khi job1() hoàn tất. Hai tiến trình cần chia sẻ một semaphore s, giá trị khởi tạo là 0 , và cấu trúc chương trình như hình 2 1.32
- Bài toán sản xuất – tiêu thụ ( hay Vùng đệm có giới hạn ) 1.33
- Bài toán sản xuất – tiêu thụ ( hay Vùng đệm có giới hạn ) Cấu trúc 1 : đảm bảo đồng bộ (phối hợp) giữa 2 tiến trình đảm bảo đồng bộ giữa 2 tiến trình = đảm bảo 2 ràng buộc empty=0 thì SX phải block full=0 thì TT phải block 34 1.34
- Bài toán sản xuất – tiêu thụ ( hay Vùng đệm có giới hạn ) • Cấu trúc 2 : đảm bảo đồng bộ (phối hợp) giữa 2 tiến trình + độc quyền truy suất 35 1.35
- Định nghĩa Deadlock Mô hình hệ thống Điều kiện phát sinh Deadlock Xử lý Deadlock DEADLOCK TẮC NGHẼN 36 1.36
- Khái niệm Deadlock Các tiến trình trong tập hợp chờ đợi lẫn nhau Chờ đợi một sự kiện không bao giờ xảy ra => Tất cả các tiến trình trong tập hợp bị khóa vĩnh viễn ! 37 1.37
- Bữa ăn tối của các triết gia Bữa tối của các triết gia : Tiến trình = Triết gia Hành động = ăn Tài nguyên cần = cần 2 nĩa/triết gia Tình huống : 5 triết gia cùng cầm nĩa bên trái 38 1.38
- Mô hình hệ thống Hệ thống bao gồm một số xác định các loại tài nguyên sẽ được chia sẻ cho các tiến trình có nhu cầu Mỗi loại tài nguyên có thể có nhiều thể hiện Mỗi tiến trình sử dụng tài nguyên theo trình tự 1. Request: yêu cầu tài nguyên, nếu không được đáp ứng ngay tiến trình phải đợi 2. Use: sử dụng tài nguyên được cấp phát 3. Release: giải phóng tài nguyên 39 1.39
- Các điều kiện xảy ra Deadlock Coffman, Elphick và Shoshani (1971) đã đưa ra 4 điều kiện cần có thể làm xuất hiện deadlock Mutual exclusion: hệ thống có sử dụng những loại tài nguyên mang bản chất không chia sẻ được Wait for: tiến trình tiếp tục chiếm giữ các tài nguyên đã cấp phát cho nó trong khi chờ được cấp phát thêm một số tài nguyên mới No preemption: Tài nguyên chỉ được thu hồi khi tiến trình đang nắm giữ tự nguyên trao trả Circular wait: Tồn tại một chu kỳ trong đồ thị cấp phát tài nguyên Hội đủ 4 điều kiện trên Deadlock có thể xảy ra 40 1.40
- Đồ thị cấp phát tài nguyên Nhận xét Nếu đồ thị không có chu trình no deadlock Nếu đồ thị có 1 chu trình Nếu mỗi tài nguyên chỉ có 1 thể hiện deadlock Nếu mỗi tài nguyên có nhiều thể hiện có thể có deadlock 41 1.41
- Đồ thị cấp phát tài nguyên Không có chu trình không deadlock 42 1.42
- Đồ thị cấp phát tài nguyên Có chu trình deadlock 43 1.43
- Đồ thị cấp phát tài nguyên Có chu trình không deadlock 44 1.44
- Bài toán ngăn ngừa deadlock 45 1.45
- 46 1.46
- Giải thuật cấp phát tài nguyên kiểu cũ 47 1.47
- Thuật toán nhà băng Banker’s Algorithm 48 1.48
- Thuật toán nhà băng Banker’s Algorithm TestSafe() 49 1.49
- Ví dụ 50 1.50
- 51 1.51
- 52 1.52
- Tóm tắt 53 1.53