API ống dẫn và Socket

Một phần của tài liệu Cơ bản về hệ điều hành (Trang 88 - 91)

Nh− đã nói ở trên, tồn tại l−ợng lớn và đa dạng các dịch vụ nguyên thủy TT CTĐ với các khái niệm và giả thiết khác nhau. Khi TT đ−ợc thực hiện nhờ một tập hoàn toàn xác định các giao diện ch−ơng trình ứng dụng chuẩn (API) sẽ tạo thuận lợi cho ng−ời dùng và hiệu quả cho hệ thống. TT QT ng−ời dùng sử dụng một API độc lập với môi tr−ờng TT hạ tầng. ống dẫn (pipe) và socket là hai API TTLQT đ−ợc sử dụng rộng rãi trong cả hai môi tr−ờng UNIX và Windows.

Nh− trình bày trong đoạn 3.5.3 thì chia xẻ kênh TT về mặt lôgic là t−ơng đ−ơng với chia xẻ biến. Cả hai đều là chia xẻ đối t−ợng. Trong thực tế, kênh TT đ−ợc thi hành bởi chia xẻ l−u trữ, chẳng hạn không gian nhân, bộ nhớ, hoặc file. Trong hệ đơn xử lý hỗ trợ QT TT có thể mô phỏng kênh TT nhờ chia xẻ bộ nhớ trong không gian nhân. QT ng−ời dùng thấy đ−ợc kênh TT theo trình diễn bởi API. Chi tiết nội tại và thi hành, chẳng hạn nh− dung tích của kênh và đồng bộ truy nhập bộ nhớ, đ−ợc nhân quản lý và trong suốt với ng−ời dùng. ống dẫn đ−ợc thi hành bằng một vùng đệm dòng byte FIFO kích th−ớc cố định đ−ợc nhân duy trì. Đ−ợc hai QT TT sử dụng, phục vụ ống dẫn nh− một kết nối TT không định h−ớng mà một QT có thể ghi dữ liệu vào đuôi của ống dẫn và một QT khác có thể đọc từ đầu của nó. ống dẫn đ−ợc khởi tạo bởi lời gọi hệ thống

pipe cho hai đặc tả ống dẫn (t−ơng tự nh− đặc tả file), một để đọc và một để ghi. Kịch bản điển hình để ống dẫn giữa hai QT là vì một QT phải khởi tạo ống dẫn, fork QT khác, gắn QT cha vào đầu đọc ống dẫn và gắn đầu ghi ống dẫn tới QT con. Nh− vậy một dòng dữ liệu một chiều trở thành chuyển dịch giữa QT cha và con khi sử dụng các thao tác ghi và đọc bình th−ờng. Đặc tả ống dẫn đ−ợc các QT TT chia xẻ. Điều này ngụ ý rằng ống dẫn đ−ợc sử dụng chỉ với các QT có quan hệ với nhau (tức là, QT đ−ợc khởi tạo thông qua thao tác fork). Trong điều kiện thông th−ờng, QT đọc và ghi đ−ợc giả thiết là chạy đồng thời đối với mọi ống dẫn đ−ợc tạo. ống dẫn chỉ tồn tại trong khoảng thời gian cả hai QT đọc và ghi hoạt động. Thao tác ghi ống dẫn không kèm thao tác đọc t−ơng ứng là vô nghĩa do ống dẫn ngừng tồn tại khi QT ghi kết thúc. Dữ liệu trong ống dẫn mặc nhiên là dòng byte liên tục. Tiếp cận này đ−ợc chọn nhằm khớp với giả thiết chung cấu trúc file h−ớng byte của UNIX. Đôi khi mong muốn rằng là dòng dữ liệu cấu trúc, chẳng hạn TĐ độ dài biến đổi trong kênh và khái niệm ống dẫn có thể đ−ợc mở rộng để bao gói cả TĐ. Kiểu kênh TT này đ−ợc hiểu là dòng xếp

hàng TĐ. Dòng xếp hàng TĐ đ−ợc thi hành trong không gian bộ nhớ của nhân. Nhiều hệ thống cung cấp dòng xếp hàng TĐ nh− là một IPC API.

Với những QT không quan hệ (fork), cần định danh ống dẫn vì đặc tả ống dẫn không thể chia xẻ. Một giải pháp là thay cấu trúc dữ liệu ống dẫn nhân bằng một file FIFO

thông th−ờng. ống dẫn với tên đ−ờng đ−ợc gọi là ống dẫn có tên. Với một tên duy nhất, ống dẫn có tên có thể đ−ợc chia xẻ giữa các QT rời rạc xuyên qua các máy tính khác nhau với một hệ thống file chung. Do ống dẫn có tên là file thì các QT TT không cần đồng thời tồn tại. QT ghi có thể ghi xong dữ liệu tới một ống dẫn có tên và kết thúc tr−ớc khi một thao tác đọc file xuất hiện. ống dẫn có tên dùng ngữ nghĩa của một file thông th−ờng. Chúng đ−ợc khởi tạo bởi câu lệnh open tr−ớc khi tạo ra truy nhập tới file FIFO.

ống dẫn và ống dẫn có tên thi hành bài toán IPC giữa nhà sản xuấtkhách hàng. Trong bài toán nhà sản xuất và khách hàng, QT sản xuất (gửi) và QT khách (nhận) t−ơng tác nhau thông qua một vùng đệm chung để hoàn thành TTLQT. Vấn đề đồng bộ là loại trừ ràng buộc đối với truy nhập vùng đệm và cộng tác có điều kiện khi vùng đệm là đầy hoặc rỗng. Truy nhập vùng đệm đ−ợc chú ý nh− khoảng tới hạn mà cần đ−ợc giám sát. Điều kiện tràn hoặc rỗng của vùng đệm là t−ơng tự kết khối của gửi (sản xuất) và nhận (khách hàng) với một vùng đệm cố định. Thi hành ống dẫn và ống dẫn có tên đơn thuần bảo đảm tính nguyên tử của vùng đệm nhân chia xẻ và file FIFO đặc biệt và việc kết khối thao tác ghi và đọc khi vùng l−u trữ chia xẻ là đầy hoặc rỗng. Các byte đ−ợc ghi từ QT phức tới ống dẫn đ−ợc đảm bảo không khi nào là chen lẫn. Cẩn thận đặc biệt khi ghi dữ liệu riêng tới ống dẫn tr−ớc khi nó trở nên đầy. Hoặc toàn bộ các byte của TĐ đ−ợc ghi vào ống dẫn hoặc không.

Dùng ống dẫn định danh gặp một hạn chế từ tên miền đơn trong hệ thống file chung. Để đạt đ−ợc TT QT liên miền mà không có cấu trúc dữ liệu hoặc file có tên duy nhất và đ−ợc chia xẻ, cần có một IPC API chạy trên đỉnh của dịch vụ giao vận. Hai API TT liên QT liên miền đ−ợc dùng rộng rãi nhất là socket Berkeley và Giao diện mức giao vận hệ thống 5 (TLI). Socket Berkerley là ví dụ minh họa API TT.

Việc đặt tên kênh TT qua một miền hỗn tạp là không khả thi. Tuy nhiên, kênh TT có thể đ−ợc hình dung nh− một cặp gồm hai đầu mút TT. Socket là mút TT của kết nối TT đ−ợc quản lý bởi dịch vụ giao vận. T−ơng tự việc sử dụng ống dẫn cho phép file I/O có ngữ nghĩa đối với việc đọc từ và ghi tới ống dẫn, mô hình I/O mạng socket dựa trên I/O File quy −ớc. Trừu t−ợng hóa I/O mạng nh− I/O file làm tăng tính trong suốt truy nhập trong hệ thống. Socket đ−ợc tạo ra nhờ lời gọi hệ thống socket cho một đặc tả socket phục vụ các thao tác I/O mạng tiếp sau, bao gồm cả đọc/ghi h−ớng file và gửi/nhận đặc tr−ng TT. Lời gọi hệ thống socket cũng đ−ợc sử dụng trong nhiều giao thức mạng nh− TCP, UDP và IP. TCP là giao thức giao vận dòng thực hiện h−ớng kết nối và UDP là giao thức giao vận sơ đồ không kết nối. Chúng là hai giao thức giao vận chính. IP đ−ợc dùng để truyền dòng gói dữ liệu và là giao thức tầng mạng không kết nối trong bộ giao thức Internet. Đặc tả socket là nút TT logic (LCE: Logic Communication EndPoint) cục bộ đối với một QT; nó bắt buộc phải phù hợp với nút TT vật lý (PCE: Physic CE) để truyền dữ liệu. Nút TT vật lý đ−ợc đặc tả bởi địa chỉ máy chủ mạng và cặp cổng giao vận. Địa chỉ máy chủ mạng là toàn cục, trong khi số hiệu của giao vận đ−ợc sinh cục bộ bởi dịch vụ giao vận. Việc phù hợp một LCE với một PCE đ−ợc thi hành bằng lời gọi hệ thống bind. Hình 4.4. chỉ ra một ví dụ TT ngang hàng không kết nối dùng các lời gọi hệ thống socket, bindsendto/recvfrom. Do TT là không kết nối nên mỗi lời gọi sendto/recvfrom bắt buộc chứa đặc tả socket cục bộ và PCE từ xa.

Trong TT socket không kết nối mỗi QT ngang hàng bắt buộc phải biết PCE từ xa của nó. Có thể đ−ợc loại bỏ việc gọi tên hiển của PCE từ xa trong lời gọi gửi/nhận nếu lời gọi socket kết nối ràng buộc một LCE cục bộ với PCE từ xa của nó tr−ớc khi bắt đầu truyền dữ liệu. Sau thao tác kết nối, truyền dữ liệu có thể đơn giản là send/recv hoặc write/read không có đặc tả của PCE từ xa. Lời gọi socket kết nối thông th−ờng đ−ợc dành riêng cho TT Client/Server h−ớng kết nối. Đối với TT Client/Server, dịch vụ cần

có đ−ợc PCE rõ ràng. Một phục vụ sẽ cần TT với khách phức có PCE ch−a biết. Khách đ−a ra một lời gọi connect tới phục vụ để hẹn (cuộc hẹn), với yêu cầu khách nhờ một

accept và thiết lập có kết quả một kết nối tới khách đó. Về khái niệm, điều này t−ơng đ−ơng với thi hành cuộc hẹn Ada trong TT liên miền. Hình 4.5. minh họa TT socket

QT ngang hàng socket socket bind bind sendto/recvfrom nút TT lôgic (socket, LCE) mút truyền thông vật lý (PCE) nút TT lôgic (socket, LCE) nút truyền thông vật lý (PCE) QT ngang hàng read

Hình 4.5. Truyền thông socket Client/Server h−ớng kết nối Phục vụ write bind socket accept connect write read socket listen Khách Cuộc hẹn Yêu cầu Trả lời

Client/Server h−ớng kết nối. Trong thi hành UNIX, lời gọi socket listen đ−ợc dùng để chỉ ra phục vụ sẽ chấp nhận một kết nối và đặc tả độ dài dòng xếp hàng (bao nhiêu lời hỏi xảy ra có thể xếp hàng). Lời gọi accept hẹn với lời gọi connect đ−ợc tích lũy lại trong dòng xếp hàng listen. Một lời gọi accept sẽ kết khối nếu ch−a có một connect

giải quyết. Nếu có, nó xoá bỏ yêu cầu connect từ dòng đợi và đ−a ra một đặc tả socket mới đ−ợc dùng để TT với khách đã đ−ợc kết nối. Đặc tả socket cũ còn lại trong dịch vụ cho các yêu cầu khách khác. Trong thi hành phục vụ đồng thời, QT (luồng) con là đ−ợc phân nhánh đối với mỗi kết nối sử dụng đặc tả socket mới.

Một phần của tài liệu Cơ bản về hệ điều hành (Trang 88 - 91)