Giao tiếp giữa các quá trình - Tổng quan
Giao tiếp giữa các quá trình (IPC) là một cơ chế liên quan đến giao tiếp của một quá trình với một quá trình khác. Điều này thường chỉ xảy ra trong một hệ thống.
Giao tiếp có thể có hai loại -
Giữa các quy trình liên quan chỉ bắt đầu từ một quy trình, chẳng hạn như quy trình mẹ và con.
Giữa các quy trình không liên quan, hoặc hai hoặc nhiều quy trình khác nhau.
Sau đây là một số thuật ngữ quan trọng mà chúng ta cần biết trước khi tiếp tục về chủ đề này.
Pipes- Giao tiếp giữa hai quá trình liên quan. Cơ chế là một nửa song công có nghĩa là quá trình đầu tiên giao tiếp với quá trình thứ hai. Để đạt được song công hoàn toàn, tức là, để quy trình thứ hai giao tiếp với quy trình thứ nhất thì cần phải có một đường ống khác.
FIFO- Giao tiếp giữa hai tiến trình không liên quan. FIFO là một song công, có nghĩa là quy trình đầu tiên có thể giao tiếp với quy trình thứ hai và ngược lại cùng một lúc.
Message Queues- Giao tiếp giữa hai hoặc nhiều tiến trình với dung lượng song công. Các tiến trình sẽ giao tiếp với nhau bằng cách đăng một tin nhắn và lấy nó ra khỏi hàng đợi. Sau khi được truy xuất, thông báo không còn có sẵn trong hàng đợi.
Shared Memory- Giao tiếp giữa hai hoặc nhiều quá trình đạt được thông qua một phần bộ nhớ được chia sẻ giữa tất cả các quá trình. Bộ nhớ dùng chung cần được bảo vệ lẫn nhau bằng cách đồng bộ hóa quyền truy cập vào tất cả các quá trình.
Semaphores- Semaphores có nghĩa là để đồng bộ hóa quyền truy cập vào nhiều quy trình. Khi một tiến trình muốn truy cập vào bộ nhớ (để đọc hoặc ghi), nó cần được khóa (hoặc bảo vệ) và được giải phóng khi quyền truy cập bị xóa. Điều này cần được lặp lại bởi tất cả các quy trình để bảo mật dữ liệu.
Signals- Tín hiệu là cơ chế giao tiếp giữa nhiều quá trình bằng cách báo hiệu. Điều này có nghĩa là một quá trình nguồn sẽ gửi một tín hiệu (được nhận dạng bằng số) và quá trình đích sẽ xử lý nó tương ứng.
Note - Hầu hết tất cả các chương trình trong hướng dẫn này đều dựa trên các lệnh gọi hệ thống trong Hệ điều hành Linux (được thực thi trong Ubuntu).