BÁO CÁO BÀI TẬP LỚN HỆ ĐIỀU HÀNH ĐỀ TÀI DEADLOCK(KHÓA CHẾT) Đại Học Bách Khoa Hà Nội

30 22 0
BÁO CÁO BÀI TẬP LỚN HỆ ĐIỀU HÀNH ĐỀ TÀI DEADLOCK(KHÓA CHẾT)  Đại Học Bách Khoa Hà Nội

Đ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

BÁO CÁO CHI TIẾT 30 TRANG HỆ ĐIỀU HÀNH ĐỀ TÀI DEADLOCK(KHÓA CHẾT): Một trạng thái bế tắc diễn ra khi 2 hoặc nhiều tiến trình phải đợi vô hạn cho một sự kiện. Có 3 cách tiếp cận chính: • Sử dụng giao thức để tránh hoặc chặn bế tắc • Cho phép hệ thống gặp bế tắc, và hồi phục nó • Bỏ qua vấn đề và giả vờ như chưa có gì xảy ra Bế tắc chỉ có thể xảy ra nếu bốn điều kiện cần thiết đồng thời tồn tại trong hệ thống: loại trừ lẫn nhau, giữ và chờ, không có quyền ưu tiên và chờ vòng tròn. Để ngăn chặn bế tắc, chúng tôi có thể đảm bảo rằng ít nhất một trong các điều kiện cần thiết không bao giờ xảy ra

IT3070 – Nguyên lý Hệ điều hành Kỳ 20222 ĐẠI HỌC BÁCH KHOA HÀ NỘI TRƯỜNG CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG ──────── * ─────── BÀI TẬP LỚN MÔN: NGUYÊN LÝ HỆ ĐIỀU HÀNH DEADLOCK (BẾ TẮC) Mã lớp học : 141296 Giáo viên hướng dẫn : Thầy Đỗ Tuấn Anh Sinh viên thực hiện : Nguyễn Đình Tuấn Dũng - 20215328 Nguyễn Đình Tuấn Dũng 20215328 IT3070 – Nguyên lý Hệ điều hành Kỳ 20222 Nội dung Chương 1: Tổng quan về deadlock 3 I Mô hình hệ thống 3 II Đặc điểm của deadlock .5 1 Điều kiện xảy ra deadlock 7 2 Đồ thị cấp phát tài nguyên 7 III Các pháp xử lý deadlock 8 IV Ngăn chặn deadlock 9 1 Loại trừ lẫn nhau 9 2 Giữ và đợi .10 3 Không có quyền ưu tiên 10 4 Vòng lặp đợi 11 5 Ngăn chặn deadlock trong Window 12 V Tránh xảy ra deadlock 13 1 Giải thuật đồ cấp phát tài nguyên .15 2 Thuật toán quản lý nhà băng: 15 VI Phát hiện deadlock 17 1 Có một thể hiện đối với mỗi loại tài nguyên .18 2 Nhiều thể hiện trong một loại tài nguyên 18 3 Sử dụng các thuật toán phát hiện deadlock 20 VII Phục hồi từ deadlock 20 1, Kết thúc tiến trình .21 VIII Tổng kết .23 Chương 2: Ví dụ giải quyết deadlock 25 I Đặt vấn đề 25 II Cách giải quyết deadlock .28 TÀI LIỆU THAM KHẢO 30 Nguyễn Đình Tuấn Dũng 20215328 IT3070 – Nguyên lý Hệ điều hành I Kỳ 20222 Chương 1: Tổng quan về deadlock Mô hình hệ thống Hệ thống chỉ có một số hữu hạn tài nguyên cần được phân phối cho một số luồng tiến trình hoạt động đồng thời Các tài nguyên có thể được chia thành một vài loại, mỗi loại bao gồm một số lượng thể hiện giống nhau Ví dụ về các loại tài nguyên bao gồm CPU, tệp và thiết bị I/O (như giao diện mạng và ổ DVD) Nếu hệ thống có ba CPU, thì loại tài nguyên CPU sẽ có ba thể hiện Tương tự, loại tài nguyên mạng có thể có hai thể hiện Nếu một luồng yêu cầu một thể hiện của một loại tài nguyên, việc cấp phát bất kỳ thể hiện nào của loại đó sẽ đáp ứng yêu cầu Nếu không, sẽ xảy ra tình trạng “deadlock” Ví dụ 1.1: Giả sử có hai tiến trình: Tiến trình A và Tiến trình B Mỗi tiến trình đều cần truy cập vào hai tài nguyên: Tài nguyên X và Tài nguyên Y Đồng thời, mỗi tiến trình đang giữ một tài nguyên và yêu cầu tài nguyên còn lại để tiếp tục công việc: Tiến trình A đang giữ tài nguyên X và yêu cầu tài nguyên Y Tiến trình B đang giữ tài nguyên Y và yêu cầu tài nguyên X Trong tình huống này, Tiến trình A không thể tiếp tục công việc mà nó đang làm vì nó đang chờ đợi Tiến trình B để giải phóng tài nguyên Y Tương tự, Tiến trình B cũng không thể tiếp tục công việc của mình vì chờ đợi tài nguyên X mà Tiến trình A đang giữ Kết quả là cả hai tiến trình đều bị mắc kẹt và không thể tiếp tục thực hiện công việc Mỗi tiến trình đang chờ đợi một tài nguyên mà tiến trình khác đang giữ, tạo thành một chuỗi chặn lẫn nhau và dẫn đến tình trạng deadlock Nguyễn Đình Tuấn Dũng 20215328 IT3070 – Nguyên lý Hệ điều hành Kỳ 20222 Trên các hệ thống máy tính hiện đại, Các công cụ đồng bộ hóa khác nhau như khóa mutex và semaphore là nguyên nhân chính gây ra tình trạng deadlock Chúng cũng là các tài nguyên hệ thống Mỗi thể hiện của một khóa được gán cho một lớp tài nguyên riêng Mỗi luồng phải yêu cầu tài nguyên trước khi sử dụng và giải phóng tài nguyên sau khi sử dụng Quy tắc là số lượng tài nguyên yêu cầu không được vượt quá tổng số tài nguyên còn khả dụng trong hệ thống Trong chế độ hoạt động bình thường, một luồng chỉ có thể sử dụng một tài nguyên theo thứ tự: 1 Yêu cầu: nếu yêu cầu không được gán tức thì thì luồng đang yêu cầu phải chờ cho đến khi nó nhận được tài nguyên 2 Sử dụng: Luồng có thể điều hành tài nguyên 3 Giải phóng tài nguyên Yêu cầu và giải phóng tài nguyên có thể được thực hiện thông qua lời gọi hệ thống như: request () và release () device, hay open() và close() file, hay allocate() và free() Việc yêu cầu và giải phóng tài nguyên cũng có thể được thực hiện thông qua các thao tác wait() và signal() trên semaphore và thông qua các thao tác acquire() và release() của khóa mutex Hệ điều hành sẽ kiểm tra để đảm bảo rằng luồng đã yêu cầu và đã được cấp phát tài nguyên Hệ thống sẽ ghi lại xem mỗi tài nguyên đang có sẵn hay đã được cấp phát Đối với mỗi tài nguyên đã được cấp phát, hệ thống cũng ghi lại luồng mà tài nguyên đó đã được cấp phát Nếu một luồng yêu cầu một tài nguyên hiện đang được cấp phát cho một luồng khác, nó có thể được thêm vào hàng đợi các luồng đang chờ tài nguyên đó khả dụng Bế tắc là tình trạng hai hay nhiều tiến trình cùng chờ đợi một sự kiện nào đó xảy ra Nếu không có sự tác động gì từ bên ngoài, thì sự chờ đợi đó là vô hạn Các sự kiện mà chúng ta quan tâm ở đây là chủ yếu về tài nguyên thu thập và giải phóng.Tài nguyên ở đây có thể là tài nguyên vật lý hoặc tài nguyên logic Minh họa như ví dụ 1.1 Nhà phát triển ứng dụng đa luồng phải luôn nhận thức về khả năng xảy ra tình trạng chặn chỗ Các công cụ như semaphore và khóa mutex được Nguyễn Đình Tuấn Dũng 20215328 IT3070 – Nguyên lý Hệ điều hành Kỳ 20222 thiết kế để tránh tình trạng cạnh tranh Tuy nhiên, khi sử dụng các công cụ này, nhà phát triển phải chú ý cẩn thận đến cách khóa được yêu cầu và giải phóng Nếu không, tình trạng deadlock có thể sẽ xảy ra II Đặc điểm của deadlock Khi xảy ra deadlock, thì một tiến tình không bao giờ kết thúc việc biên dịch và tài nguyên hệ thống có thể bị giam lại, ngăn chặn một sự kiện khác bắt đầu Dưới đây là một ví dụ về deadlock trong C++ sử dụng hai tiến trình và hai tài nguyên: #include #include #include std::mutex resource1Mutex; std::mutex resource2Mutex; void process1() { std::unique_lock lock1(resource1Mutex); std::cout

Ngày đăng: 04/07/2023, 16:09

Tài liệu cùng người dùng

Tài liệu liên quan