6 2 Luồng xử lý các echo và điều khiển các rule 64

Một phần của tài liệu xây dựng trình biên dịch cho ngôn ngữ wave (Trang 64 - 67)

Các echo sẽ lan truyền ngược lên gốc của hệ thống track và kết hợp với nhau tại các TN. Các echo sẽđược đồng bộ với nhau bằng cách track cha sẽ chờ các track con sau khi kết thúc gửi echo lên. Sau khi tất cả các echo đã được nhận đủ, track cha lại tiếp tục kích hoạt việc gửi echo tổng hợp lên trên. Quá trình trên sẽ tiếp tục cho đến khi gặp track có kèm theo rule hoặc echo được gửi tới gốc của hệ thống track. Sau khi xử lý xong chuỗi wave lan tỏa trong chế độ track, chương trình sẽ gửi thông điệp xóa track, để xóa toàn bộ dữ liệu lưu trữ trong track và giải phóng bộ nhớ phục vụ cho những đoạn mã wave tiếp theo.

Trong track có thể gắn thêm rule hoặc không. Nếu track có gắn thêm rule thì việc kết hợp các echo sẽ không giống với khác track thông thường mà chịu sự qui định khác nhau của mỗi rule. Thêm vào đó, đối với các rule tuần tự có thể kích hoạt các track bị treo sau khi nhận được echo từ track con. Các rule còn thay đổi hành động của track sau khi nhận được các echo từ track con. Trong trường hợp này, thay vì gửi echo lên trên, chuỗi wave tail bị treo trong track sẽđược gửi đến các track con nếu điều kiện của rule được thỏa mãn. WT tail 2 1 3 7 4 5 6 Node đích

- 65 -

Các bước xử lý echo như trong ta thấy, ban đầu khi các track đã phát triển tới

được node đích, quá trình echo sẽ được thực hiện từ các node đích ngược trở lên trên về track cha. Khi echo lên tới track có gán rule thì dựa vào echo tổng hợp được và rule thì wave tail sẽđược gửi trở lại các track lá.

Các bước xử lý echo được thể hiện trong luồng thứ 2 của Hình 3-19: Luồng xử lý giữa các thành phần trong Wave Interpreter. Các echo sẽ bắt đầu lan tỏa từ các node

đích khi chuỗi wave kết thúc hoặc bị hủy bỏ bởi các điều kiện không thỏa mãn trong phép so sánh hay khi xử lý lệnh echo dot halt. Echo được kích hoạt tại các track lá, sau

đó lan truyền và đồng bộ trong hệ thống track. Luồng xử lý echo có thể chia làm 3 phần đó là: gửi các echo đi, xóa track và tổng hợp echo tại track chứa rule.

Gửi các echo

Đây là phần chính trong luồng xử lý echo, bắt đầu khi chuỗi wave kết thúc xử lý. Các echo có thể được nhận từ ngoài mạng hoặc từ trong cùng WI, khi nhận được echo các bước xử lý bắt đầu sau bước start_echo:

9 activate_echo: echo được kích hoạt trong track và bắt đầu lan tỏa.

9 propagate_echo: echo được gửi lên track cha. Nếu track cha nằm trên máy khác thì echo sẽđược gửi ra bên ngoài mạng.

9 merge_echo: bước này do track cha xử lý khi nhận được echo, echo sẽđược tổng hợp lại với echo đang lưu trữ trong track. Nếu track cha nhận đủ echo từ các track con, quá trình này lại được tiếp tục đối với track cha.

Xóa track

Cũng gần giống với việc lan tỏa các echo trong quá trình xóa track cũng có một thông báo được gửi đi, nhưng thay vì chỉ gửi echo lên trên, công việc xóa track lại bắt đầu từ track cha.Thông điệp xóa track sẽ được gửi đi sau khi chuỗi wave thực hiện xong, hoặc chuỗi wave chuyển từ chếđộ track sang chếđộ thông thường. Các bước xóa track diễn ra như sau:

9 activate_echo: quá trình xóa track được kích hoạt. tail 2 1 3 7 4 5 6 Node đích

- 66 -

9 delete_track: track được xóa và tất cả các dữ liệu lưu trữ trong track được giải phóng.

9 propagate_echo: thông điệp xóa track được gửi xuống các track con

9 merge_echo: nếu track con nằm trên cùng WI với track cha, quá trình xóa track được lặp lại. Nếu không cùng WI thì thông điệp xóa track sẽđược gửi ra ngoài mạng.

Tổng hợp echo tại Track có rule

Nếu rule được gán vào track thì quá trình xử lý echo sẽ thay đổi tùy thuộc vào ý nghĩa của từng rule khác nhau. Mỗi rule định nghĩa những điều kiện logic làm thay

đổi việc tổng hợp các echo. Ví dụ như đối với luật AS nếu gặp ít nhất một echo mang giá trị FALSE thì giá trị của echo tại track là FALSE. Các rule tuần tự còn bao gồm các nhánh bị treo lại, và các nhánh sẽ lần lượt được kích hoạt sau khi nhận

được echo và điều kiện của rule được thỏa mãn.

Thông thường đối với các rule, các wave tail bị treo lại sẽđược gửi đến tất cả các track con sau khi track nhận đủ echo và điều kiện của rule được thỏa mãn. Sau khi gửi tail đi thì rule cũng sẽ bị xóa khỏi track và tính chất của rule cũng sẽ mất đi.

Các rule trong track sẽ được kích hoạt mỗi khi nhận được echo từ một trong số

các track con.

9 activate_echo: echo được kích hoạt trong track. Trong trường hợp này track

được kích hoạt là một trong số các track con của track có gắn rule.

9 propagate_echo: echo được gửi lên track cha có gắn rule. Tại đây có 3 trường hợp có thể xảy ra.

− activate_branch: nếu track hiện tại được gán rule tuần tự (SQ, OS, AS) thì nhánh tiếp theo sẽđược kích hoạt và xử lý. (adsbygoogle = window.adsbygoogle || []).push({});

− delete_rule: nếu điều kiện của rule được thỏa mãn, rule được xóa khỏi track và wave tail được gửi đến các track con.

− forward_tail: wave tail bắt đầu được truyền đi từ track hiện tại • Luồng xử lý Tail

Quá trình gửi tail thông qua hệ thống track là luồng xử lý cuối cùng của WI. Quá trình này được kích hoạt bởi các rule hoặc có thông điệp tail đến từ mạng. Trên mỗi track nhận được tail, tail sẽ tiếp tục được được gửi đến các track con của nó cho đến khi track hiện tại là các track lá hoặc track được gửi nằm bên ngoài hệ

thống.

Các bước xử lý tail diễn ra như sau:

9 forward_tail: tail được nhân ra và gửi đến tất cả các track con, lặp lại cho

đến khi tới được các track cuối cùng.

9 delete_track: bước này chỉ sử dụng khi track gửi tail đi không có track cha và chuỗi wave sau quá trình này sẽ chuyển sang trạng thái lan tỏa không có track. Tại bước này track sẽ bị xóa đi sau khi gửi tail đến các track con và giải phóng toàn bộ vùng nhớ mà track chiếm dụng.

- 67 -

9 resume_tail: Khi các track cuối cùng nhận được tail. Tại các track này wave tail cùng với các biến frontal, environment được lưu trữ kết hợp tạo thành wave và tiếp tục quá trình xử lý.

Một phần của tài liệu xây dựng trình biên dịch cho ngôn ngữ wave (Trang 64 - 67)