SLEEP là một lời gọi hệ thống có tác dụng tạm dừng hoạt động của tiến trình (blocked) gọi nó và chờ đến khi được một tiến trình khác « đánh thức ». Lời gọi hệ thống WAKEUP nhận một tham số duy nhất: tiến trình sẽ được tái kích hoạt (đặt về trạng thái ready). Khi một tiến trình chưa đủ điều kiện vào miền găng, nó gọi SLEEP để tự khóa đến khi có một tiến trình khác gọi WAKEUP để giải phóng cho nó. Một tiến trình gọi WAKEUP khi ra khỏi miền găng để đánh thức một tiến trình đang chờ, tạo cơ hội cho tiến trình này vào miền găng
Trang 1Trường đại học Sư phạm Kỹ thuật TP Hồ Chí Minh
Khoa Đào tạo Chất lượng cao
HỆ ĐIỀU HÀNH THỜI GIAN THỰC (RTOS)
Sleep&Wakeup
GV hướng dẫn: Huỳnh Hoàng Hà
Trang 2Danh sách các thành viên:
Trang 4Introduction
Trang 5o SLEEP là một lời gọi hệ thống có tác dụng tạm dừng
hoạt động của tiến trình (blocked) gọi nó và chờ đến khi được một tiến trình khác « đánh thức »
o Lời gọi hệ thống WAKEUP nhận một tham số duy nhất:
tiến trình sẽ được tái kích hoạt (đặt về trạng thái ready).
Introduction
Trang 6Ý TƯỞNG int busy; // 1 nếu miền găng đang bị chiếm, nếu không là 0
int blocked; // đếm số lượng tiến trình đang bị khóa.
}
Introduction
o Khi một tiến trình chưa đủ điều
kiện vào miền găng, nó gọi
SLEEP để tự khóa đến khi có một
tiến trình khác gọi WAKEUP để
giải phóng cho nó
o Một tiến trình gọi WAKEUP khi ra
khỏi miền găng để đánh thức một
tiến trình đang chờ, tạo cơ hội
cho tiến trình này vào miền găng
Trang 8Nhược điểm
(a) Process A
while (TRUE) {
if (busy) { blocked = blocked + 1;
sleep();
} busy = 1;
}
(b) Process B
while (TRUE) {
if (busy) { blocked = blocked + 1;
sleep();
} busy = 1;
}
Initial: + busy=0; // busy=1 means: the CS has a process inside.
+ blocked=0; // blocked: is the number of processes blocked in the Waiting List.
Introduction
Trang 9Nhược điểm Initial: + busy=0; // busy=1 means: the CS has a process inside.
+ blocked=0; // blocked: is the number of processes blocked in the Waiting List.
(a) Process A
while (TRUE) {
if (busy) { blocked = blocked + 1;
sleep();
} busy = 1;
}
(b) Process B
while (TRUE) {
if (busy) { blocked = blocked + 1;
sleep(); //W = {B}; forever
} busy = 1;
}
Introduction
Trang 10GIẢI PHÁP
Hệ điều hành cung cấp những
cơ chế đồng bộ hóa dựa trên ý tưởng của chiến lược « SLEEP and WAKEUP » nhưng được xây dựng bao hàm cả phương tiện kiểm tra điều kiện vào miền găng giúp sử dụng an toàn.
Introduction
Trang 11Semaphor e
Trang 12o Một semaphore s là một biến gồm các thuộc tính sau:
o Một giá trị khởi tạo nguyên dương s lớn hơn hoặc bằng 0 (s>=0)
o Một hàng đợi (waiting list) f(s) lưu danh sách các tiến trình đang bị khóa (block) trên semaphore s (danh sách f(s) lúc đầu là NULL rỗng, nếu có nhiều tiến trình vào dánh sách thì sẽ theo phương pháp FIFO)
o P và Q là biến con trỏ để đỏ đến tiến trình cần quản lý
o Chỉ có hai thao tác được định nghĩa trên semaphore: down(s) và up(s)
Trang 13o Down(s): giảm giá trị của semaphore s đi 1 đơn vị nếu semaphore có trị e(s) > 0, và tiếp tục xử lý Ngược lại, nếu e(s) £ 0, tiến trình phải chờ đến khi e(s) >0.
Down(s): block a process, and put into f(s)
void Down(int s) {
s = s - 1;
if (s < 0) { status(P)= blocked;
enter(P,f(s));
}}
Up(s): wake up a process from f(s)
void Up( int s) {
enter(Q,ready-}
o Up(s): tăng giá trị của semaphore s lên 1 đơn vị Nếu có một hoặc nhiều tiến trình đang chờ trên semaphore s, bị khóa bởi thao tác Down, thì hệ thống sẽ chọn một trong các tiến trình này để kết thúc thao tác Down và cho tiếp tục xử lý
Semaphore
Trang 14 Process(A) while (TRUE) {
o Situation01: Exclusive access to Critical
section (only 1 process enters the CS)
o Initial: s = 1;
Trang 15Situation02: control the sequence of 2 Jobs (Job_01 must run completely before Job_02) Initial: s = 0;
while (TRUE) {
Job_01();
Up(s); //Wake up B }
while (TRUE) {
Down(s); // Waiting P1 Job_02();
}
Semaphore
Trang 16Monitor
Trang 17Monitor là một cấu trúc đặc biệt gồm các biến, các thủ tục và cấu trúc dữ liệu và tuân theo các thuộc tính sau:
Monitor
Trang 18Monitor là một cấu trúc đặc biệt gồm các biến, các thủ tục và cấu trúc dữ liệu và tuân theo các thuộc tính sau:
o - Các biến và các cấu trúc dữ liệu bên trong Monitor chỉ được thao tác bởi các thủ tục định nghĩa bên trong Monitor
(encapsulation)
o - Tại một thời điểm chỉ có một tiến trình được quyền sử dụng Monitor (Mutual Exclusive)
o - Trong một monitor có thể định nghĩa các biến điều kiện (a,
b, c, ) và hai thao tác đính kèm (wait và signal)
Wait(c): chuyển trạng thái tiến trình gọi sang blocked , và đặt
tiến trình này vào hàng đợi trên biến điều kiện c.
Signal(c): nếu có một tiến trình đang bị khóa trong hàng đợi
của c, tái kích hoạt tiến trình đó, và tiến trình gọi sẽ rời khỏi
monitor
Monitor
Trang 19Monitor Seraphore
Trang 20Procedure 1 Procedure N
Monitor.Procedure1() ;
A();
Noncritical-section-}
Monitor Semaphore
Monitor takes care of
Trang 21Các
phương
pháp khác
Trang 22o Semaphore: Binary semaphore, counting semaphore.
pháp khác
Trang 23Tổng kết
Trang 24o Busy waiting:
+ Dễ dàng thiết lập
+ Vấn đề: tiến trình vẫn giữ CPU dù không làm việc gì.
+ Gồm các giải pháp Lock, Alternating, Peterson, Interrupt
o Sleep and Wakeup:
+ Thiết lập phức tạp.
+ Tối ưu hiệu năng của CPU
+ Gồm các giải pháp Semaphore, Monitor, others,
Tổng kết
Trang 25Cảm ơn thầy và các bạn đã lắng
nghe!