intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

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

Chia sẻ: Lavie Lavie | Ngày: | Loại File: PDF | Số trang:23

61
lượt xem
7
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Bài giảng Lập trình IPC bao gồm những nội dung về lập trình trên Linux; một số signals thường gặp; các nguồn tạo signal; lập trình với signal; shared memory; thao tác với shared memory; gắn shared memory; gỡ shared memory;... Mời các bạn tham khảo.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Lập trình IPC - ĐH Bách Khoa TP.HCM

  1. Lập trình IPC 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 1
  2. Lập trình trên Linux  Lập trình IPC  Dùng signal  Dùng shared memories Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 2
  3. Lập trình trên Linux  Lập trình IPC  Dùng signal  Dùng shared memories Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 3
  4. Signals  Dựa vào các sự kiện bất đồng bộ.  Kernel có nhiệm vụ gửi (deliver) sự kiện đến process  Các process có thể tự thiết lập các hành vi ứng xử tương ứng với sự kiện nhận được. signals (events) Process Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 4
  5. Một số signals thường gặp  SIGKILL  SIGSTOP  SIGPIPE  SIGINT  SIGQUIT  … Tham khảo thêm dùng các lệnh sau $ man 7 signal hoặc $ info signal $ kill -l $ more /usr/include/bits/signum.h Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 5
  6. Các nguồn tạo signal  Từ kernel  Khi xảy ra một số điều kiện về phần cứng (SIGSEGV, SIGFPE)  Khi xảy ra điều kiện phần mềm (SIGIO)  Từ user  Tổ hợp phím: Ctrl+C, Ctrl+Z, Ctrl+\  Khi user dùng lệnh kill  Từ một process thực hiện system call kill() #include #include int kill(pid_t pid, int sig);  Từ lời gọi system call alarm() → tạo ra SIGALRM Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 6
  7. Lập trình với signal #include typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler); int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); int sighold(int sig); int sigrelse(int sig); int sigignore(int sig); int sigpause(int sig); Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 7
  8. Lập trình với signal (2) sighandler_t signal(int signum, sighandler_t handler);  Thay đổi hành vi của process đối với signal  Tham số của hàm signal()  signum: là số hiệu signal mà bạn muốn thay đổi hành vi (trừ SIGKILL hay SIGSTOP) - dạng số hay symbolic  handler: hành vi mới đối với signal, các giá trị có thể là:  SIG_DFL: thiết lập lại hành vi về mặc định (default)  SIG_IGN: lờ đi (ignore) signal tương ứng  Tham chiếu đến hàm xử lý sự kiện (signal-handler) mới do người dùng tự định nghĩa Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 8
  9. Dịch vàthực thi $gcc sigign.c –o sigign Lờ đi signal $./sigign ^C #include ^C #include #include ^C #include int main() { if (signal(SIGINT, SIG_IGN)==SIG_ERR) { perror("SIGINT\n"); exit(3); } while (1); return 0; } Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 9
  10. Định nghĩa hành vi mới #include Dịch vàthực thi #include #include $gcc sig2.c -o sig2 #include void newhandler(int sig) { $./sig2 printf("\nI received signal %d",sig); ^C } int main() { I received signal 2 int i=0; ^C if (signal(SIGINT,newhandler)==SIG_ERR){ perror("\nSIGINT"); I received signal 2 exit(3); ^C } while (1); I received signal 2 return 0; } Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 10
  11. Lập trình trên Linux  Lập trình IPC  Dùng signal  Dùng shared memories Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 11
  12. Shared memory xy Process 1 Process 1 Process 2 Process 2 xy xy Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 12
  13. Shared memory  Có thể theo dõi trạng thái bằng lệnh ipcs, ipcs -a, ipcs -m  Loại bỏ một shared memory bằng lệnh ipcrm shm shm_id, ipcrm -m shm_id $ipcs ------Shared Memory Segments -------- key shmid owner perms bytes nattch status 0x00000000 65536 root 644 110592 11 dest ------Semaphore Arrays -------- key semid owner perms nsems status ------Message Queues -------- key msqid owner perms used-bytes messages Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 13
  14. Shared memory  Cho phép nhiều process dùng chung một vùng bộnhớ  Kích thước tối thiểu/tối đa của vùng là 1byte/4MB  Số vùng nhớ chia sẻ tối đa trong toàn hệ thống: 4096  Cách sử dụng  Vùng nhớ chia sẻ phải được tạo ra trước  Process phải gắn vùng nhớ chia sẻ vào không gian địa chỉ của mình trước khi sử dụng.  Sau khi dùng xong có thể gỡ vùng nhớ chia sẻ ra khỏi không gian địa chỉ của process Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 14
  15. Thao tác với shared memory  Tạo shared memory shmget()  Lấy hoặc thay đổi thuộc tính của shared memory shmctl()  Gắn shared memory vào address space của process shmat()  Gỡ shared memory khỏi không gian địa chỉ của process shmdt() Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 15
  16. Tạo shared memory segment #include #include #include int shmget(key_t key,int size,int shmflg);  key: key tương ứng với shared memory  size: kích thước (tính theo đơn vị byte)  shmflg: tương tự như semflg của semget(), nhưng không có IPC_EXCL  Ví dụ shm_id = shmget(123, 4096, IPC_CREAT | 0660) Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 16
  17. Gắn shared memory #include #include #include void *shmat(int shmid,void *shmaddr,int shmflg);  shmid: shared memory ID trả về từ hàm shmget()  shmaddr: địa chỉ nơi gắn vùng nhớ chia sẻ  shmflg: SHM_RDONLY (read-only) hoặc 0 Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 17
  18. Gỡ shared memory #include #include #include int shmdt(void *shmaddr);  shmaddr: địa chỉ nơi gắn vùng nhớ chia sẻ (chính là kết quả trả về từ hàm shmat()) Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 18
  19. Lấy thông tin và thay đổi thuộc tính #include #include #include int shmctl(int shmid,int cmd,struct shmid_ds *buf);  shmid: shared memory ID trả về từ hàm shmget().  cmd: IPC_STAT, IPC_SET and IPC_RMID Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 19
  20. Ví dụ  Tạo shared memory 128 bytes  Hai process dùng chung shared memory  Process thứ nhất ghi 2 integer vào shared memory  Process thứ hai đọc từ shared meomory và ghi tổng hai số vào shared memory  Process thứ nhất đọc tổng và hiển thị ra Khoa KH&KTMT - Đại học Bách Khoa Tp. HCM 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2