Tớn hiệu là một cơ chế phần mềm tương tự như cỏc ngắt cứng tỏc động đến cỏc tiến trỡnh. Một tớn hiệu được sử dụng để thụng bỏo cho tiến trỡnh về một sự kiện nào đú xảy ra. Cú nhiều tớn hiệu được định nghĩa, mỗi một tớn hiệu cú một ý nghĩa tương ứng với một sự kiện đặc trưng.
Vớ dụ : Một số tớn hiệu của UNIX
Tớn hiệu Mụ tả
SIGINT Người dựng nhấn phớm DEL để ngắt xử lý tiến trỡnh SIGQUIT Yờu cầu thoỏt xử lý
SIGILL Tiến trỡnh xử lý một chỉ thị bất hợp lệ SIGKILL Yờu cầu kết thỳc một tiến trỡnh
SIGFPT Lỗi floating – point xảy ra (chia cho 0)
SIGPIPE Tiến trỡnh ghi dữ liệu vào pipe mà khụng cú reader SIGSEGV Tiến trỡnh truy xuất đến một địa chỉ bất hợp lệ SIGCLD Tiến trỡnh con kết thỳc
Mỗi tiến trỡnh sở hữu một bảng biểu diễn cỏc tớn hiệu khỏc nhau. Với mỗi tớn hiệu sẽ cú tương ứng một trỡnh xử lý tớn hiệu (signal handler) qui định cỏc xử lý của tiến trỡnh khi nhận được tớn hiệu tương ứng.
Cỏc tớn hiệu được gửi đi bởi:
- Phần cứng (vớ dụ lỗi do cỏc phộp tớnh số học)
- Hạt nhõn HĐH gửi đến một tiến trỡnh (vớ dụ lưu ý tiến trỡnh khi cú một thiết bị nhập/xuất tự do).
- Một tiến trỡnh gửi đến một tiến trỡnh khỏc (vớ dụ tiến trỡnh cha yờu cầu một tiến trỡnh con kết thỳc)
- Người dựng (vớ dụ nhấn phớm Ctrl-C để ngắt xử lý của tiến trỡnh)
Khi một tiến trỡnh nhận một tớn hiệu, nú cú thể xử sự theo một trong cỏc cỏch sau: - Bỏ qua tớn hiệu
- Xử lý tớn hiệu theo kiểu mặc định
Liờn lạc bằng tớn hiệu mang tớnh chất khụng đồng bộ, nghĩa là một tiến trỡnh nhận tớn hiệu khụng thể xỏc định trước thời điểm nhận tớnh hiệu. Hơn nữa cỏc tiến trỡnh khụng thể kiểm tra được sự kiện tương ứng với tớn hiệu cú thật sự xảy ra? Cuối cựng, cỏc tiến trỡnh chỉ cú thể thụng bỏo cho nhau về một biến cố nào đú, mà khụng trao đổi dữ liệu theo cơ chế này được.
b- Pipe
Một pipe là một kờnh liờn lạc trực tiếp giữa hai tiến trỡnh: dữ liệu xuất của tiến trỡnh này được chuyển đến làm dữ liệu nhập cho tiến trỡnh kia dưới dạng một dũng cỏc byte.
Khi một pipe được thiết lập giữa hai tiến trỡnh, một trong chỳng sẽ ghi dữ liệu vào pipe và tiến trỡnh kia sẽ đọc dữ liệu từ pipe. Thứ tự dữ liệu truyền qua pipe được bảo toàn theo nguyờn tắc FCFS. Một pipe cú kớch thước giới hạn (thường là 4096 ký tự).
Một tiến trỡnh chỉ cú thể sử dụng một pipe do nú tạo ra hay kế thừa từ tiến trỡnh cha. Hệ điều hành cung cấp cỏc lời gọi hệ thống read/write cho cỏc tiến trỡnh thực hiện thao tỏc đọc/ghi dữ liệu trong pipe. Hệ điều hành cũng chịu trỏch nhiệm đồng bộ húa việc truy xuất pipe trong cỏc tỡnh huống:
Tiến trỡnh đọc pipe sẽ bị khúa nếu pipe trống, nú sẽ phải đợi đến khi pipe cú dữ liệu để truy xuất.
Tiến trỡnh ghi pipe sẽ bị khúa nếu pipe đầy, nú sẽ phải đợi đến khi pipe cú chỗ trống để chứa dữ liệu.
Liờn lạc bằng pipe là một cơ chế liờn lạc một chiều (unidirectional), nghĩa là một tiến trỡnh kết nối với một pipe chỉ cú thể thực hiện một trong hai thao tỏc đọc hoặc ghi, nhưng khụng thể thực hiện cả hai. Một số HĐH cho phộp thiết lập hai pipe giữa một cặp tiến trỡnh để tạo liờn lạc hai chiều. Trong những hệ thống đú, cú nguy cơ xảy ra tỡnh trạng
bế tắc(deadlock): một pipe bị giới hạn về kớch thước, do vậy nếu cả hai pipe nối kết hai tiến trỡnh đều đầy (hoặc đều trống) và cả hai tiến trỡnh đều muốn ghi (hay đọc) dữ liệu vào pipe (mỗi tiến trỡnh ghi dữ liệu vào một pipe), chỳng sẽ cựng bị khúa và chờ lẫn nhau mói mói!
Cơ chế này cho phộp truyền dữ liệu với cỏch thức khụng cấu trỳc.
Ngoài ra, một giới hạn của hỡnh thức liờn lạc này là chỉ cho phộp kết nối hai tiến trỡnh cú quan hệ cha-con, và trờn cựng một mỏy tớnh.