Bài giảng Hệ điều hành: Chương 3 - Đồng bộ quá trình

65 51 0
Bài giảng Hệ điều hành: Chương 3 - Đồng bộ quá trình

Đ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ài giảng Hệ điều hành: Chương 3 - Đồng bộ quá trình bao gồm những nội dung về khái niệm cơ bản; Critical section, các giải pháp dùng lệnh máy thông thường; các giải pháp dùng lệnh cấm ngắt hoặc lệnh máy đặc biệt; Semaphore; Semaphore và các bài toán đồng bộ; Monitor.

Chương Đồng Bộ Quá Trình -1.1- Nội dung    Khái niệm Critical section Các giải pháp dùng lệnh máy thông thường ● Giải thuật Peterson, giải thuật bakery     Các giải pháp dùng lệnh cấm ngắt lệnh máy đặc biệt Semaphore Semaphore toán đồng Monitor Bài tốn đồng (1/2) • Khảo sát process/thread thực thi đồng thời chia sẻ liệu (ghi shared memory) hệ thống ● uniprocessor, ● shared memory multiprocessor   Nếu khơng có kiểm sốt truy cập liệu chia sẻ chúng trỡ nên khơng qn Để trì quán liệu, hệ thống cần có chế bảo đảm thực thi có trật tự process đồng thời Bài toán đồng (2/2)  Hai lớp toán đồng bộ: ● Hợp tác Bài toán producer-consumer: bounded buffer ● Cấp phát tài nguyên  Bài toán loại trừ tương hỗ: đồâng nhiều q trình sử dụng tài ngun khơng chia sẻ đồâng thời  Bài toán Dining Philosophers  Đồng thời  song song   Trên uniprocessor hay shared memory multiprocessor, trình chạy đồng thời Trên shared memory multiprocessor, q trình chạy song song trình trình Shared memory Biến chia sẻ Quá trinh code private data Bài tốn Producer-consumer (1/3)  Ví dụ Bounded buffer, thêm biến đếm count #define BUFFER_SIZE /* buffers */ typedef struct { } item; item buffer[BUFFER_SIZE]; int in = 0, out = 0, count = 0; Bài tốn Producer-consumer (2/3)  Q trình Producer item nextProduced; while(1) { while (count == BUFFER_SIZE); buffer[in] = nextProduced; count++; in = (in + 1) % BUFFER_SIZE; }  Quá trình Consumer item nextConsumed; while(1) { while (count == 0); nextConsumed = buffer[out]; count ; out = (out + 1) % BUFFER_SIZE;} biến count chia sẻ producer consumer Bài toán Producer-consumer (3/3)  Các lệnh tăng/giảm biến count tương đương ngôn ngữ máy là: • Producer count++: • register1 = count • register1 = register1 + • count = register1 • Consumer count : • register2 = count • register2 = register2 - • count = register2 • Trong đó, registeri ghi CPU Đồng lệnh đơn nguyên • Mã máy lệnh tăng giảm biến count thực thi xen kẽ  Giả sử count Chuỗi thực thi sau xảy ra: 1: 2:  producer register1 := count {register1 = 5} producer register1 := register1 + {register1 = 6} consumer register2 := count {register2 = 5} consumer register2 := register2 - {register2 = 4} 3: producer count := register1 {count = 6} 4: consumer count := register2 {count = 4} Cả hai process thao tác đồng thời lên biến chung count Trị biến chung không quán thao tác hai process Giải pháp: lệnh count++, count phải đơn nguyên (atomic), nghĩa thực lệnh đơn, không thực thi đan xen Race condition  Race condition: nhiều process truy xuất thao tác đồng thời lên liệu chia sẻ (như biến count); kết cuối việc truy xuất đồng thời phụ thuộc thứ tự thực thi lệnh thao tác liệu  Để liệu chia sẻ quán, cần bảo đảm cho process thao tác lên liệu chia sẻ Do đó, cần có chế đồng hoạt động process 10 Bài toán Readers-Writers (2/4) Giải thuật  Dữ liệu chia sẻ semaphore mutex = 1; semaphore wrt = 1; int readcount = 0;  Các writer process wait(wrt); writing is performed signal(wrt);  Các reader process wait(mutex); readcount++; if (readcount == 1) wait(wrt); signal(mutex); reading is performed wait(mutex); readcount ; if (readcount == 0) signal(wrt); signal(mutex); 51 Bài toán Readers-Writers (3/4)   mutex: “bảo vệ” biến readcount wrt ● Bảo đảm mutual exclusion writer ● Được sử dụng reader cuối vào hay khỏi vùng tranh chấp  Nhận xét ● Nếu writer CS có n reader đợi reader xếp hàng đợi wrt n - reader hàng đợi mutex ● Khi writer thực thi signal(wrt), hệ thống phục hồi reader writer đợi 52 Bài toán Readers-Writers (4/4)  Câu hỏi: reader gọi wait(wrt) reader gọi signal(wrt) có phải một? 53 Các vấn đề với semaphore  Các tác vụ wait(S) signal(S) nằm rải rác process  Người lập trình khó nắm bắt hiệu ứng chúng  Nếu khơng sử dụng  xảy deadlock starvation  Một process bị “die” kéo theo process khác sử dụng biến semaphore signal(mutex) signal(mutex) … … criticalsection section critical … … wait(mutex) wait(mutex) wait(mutex) wait(mutex) … … criticalsection section critical … … wait(mutex) wait(mutex) signal(mutex) signal(mutex) … … criticalsection section critical … … signal(mutex) signal(mutex) 54 Monitor (1/2)   Construct ngôn ngữ cấp cao Xuất nhiều ngôn ngữ lập trình đồng thời ● Concurrent Pascal, Modula-3, Java,…  Có thể thực semaphore 55 Monitor (2/2)  Kiểu module phần mềm, bao gồm ● Một nhiều thủ tục (procedure) ● Một đoạn code khởi tạo (initialization code) ● Các biến liệu cục (local data variable)  Ngữ nghĩa monitor ● Shared variable truy xuất thủ tục monitor ● Process “vào monitor” cách gọi thủ tục monitor ● Các thủ tục monitor loại trừ tương hỗ shared data … entry queue operations initialization code Mơ hình monitor đơn giản 56 Cấu trúc monitor monitor monitor­name { shared variable declarations procedure body P1 (…) {  .  } procedure body P2 (…) {  .  }  procedure body Pn (…) {  . .  }  { initialization code } } 57 Condition variable    Để thực concept “process đợi monitor”, monitor phải khai báo biến điều kiện (condition variable) condition a, b; Các biến điều kiện cục truy cập bên monitor Chỉ thao tác lên biến điều kiện hai thủ tục: ● a.wait: process gọi tác vụ block “trên biến điều kiện” a process tiếp tục thực thi có process khác thực tác vụ a.signal ● a.signal: phục hồi process bị block biến điều kiện a  Nếu có nhiều process: chọn  Nếu khơng có process: khơng có tác dụng ● Nhận xét: condition variable khơng phải semaphore!  58 Monitor có condition variable (1/2) shared data a b entry queue  operations initialization code   • Các process đợi entry queue đợi condition queue (a, b, …) Khi thực lệnh a.wait, process block chuyển vào condition queue a Lệnh a.signal chuyển process từ condition queue a sang trạng thái ready Khi đó, để bảo đảm mutual exclusion, process gọi a.signal block đưa vào urgent queue 59 Monitor có condition variable (2/2) monitor waiting area entry queue entrance MONITOR condition c1 condition variables procedure c1.wait local data condition cn cn.wait urgent queue cx.signal procedure k initialization code exit 60 Monitor dining philosophers (1/5) monitor dp { enum {THINKING, HUNGRY, EATING} state[5]; condition self[5]; 61 Monitor dining philosophers (2/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); // left neighbor test((i + 1) % 5); // right … } 62 Monitor dining philosophers (3/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(); } } void init() { for (int i = 0; i < 5; i++) state[ i ] = THINKING; } } 63 Monitor dining philosophers (4/5)  Trước ăn, triết gia phải gọi hàm pickup(), ăn xong phải gọi hàm putdown() đói dp.pickup(i); ăn dp.putdown(i); suy nghĩ  Câu hỏi: Nếu triết gia phải đợi phục hồi gọi signal lên condition variable từ đâu? 64 Monitor dining philosophers (5/5)  Giải thuật ● không gây deadlock gây starvation ● khơng thực phân bố điều khiển tập trung 65 ... trỡ nên khơng qn Để trì quán liệu, hệ thống cần có chế bảo đảm thực thi có trật tự process đồng thời Bài toán đồng (2/2)  Hai lớp toán đồng bộ: ● Hợp tác Bài toán producer-consumer: bounded buffer... multiprocessor, trình chạy đồng thời Trên shared memory multiprocessor, trình chạy song song q trình q trình Shared memory Biến chia sẻ Quá trinh code private data Bài toán Producer-consumer (1 /3)  Ví... 0; Bài toán Producer-consumer (2 /3)  Quá trình Producer item nextProduced; while(1) { while (count == BUFFER_SIZE); buffer[in] = nextProduced; count++; in = (in + 1) % BUFFER_SIZE; }  Quá trình

Ngày đăng: 11/05/2021, 00:18

Mục lục

    Chương 3 Đồng Bộ Quá Trình

    Bài toán đồng bộ (1/2)

    Bài toán đồng bộ (2/2)

    Đồng thời  song song

    Đồng bộ và lệnh đơn nguyên

    Khái niệm Critical Section

    Cấu trúc tổng quát của quá trình trong bài toán loại trừ tương hỗ

    Định nghĩa lời giải của bài toán loại trừ tươnghỗ

    Phân loại giải pháp cho bài toán loại trừ tương hỗ

    Giải pháp dùng lệnh máy thông thường

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

Tài liệu liên quan