tailieunhanh - Bài giảng Nguyên lý hệ điều hành: Chương 6 - Phạm Quang Dũng

Chương 6 của bài giảng Nguyên lý hệ điều hành trình bày một số nội dung liên quan đến đồng bộ hóa tiến trình như: Cơ sở đồng bộ hóa tiến trình, vấn đề đoạn găng, giải pháp của Peterson, phần cứng đồng bộ hóa, kỹ thuật cờ báo (Semaphores). để nắm bắt chi tiết nội dung bài giảng. | Nội dung BÀI GIẢNG NGUYÊN LÝ HỆ ĐIỀU HÀNH Cơ sở Vấn đề đoạn găng Giải pháp của Peterson Chương 6: Đồng bộ hóa tiến trình Phần cứng đồng bộ hóa Kỹ thuật cờ báo (Semaphores) Phạm Quang Dũng Bộ môn Khoa học máy tính Khoa Công nghệ thông tin Trường Đại học Nông nghiệp Hà Nội Website: Bài giảng Nguyên lý Hệ điều hành . Cơ sở Phạm Quang Dũng ©2008 Producer Sự truy nhập đồng thời đến dữ liệu chia sẻ có thể gây ra sự mâu thuẫn. while (true) { /* produce an item and put in nextProduced */ Để duy trì tính nhất quán dữ liệu cần có cơ chế đảm bảo thực hiện các tiến trình hợp tác theo thứ tự. Giả sử rằng chúng ta muốn đưa ra một giải pháp cho vấn đề tiến trình sản xuất - tiến trình tiêu thụ mà đều điền vào buffer. Chúng ta có thể làm được bằng cách có một biến nguyên count để theo dõi số phần tử trong buffer. while (count == BUFFER_SIZE) ; // do nothing buffer [in] = nextProduced; in = (in + 1) % BUFFER_SIZE; count++; } Khởi tạo count=0. Nó được tăng bởi tiến trình sản xuất khi thêm vào buffer 1 phần tử. Nó bị giảm bởi tiến trình tiêu thụ khi lấy khỏi buffer 1 phần tử Bài giảng Nguyên lý Hệ điều hành Phạm Quang Dũng ©2008 Bài giảng Nguyên lý Hệ điều hành Phạm Quang Dũng ©2008 1 Consumer Trạng thái tranh đua (Race condition) count++ có thể được thực thi như sau: while (true) { register1 = count register1 = register1 + 1 count = register1 while (count == 0) ; // do nothing count-- có thể được thực thi như sau: nextConsumed = buffer[out]; register2 = count register2 = register2 - 1 count = register2 out = (out + 1) % BUFFER_SIZE; count--; Xét sự thực hiện đan xen với ban đầu “count = 5”: S0: producer execute register1 = count S1: producer execute register1 = register1 + 1 S2: consumer execute register2 = count S3: consumer execute register2 = register2 - 1 S4: producer execute count = register1 S5: consumer execute count = register2 /* consume the item in nextConsumed } Bài giảng Nguyên lý Hệ điều .

TỪ KHÓA LIÊN QUAN