Có rất nhiều đầu việc mà máy tính phải xử lý để thực hiện một tác vụ nào đó mà con người yêu cầu. Những việc đó được chia nhỏ ra thành các việc nhỏ hơn và nhỏ hơn nữa. Và một đơn vị công việc xử lý đó ta gọi là một tiến trình. Các tiến trình thuộc một chương trình lớn chắc chắn sẽ phải có những sự giao tiếp với nhau. Chúng có thể sử dụng tài nguyên chung với nhau. Kết quả xử lý của tiến trình này có thể là đầu vào của tiến trình kia và ngược lại. Vì thế ngoài việc quản lý thời gian hoạt động cho các tiến trình, tài nguyên nào được cấp phát cho tiến trình thì hệ điều hành cũng phải quản lý việc giao tiếp giữa các tiến trình với nhau. Đường ống (hay pipe) là một cách thức giao tiếp tuần tự giữa các tiến trình. Có thể hiểu nó như một đường ống một chiều có một đầu vào và một đầu ra. Một tiến trình nào đó có thể ghi dữ liệu vào ống từ đầu vào và một tiến trình khác có thể đọc dữ liệu đó từ đầu ra.Đề tài của phần báo cáo này là: Viết chương trinh tính toán các phép tính sử dụng giao tiếp đường ống
MỤC LỤC PHẦN 1: HỆ ĐIỀU HÀNH .4 I Cơ sở lý thuyết: a Hệ điều hành: b Tiến trình việc giao tiếp tiến trình: .5 c Giao tiếp tiến trình thơng qua đường ống (pipe): II Đề tài mơ tả tốn: III Các thuật toán: .7 a Thuật toán đồng bộ: .7 b Thuật toán xử lý liệu: .10 c Thuật toán xử lý biệt lệ: 13 d Thuật tốn chi tiết tiến trình cha 17 e Thuật tốn chi tiết tiến trình 18 IV Demo chương trình: .20 a Mã nguồn tổng quan chương trình: .20 b Mã nguồn tiến trình cha: 24 c Mã nguồn tiến trình 25 d Kết chạy chương trình 30 PHỤ LỤC VÀ TÀI LIỆU THAM KHẢO 32 a Phần hệ điều hành: .32 ii DANH MỤC HÌNH ẢNH Hình 1: Biến hóa giao diện xấu xí phần cứng trở nên xinh đẹp Hình Giao tiếp tiến trình P1 P2 thơng qua pipe Hình Cấu trúc tập tin đọc Hình Hai tiến trình giao tiếp hai đường ống Hình Mơ hình giao tiếp Hình Sơ đồ thuật tốn đồng hai tiến trình Hình Thuật tốn xử lý liệu tiến trình cha 10 Hình Hàm gộp thành phần mảng số thực thành số thực 11 Hình Thuật tốn xử lý liệu tiến trình 12 Hình 10 Thuật tốn xử lý biệt lệ tiến trình cha 14 Hình 11 Hàm exeOP() xử lý biệt lệ ký tự nhận tốn tử 15 Hình 12 Thuật tốn xử lý biệt lệ tiến trình 16 Hình 13 Thuật tốn tiến trình cha 17 Hình 14 Hàm exeOP() xử lý biệt lệ cho ký tự toán tử .18 Hình 15 Thuật tốn chi tiết tiến trình 19 Hình 16 Thơng tin phép tính .30 Hình 17 Kết tính tốn 31 Hình 18 Kết chạy thông tin xuất console 31 iii PHẦN 1: HỆ ĐIỀU HÀNH I Cơ sở lý thuyết: a Hệ điều hành: Rất khó để cắt nghĩa hồn hảo hệ điều hành Có thể hiểu hệ điều hành chương trình chạy chế độ nhân (kernel) chịu trách nhiệm thực hai chức năng: cung cấp chương trình ứng dụng cho người dùng - trừu tượng hóa tài nguyên phần cứng, hai quản lý tổ chức tài nguyên phần cứng máy tính Với chức đầu tiên, hệ điều hành giống cỗ máy mở rộng Hệ điều hành cung cấp lớp giao diện phương pháp giao tiếp dễ tiếp cận để người dùng tương tác với máy mà khơng cần hiểu phần cứng ẩn bên hoạt động Hình 1: Biến hóa giao diện xấu xí phần cứng trở nên xinh đẹp Song song với việc cung cấp chương trình ứng dụng có giao diện phương pháp tương tác “đẹp” cho người dùng Hệ điều hành giúp quản lý tài ngun mà chương trình ứng dụng cần cung cấp Tài nguyên sử dụng chương trình phép chạy chạy khoảng thời gian hệ điều hành quản lý Một số loại hệ điều hành phổ biến cho người dùng phổ thông Windows 10, Windows11và MacOS Trong báo cáo này, chương trình lập trình để chạy Ubuntu Windows 11 b Tiến trình việc giao tiếp tiến trình: Có nhiều đầu việc mà máy tính phải xử lý để thực tác vụ mà người yêu cầu Những việc chia nhỏ thành việc nhỏ nhỏ Và đơn vị cơng việc xử lý ta gọi tiến trình Tiến trình hiểu đơn vị cơng việc nhỏ mà máy tính cần xử lý Một chương trình lớn cấu thành từ nhiều tiến trình Ở quy mơ chương trình ứng dụng người dùng máy tính thiết bị đa nhiệm quy mô vi mơ tiến trình máy tính hoạt động đơn nhiệm, nghĩa thời điểm có tiến trình thực mà thơi Các tiến trình thuộc chương trình lớn chắn phải có giao tiếp với Chúng sử dụng tài nguyên chung với Kết xử lý tiến trình đầu vào tiến trình ngược lại Vì ngồi việc quản lý thời gian hoạt động cho tiến trình, tài nguyên cấp phát cho tiến trình hệ điều hành phải quản lý việc giao tiếp tiến trình với Có cách thức giao tiếp tiến trình sau: Giao tiếp nhớ dùng chung (shared memory) Giao tiếp nhớ ánh xạ (mapped memory) Giao tiếp thông qua đường ống (pipe) c Giao tiếp tiến trình thơng qua đường ống (pipe): Đường ống (hay pipe) cách thức giao tiếp tiến trình Có thể hiểu đường ống chiều có đầu vào đầu Một tiến trình ghi liệu vào ống từ đầu vào tiến trình khác đọc liệu từ đầu Đường ống chứa chuỗi byte, thứ tự chúng tuân theo quy tắc FIFO, nghĩa byte ghi vào trước đọc trước Một pipe có kích thước cố định Nếu liệu pipe đầy từ đầu ghi bị đóng lại đến có tiến trình đọc bớt liệu pipe Hình Giao tiếp tiến trình P1 P2 thơng qua pipe Có hai loại đường ống pipe: Normal pipe (đường ống thông thường): Đường ống bị giới hạn nhớ tiến trình mà thơi Nó đường ống nội tiến trình Đường ống thơng thường giúp giao tiếp tiến trình thuộc với tiến trình tiến trình Có thể hiểu kênh liên lạc nội cha-con tiến trình Named pipe (đường ống có tên): Là đối tượng độc lập có tên hệ thống Nó cho phép tiến trình có khơng gian địa khác giao tiếp với Chính mà cần đặt tên để kết nối Thực chất loại đường ống tập tin mà quy định hai đầu, đầu ghi đầu đọc! II Đề tài mô tả toán: Đề tài phần báo cáo là: Viết chương trinh tính tốn phép tính sử dụng giao tiếp đường ống Bài toán cụ thể là: Cho tập tin có tên readFile.txt chứa biểu thức tính tốn hai số thực có cấu trúc sau: Hình Cấu trúc tập tin đọc Viết chương trình sử dụng giao tiếp đường ống (pipe) để viết lại vào tập tin khác biểu thức kèm với kết theo sau, ý đến vấn đề biệt lệ Với toán trên, ta thấy phải sử dụng đường ống thơng thường viết chương trình mà thơi Ta phải có hai tiến trình, tiến trình giao tiếp với tập tin tiến trình tính tốn Ta cần đến hai đường ống để giao tiếp hai tiến trình Một đường ống dùng để đọc biểu thức vào tiến trình tính tốn đường ống dùng để lấy kết sau tính tốn Ta phải ý đến biệt lệ khác chia cho 0, ký tự nhập vào không giúp cấu thành số số vấn đề khác ký tự xuống dòng, ký tự kết thúc tập tin (EOF) Hình Hai tiến trình giao tiếp hai đường ống III Các thuật toán: a Thuật tốn đồng bộ: Dựa phân tích phần trước, xây dựng mơ hình giao tiếp gồm thành phần sau: Hình Mơ hình giao tiếp Ta có hai tập tin: tập tin chứa phép tính số thực, tập tin thứ hai tập tin đích cần ghi vào Ta có hai tiến trình tiến trình cha tiến trình Tiến trình cha đảm nhiệm việc giao tiếp với hai file Tiến trình đọc ký tự từ file vào ghi chúng vào file 2, đồng thời ghi vào pipePC để tiến trình sử dụng để xử lý Tiến trình cha sau nhận kết trả từ tiến trình cách đọc kết từ pipeCP ghi vào file Tiến trình nhận phép tính từ tiến trình cha từ pipePC, xử lý chúng sau trả lại kết vào pipe CP Quy tắc đọc tiến trình cha tiến trình đọc ghi ký tự Các phép tính liền ghi vào file phép tính xen kẽ với kết Vì ta cần phải đồng trình Ta tiến hành đồng theo thuật toán sau: Tiến trình cha đọc ký tự file 1, ghi vào file 2, xử lý vài bước ghi vào pipePC, đọc/ghi ký tự xuống dòng \n EOF (end of file) ngủ vài giây chờ cho xử lý phép tính Tiến trình nhận ký tự từ pipePC lưu trữ ký tự vào Nếu đọc phải ký tự ‘\n’ EOF thực phép tính ghi kết vào pipeCP Nếu đọc phải ký tự EOF tiến trình kết thúc Tiến trình cha đọc kết từ pipeCP ghi vào file Nếu trước đọc ký tự EOF kết thúc Nếu khơng tiếp tục đọc ghi ký tự từ file Ta có sơ đồ thuật tốn đồng hình Hình Sơ đồ thuật tốn đồng hai tiến trình Như dựa vào ký tự \n EOF ta đồng hai tiến trình với nhau, đảm bảo tiến trình cha ln kết thúc sau tiến trình kết ln đọc xen kẽ với phép tính b Thuật toán xử lý liệu: Đối với tiến trình cha, nhiệm vụ giao tiếp với tập tin đường ống Vì đồng vấn đề quan trọng mà tiến trình cha cần xử lý Về việc xử lý liệu tiến trình cha chuyển đổi ký tự chữ số thành số để tiến trình tính tốn sau Ta có thuật tốn xử lý liệu tiến trình cha sau: Hình Thuật tốn xử lý liệu tiến trình cha Đối với tiến trình con, trình xử lý phức tạp nhiều tiến trình phải thu thập ký tự một, nhận kết thúc số hạng tính tốn để ghi trả lại cho tiến trình cha Ta mơ tả thuật tốn xử lý liệu tiến trình sau: - Tiến trình liên tục đọc ký tự từ pipePC lưu vào mảng số thực digits[] - Nếu gặp tốn tử, tiến trình gộp tất thành phần mảng digits[] lại thành số thực lưu vào mảng nums[] Sau lưu lại tốn tử - Nếu gặp phải ký tự xuống dòng \n tiến trình gộp tất thành 10 Thuật tốn chi tiết tiến trình con: 20 ... thơng qua đường ống (pipe) : II Đề tài mơ tả tốn: III Các thuật toán: .7 a Thuật toán đồng bộ: .7 b Thuật toán xử lý liệu: .10 c Thuật toán xử lý biệt lệ:... Một pipe có kích thước cố định Nếu liệu pipe đầy từ đầu ghi bị đóng lại đến có tiến trình đọc bớt liệu pipe Hình Giao tiếp tiến trình P1 P2 thơng qua pipe Có hai loại đường ống pipe: Normal pipe. .. toán đồng bộ, xử lý liệu xử lý biệt lệ, ta có thuật tốn chi tiết tiến trình cha: Hình 13 Thuật tốn tiến trình cha 18 e Thuật tốn chi tiết tiến trình Tổng hợp lại thuật toán đồng bộ, thuật toán