Thực hành Hệ điều hành - Bài thực hành số 4: Lập trình shared memory
Khi chạy chương trình người dùng có thể nhập vào nhiều tham số, để lấy được chính xác các tham số này, ta có thể xử lý trên hai tham số argc & argv của hàm main:
int main(int argc, char* argv[])
Với cách khai báo như trên, agrc chứa số tham số mà người dùng nhập trên dòng lệnh (kể cả tên chương trình chạy) và tham số argv chứa các chuỗi tương ứng với các tham số đó.
Ví dụ khi ta chạy lệnh:
sum 2 5 7 9
để tính tổng các số ta truyền vào từ dòng lệnh, thì tham số argc=5 và argv={“sum”,”2”,”5”,”7”,”9”}.
Bạn đang xem tài liệu "Thực hành Hệ điều hành - Bài thực hành số 4: Lập trình shared memory", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.
File đính kèm:
- thuc_hanh_he_dieu_hanh_bai_thuc_hanh_so_4_lap_trinh_shared_m.doc
Nội dung text: Thực hành Hệ điều hành - Bài thực hành số 4: Lập trình shared memory
- 100 P0 3 14 57 14 P1 20 96 • Các thông số dòng lệnh được lưu vào một mảng (2 process cha và con đều có thể truy xuất được mảng này). Sau đó process cha và con sử dụng vùng nhớ chia sẻ để lưu thông tin chia sẻ. • Vùng nhớ chia sẻ gồm có 2 số nguyên, số đầu tiên mô tả chỉ số tiếp theo của mảng sẽ được xử lý, số nguyên thứ hai mô tả kết quả tính toán đến thời điểm hiện tại. • Khi bắt đầu xử lý một phần tử, process đọc số nguyên đầu tiên trong vùng nhớ chia sẻ để lấy chỉ số của phần tử cần xử lý, sau đó process này tăng chỉ số này lên và lưu giá trị chỉ số mới vào vùng nhớ chia sẻ. • Tiếp theo process đó lấy được phần tử cần xử lý từ mảng, xử lý phần tử đó và tính được tổng của các thừa số nguyên tố của số nguyên đó. • Sau đó, process cộng dồn tổng này vào tổng toàn phần (giá trị của số nguyên thứ 2 trong vùng nhớ chia sẻ). • Process nào xử lý sau cùng sẽ in giá trị tổng toàn phần ra màn hình. • Để giải quyết tranh chấp trên vùng nhớ chia sẻ, ta sử dụng một biến semaphore để đồng bộ quá trình đọc và ghi vào vùng nhớ này. 1.5 Một số kỹ thuật lập trình 1.5.1 Xử lý tham số dòng lệnh Khi chạy chương trình người dùng có thể nhập vào nhiều tham số, để lấy được chính xác các tham số này, ta có thể xử lý trên hai tham số argc & argv của hàm main: int main(int argc, char* argv[]) Với cách khai báo như trên, agrc chứa số tham số mà người dùng nhập trên dòng lệnh (kể cả tên chương trình chạy) và tham số argv chứa các chuỗi tương ứng với các tham số đó. Ví dụ khi ta chạy lệnh: sum 2 5 7 9 để tính tổng các số ta truyền vào từ dòng lệnh, thì tham số argc=5 và argv={“sum”,”2”,”5”,”7”,”9”}. 1.5.2 Kỹ thuật lập trình shared memory Tham khảo slide trên lớp 1.5.3 Kỹ thuật lập trình semaphore Tham khảo slide trên lớp 2 Yêu cầu Cú pháp chương trình: sumprime [số nguyên dương]+