Danh mục

Bài giảng Lập trình IPC và thread - ĐH Bách khoa TP.HCM

Số trang: 60      Loại file: pdf      Dung lượng: 1.95 MB      Lượt xem: 2      Lượt tải: 0    
Thư Viện Số

Hỗ trợ phí lưu trữ khi tải xuống: 29,000 VND Tải xuống file đầy đủ (60 trang) 0

Báo xấu

Xem trước 6 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Bài giảng Lập trình IPC và thread bao gồm những nội dung về lập trình trên Linux; giới thiệu về IPC; giao tiếp thông qua PIPE; tác vụ trên pipe; hai loại pipe; dùng pipe để tái định hướng; lập trình thread; lập trình POSIX pthread; giải quyết tranh chấp trên POSIX thread.
Nội dung trích xuất từ tài liệu:
Bài giảng Lập trình IPC và thread - ĐH Bách khoa TP.HCMLập trình IPC và thread Bộ môn Hệ thống và Mạng máy tính Khoa Khoa học và kỹ thuật máy tính Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 1Lập trình trên Linux Lập trình IPC  Dùng pipe  Dùng semaphore Lập trình thread  Cơ bản về lập trình POSIX pthread  Giải quyết tranh chấp trên POSIX thread Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 2Lập trình trên Linux Lập trình IPC  Dùng pipe  Dùng semaphore Lập trình thread  Cơ bản về lập trình POSIX pthread  Giải quyết tranh chấp trên POSIX thread Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 3Giới thiệu về IPC Mục tiêu của IPC  IPC: Inter-Process Communication  Cho phép phối hợp hoạt động giữa các quá trình trong hệ thống  Giải quyết đụng độ trên vùng tranh chấp  Truyền thông điệp từ quá trình này đến các quá trình khác  Chia sẻ thông tin giữa các quá trình với nhau Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 4Giao tiếp và đồng bộ Communication Synchronization Truyền dữ liệu Giải quyết tranh chấp Chia sẻ thông tin Đảm bảo thứ tự xử lý Các cơ chế: Các cơ chế: Pipe Lock file Signal Semaphore Message queue Mutex (pthread) Shared memory Socket RPC/RMI Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 5Lập trình trên Linux Lập trình IPC  Dùng pipe  Dùng semaphore Lập trình thread bằng pthread Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 6Giao tiếp thông qua PIPE Là kênh truyền dữ liệu giữa các process với nhau theo dạng FIFO Writer Reader P1 P2 Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 7Các tác vụ trên pipe Write: #include ssize_t write(int fd, const void *buf, size_t count) Read: #include ssize_t read(int fd, const void *buf, size_t count) Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 8Hai loại pipe Unnamed pipe  có ý nghĩa cục bộ  chỉ dành cho các process có quan hệ bố con với nhau Named pipe (còn gọi là FIFO)  có ý nghĩa toàn cục  có thể sử dụng cho các process không liên quan bố con Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 9Unnamed pipe Tạo unnamed pipe: #include int pipe(int filedes[2]); Kết quả  Thành công, kết quả thực thi hàm pipe() là 0, có hai file descriptor tương ứng sẽ được trả về trong filedes[0], filedes[1]  Thất bại: hàm pipe() trả về -1, mã lỗi trong biến ngoại errno Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 10Unnamed pipe (2) filedes[1] -----> filedes[0] P0 P1 filedes[0] ----- filedes[1] Duplex  Linux: unidirectional/half-duplex, i.e. filedes[0] chỉ được dùng để đọc còn filedes[1] chỉ được dùng để ghi dữ liệu  Solaris: full-duplex, i.e. nếu ghi vào filedes[0], thì filedes[1] được dùng để đọc và ngược lại Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 11#include Dịch, thực thi#include #include $gcc unpipe.c -o unpipe#include int main() { $./unpipe int fp[2]; Input: I Love Penguin char s1[BUFSIZ], s2[BUFSIZ]; From pipe> I Love Penguin pipe(fp); if (fork()==0) { /* Child Write */ $ printf(\nInput: ); fgets(s1,BUFSIZ,stdin); s1[strlen(s1)]=0; close(fp[0]); write(fp[1],s1,strlen(s1)+1); } else { /* Parent Read */ close(fp[1]); read(fp[0],s2,BUFSIZ); printf(\nFrom pipe> %s\n, s2); } return 0; Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 12}Dùng pipe để tái định hướng Pipe có thể được dùng để kết nối các lệnh với nhau (do chương trình shell thực hiện)  Ví dụ: $ ps -ef | grep a01 | sort $ ls | more Đối với chương trình người dùng, có thể dùng một trong hai system call sau kết hợp với pipe đểthực hiện:  dup()  dup2() ps -ef | grep $USER | ... cmd1 cmd2 . . . cmdN Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 13dup()#include int dup(int oldfd); stdin 0 stdin 0 dup(1) stdout 1 stdout 1 stderr 2 stderr 2available 3 3 4 available 4 Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 14dup2()#include int dup2(int oldfd, int newfd); stdin 0 stdin 0 dup2(1,4) stdout 1 stdout 1 stderr 2 stderr 2available 3 3 4 ava ...

Tài liệu được xem nhiều: