Bài giảng Lập trình hệ nhúng - Chương 4: Kỹ thuật lập trình nâng cao cung cấp các kiến thức giúp sinh viên có thể nắm được khái niệm tiến trình (process), quan hệ giữa các tiến trình; trình bày được cơ chế sử dụng signal để giao tiếp, giữa các tiến trình; lập trình sử dụng kỹ thuật đa tiến trình; trình bày khái niệm luồng; lập trình ứng dụng đa luồng. Mời các bạn cùng tham khảo nội dung chi tiết.
Chương Kỹ thuật lập trình nâng cao Lập trình nhúng ARM-Linux 124 Mục tiêu chương Sau kết thúc chương n{y, sinh viên • Nắm kh|i niệm tiến trình (process), quan hệ c|c tiến trình • Trình b{y chế sử dụng signal để giao tiếp c|c tiến trình • Lập trình sử dụng kỹ thuật đa tiến trình • Trình b{y kh|i niệm luồng • Lập trình ứng dụng đa luồng Lập trình nhúng ARM-Linux 125 Nội dung 4.1 Tiến trình (process) 4.2 Cơ chế sử dụng signal 4.3 Lập trình giao tiếp đa tiến trình 4.4 Luồng (thread) 4.5 Lập trình ứng dụng đa luồng Lập trình nhúng ARM-Linux 126 4.1 Tiến trình (Process) Kh|i niệm tiến trình Lập trình đa tiến trình Lập trình nhúng ARM-Linux 127 Khái niệm tiến trình Tiến trình tạo ta thực thi chương trình Đa tiến trình cho phép nhiều chương trình thực thi v{ chia sẻ liệu với C|c tham số tiến trình • PID (Process ID): số hiệu tiến trình • PPID (Parent Process ID): số hiệu tiến trình cha • Command: c}u lệnh gọi để thực thi tiến trình ls –e –o pid,ppid,command Lập trình nhúng ARM-Linux 128 PID, PPID Lấy PID: sử dụng hàm getpid() Lấy PPID: sử dụng hàm getppid() Hàm getpid() getppid() trả giá trị kiểu pid_t (bản chất kiểu int) Lập trình nhúng ARM-Linux 129 Dừng tiến trình C|ch 1: Sử dụng tổ hợp phím Ctrl + C C|ch 2: Sử dụng shell command kill PID Lập trình nhúng ARM-Linux 130 Tạo tiến trình Cách 1: sử dụng h{m system Lập trình nhúng ARM-Linux 131 Tạo tiến trình Cách 2: sử dụng h{m fork v{ exec Lập trình nhúng ARM-Linux 132 4.2 Cơ chế sử dụng signal Signal l{ chế cho phép giao tiếp c|c tiến trình Signal l{ chế không đồng Khi tiến trình nhận signal, tiến trình phải xử lý signal Linux hỗ trợ 32 SIGNAL Lập trình nhúng ARM-Linux 133 Gửi SIGNAL tới process Cách 1: sử dụng shell command kill [-SIGNAL_TYPE] PID Cách 2: sử dụng h{m kill chương trình, cho phép process n{y gửi signal tới process kh|c kill(PID, SIGNAL_TYPE) Lập trình nhúng ARM-Linux 135 4.3 Lập trình giao tiếp đa tiến trình Cơ chế: • Tiến trình tạo c|c tiến trình sử dụng lệnh fork v{ exec • Sử dụng chế signal để trao đổi tín hiệu c|c tiến trình Lập trình nhúng ARM-Linux 136 Ví dụ Bắt v{ xử lý signal gửi tới tiến trình (SIGTERM SIGINT) Lập trình nhúng ARM-Linux 137 killsignal.c Lập trình nhúng ARM-Linux 138 Ví dụ: killsignal.c (tiếp) Lập trình nhúng ARM-Linux 139 Demo Lập trình nhúng ARM-Linux 140 4.4 Luồng (thread) Một chương trình mặc định chạy luồng -> luồng Luồng tạo c|c luồng kh|c, c|c luồng chạy đồng thời -> tăng tốc chương trình C|c luồng chia sẻ không gian nhớ, truy xuất file v{ tài nguyên khác Tham số luồng: • thread ID: số hiệu luồng (kiểu liệu pthread_t) Lập trình nhúng ARM-Linux 141 4.5 Lập trình xử lý đa luồng Tạo luồng Truyền tham số cho luồng Nhận gi| trị trả từ luồng Tắt luồng Lập trình nhúng ARM-Linux 142 Tạo luồng Khai b|o thư viện: pthread.h H{m tạo luồng: pthread_create thread: thread id attr: thuộc tính luồng, mặc định để NULL start_routine: hàm thực thi luồng arg: tham số truyền cho luồng Biên dịch chương trình: gcc –o multithread multithread.c -pthread Lập trình nhúng ARM-Linux 143 Mã nguồn tạo luồng Lập trình nhúng ARM-Linux 144 Truyền tham số cho luồng Khai báo cấu trúc liệu chứa liệu cần truyền cho luồng Ví dụ: struct arg { //Ky tu can in char character; //So lan can in int count; }; Truyền liệu cho luồng tạo luồng qua tham số arg Chương trình thực thi luồng nhận tham số xử lý Lập trình nhúng ARM-Linux 145 Mã nguồn truyền tham số cho luồng Lập trình nhúng ARM-Linux 146 Tắt luồng Sử dụng h{m pthread_cancel: thread: nhận tham số thread id luồng muốn tắt Lập trình nhúng ARM-Linux 147 Mã nguồn tắt luồng Lập trình nhúng ARM-Linux 148 Thảo luận Lập trình nhúng ARM-Linux 149 ... tiến trình 4. 4 Luồng (thread) 4. 5 Lập trình ứng dụng đa luồng Lập trình nhúng ARM-Linux 126 4. 1 Tiến trình (Process) Kh|i niệm tiến trình Lập trình đa tiến trình Lập trình nhúng ARM-Linux 127... tiến trình • Trình b{y kh|i niệm luồng • Lập trình ứng dụng đa luồng Lập trình nhúng ARM-Linux 125 Nội dung 4. 1 Tiến trình (process) 4. 2 Cơ chế sử dụng signal 4. 3 Lập trình giao tiếp đa tiến trình. .. (tiếp) Lập trình nhúng ARM-Linux 139 Demo Lập trình nhúng ARM-Linux 140 4. 4 Luồng (thread) Một chương trình mặc định chạy luồng -> luồng Luồng tạo c|c luồng kh|c, c|c luồng chạy đồng thời ->