Tải bản đầy đủ (.pdf) (21 trang)

Giao tiếp giữa các tiến trình bằng đường ống pipe

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (456.41 KB, 21 trang )

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à
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
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.

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.
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.
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.
CƠ SỞ LÝ THUYẾT
Sơ đồ trạng thái các tiến trình trong Linux:

CƠ SỞ LÝ THUYẾT
2.2.2. Cấu trúc tiến trình
Trong 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…).
CƠ SỞ LÝ THUYẾT
2.2.3.Các thao tác điều khiển tiến trình

Tạ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úc

Bỏ rơi tiến trình con
CƠ SỞ LÝ THUYẾT
2.3 Cơ chế giao tiếp bằng đường ống
2.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
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.
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
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.
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
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
CÀI ĐẶT THUẬT TOÁN VÀ TRIỂN KHAI
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ý:
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:
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ý

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ở.

×