Mục tiêu Cho phép phối hợp hoạt động giữa các quá trình trong hệ thống Giải quyết đụng độ trên vùng tranh chấp Truyền thông điệp từ quá trình này đến các quá trình khác Chia sẻ
Trang 3 Mục tiêu
Cho phép phối hợp hoạt động giữa các quá trình trong hệ thống
Giải quyết đụng độ trên vùng tranh chấp
Truyền thông điệp từ quá trình này đến các quá trình khác
Chia sẻ thông tin giữa các quá trình với nhau
Trang 4Giao tiếp & đồng bộ thông tin
Trang 5Tín hiệu
Dựa vào các sự kiện bất đồng bộ.
Kernel có nhiệm vụ gửi (deliver) sự kiện đến
process
Các process có thể tự thiết lập các hành vi ứng xử tương ứng với sự kiện nhận được.
Trang 6 Tham khảo thêm
$ man signal hoặc info signal
$ kill -l
$ more /usr/include/bits/signum.h
Trang 7Hành vi
Các hành vi có thể thực hiện khi có sự kiện
Thực hiện các hành vi mặc định (do hệ điều hành qui định)
Trang 8Nguồn tạo-phát sinh tín hiệu
Int kill(pid_t pid, int sig);
Từ lời gọi system call alarm()→tạo ra SIGALARM
Trang 9Lập trình với Signal
#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
int sighold(int sig);
int sigrelse(int sig);
int sigignore(int sig);
int sigpause(int sig);
Trang 10Lập trình với Signal
sighandler_t signal(int signum, sighandler_t handler);
Thay đổi hành vi của process đối với signal
Tham số của hàm signal()
signum:
số hiệu signal muốn thay đổi hành vi(trừ SIGKILL hay
SIGSTOP) - dạng số hay symbolic
handler:
hành vi mới đối với signal, các giá trị có thể:
SIG_DFL: thiết lập lại hành vi về mặc định (default)
SIG_IGN: lờ đi (ignore) signal tương ứng
Tham chiếu đến hàm xử lý sự kiện (signal-handler) mới do người
dùng tự định nghĩa
Trang 11return 0;
}
Lưu ý: SIGINT tạo ra khi user nhấn Ctrl+C đểkết
Trang 12return 0;
Trang 13 Là kênh truyền dữ liệu giữa các process với nhau theo dạng FIFO
Trang 16 kết quả thực thi hàm pipe() là 0 ,
có hai file descriptor tương ứng sẽ được trả về trong
Trang 18}
Trang 19Hàm Dup
#include <unistd.h>
int dup (int filedes);
Chức năng:
tạo bản sao của filedes
File descriptor nhỏ nhất còn chưa sử dụng sẽ là bản sao của
filedes
Kết quả của hàm dup()
Thành công: tạo bản sao
Lỗi: -1 (mã lỗi trong biến ngoại errno)
File descriptor mới có những thuộc tính chung với file ban đầu
Cùng chỉ đến một file (hay pipe) đang mở
Chia sẻ cùng một file pointer
Có cùng một chế độ truy cập (read, write hoặc read/write)
Trang 20Hàm Dup2
#include <unistd.h>
Int dup2 (int filedes, int filedes2);
Tương tự dup(), nhưng dup2() cho phép chỉ
định file descriptor đích
filedes
Trang 21 Có thể dùng với các process có quan hệ bố con
Có thể tạo ra từ dấu nhắc lệnh shell(bằng lệnh
Trang 22Bài tập
Trang 23Q/A