21
BÁO CÁO ĐỒ ÁN NGUYÊN LÝ HỆ ĐIỀU HÀNH Đề tài: Giao tiếp giữa các tiến trình bằng đường ống pipe. SVTH : Đậu Thị Huyền Lớp : 11T1 Nhóm : 12A GVHD : Mai Văn Hà

Báo cáo đồ án

Embed Size (px)

DESCRIPTION

đồ án mạng

Citation preview

Page 1: Báo cáo đồ án

BÁO CÁO ĐỒ ÁNNGUYÊN LÝ HỆ ĐIỀU HÀNH

Đề tài: Giao tiếp giữa các tiến trình bằng đường ống pipe.

SVTH : Đậu Thị Huyền

Lớp : 11T1

Nhóm : 12A

GVHD : Mai Văn Hà

Page 2: Báo cáo đồ án

GIỚI THIỆU

TỔNG QUAN ĐỀ TÀI 1

CƠ SỞ LÝ THUYẾT 2

CÀI ĐẶT THUẬT TOÁN VÀ TRIỂN KHAI 3

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 4

Page 3: Báo cáo đồ án

TỔNG QUAN ĐỀ TÀI

1.1 Bối cảnh đề tài: Việc giao tiếp giữa các tiến trình trên linux có thể

giúp ta hiểu rõ hơn cơ chế xử lý, và trao đổi dữ liệu giữa các tiến trình trong hệ điều hành linux. Đặc biệt là cơ chế pipe.

1.2 Mục tiêu đề tài: Nghiên cứu đề tài này sẽ có thể cho ta hiểu được thế

nào là pipe và cơ chế hoạt động của nó.1.3 Hướng giải quyết:

Khi một pipe được thiết lập giữa hai tiến trình, một tiến trình sẽ ghi dữ liệu vào pipe còn tiến trình kia đọc dữ liệu từ pipe.

Tạo hai tiến trình cha và con, để hai tiến trình này giao tiếp với nhau ta phải tạo một đường ống pipe.

Page 4: Báo cáo đồ án

TỔNG QUAN ĐỀ TÀI

2.1Giới thiệu về hệ điều hành Linux

2.1.1.Lịch sử ra đời hệ điều hành Linux

Năm 1991 tại Phần Lan, Linux B. Torvalds lúc đó là sinh viên ở trường Đại học tổng hợp Hensinki đã dùng một máy tính cá nhân có trang bị bộ xử lí 386 để nghiên cứu cách làm việc của nó.

Ngày nay, Linux hoàn toàn là một hệ điều hành Unix. Nó ổn định và liên tục phát triển.

Page 5: Báo cáo đồ án

CƠ SỞ LÝ THUYẾT

2.1.2 Các chức năng của hệ điều hành Linux Đa xử lí. Đa nền. Hỗ trợ truyền thông giao xử lí ( Pipes , IPC ,

Sockets ). Quản lí các thông điệp điều khiển khác nhau. Hệ thống quản lí thiết bị đầu cuối tuân thủ theo tiêu

chuẩn POSIX. Hỗ trợ một dải rộng các thiết bị ngoại vi. Buffer cache. Hệ thống quản lí bộ nhớ trang yêu cầu. Các thư viện động và dùng chung. Thiết bị của TCP/IP và các giao thức mạng khác.

Page 6: Báo cáo đồ án

CƠ SỞ LÝ THUYẾT

2.2 Tiến trình trong Linux:2.2.1 Tổng quan về tiến trình:

Tiến trình là một chương trình đang xử lý, sở hữu một con trỏ lệnh, tập các thanh ghi và các biến.

Để hoàn thành tác vụ của mình, một tiến trình có thể cần đến một số tài nguyên – như CPU, bộ nhớ chính, các tập tin và thiết bị nhập/xuất.

Page 7: Báo cáo đồ án

CƠ SỞ LÝ THUYẾT

Sơ đồ trạng thái các tiến trình trong Linux:

Page 8: Báo cáo đồ án

CƠ SỞ LÝ THUYẾT 2.2.2. Cấu trúc tiến trìnhTrong quá trình thực hiện,một tiến trình

được đặc trưng bởi nhiều thuộc tính do hệ thống duy trì như:

Trạng thái của nó. Định danh của nó. Các giá trị của các thanh ghi, bao gồm

cả bộ đếm chương trình. Mã định danh người sử dụng có tên mà

tiến trình đang thực hiện.Thông tin được kernel sử dụng để thiết lập

lịch biểu của các tiến trình (thứ tự ưu tiên, v.v…).

Page 9: Báo cáo đồ án

CƠ SỞ LÝ THUYẾT2.2.3.Các thao tác điều khiển tiến trìnhTạo lập tiến trình bằng hàm system()Thay thế tiến trình hiện hành với hàm exec()Nhân bản tiến trình với hàm fork()Kiểm soát và đợi tiến trình con Đón xử lý tín hiệu khi tiến trình con kết thúcBỏ rơi tiến trình con

Page 10: Báo cáo đồ án

CƠ SỞ LÝ THUYẾT2.3 Cơ chế giao tiếp bằng đường ống2.3.1 Định nghĩa

Các pipe (ống dẫn) tạo thành phương tiện truyền thông giữa những tiến trình.

Nguyên tắc: dữ liệu đã ghi tại một đầu và được đọc ở đầu bên kia.

Đường ống pipe.

Tiến trình A Tiến trình B

Ống dẫn truyền thông

Page 11: Báo cáo đồ án

CƠ SỞ LÝ THUYẾT

2.3.2 Đường ống pipe giao tiếp trao đổi dữ liệu một chiều:

• Hàm pipe() dùng để tạo đường ống có khả năng đọc/ghi.

#include <unistd.h>

int pipe(int filedes[2])

Phần tử thứ nhất của mảng được dùng để đọc, trong khi phần tử thứ hai của mảng được dùng để ghi.

Page 12: Báo cáo đồ án

CƠ SỞ LÝ THUYẾT

2.3.3 Đường ống pipe giao tiếp trao đổi dữ liệu hai chiều: Tương đương với việc sử dụng 2 đường ống 1 chiều. Cả 2 tiến trình cha và con đều có thể đọc và ghi dữ liệu vào đường ống. Tuy nhiên cũng rất dễ gây ra tình trạng tắc nghẽn.

Hàm read() đọc dữ liệu từ pipe.-Cơ chế : nếu đường ống rỗng hàm sẽ khóa trong trạng thái chờ (block) cho đến khi dữ liệu được đổ vào đường ống hay khi đường ống bị đóng lại bởi phía bên ghi.

Hàm write() Dùng để ghi dữ liệu vào trong đường ống

Page 13: Báo cáo đồ án

CÀI ĐẶT THUẬT TOÁN VÀ TRIỂN KHAI

3.1 Đề tài : Tạo ra 2 quá trình P0 và P1. Quá trình P0 đọc từ file

nhiều dãy số nguyên liên tiếp (mỗi dãy có thể có số phần tử khác nhau). Sau đó quá trình này gởi lần lượt các dãy này cho quá trình P1. P1 thực hiện sắp xếp mỗi dãy theo thứ tự tăng dần, đồng thời tính tổng của dãy đó và gởi dãy kết quả cùng với tổng tính được tương ứng cho mỗi dãy về lại quá trình P0. Khi này, P0 thực hiện ghi các dãy kết quả vào lại file sao cho: dãy có tổng nhỏ nhất sẽ được ghi đầu tiên, dãy có tổng lớn hơn sẽ được ghi sau.

Thực hiện bài toán dùng pipe (hoặc shared memory) để giao tiếp.

Page 14: Báo cáo đồ án

CÀI ĐẶT THUẬT TOÁN VÀ TRIỂN KHAI

3.2 Mô tả bài toán: Có 2 tiến trình P0 (tiến trình cha) và P1 (tiến trình con)

qua cơ chế đường ống. P0 sẽ đọc file test.txt trong cùng thư mục với file chứa

mã nguồn. Sau đó đưa các dãy vào mảng, chuyển sang cho P1 bằng đường ống (pipe).

P1 sắp xếp các danh sách theo thứ tự tăng dần và tính tổng chúng và trả dữ liệu về lại cho P0.

P0 ghi lại vào file test.txt

Page 15: Báo cáo đồ án

CÀI ĐẶT THUẬT TOÁN VÀ TRIỂN KHAI

Các hàm,biến quan trọng sử dụng trong chương trình• void read_f(void) : Hàm đọc file test.txt và lấy các

dãy số vào mảng• void write_f(void) : Hàm để ghi vào file test.txt các

dãy số trong mảng• void do_P0(int *,int *) : Thực hiện tiến trình P0• void do_P1(int *,int *) : Thực hiện tiến trình P1• Biến counter dùng để đếm số dãy số có trong file• Mảng a để chứa các dãy số,đây là mảng 2 chiều

Page 16: Báo cáo đồ án

CÀI ĐẶT THUẬT TOÁN VÀ TRIỂN KHAI

Page 17: Báo cáo đồ án

CÀI ĐẶT THUẬT TOÁN VÀ TRIỂN KHAI

3.4 Kết quả chương trình:

Nội dung file “test.txt” trước khi xử lý:

Page 18: Báo cáo đồ án

CÀI ĐẶT THUẬT TOÁN VÀ TRIỂN KHAI

3.4 Kết quả chương trình:Chạy chương trình:

Page 19: Báo cáo đồ án

CÀI ĐẶT THUẬT TOÁN VÀ TRIỂN KHAI

3.4 Kết quả chương trình:File test.txt sau khi được xử lý

Page 20: Báo cáo đồ án

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

4.1 Kết luận:

Chương trình đã thỏa yêu cầu của bài toán về việc giao tiếp giữa các quá trình bằng ống pipe trên nền Linux.

Việc đọc ghi file text chỉ thực hiện được và cho kết quả đúng khi nó thõa mãn cú pháp theo 1 dạng xác định

Các kí tự trong file text phải là các số.4.2 Hướng phát triển

Cần tìm hiểu đặc điểm và cách quản lý tiến trình trong các Hệ điều hành nói chung và trong Hệ điều hành Linux nói riêng.

Làm quen với HĐH Linux là rất quan trọng bởi Việt Nam đang khuyến khích sử dụng hệ điều hành mã nguồn mở.

Page 21: Báo cáo đồ án