1
Bài 9. Unix IPC
Interprocess Communication
Ngô Duy Hòa – KHMT - CNTT
Ni dung bài hc
Signal.
Pipes.
Message Passing.
Shared memory.
1. Signal
Các khái nim cơ bn
Signal: - software interrupt: htrthc hin các
skin không đồng b(asynchonous event)
đến tiến trình hoc mt nhóm tiến trình.:
Sinh ra do người dùng nhn 1 thp phím (Ctrl+C,
Ctrl+Z,..)
Sinh ra do 1 tiến trình này gi đến tiến trình khác.
•Vbn cht, signal là 1 s nguyên dương,
tương ng vi chstrong bng Signal Table.
•Mi 1 signal đều có 1 chương trình xlý mc
định trong kernel.
Các khái nim cơ bn
Vai trò ca Signal:
Thông báo cho tiến trình biết 1 skin xy ra.
Yêu cu tiến trình x skin tương ng.
•Các loi signal: Trong Linux 2 loi:
Regular Signal: tp các signal chun trong các h
thng Unix/Linux. Nhn giá tr: 1-31
Real-time Signal: các signal htrlàm vic chế độ
real-time. Thường được dùng trong các phiên bn
embedded linux. Signal nhn giá tr: 32-63.
Phân bit: Khi 1 signal được gi nhiu ln lin nhau:
real-time signal luôn được đưa vào hàng đợi (queue) và x
lý nhiu ln,
regular signal chxlý mt ln.
2
PCB & Signal Table Cơ chếthc hin
Khi 1 tiến trình nhn được 1 signal:
–Giátrsignal s được dùng để xác định vtrí
signal trong signal table.
–Mi phn ttrong bng str đến vtrí hàm
x lý signal tương ng. Theo mc định thì các
hàm này được xây dng sn trong kernel.
–Nếu người dùng mun xlý theo cách ca
mình Æxây dng hàm xlý riêng cho signal
ri thông báo cho hthng.
–Nếu signal bnm trong danh sách block Æ
tiến trình skhông xlý công vic gì.
Shell command & Signal
Trong Shell, có thdùng hàm kill để gi 1
signal đến 1 tiến trình thông qua PID ca
tiến trình.
pháp: $ kill -<signal> <PID>
•Trong đó <signal> thường bt đầu bng
cm t: SIG (ví dSIGINT).
Trong Shell có thbqua SIG,chcn ghi
các ký t đứng sau.
Xem danh sách các signal: $ kill -l
dminh ha
non-stop.c
3
System call & Signal
•Nếu pid > 0 Ægi signal đến tiến trình có PID.
•Nếu pid = 0 Ægi signal đến nhóm tiến trình mà tiến
trình hin ti đang nm trong đó.
•Nếu pid = -1 Ægi đến tt ctiến trình ngoi trtiến
trình init (PID = 1)
•Nếu pid < -1 Ægi đến các tiến trình trong nhóm tiến
trình -PID
dsdng: kill
By tín hiu
•Trong mt s trường hp, người dùng
không mun OS xlý các tín hiu mc
định Æcn bt và xlý riêng cho signal
•Hu hết các signal đều có thbt, ngoi
tr2 tín hiu sau:
SIGKILL: tt tiến trình ngay lp tc.
–SIGSTOP: tm ngưng tiến trình hin ti. Tiến
trình được kích hot trli nếu được nhn tín
hiu SIGCONT.
Cơ chếthc hin
4
By và xlý signal
Chú ý: sighandler_t là mt con trhàm, nhn
tham struyn vào la 1 biến int.
2 hàm handler có sn:
SIG_IGN: signal s không được x lý.
SIG_DFL: signal được xư lý theo mc định.
dvi signal
Mt scác hàm khác
•Vn đề tranh chp xlý tín hiu:
–Mt tín hiu đang được xlý thì mt tín hiu
tiếp theo được gi đến.
–Vnguyên tc thì OS li xlý tín hiu mi
sau đómi thc hin vi tín hiu trước.
Ækết quxlý tín hiu không được đảm
bo.
Cách gii quyết:
–Thiết lp mt ncác tín hiu để không cho
các tín hiu xen vào quá trình đang xlý.
Các hàm system call htr
Sdng sigprocmask
•Ý tưởng:
Dùng 1 biến thuc cu trúc sigset_t để lưu tr
mt tp các signal làm mt n.
Gán cơ chếm vic đối vi tp tín hiu đó:
SIG_BLOCK: tp tín hiu trong mt nbkhóa.
SIG_UNBLOCK: tp tín hiu không bkhóa.
SIG_SETMASK: đặt li mt nmi.
Dùng các hàm:
sigaddset (…) thêm 1 signal vào mt n.
sigdelset(…) xóa 1 tín hiu khi mt n,
Cách sdng
5
Sdng sigaction
2. Pipe (FIFO)
Cơ chếlàm vic
PIPE là 1 đối tượng ca OS, htrgiao
tiếp gia các tiến trình:
Output ca tiến trình này là Input ca tiến
trình kia.
–Thc hin theo nguyên tc FIFO.
PIPE_BUF = PAGE_SIZE = 4K
•Có2 loi PIPE trong OS:
PIPE không định danh (unnamed pipe)
–PIPE có định danh (named pipe).