Cấu trỳc tiến trỡnh song song

Một phần của tài liệu Thực hiện song song các câu vắn tin trong CSDL phân tán bằng cách sử dụng luồng (Trang 33 - 39)

Cỏc tiến trỡnh thực thi đồng hành cần phải được lập lịch và cú thể phải dựa vào cấu trỳc lệnh song song.

Giả thiết cú cỏc tiến trỡnh S1, S2,..., Sn được thực hiện song song trờn n bộ xử lớ riờng biệt. Khi đú chỳng ta cú thể viết thành khối song song như sau:

Parbegin Hoặc Cobegin S1; S1; S2; S2; ... ... Sn; Sn; Parend Coend

forall (i = 0; i < n; i++) Hoặc for (i = 0; i < n; i++)

{S1; S1;

S2; S2;

... ...

Sn; Sn;

} } In Parallel

Theo định nghĩa của tiến trỡnh là một chương trỡnh hoặc một bộ phận của một chương trỡnh (chương trỡnh con) đang thực hiện, đơn vị thực hiện tiến trỡnh là bộ xử lớ tiến trỡnh (processer) và phần chương trỡnh được thực hiện trờn đú là tiến trỡnh. Vỡ vậy cấu trỳc của tiến trỡnh chớnh là cấu trỳc của một chương trỡnh hoặc chương trỡnh con...

Vớ dụ 2.1-1:

Trong lập trỡnh lệnh sau, thỡ cỏc FUNCTION và cỏc PROCEDURE,...thậm chớ cả cỏc phõn đoạn của chương trỡnh chớnh (khụng phải chương trỡnh con) khi được thực thi đầu là tiến trỡnh:

PROGRAM < Tờn chương trỡnh> BLCOK <Khai bỏo>

BLOCK procedure BLOCK Function

B LOCK <Thõn chương trỡnh chớnh>

Trong đú BLOCK < Khai bỏo> cú thể như sau: LABEL ( * Khai bỏo cỏc nhón*);

………

CONST ( * Khai bỏo cỏc hằng*); ………

TYPE (* Mụ tả và định nghĩa cỏc kiểu cấu trỳc dữ liệu mới của người sử dụng*);

……….

VAR (* Khai bỏo cỏc biến*);

BLOCK procedure cú thể gồm nhiều Procedure cú dạng:

PROCEDURE < Tờn thủ tục> ( Cỏc khai bỏo tham số , nếu cú); BLOCK < Khai bỏo> (* Cỏc khai bỏo trong Procedure*);

BLOCK < Thõn của Procedure> (* Block này được bắt đầu bởi BEGIN và kết thỳc ở END*);

BLOCK Function cú thể cú nhiều function cú dạng:

FUNCTION < tờn hàm> ( Khai bỏo cỏc tham số nếu cú): < Kiểu dữ kliệu>; BLOCK < Khai bỏo> (* Cỏc khai bỏo trong Function*);

BLOCK < Thõn của Function> (* BLOCK này được bắt đầu bởi BEGIN và kết thỳc bởi END*);

BLOCK < Thõn chương trỡnh chớnh> (* Bao gồm cỏc lệnh của chương trinh, từ đú cú thể gọi đến cỏc chương trỡnh con cũng bắt đầu bởi BEGIN nhưng kết thỳc bởi END*).

Để tạo ra cỏc chương trỡnh con (tiến trỡnh) cần tuõn thủ cỏc bước (Hỡnh 2.1-2) sau đõy:

Từ một tiến trỡnh cú thể tạo ra nhiều tiến trỡnh mới, bằng một lời gọi hệ thống create-process, trong khi thực thi.

id = create_process (N); (adsbygoogle = window.adsbygoogle || []).push({});

Để sử dụng cỏc tiến trỡnh đó được tạo ra, chỳng ta cú thể viết ra cỏc chương trỡnh song song cú dạng:

id = create_process(N); Switch (id)

{

Case 0 : … do NhiemVu0 …; Break; Case 1 : … do NhiemVu1 …; Break; Chương trỡnh P (khối P)

Chương trỡnh con A (khối A)

Chương trỡnh con AA (khối AA)

Chương trỡnh con AB (khối AB)

Chương trỡnh con B (khối B) Chương trỡnh con BA (khối BA)

Chương trỡnh con BAA (khối BAA)

Chương trỡnh con BB (khối BB)

Case 2 : … do NhiemVu2 …; Break; ………..

Case N : … do NhiemVuN …; Break; }

Tiến trỡnh tạo gọi là tiến trỡnh cha, ngược lại cỏc tiến trỡnh mới được gọi là tiến trỡnh con của tiến trỡnh đú. Mỗi tiến trỡnh mới này sau đú cú thể tạo cỏc tiến trỡnh khỏc, hỡnh thành một cõy tiến trỡnh.

Tiến trỡnh cha cú thể phải phõn chia cỏc tài nguyờn giữa cỏc tiến trỡnh con hay cú thể chia s một số tài nguyờn (như bộ nhớ và tập tin) giữa nhiều tiến trỡnh con. Tiến trỡnh cha ngăn chặn bất cứ tiến trỡnh con nào tạo quỏ nhiều tiến trỡnh vỡ lý do hạn chế tài nguyờn của tiến trỡnh cha.

Khi một tiến trỡnh tạo một tiến trỡnh mới, hai khả năng cú thể tồn tại trong thuật ngữ của việc thực thi:

• Tiến trỡnh cha tiếp tục thực thi đồng hành với tiến trỡnh con của nú. • Tiến trỡnh cha chờ cho tới khi một vài hay tất cả tiến trỡnh con kết thỳc.

Một tiến trỡnh kết thỳc khi nú hoàn thành việc thực thi cõu lệnh cuối cựng và yờu cầu hệ điều hành xúa nú bằng cỏch sử dụng lời gọi hệ thống exit. Tại thời điểm đú, tiến trỡnh cú thể trả về dữ liệu (đầu ra) tới tiến trỡnh cha (bằng lời gọi hệ thống wait). Tất cả tài nguyờn của tiến trỡnh –gồm bộ nhớ vật lý và luận lý, cỏc tập tin đang mở, vựng đệm nhập/xuất được thu hồi bởi hệ điều hành.

Việc kết thỳc xảy ra trong cỏc trường hợp khỏc. Một tiến trỡnh cú thể gõy kết thỳc một tiến trỡnh khỏc bằng một lời gọi hệ thống hợp lý (vớ dụ, abort). Thường chỉ cú tiến trỡnh cha bị kết thỳc cú thể gọi lời gọi hệ thống như thế. Ngược lại, người dựng cú thể tựy ý giết mỗi cụng việc của tiến trỡnh cũn lại. Do đú, tiến trỡnh cha cần biết cỏc định danh của cỏc tiến trỡnh con. Vỡ thế khi

một tiến trỡnh tạo một tiến trỡnh mới, định danh của mỗi tiến trỡnh mới được tạo được truyền tới cho tiến trỡnh cha.

Một tiến trỡnh cha cú thể kết thỳc việc thực thi của một trong những tiến trỡnh con với nhiều lý do khỏc nhau:

• Tiến trỡnh con sử dụng tài nguyờn vượt quỏ mức được cấp. Điều này yờu cầu tiến trỡnh cha cú một cơ chế để xem xột trạng thỏi của cỏc tiến trỡnh con. • Cụng việc được gỏn tới tiến trỡnh con khụng cũn cần thiết nữa.

• Tiến trỡnh cha đang kết thỳc và hệ điều hành khụng cho phộp một tiến trỡnh con tiếp tục nếu tiến trỡnh cha kết thỳc. Trờn những hệ thống như thế, nếu một tiến trỡnh kết thỳc (bỡnh thường hoặc khụng bỡnh thường), thỡ tất cả tiến trỡnh con cũng phải kết thỳc. Trường hợp này được xem như kết thỳc xếp tầng (cascading termination) thường được khởi tạo bởi hệ điều hành.

Rừ ràng, bất kỳ một tiến trỡnh khụng chia s bất cứ dữ liệu (tạm thời hay cố định) với tiến trỡnh khỏc là độc lập. Ngược lại, một tiến trỡnh là hợp tỏc (cooperating) nếu nú cú thể ảnh hưởng hay bị ảnh hưởng bởi cỏc tiến trỡnh khỏc trong hệ thống. Hay núi cỏch khỏc, bất cứ tiến trỡnh chia s dữ liệu với tiến trỡnh khỏc là tiến trỡnh hợp tỏc.

Chỳng ta cú thể cung cấp một mụi trường cho phộp hợp tỏc tiến trỡnh với nhiều lý do:

• Chia s thụng tin: vỡ nhiều người dựng cú thể quan tõm cựng phần thụng tin (vớ dụ, tập tin chia s ), chỳng phải cung cấp một mụi trường cho phộp truy xuất đồng hành tới những loại tài nguyờn này.

• Gia tăng tốc độ tớnh toỏn: nếu chỳng ta muốn một tỏc vụ chạy nhanh hơn, chỳng ta phải chia nú thành những tỏc vụ nhỏ hơn, mỗi tỏc vụ sẽ thực thi song song với cỏc tỏc vụ khỏc. Việc tăng tốc như thế cú thể đạt được chỉ nếu mỏy tớnh cú nhiều thành phần đa xử lý (như cỏc CPU hay cỏc kờnh I/O).

• Tớnh module húa: chỳng ta muốn xõy dựng hệ thống trong một kiểu mẫu dạng module, chia cỏc chức năng hệ thống thành những tiến trỡnh hay luồng. • Tớnh tiện dụng: Thậm chớ một người dựng đơn cú thể cú nhiều tỏc vụ thực hiện tại cựng thời điểm. Vớ dụ, một người dựng ba luồng: cú thể đang soạn thảo, đang in, và đang biờn dịch cựng một lỳc.

Thực thi đồng hành của cỏc tiến trỡnh hợp tỏc yờu cầu cỏc cơ chế cho phộp cỏc tiến trỡnh giao tiếp với cỏc tiến trỡnh khỏc và đồng bộ húa cỏc thực thi của chỳng.

Một phần của tài liệu Thực hiện song song các câu vắn tin trong CSDL phân tán bằng cách sử dụng luồng (Trang 33 - 39)