Trao đổi thông tin giữa các tiến trình với các kên hở Un

Một phần của tài liệu CHƯƠNG 2: TIẾN TRÌNH potx (Trang 65 - 66)

P N( ∆t) = 1 j= 1 λ∆t (2.13)

2.4.2. Trao đổi thông tin giữa các tiến trình với các kên hở Un

Ở các ấn bản đầu tiên của Unix, sự trao đổi thông tin giữa các tiến trình đã sử dụng một kênh đệm chuyên dụng. Trong thí dụ ở đầu chương 2, chúng ta thấy rằng, nhiều chương trình của Unix (ở trường hợp này đó là các tiến trình) có thể tương tác với nhau qua một mệnh thức:

Programm 1| Programm 2|…| Programm N

Ở đây, dấu thẳng đứng biểu thị một cơ chế chuyển giao các dữ liệu của một chương trình tới một chương trình kế cạnh, mà cơ chế này được thực hiện nhờ một kênh. Một kênh trao đổi thông tin như vậy hoạt động theo nguyên tắc sau đây:

Với hàm gọi hệ thống pipe(), một kênh thông tin được mở, mà kênh đó, tại các tác vụ đọc và viết, dòng lệnh dưới đây có thể được truy cập một cách bình thường:

read(fileId, buffer) / write(fileId, buffer).

Đối với mỗi kiểu kết nối trao đổi thông tin, chương trình chính (ở đây là vỏ hệ thống của người sử dụng) mở một kênh (pipe) riêng lẻ và truyền tiếp kênh này với văn cảnh tiến trình tại tiến trình con; các tiến trình con của bên gởi chỉ sử dụng hàm fileId để viết, còn tiến trình bên nhận sử dụng hàm này chỉ để đọc. Vì sự nhận biết các files là những con số (số hiệu) ở trong các bảng, mà chúng được truyền cho tiến trình bởi hàm gọi hệ thống fork(), cho nên, sự trao đổi thông tin giữa tiến trình cha và tiến trình con ở trong hệ điều hành Unix được tạo thành nhờ các kênh (pipes). Ở hình 2.33 chỉ ra hai tiến trình: chúng trao đổi thông tin với nhau nhờ nặc danh pipe, tức là chúng đã truyền pipe cho tiến trình cha bằng ngữ cảnh tiến trình. Pipe được chứa đựng bằng số lượng các bước của ngữ cảnh tiến trình (các đường nét đậm).

Hình 2.33---

Ở hệ điều hành Unix, pipe thì không định hướng; đối với việc trao đổi thông tin giữa hai tiến trình thì hai pipe được sử dụng.

Bình thường thì tiến trình gởi chỉ bị hãm, nếu pipe đầy; tiến trình đọc chỉ xảy ra, nếu pipe trống. Ở loại tiến trình không có hãm, tiến trình đọc được nhận trở lại mức không, nếu không có thông tin nào bày ra; còn không, số lượng các Byte để đọc được lưu trữ trong biến đệm.

Sự trao đổi thông tin giữa các tiến trình bất kỳ và bỏ qua giới hạn các kiểu máy tính thì khả năng đầu tiên của các ấn bản mới hơn của Unix, thì chúng được bỏ qua đối với một pipe, ví như bỏ qua cấu trúc socket.

Một phần của tài liệu CHƯƠNG 2: TIẾN TRÌNH potx (Trang 65 - 66)

w