-Signal.
Nếu nh− dùng các khoảng thời gian bằng nhau để phân phối cho các tiến trình thì cĩ thể sẽ xảy ra hiện t−ợng là cĩ những tiến trình khoảng thời gian đĩ là khơng đủ để thực hiện một phần việc; cĩ những tiến trình khoảng thời gian đĩ là thừa để thực hiện một phần việc. Điều này cĩ thể khắc phục bằng cách khơng chờ đến hết 100ms mới chuyển quyền chiếm thời gian của CPU sang tiến trình khác mà một tiến trình chỉ cần thực hiện hết phần việc của mình là cĩ thể gửi tín hiệu (signal) cho tiến trình khác thực hiện ngay. Nh− vậy sẽ tận dụng đ−ợc thời gian của CPU hơn. cúng ta cùng xem xét ví dụ sau:
void job0 (void) _task_ 0 {
//thực hiện cơng việc của task 0
os_send-signal(1); //gửi tín hiệu tới task 1 } t task 0 task 1 task 2 Hết 100ms, xảy ra ngắt do bộ định thời 0. ISRtimer0() { while(counter<=2) {
tăng biến counter; cất các thanh ghi vào vùng ngăn xếp của tiến trình hiện tại;
chuyển con trỏ lệnh IP tới tiến trình cĩ số hiệu bằng biến counter;
} ; else {
counter=0;
cất các thanh ghi vào vùng ngăn xếp của tiến trình hiện tại
chuyển con trỏ lệnh IP tới tiến trình cĩ số hiệu bằng biến counter.
} }
void job1 (void) _task_ 1 {
os_wait(K_SIG,0)//đợi tín hiệu từ task 0 //thực hiện cơng việc của task 1
os_send-signal(2); //gửi tín hiệu tới task 2 }
void job1 (void) _task_ 2 {
os_wait(K_SIG,1)//đợi tín hiệu từ task 1 //thực hiện cơng việc của task 2
}
Hoạt động của ch−ơng trình ở ví dụ trên cĩ thể mơ tả nh− sau: