Bài giảng Hệ điều hành nâng cao - Trần Hạnh Nhi - Bài giảng 4: Đồng bộ hóa tiến trình
Xử lý đồng hành và các vấn đề:
? Vấn đề tranh đoạt điều khiển (Race Condition)
? Vấn đề phối hợp xử lý
? Bài toán đồng bộ hóa
? Yêu cầu độc quyền truy xuất (Mutual Exclusion)
? Yêu cầu phối hợp xử lý (Synchronization)
? Các giải pháp đồng bộ hoá
? Busy waiting
? Sleep & Wakeup
? Các bài toán đồng bộ hoá kinh điển
? Producer – Consumer
? Readers – Writers
? Dinning Philosophers
phương
thức của monitor :
P1 : M.C() // i=5
P2: M.B() // printf(j)
MethodA
i=0
MethodB
prinf(j)
MethodC
i=5
Share variable: i,j;
Monitor M
10/28/2005 Trần Hạnh Nhi 56
Monitor : Ngữ nghĩa và tính chất(2)
Tự động bảo đảm Mutual Exclusion
Tại 1 thời điểm chỉ có 1 tiến trình được thực
hiện các phương thức của Monitor
Các tiến trình không thể vào Monitor sẽ
được đưa vào Entry queue của Monitor
Ví dụ
P1 : M.A();
P6 : M.B();
P7 : M.A();
P8 : M.C();
MethodA
i = 0
MethodB
printf(i)
MethodC
i=5
P1
P8P7P6
Entry
queue
Share variable: i,j;
10/28/2005 Trần Hạnh Nhi 57
Monitor : Ngữ nghĩa và tính chất(3)
Hỗ trợ Synchronization với các condition
variables
Wait(c) : Tiến trình gọi hàm sẽ bị blocked
Signal(c): Giải phóng 1 tiến trình đang bị
blocked trên biến điều kiện c
C.queue : danh sách các tiến trình blocked
trên c
Trạng thái tiến trình sau khi gọi Signal?
Blocked. Nhường quyền vào monitor cho tiến
trình được đánh thức
Tiếp tục xử lý hết chu kỳ, rồi blocked
MethodA
i=0;
signal(c1)
MethodB
MethodC
wait(C1);
i=5
signal(C2 );
C1:
C2: P5
P4
P1
P3
P2
P8P7P6
Entry
queue
Share variable: i,j;
Condition variable:
P1
10/28/2005 Trần Hạnh Nhi 58
Sử dụng Monitor
Tổ chức “độc quyền truy xuất”
Pi
M.AccessMutual(); //CS
Tổ chức “hò hẹn”
P1 :
M.F1();
P2:
M.F2();
Monitor M
RC;
Function AccessMutual
CS; // access RC
Monitor M
Condition c;
Function F1
Job1;
Signal(c);
Function F2
Wait(c);
Job2;
10/28/2005 Trần Hạnh Nhi 59
Được hỗ trợ bởi HĐH
Đồng bộ hóa trên môi trường phân tán
2 primitive Send & Receive
Cài đặt theo mode blocking
Server P
1. Send Request
2. Receive Accept
3. Send Finish
Giải pháp Sleep & Wakeup 3: Message
10/28/2005 Trần Hạnh Nhi 60
Nội dung bài giảng
Xử lý đồng hành và các vấn đề:
Vấn đề tranh đoạt điều khiển (Race Condition)
Vấn đề phối hợp xử lý
Bài toán đồng bộ hóa
Yêu cầu độc quyền truy xuất (Mutual Exclusion)
Yêu cầu phối hợp xử lý (Synchronization)
Các giải pháp đồng bộ hoá
Busy waiting
Sleep & Wakeup
Các bài toán đồng bộ hoá kinh điển
Producer – Consumer
Readers – Writers
Dinning Philosophers
10/28/2005 Trần Hạnh Nhi 61
Bài toán đồng bộ kinh điển 1:
Producer - Consumer (Bounded-Buffer Problem)
P
C
Buffer (N) ( )
Mô tả : 2 tiến trình P và C hoạt động đồng hành
P sản xuất hàng và đặt vào Buffer
C lấy hàng từ Buffer đi tiêu thụ
Buffer có kích thước giới hạn
Tình huống
P và C đồng thời truy cập Buffer ?
P thêm hàng vào Buffer đầy ?
C lấy hàng từ Buffer trống ?
P không được ghi dữ liệu vào buffer đã đầy (Rendez-vous)
C không được đọc dữ liệu từ buffer đang trống (Rendez-vous)
P và C không được thao tác trên buffer cùng lúc (Mutual Exclusion)
10/28/2005 Trần Hạnh Nhi 62
Producer – Consummer : Giải pháp Semaphore
Các biến dùng chung giữa P và C
BufferSize = N; // số chỗ trong bộ đệm
semaphore mutex = 1 ; // kiểm soát truy xuất độc quyền
semaphore empty = BufferSize; // số chỗ trống
semaphore full = 0; // số chỗ đầy
int Buffer[BufferSize]; // bộ đệm dùng chung
10/28/2005 Trần Hạnh Nhi 63
Producer – Consummer : Giải pháp Semaphore
Producer()
{
int item;
while (TRUE)
{
produce_item(&item);
down(&empty);
down(&mutex)
enter_item(item,Buffer);
up(&mutex);
up(&full);
}
}
Consumer()
{
int item;
while (TRUE)
{
down(&full);
down(&mutex);
remove_item(&item,Buffer);
up(&mutex);
up(&empty);
consume_item(item);
}
}
10/28/2005 Trần Hạnh Nhi 64
P&C - Giải pháp Semaphore: Thinking...
Producer()
{
int item;
while (TRUE)
{
produce_item(&item);
down(&mutex)
down(&empty);
enter_item(item,Buffer);
up(&mutex);
up(&full);
}
}
Consumer()
{
int item;
while (TRUE)
{
down(&mutex);
down(&full);
remove_item(&item,Buffer);
up(&mutex);
up(&empty);
consume_item(item);
}
}
10/28/2005 Trần Hạnh Nhi 65
Producer – Consummer : Giải pháp Monitor
monitor ProducerConsumer
condition full, empty;
int Buffer[N], count;
procedure enter();
{
if (count == N)
wait(full);
enter_item(item,Buffer);
count ++;
if (count == 1)
signal(empty);
}
procedure remove();
{
if (count == 0)
wait(empty)
remove_item(&item,Buffer);
count --;
if (count == N-1)
signal(full);
}
count = 0;
end monitor;
10/28/2005 Trần Hạnh Nhi 66
Producer – Consummer : Giải pháp Monitor
Producer()
{
int item;
while (TRUE)
{
produce_item(&item);
ProducerConsumer.enter;
}
}
Consumer();
{
int item;
while (TRUE)
{
ProducerConsumer.remove;
consume_item(item);
}
}
10/28/2005 Trần Hạnh Nhi 67
Producer – Consummer : Giải pháp Message
Producer()
{
int item;
message m;
while (TRUE)
{
produce_item(&item);
receive(consumer, Request);
create_message(&m, item);
send(consumer,&m);
}
}
Consumer();
{
int item;
message m;
for(0 to N)
send(producer, Request);
while (TRUE)
{
receive(producer, &m);
remove_item(&m,&item);
send(producer, Request);
consumer_item(item);
}
}
Coi chừng
Deadlock
10/28/2005 Trần Hạnh Nhi 68
Bài toán đồng bộ hoá kinh điển 2:
Readers & Writers
Mô tả : N tiến trình Ws và Rs hoạt động đồng hành
Rs và Ws chia sẻ CSDL
W cập nhật nội dung CSDL
Rs truy cập nội dung CSDL
Tình huống
Các Rs cùng truy cập CSDL ?
W đang cập nhật CSDL thì các Rs truy cập CSDL ?
Các Rs đang truy cập CSDL thì W muốn cập nhật CSDL ?
W không được cập nhật dữ liệu khi có ít nhất một R đang truy xuất CSDL (ME)
Rs không được truy cập CSDL khi một W đang cập nhật nội dung CSDL (ME)
Tại một thời điểm , chỉ cho phép một W được sửa đổi nội dung CSDL (ME)
Database
R1
R2 R3
W1 W2
10/28/2005 Trần Hạnh Nhi 69
Readers-Writers với “active readers”
10/28/2005 Trần Hạnh Nhi 70
Readers-writers với một “active writer”
10/28/2005 Trần Hạnh Nhi 71
Ưu tiên ai hơn đây ?
10/28/2005 Trần Hạnh Nhi 72
Readers & Writers
W độc quyền truy xuất CSDL
W hiện tại kết thúc cập nhật CSDL : ai vào ?
Cho W khác vào, các Rs phải đợi
Ưu tiên Writer, Reader có thể starvation
Cho các Rs vào, Ws khác phải đợi
Ưu tiên Reader, Writer có thể starvation
10/28/2005 Trần Hạnh Nhi 73
Readers & Writers : Giải pháp Semaphore
Các biến dùng chung giữa Rs và Ws
semaphore db = 1; // Kiểm tra truy xuất CSDL
10/28/2005 Trần Hạnh Nhi 74
R&W : Giải pháp Semaphore (1)
Reader()
{
down(&db);
read-db(Database);
up(&db);
}
Writer()
{
down(&db);
write-db(Database);
up(&db);
}
Chuyện gì xảy ra ?
Chỉ có 1 Reader được đọc CSDL tại 1 thời điểm !
10/28/2005 Trần Hạnh Nhi 75
R&W : Giải pháp Semaphore (2)
Reader()
{
rc = rc +1;
if (rc ==1)
down(&db);
read-db(Database);
rc = rc – 1;
if (rc == 0)
up(&db);
}
Writer()
{
down(&db);
write-db(Database);
up(&db);
}
Đúng chưa ?
rc là biến dùng chung giữa các
Reader...
CS đó/
10/28/2005 Trần Hạnh Nhi 76
Readers & Writers : Giải pháp Semaphore
Các biến dùng chung giữa Rs và Ws
semaphore db = 1; // Kiểm tra truy xuất CSDL
Các biến dùng chung giữa Rs
int rc; // Số lượng tiến trình Reader
semaphore mutex = 1; // Kiểm tra truy xuất rc
10/28/2005 Trần Hạnh Nhi 77
R&W : Giải pháp Semaphore (3)
Reader()
{
down(&mutex);
rc = rc +1;
if (rc ==1)
down(&db);
up(mutex);
read-db(Database);
down(mutex);
rc = rc – 1;
if (rc == 0)
up(&db);
up(mutex);
}
Writer()
{
down(&db);
write-db(Database);
up(&db);
}
Ai được ưu tiên ?
10/28/2005 Trần Hạnh Nhi 78
R&W : Giải pháp Semaphore (Thinking...)
Reader()
{
down(&mutex);
rc = rc +1;
up(mutex);
if (rc ==1)
down(&db);
read-db(Database);
down(mutex);
rc = rc – 1;
up(mutex);
if (rc == 0)
up(&db);
}
Writer()
{
down(&db);
write-db(Database);
up(&db);
}
??? hê, hê, hê ☺
10/28/2005 Trần Hạnh Nhi 79
R&W: Giải pháp Monitor
monitor ReaderWriter
? Database;
procedure R1();
{
}
procedure R...();
{
}
procedure W1();
{
}
procedure W...();
{
}
monitor ReaderWriter
condition OKWrite, OKRead;
int rc = 0;
Boolean busy = false;
procedure BeginRead()
{
if (busy)
wait(OKRead);
rc++;
signal(OKRead);
}
procedure FinishRead()
{
rc--;
if (rc == 0)
signal(OKWrite);
}
procedure BeginWrite()
{
if (busy || rc != 0)
wait(OKWrite);
busy = true;
}
procedure FinishWrite()
{
busy = false;
if (OKRead.Queue)
signal(OKRead);
else
signal(OKWrite);
}
end monitor;
10/28/2005 Trần Hạnh Nhi 81
Reader&Writer : Giải pháp Monitor
Reader()
{
RW.BeginRead();
Read-db(Database);
RW.FinishRead();
}
Writer();
{
RW.BeginWrite();
Write-db(Database);
RW.FinishWrite();
}
10/28/2005 Trần Hạnh Nhi 82
Bài toán đồng bộ hoá kinh điển 3:
Bửa ăn của các Triết gia (Dining Philosophers)
Năm triết gia ngồi chung quanh bàn
ăn món spaghetti (yum..yum)
Trên bàn có 5 cái nĩa được đặt giữa 5
cái đĩa (xem hình)
Để ăn món spaghetti mỗi người cần có 2
cái nĩa
Triết gia thứ i:
Thinking...
Eating...
Chuyện gì có thể xảy ra ?
10/28/2005 Trần Hạnh Nhi 83
Dining Philosophers : Tình huống nguy hiểm
2 triết gia “giành giật” cùng 1 cái
nĩa
Tranh chấp
Cần đồng bộ hoá hoạt động
của các triết gia
10/28/2005 Trần Hạnh Nhi 84
Dining Philosophers : Giải pháp đồng bộ
semaphore fork[5] = 1;
Philosopher (i)
{
while(true)
{
down(fork[i]);
down(fork[i+1 mod 5])
eat;
up(fork[i]);
up(fork[i+1 mod 5]);
think;
}
Deadlock
10/28/2005 Trần Hạnh Nhi 85
Dining Philosophers : Thách thức
Cần đồng bộ sao cho:
Không có deadlock
Không có starvation
File đính kèm:
Bài giảng Hệ điều hành nâng cao - Trần Hạnh Nhi - Bài giảng 4 Đồng bộ hóa tiến trình.pdf

