Thông tin tài liệu:
Chương 9 của bài giảng Hệ điều hành Unix trình bày về Unix IPC Interprocess Communication. Các nội dung chính trong chương này gồm có: Signal, pipes, message passing, shared memory,... Hy vọng bài giảng này sẽ cung cấp cho bạn đọc những kiến thức hữu ích để phục vụ quá trình học tập được hiệu quả.
Nội dung trích xuất từ tài liệu:
Bài giảng Hệ điều hành Unix: Chương 9 - Ngô Duy Hòa
Nội dung bài học
• Signal.
Bài 9. Unix IPC • Pipes.
Interprocess Communication • Message Passing.
• Shared memory.
Ngô Duy Hòa – KHMT - CNTT
1. Signal
Các khái niệm cơ bản Các khái niệm cơ bản
• Vai trò của Signal:
• Signal: - software interrupt: hỗ trợ thực hiện các
– Thông báo cho tiến trình biết 1 sự kiện xảy ra.
sự kiện không đồng bộ (asynchonous event)
– Yêu cầu tiến trình xử lý sự kiện tương ứng.
đến tiến trình hoặc một nhóm tiến trình.:
• Các loại signal: Trong Linux có 2 loại:
– Sinh ra do người dùng nhấn 1 tổ hợp phím (Ctrl+C,
– Regular Signal: tập các signal chuẩn trong các hệ
Ctrl+Z,..)
thống Unix/Linux. Nhận giá trị: 1-31
– Sinh ra do 1 tiến trình này gửi đến tiến trình khác. – Real-time Signal: các signal hỗ trợ làm việc ở chế độ
• Về bản chất, signal là 1 số nguyên dương, real-time. Thường được dùng trong các phiên bản
tương ứng với chỉ số trong bảng Signal Table. embedded linux. Signal nhận giá trị: 32-63.
– Phân biệt: Khi 1 signal được gửi nhiều lần liền nhau:
• Mỗi 1 signal đều có 1 chương trình xử lý mặc • real-time signal luôn được đưa vào hàng đợi (queue) và xử
định trong kernel. lý nhiều lần,
• regular signal chỉ xử lý một lần.
1
PCB & Signal Table Cơ chế thực hiện
• Khi 1 tiến trình nhận được 1 signal:
– Giá trị signal sẽ được dùng để xác định vị trí
signal trong signal table.
– Mỗi phần tử trong bảng sẽ trỏ đến vị trí hàm
xử lý signal tương ứng. Theo mặc định thì các
hàm này được xây dựng sẵn trong kernel.
– Nếu người dùng muốn xử lý theo cách của
mình Æ xây dựng hàm xử lý riêng cho signal
rồi thông báo cho hệ thống.
– Nếu signal bị nằm trong danh sách block Æ
tiến trình sẽ không xử lý công việc gì.
Shell command & Signal
• Trong Shell, có thể dùng hàm kill để gửi 1
signal đến 1 tiến trình thông qua PID của
tiến trình.
• Cú pháp: $ kill -
• Trong đó thường bắt đầu bằng
cụm từ: SIG (ví dụ SIGINT).
• Trong Shell có thể bỏ qua SIG,chỉ cần ghi
các ký tự đứng sau.
• Xem danh sách các signal: $ kill -l
Ví dụ minh họa
non-stop.c
2
System call & Signal
• Nếu pid > 0 Æ gửi signal đến tiến trình có PID.
• Nếu pid = 0 Æ gửi signal đến nhóm tiến trình mà tiến
trình hiện tại đang nằm trong đó.
• Nếu pid = -1 Æ gửi đến tất cả tiến trình ngoại trừ tiến
trình init (PID = 1)
• Nếu pid < -1 Æ gửi đến các tiến trình trong nhóm tiến
trình -PID
Ví dụ sử dụng: kill
Bẫy tín hiệu Cơ chế thực hiện
• Trong một số trường hợp, người dùng
không muốn OS xử lý các tín hiệu mặc
định Æ cần bắt và xử lý riêng cho signal
• Hầu hết các signal đều có thể bắt, ngoại
trừ 2 tín hiệu sau:
– SIGKILL: tắt tiến trình ngay lập tức.
– SIGSTOP: tạm ngưng tiến trình hiện tại. Tiến
trình được kích hoạt trở lại nếu được nhận tín
hiệu SIGCONT.
3
Bẫy và xử lý signal Ví dụ với signal
• Chú ý: sighandler_t là một con trỏ hàm, nhận
tham số truyền vào la 1 biến int.
• Có 2 hàm handler có sẵn:
– SIG_IGN: signal sẽ không được xử lý.
– SIG_DFL: signal được xư lý theo mặc định.
Một số các hàm khác Các hàm system call hỗ trợ
• Vấn đề tranh chấp xử lý tín hiệu:
– Một tín hiệu đang được xử lý thì một tín hiệu
tiếp theo được gửi đến.
– Về nguyên tắc thì OS lại xử lý tín hiệu mới
sau đó mới thực hiện với tín hiệu trước.
– Æ kết quả xử lý tín hiệu không được đảm
bảo.
• Cách giải quyết:
– Thiết lập mặt nạ các tín hiệu để không cho ...