Giao tiếp giữa các tiến trình

Similar documents
Bộ môn MMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ

Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ

Cài đặt và cấu hình StarWind iscsi trên Windows. iscsi SAN là gì?

Internet Protocol. Bởi: Phạm Nguyễn Bảo Nguyên

Cụ thể những công việc mà AndroidManifest.xml thực hiện: - Đặt tên cho Java package của ứng dụng.

Khối: Cao Đẳng nghề và Trung Cấp Năm 2009

STACK và QUEUE. Lấy STACK

BÀI 1: VBA LÀ GÌ? TẠO MACRO, ỨNG DỤNG CÁC HÀM TỰ TẠO (UDF), CÀI ĐẶT ADD-INS VBA là gì?

Chương 5. Network Layer. Phần 1 - Địa chỉ IPv4. Tài liệu : Forouzan, Data Communication and Networking

TÀI LIỆU THỰC HÀNH MÔN CƠ SỞ DỮ LIỆU NÂNG CAO

Bài tập lớn số 1. Giả lập bộ định thời

ĐỌC, GHI XML VỚI C# TRONG ADO.NET --- SỬ DỤNG VISUAL STUDIO

Chương 7. Application Layer. Tài liệu : Forouzan, Data Communication and Networking

Chương 5. Network Layer 19/09/2016 1

HƯỚNG DẪN SỬ DỤNG HỆ THỐNG CẬP NHẬT CHỨNG THƯ SỐ HOTLINE:

BÀI 4 GIAO TIẾP GIỮA CÁC TIẾN TRÌNH TRONG LINUX

HƯỚNG DẪN CÁCH SỬ DỤNG WINDOWS MOVIE MAKER

HƯỚNG DẪN CÀI ĐẶT PHẦN MỀM DIỆT VIRUS AVIRA

Bài Thực hành Asp.Net - Buổi 1 - Trang: 1

BÀI TẬP THỰC HÀNH LẬP TRÌNH WINDOWS C#

Nhấn nút New để tạo 1 biến mới Trang 17

Entity Framework (EF)

Khoa KH & KTMT Bộ môn Kỹ Thuật Máy Tính

Tài liệu hướng dẫn: Stored Procedure

HƯỚNG DẪN SỬ DỤNG PLESK PANEL

Chương 6. Transport Layer. Tài liệu : Forouzan, Data Communication and Networking

SIEMENS INDUSTRIAL NETWORKS

GIẢI THUẬT ĐỊNH TUYẾN (ROUTING ALGORITHM)

LÂ P TRI NH WEB ASP.NET

SIMULATE AND CONTROL ROBOT

Tình huống 1: PPPoE với Username và Password

Hướng dẫn cài đặt FPT

CẤU TRÚC DỮ LIỆU NÂNG CAO

HƯỚNG DẪN SỬ DỤNG ĐẦU GHI H.264 DVR VISION VS (4CH - 8CH - 16CH)

BELGIUM ONLINE APPOINTMENT

PHÁT TRIỂN ỨNG DỤNG WEB

Nội dung chính của chương. Các công nghệ đĩa cứng Cấu tạo vật lý của đĩa cứng Cấu tạo logic của đĩa cứng Cài đặt đĩa cứng như thế nào?

Module2: Lập trình Shell và C Quản lý tiến trình A. TÓM TẮT LÝ THUYẾT:

Giáo trình này được biên dịch theo sách hướng dẫn của Sun Light. Vì là hướng dẫn kỹ thuật, trong này những thuật ngữ kỹ thuật bằng tiếng Anh tôi chỉ

Dọn "rác" Windows 7 vào dịp cuối năm

NHẬP MÔN LẬP TRÌNH KHOA HỌC DỮ LIỆU. Bài 10: Thư viện Pandas (2)

Exceptions. Outline 7/31/2012. Exceptions. Exception handling is an important aspect of objectoriented. Chapter 10 focuses on:

Online Appointment System will work better with below conditions/ Hệ thống đặt hẹn online sẽ hoạt động tốt hơn với điều kiện sau đây:

Kỹ thuật thu nhỏ đối tượng trong Design (Layout)

Mô hình dữ liệu quan hệ (Relational data model)

CHƯƠNG 2: CÁC ĐẶC ĐIỂM VỀ MÔI TRƯỜNG PHÁT TRIỂN (IDE)

Tạo repository mới. The working tree. The staging index. Lệnh git init tạo một repository loại git. tại thư mục hiện tại: $ git init

HTML DOM - Forms. MSc. nguyenhominhduc

TỔNG QUAN VỀ.NET VÀ C#

Bài 10: Cấu trúc dữ liệu

Bài 13: C++11. EE3490: Kỹ thuật lập trình HK1 2017/2018 TS. Đào Trung Kiên ĐH Bách khoa Hà Nội

Ôn tập Thiết bị mạng và truyền thông DH07TT - Lưu hành nội bộ (không sao chép dưới mọi hình thức)

B5: Time to coding. Tới thư mục src/example.java và thay đổi nội dung file như sau: Mã: package at.exam;

Tạo Project với MPLAB

BÀI THỰC HÀNH SỐ 1. Quản trị tập tin: 1/ Tạo các thư mục sau: Bài tập thực hành linux Linuxlab. bt1 bt11 bt111. bt121. bt12. bh1 bh11 bh111.

biến Global có thể được áp dụng cho tất cả các extension trong tất cả các context trong Dialplan.

Cập nhật ResultSet trong JDBC

LAB IP SLA Bài 1. Bùi Quốc Kỳ ***

BÀI 6a LẬP TRÌNH ĐA TUYẾN (MULTI THREAD)

Đa ngôn ngữ (Internationalization) trong Servlet

Hệ điều hành Bài tập tuần 7_ Chúng ta làm quen một số lệnh thao tác với hệ thống file trong Linux :

Bài tập căn bản Visual Basic.Net Vòng lặp. txtn. txtketqua. btntinh. txtn. txtketqua. btntinh. Trang 1

Phần 1: Hướng dẫn sử dụng PictureBox tạo Slide Show

BÀI 6 LÀM VIỆC VỚI THÀNH PHẦN MỞ RỘNG CỦA CSS3

LẬP TRÌNH WINDOWS FORM VỚI CÁC CONTROL NÂNG CAO (Các control trình bày dữ liệu dưới dạng danh sách)

Bài 10. Cấu trúc liên nối. khác nhau được gọi là cấu trúc liên nối. nhu cầu trao đổi giữa các module.

TÀI LIỆU HƯỚNG DẪN SỬ DỤNG HOSTING PLESK PANEL

Bài thực hành số 2 QUYỀN và ROLE

KIẾN TRÚC MÁY TÍNH. Giảng viên: ThS. Phan Thanh Toàn. v

Khối: Cao Đẳng nghề và Trung Cấp Năm 2009

Bài 7: Các cấu trúc điều khiển

LINQ TO SQL & ASP.NET

Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MINICHAT. Bài giảng 3. Trang1. Khoa Khoa Học Và Kỹ Thuật Máy Tính

Chapter 4 Menus, Functions And Common Dialog

I. Hướng Dẫn Đăng Nhập:

NHÚNG. Vi ñiều khiển BM Kỹ Thuật ðiện Tử - ðh Bách Khoa TP.HCM 2

Tính kế thừa-2. Bởi: Thanh Hiền Vũ. Định nghĩa lại các thành viên lớp cơ sở trong một lớp dẫn xuất:

Lab01: M V C Lưu ý: Để thực hành, các bạn phải cài Visual Studio 2013 trở lên mới hỗ trợ MVC5.

Lecture 12. Trees (1/2) Nội dung bài học:

HỢP ĐỒNG MUA BÁN HÀNG HÓA QUỐC TẾ GV: NGUYỄN THỊ BÍCH PHƯỢNG

GV: Phạm Đình Sắc or

Time Picker trong Android

Khoa Công Nghệ Thông Tin Trường Đại Học Cần Thơ. Những hỗ trợ tiên tiến khác của SQL. Đỗ Thanh Nghị

MỤC LỤC. Giáo trình Thiết kế web Trang 1

Tìm hiểu Group Policy Object và các ví dụ

BẢO MẬT TRONG SQL SERVER

Các kiểu định địa chỉ họ MSC-51

MA NG MA Y TI NH (Computer Networks)

2.4. GIAO THỨC MQTT Các khái niệm cơ bản MQTT được phát triển bởi IBM và Eurotech, phiên bản mới nhất là MQTT 3.1 MQTT (Giao vận tầm xa) là

HƢỚNG DẪN TRIỂN KHAI KASPERSKY - MOBILE DEVICE MANAGEMENT

BÀI GIẢNG CHƯƠNG 3 GIAO TIẾP KẾT NỐI SỐ LIỆU

Câu 1: (2 điểm) So sách giữa 2 đối tượng Response và Request. Cho ví dụ minh hoạ.

Môn Học: Cơ Sở Dữ Liệu 2. Chương 3 LẤY DỮ LIỆU TỪ NHIỀU NGUỒN

Qu n ả tr h ố g t p ậ tin

HƯỚNG DẪN QUẢN TRỊ HỆ THỐNG

Bài 6: Xuất nhập (input/output) EE3490: Kỹ thuật lập trình HK1 2017/2018 TS. Đào Trung Kiên ĐH Bách khoa Hà Nội

Phần 2. SỬ DỤNG POWERPOINT ĐỂ CHUẨN BỊ NỘI DUNG TRÌNH BÀY

Kích hoạt phương thức xa (RMI- Remote Method Invocation )

LỖI LÚC THỰC THI và QUÁ TRÌNH GOM RÁC

B3: Bên khung Package Explore bên trái đi tới thư mục res, bạn sẽ thấy có 3 thư mục con:

Transcription:

Hệ điều hành Bài tập Tuần 3 1 Giao tiếp giữa các tiến trình Bài tập 1 : Một tiến trình có thể gửi tới một tiến trình khác một Signal. Các Signal phần lớn được gửi đi từ kernel khi một sự kiện xảy ra, ví dụ : xuất hiện một ngoại lệ hardware, xuất hiện một sự kiện software, người dùng nhấn phím đặc biệt Các tiến trình cũng có thể dùng Signal như một cách để giao tiếp với nhau. Khi một sự kiện phát sinh, một Signal tương ứng được gửi đi. Tiến trình nhận Signal sẽ thực hiện hành động đáp ứng nhất định (default). Mỗi Signal được gán một số nguyên duy nhất và một tên (symbolic name). Bảng sau liệt kê một số Signal trong Linux.(tham khảo man 7 signal) Trong Linux, kill là một lệnh được dùng để gửi signal tới các tiến trình: Xem danh sách các Signal : kill -l kill -l SIGTERM Gửi signal SIGTERM để kết thúc một tiến trình đang chạy : // tạo một tiến trình đang chạy nano // gửi signal TERM đế kết thúc tiến trình (*)

Hệ điều hành Bài tập Tuần 3 2 kill -SIGTERM <PID_ls> // xem thông tin về tiến trình ps a Đọc man kill, cho biết gọi kill bằng cách khác tương đương với (*)? Thực hiện tương tự để kết thúc một tiến trình bằng signal SIGKILL? Phân biệt 2 signal SIGTERM và SIGKILL? Thực hiện sử dụng 2 signal : SIGSTOP, SIGCONT để tạm ngưng rồi resume tiến trình? Tìm hiểu lệnh trong Windows tương tự kill? Bài tập 2 : Kill() system call được sử dụng để một tiến trình gửi một signal tới tiến trình khác. Khi một tiến trình nhận được một signal, thông thường nó thực hiện đáp ứng theo default. Ta có thể hàm signal() để thay đổi hành vi đáp ứng của tiến trình. int kill(pid_t pid, int sig); Pid : id của tiến trình nhận signal. Pid cũng có thể mang một số giá trị đặc biệt. Sig : signal gửi cho tiến trình ( dạng số ) Returns 0 on success, or 1 on error ( tham khảo man 2 kill ) sighandler_t signal(int signum, sighandler_t handler); signum: là số hiệu signal mà ta 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 mới (signal-handler) do người dùng tự định nghĩa Returns previous signal disposition on success, or SIG_ERR on error ( tham khảo man signal )

Hệ điều hành Bài tập Tuần 3 3 1. Hai chương trình sau đây sử dụng signal() chờ nhận signal SIGINT (phím ctrl-c). Chương trình thứ nhất (vd1) : thực thi catch khi nhận signal. Chương trình thứ hai (vd2) bỏ qua signal này. Đọc hiểu chương trình, thực thi và xem kết quả? /*vd1 : dap ung bang ham catch */ #include <stdio.h> #include <signal.h> #include <unistd.h> #include <stdlib.h> void catch(int sig) { printf(" I received signal %d \n ", sig ); int main() { if (signal(sigint, catch) == SIG_ERR) { perror("sigint\n"); exit(3); while (1) sleep(1); return 0; /*vd2 : bo qua SIGINT */ #include <stdio.h> #include <signal.h> #include <unistd.h> #include <stdlib.h> int main() { if (signal(sigint, SIG_IGN) == SIG_ERR) { perror("sigint\n"); exit(3); while (1) sleep(1); return 0;

Hệ điều hành Bài tập Tuần 3 4 2. Đọc hiểu chương trình sau, thực thi và xem kết quả? /* In alarm.c, the first function, ding, simulates an alarm clock.*/ #include <signal.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> static int alarm_fired = 0; void ding(int sig) { alarm_fired = 1; /*Func for SIGALARM*/ /* In main, we tell the child process to wait for five seconds before sending a SIGALRM signal to its parent. */ int main() { pid_t pid; printf("alarm application starting\n"); pid = fork(); switch(pid) { case -1: perror("fork failed"); exit(1); case 0: sleep(5); kill(getppid(), SIGALRM); /*Get signal & send it to parent*/ exit(0); /* The parent process arranges to catch SIGALRM with a call to signal and then waits for the inevitable. */ printf("waiting for alarm to go off\n"); signal(sigalrm, ding); pause(); if (alarm_fired) printf("ding!\n"); printf("done\n"); exit(0); /* end */

Hệ điều hành Bài tập Tuần 3 5 Bài tập 3: 1. Viết chương trình nhận các signal ( SIGINT, SIGTERM, SIGKILL ). Khi nhận được signal, tiến trình hiển thi thông báo đã nhận được signal xx. 2. Khi tiến trình con thay đổi trạng thái - terminate, stop hay resume, kernel sẽ gửi tới tiến trình cha signal SIGCHLD. Hãy viết chương trình để tiến trình cha khi nhận được SIGCHLD thì thực thi wait(), tránh tình trạng zombie process. Bài tập 4: 1. Các lời gọi hệ thống khi thực hiện nhập/xuất đều tham chiếu đến các file đang mở thông qua file descriptor (một số nguyên dương). File có thể là pipes, FIFOs, sockets, terminals, devices, và regular files. Chương trình shell, sử dụng terminal để nhập/xuất dữ liệu, thường tham chiếu tới 3 file descriptor : 0 (standard input), 1 (standard output) và 2 (standard error). Khi một chương trình được gọi từ shell, nó cũng có các file descriptor này. Trong Linux, có thể xem tập các file descriptor của 1 tiến trình bằng cách đọc : /proc/<pid>/fd. Thực hiện xem các file descriptor của 1 tiến trình? - Trên terminal thứ nhất, thực thi lệnh : more /var/log/syslog - Trên terminal thứ hai: o xem pid của tiến trình more o xem các file descriptor của tiến trình này : ls -l /proc/<pid>/fd 2. Các tiến trình có thể chia sẽ dữ liệu với nhau bằng cách sử dụng pipe. pipe là một kênh truyền dòng bytes 1 chiều giữa các tiến trình. Thông qua pipe, một tiến trình xuất dữ liệu vào pipe, và một tiến trình đọc dữ liệu từ pipe. Các Linux shell đều hỗ trợ pipe thông qua toán tử ls / sort cat /etc/passwd more

Hệ điều hành Bài tập Tuần 3 6 Bài tập 5: Hàm pipe() tạo một pipe, đồng thời tạo 2 file descriptor mới cho tiến trình : một file descriptor gắn với đầu đọc của pipe, và một file descriptor gắn với đầu ghi của pipe. #include<unistd.h> int pipe(int filedes[2]); // filedes[0] gắn với đầu đọc của pipe và filedes[1] gắn với đầu ghi của pipe Có thể sử dụng read() và write() system calls để thực hiện đọc/ghi vào pipe. Pipe() được dùng để giao tiếp giữa tiến trình cha và tiến trình con. Lời gọi pipe() sẽ đặt ngay trên fork(). Khi tiến trình con được tạo bởi fork(), nó sẽ có các file descriptor giống hệt các file descriptor của tiến trình cha. Lúc này, cả 2 tiến trình cha và con đều có các file descriptor tham chiếu tới cùng một pipe. Close() được dùng để đóng một file descriptor file descriptor không còn tham chiếu tới bất kz pipe nào và không thể sử dụng lại. Một tiến trình chỉ ghi, sẽ dùng close() đóng read descriptor trước khi ghi vào pipe. Tương tự, một tiến trình chỉ đọc, sẽ dùng close() đóng write descriptor trước khi đọc pipe. Khi pipe không còn có bất kz file descriptor nào tham chiếu tới, pipe sẽ được hủy. (Tham khảo man 7 pipe, man 2 pipe, man read, man 2 write, man close) Chương trình sau minh họa sử dụng pipe để giao tiếp giữa tiến trình cha và tiến trình con. Đọc hiểu, thực thi và xem kết quả của chương trình? /*giao tiếp giữa tiến trình cha và tiến trình con */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(int argc, char *argv[]) { int fd[2]; int val = 0; pipe(fd); // create pipe descriptors if (fork()!= 0) { // parent: writing only, so close read-descriptor. close(fd[0]); // send the value on the write-descriptor. val = 100;

Hệ điều hành Bài tập Tuần 3 7 write(fd[1], &val, sizeof(val)); printf("parent(%d) send value: %d\n", getpid(), val); // close the write descriptor close(fd[1]); wait(null); else { // child: reading only, so close the write-descriptor close(fd[1]); // now read the data (will block) read(fd[0], &val, sizeof(val)); printf("child(%d) received value: %d\n", getpid(), val); // close the read-descriptor close(fd[0]); exit(0);

Hệ điều hành Bài tập Tuần 3 8 Bài tập 6 : Sử dụng pipe để giao tiếp giữa process cha và nhiều process con. Đọc hiểu, thực thi và xem kết quả của chương trình sau?