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... 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ó
Trang 1BÁ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à
Trang 3TỔ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
Trang 4TỔ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.
Trang 5 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.
Trang 7CƠ SỞ LÝ THUYẾT
Sơ đồ trạng thái các tiến trình trong Linux:
Trang 8CƠ 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ư:
Trang 9CƠ SỞ LÝ THUYẾT
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
Trang 10CƠ 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
Trang 11int 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
Trang 12CƠ 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
Trang 13CÀ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
Trang 14CÀ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
Trang 15CÀ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
Trang 16CÀI ĐẶT THUẬT TOÁN VÀ TRIỂN KHAI
Trang 17CÀ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ý:
Trang 18CÀ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:
Trang 19CÀ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ý
Trang 20KẾ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ở