Hình 3-14: Câu lệnh lặp sử dụng Repetition
- 28 -
CHƯƠNG 4. XÂY DỰNG BỘ INTERPRETER
Trong chương này chúng ta bàn tới thuật toán và kỹ thuật trong việc xử lý tuần tự
hoặc song song của Wave trong hệ thống mạng máy tính. Sau đó chúng ta sẽ trình bày tiếp về cấu trúc chính trong bộ biên dịch và các hàm đơn vị điều khiển trên cấu trúc
đó, cũng như việc thực hiện chúng ở từng giai đoạn khác nhau. Tất cả các thông tin
được trình bày trong chương này coi như việc mô tả một khuôn mẫu của hệ thống Wave ảo, một kiểu điều khiển tự động trong không gian như: xử lý, mô phỏng hay
điểu khiển trong những hệ thống lớn và mở.
4. 1 Wave không có Rule
Các chuỗi Wave được thông dịch từng bước lần lượt từ trái qua phải, ở các giai
đoạn khác nhau. Trong tất cả các giai đoạn thực thi, Wave luôn được gắn kết với Node nằm ở KN. Sau khi việc xử lý của Head, Tail của Wave vẫn tiếp tục được hoạt động trong cùng một Node hoặc Node khác. Những lúc như thế, Head cũng được sao chép chương trình điều khiển kèm theo ở cùng Node đó hoặc Node khác.
4. 1. 1 Chi tiết ví dụ về các bước của Wave
Chú ý: Simple move: là 1 Head mà Head này không thể tách được thành Head
đơn giản hơn (không có dấu phảy trong Simple move).
Để hiểu rõ hơn về các thực hiện của Wave không đi kèm với Rule , ta xét một ví dụ đơn giản khi thực hiện ở Node b hiện tại:
F = 3. r # a, (s # ANY. T # z ), STAY. N+F. TERMINAL = CONTENT.
Hay viết ngắn gọn: F = 3. r # a, (s # ANY. T # z ),. N+F.T = C.
Ở các bước thực hiện khác nhau trong ví dụ trên, nếu Head của Wave không phải là Simple move thì các Head này sẽ được tách ra thành các Simple move (các Simple move cách nhau bởi các dấu phảy). Sau khi Head được xử lý thành các thành phần nhỏ
hơn (cách nhau bởi dấu phẩy), Tail của Wave sẽ được gửi tới Node tương ứng trong trường hợp thành phần đó là Simple move hoặc Tail được sao chép và gắn với Wave mà Head của Wave này là kết quả của một thành phần được chia ở Head trong Wave trước. Do đó Wave mới luôn được xử lý độc lập.
Trong trường hợp rất nhiều Wave được xử lý cùng một lúc, chúng sẽ được cho vào trong Wave Queueđể chờ xử lý.
Ta phân tích lần lượt các bước thực hiện ở ví dụ trên 1. Bước 1
Head của Wave là: F=3
Và Tail
r # a, (s # ANY. T # z ), N+F. TERMINAL = CONTENT
- 29 -
Biến Frontal F đã được tạo gắn với Wave Tail cho vào cùng hàng đợi 3. Bước 3
Head của Wave là: r # a, (s # ANY. T # z ), STAY
Và Tail
N+F.TERMINAL = CONTENT
Với việc tách biến Frontal đi rồi, Head của Wave mới không thể thực thi 1 cách trực tiếp mà là sự kết hợp lại từ 3 nhánh (mà mỗi nhánh cách nhau bởi 1 dấu phẩy). Do đó chuỗi Wave ban đầu sẽ được tách thành 3 Wave con là
9 Wave 1: r # a. N+F.TERMINAL = CONTENT
9 Wave 2: s # ANY. T # z. N+F.TERMINAL = CONTENT
9 Wave 3: N+F.TERMINAL = CONTENT
Sau đó, biến Frontal F sẽ được ghép và xuất hiện ở 3 chuỗi Wave con, chúng sẽđược để vào trong hàng đợi Wave Queue
4. Bước 4
Wave Queue làm việc theo cơ chế: Chuỗi Wave nào vào trước thì được thực hiện trước. Do đó Wave1 sẽđược thực hiện trước Wave2 và Wave 3, được tách có Head là
r# a
và Tail: N+F.TERMINAL = CONTENT
với biến Frontal đang được tách ra. Nhìn vào Head của Wave sau khi
được tách ta thấy Head lúc này đã là 1 simple move và có thểđược thực thi 1 cách trực tiếp (mà không qua vòng lặp tách Head cho tới khi là
simple move). Hop thực thi từ Node hiện tại b qua Link r tới Node a
(Node a được chứa trên máy tính khác). Tail cùng với biến Frontal F
được gửi tới Node a và cho vào hàng đợi Wave Queue của máy tính
đang chứa Node a này. Ở Node b tiếp tục thực thi chuỗi Wave 2 5. Bước 5
Head của Wave 2 là
s # ANY
và Tail
t # z . N+F.TERMINAL = CONTENT
biến Frontal được tách ra. Hop trong Head sẽđược thực thi và gửi tới tất cả các Node liền kề qua Link s (trong lúc gửi, Tail cũng được gửi cùng). Tất cả các Wave mới đều được kích hoạt trong hàng đợi ở máy tính chứa Node của Wave đó. Wave Queue chỉ lưu lại các simple move.
- 30 -
N+F.TERMINAL = CONTENT
ởđây biến N=7 (cho trước) và F = 3 và CONTENT là b,lúc này ta có
TERMINAL là: b
4. 1. 2 Thuật toán tổng quát cho Wave không có Rule
Như trong ví dựở trên, công việc của trình biên dịch Wave trong mỗi máy có thể được miêu tả bằng thuật toán tổng quát.
Vòng lặp:
1. Lấy Wave từ Wave Queue và tách biến môi trường ra. 2. Bỏ tất các dấu ngoặc đơn ở toàn bộ chuỗi Wave.
3. Phân tích chuỗi Wave thành 2 thành phần: Head và Tail 4. Bỏ tất cả dấu ngoặc đơn ở toàn bộ phần Head
5. Nếu Head là Simple move. a. Dừng Tail tạm thời
b. Tất cả các công việc thực hiện trên move này sử dụng Frontal, Nodal và biến môi trường . Các trường hợp có thể xảy ra:
i. Biến mới Nodal hoặc Frontal được tạo nếu thành phần chưa có biến .
ii. Nếu trong chuỗi Wave có câu lệnh CREATE ở ngoài, một
trong số act có thể được nhảy tới Node khác. Trong trường hợp này Hop sẽ trả lại Link mới hoặc Node mới.
iii. Head có thể xóa Node hiện tại hoặc Link tới Node hiện tại bới
việc gán CONTENT và LINK bằng NONE. Xóa bỏ tất cả các
Node hiện tại bằng cách xóa các Link liên kết tới Node đó. c. Gửi các Tail của Wave, kèm theo biến Frontal tới Wave Queue ở trên
tất cả các SNR Trong trường hợp khác
d. Phân tích Head của Wave thành các thành phần riêng (các thành
phần này cách nhau bởi dấu phẩy). Nếu mỗi thành phần riêng này vẫn còn các thành phần trong nó nhỏ hơn và cách nhau bởi dấu phẩy, thì công việc tách được tiếp tục cho tới khi các thành phần nhỏ
trở thành Simple move.
e. Thay thế và gắn Tail vào mỗi thành phần được chia ở trên. Do đó Wave mới sẽ nhận được các Tail này.
f. Đưa các chuỗi Wave thu được, kèm theo biến Frontal, tới hàng đợi Wave Queue của máy tính hiện tại.
- 31 -
4. 2 Wave có Rule
Trong phần này chúng ta nói về Wave có Rule và xét các trường hợp khác nhau của Wave. Cũng giống như phần trước, đầu tiên ta lấy ví dụ về Wave có Rule sau đó ta sẽđưa ra thuật toán chi tiết cho mỗi trường hợp.
4. 2. 1 Ví dụ về Wave có Rule Xét ví dụ sau: AND_PARALLEL ( OR_SEQUENTIAL ( w1, w2 ), ( OR_PARALLEL ( w3, w4, w5 ) .w6) ) . w7 Có thể viết ngắn gọn như sau: AP ( w1, w2) , (OP ( w3, w4, w5 ). w6). w7
Trong hình vẽ, w1, w2... w7 cùng với các Rule được thể hiện chi tiết qua từng bước. Ở các hình oval, bên trái tương ứng với tên của Rule, bên phải là Tail của Wave tương ứng với Rule đó. Hướng đi và sự di chuyển của w1, w2…w7 được chỉ rõ bởi các mũi tên.
- 32 -
SNR thể hiện bởi các đường kẻ ngang. Tuy nhiên ở hình vẽ này thì việc duy chuyển của các biến Frontal chúng tôi không đưa ra.
Việc xử lý ở chi tiết các bước như sau: 1.Bước 1
Luật AND_PARALLEL ở ngoài cùng thực thi, Head của Wave ban đầu tách thành:
OR_SEQUENTIAL (w1, w2)
Và (OR_PARALLEL (w3, w4, w5). w6) cho vào hàng đợi Wave Queue.
Tail của Wave là w7 nằm ở máy tính hiện tại và vẫn kết nối với Rule
AND_PARALEEL . Biến Frontal của Wave được tách ra. 2.Bước 2
Hai thành phần nằm trong Wave Queue ở bước 1 là: OR_SEQUENTIAL (w1, w2) và (OR_PARALLEL (w3, w4, w5). w6 được lấy ra, xử lý. Dấu mở, đóng ngoặc trong mỗi Rule bị loại bỏ.
‐ Đầu tiên ta xử lý OR_SEQUENTIAL (w1, w2), luật này có 2 thành phần là w1 và w2. Ở máy tính hiện tại, w1 sẽđược kích hoạt và cho vào Wave Queue. Biến Frontal sau khi được tách từ Wave sẽ được ghép vào. Thành phần thứ 2- w2 tạm dừng lại trong máy hiện tại.
‐ Đến lượt (OR_PARALLEL (w3, w4, w5). w6, luật này có Tail là w6.W6
tạm dừng lại trong máy hiện tại nhưng vẫn tiếp tục kết nối với luật
OR_PARALLEL. W3, w4, w5 là ba thành phần song song, sau khi được tách riêng và kèm theo biến Frontal sẽđược kích hoạt rồi cho vào Wave Queue.
3.Bước 3
W1, w3, w4 và w5 sau khi được kích hoạt sẽ phát triển song song và độc lập trong KN. Giả thuyết rằng, trong kết quả của w3, w4 và w5 có ít nhất một kết quả trả về là TRUE. Khi đó kết quả của SNR1 sẽ trả lại TRUE, vì thế w6 sẽ được gửi tới SNR1 và được kích hoạt sau đó cho vào trong hàng đợi trên máy tính có chứa các Node SNR1. Tất nhiên, chúng có gắn các biến Frontal đi cùng. Sau khi gửi w6 tới SNR1, luật OP sẽ không rằng buộc nó với tất cả các Wave
được sao chép từw6. Trong khi đó, Wave w1 có thể đã hoàn thành hoặc có thể
tiếp tục công việc của mình. 4.Bước 4
Sau khi được lấy ra từ Wave Queue tương ứng ,w6 phát triển độc lập trên tất cả
các Node ở SNR1, lúc này w1 vẫn đang làm việc song song với các Wave bản sao của w6. Sau khi w1 kết thúc (giả thiết w1 kết thúc, w2 sẽ được giữ lại bởi luật OS vì coi nhưw1 trả lại kết quả TRUE) và các Wave bản sao của w6 cũng kết thúc (nếu không giả thiết, trên thực tế nó có thể kết thúc hoặc không). Lúc này, SNR2được thành lập.
- 33 -
Từ tất cả các Node ở SNR2, w7 mà đã kết hợp với các luật AP được kích hoạt và chỉ định sẽ cho vào Wave Queue trên máy tính hiện tại. Sau đó nó ghép với các biến Frontal mang tới từ Node trên SNR2 bởi thành phần 1 và thành phần 2 ban đầu của luật AP. Ứng dụng của w7, khả năng cung cấp sựđồng bộ hóa cục bộ của rất nhiều hệ xử lý phân tán được liên kết với nhau từ nhiều Rule khác nhau (OS, OP…). Luật AP, sau khi gửi Tail của w7 tới SNR2 không rằng buộc của nó với các Wave được sao chép từw7. Sau đó chúng kết thúc quá trình hoạt
động. 5.Bước 5
Wave w7 không phụ thuộc vào các Node của SNR2, sau đó được đặt tại các Node của SNR3.
Vì vậy ta thấy Wave w1,w2…w7 có thể được đặt ở các vị trí khác nhau trong cấu trúc và có thểđược duy trì chúng cùng với Rule nhưđã miêu tảở trên.
4. 2. 2 Thuật toán tổng quát cho Wave có Rule
Phần trên chúng ta lấy một ví dụ về Wave có Rule nhưng chưa tách biệt và chi tiết. Trong phần này chúng ta sẽ đi sâu hơn về các thuật toán của những Rule khác nhau.
Branching Rules
Nếu các Head của Wave có nhiều nhánh (branching rule):
1. Phân tích Head Wave thành nhiều nhánh con, sau đó gắn các biến Frontal và
Tail vào các thành phần đó.
a. Kích hoạt các nhánh nhận được (tuần tự hoặc song song, phụ thuộc vào kiểu của Rule) bằng việc đưa chúng vào Wave Queue .
b. Đợi kết quả trả về từ các nhánh và đưa ra quyết định xử lý.
c. Kết hợp và xử lý các kết quả cuối cùng của các nhánh để đưa ra trạng thái kết quả của mỗi Rule, và tổng hợp các kết quảở các nhánh khác nhau trên
SNR, để suy ra được kết quả SNR trên Rule đó. 2. Nếu kết quả trả về của Rule là TRUE:
a. Gửi Tail của chương trình tới tất cả các Node trên SNR (đã ghép thêm tất cả các biến Frontal của Node đó) bằng các nhánh của Wave, vì thế ta sẽ
nhận được các Wave mới.
b. Kích hoạt các Wave mới độc lập này trong tất cả các Node SNR (bằng việc
đưa chúng vào Wave Queue).
c. Kết quả cuối cùng được kích hoạt trong khi quyền điều khiển của nó được lan tỏa trên khắp các Tail của Wave. Quyền điều khiển này được gửi tới
SNR Node.
Trong trường hợp kết quả là DONE hoặc FALSE
- 34 -
Repetition:
Nếu Head của Wave được dùng bởi luật REPEAT:
1. Tạm dừng chuỗi Wave.
2. Tách biến Frontal từ Wave.
3. Với luật khác nhau ta tách được các chuỗi Wave từ Head của Wave ban đầu.
4. Ghép các biến Frontal được lấy ra từ Wave, từđó nhận được Wave mới
5. Kích hoạt Wave mới và cho vào hàng đợi trong máy tính hiện tại và đợi kết quả cuối cùng trả về (nơi mà Wave có thể lan rộng ra các máy khác).
6. Nếu kết quả cuối cùng trả về có trạng thái là TRUE:
a. Sao chép và gửi tất cả các chuỗi Wave (mà bị trì hoãn ở bước 1) tới tất cả các Node SNR (có thể trong cùng máy hoặc khác máy).
b. Ghép chuỗi Wave này trong SRN Node với các biến Frontal được lấy ra từ Node tương ứng.
c. Kích hoặc các Wave mới nhận được trong mỗi SNR Node bằng việc đưa chúng vào hàng đợi của máy tính đang chứa Node này.
d. Đưa quyền điều khiển vào các Wave đã được kích hoạt và kết quả cuối cùng của Rule trả về từ Node hiện tại.
Trong trường hợp khác
e. Tách các Tail của Wave và ghép các biến Frontal được lấy từ Node hiện tại với chúng
f. Kích hoạt Wave mới trong Node hiện tại bằng cách đưa chúng vào trong hàng đợi
Wait
Nếu Head của Wave được dùng bởi luật WAIT:
1. Tách các biến Frontal từ Wave.
2. Lây chuỗi Wave từ Head và tạm dừng Tail.
3. Ghép các biến Frontal vào Wave (Wave này lấy từ Head) Æ ta nhận được Wave mới).
4. Kích hoạt Wave mới bằng cách cho chúng vào hàng đợi trong máy tính hiện tại và đợi kết quả trả về.
5. Nếu một số nhánh của Wave trả về với trạng thái kết quả là ABORT: a. Kích hoạt ngay kết quả trả về từ các thành Tail của Rule-controlled. b. Cài đặt trạng thái trả về trên Rule là FALSE.
- 35 -
d. Thay thế và gửi Tail của Wave tới tất cả các Node SNR được nhận từ
Head.
e. Ghép Tail của Wave trong SNR Node với biến Frontal được lấy từ Node này.
f. Kích hoạt Wave mới nhận được trong mỗi SNR Node bằng cách cho chúng vào hàng đợi của máy tính mà chứa SNR Node đó.
g. Đưa quyền điều khiển vào các Wave đã được kích hoạt và kết quả cuối cùng của Rule trong Node hiện tại.
Trong trường hợp trạng thái trả về DONE hoặc FALSE
h. Trạng thái trả về của Rule là DONE hoặc FALSE nếu Tail của Wave bị
mất.
Indivisible
Nếu Head của Wave được sử dụng bởi luật INDIVISIBLE:
1.Tách biến Frontal từ Wave
2.Lấy Wave từ Head và tạm dừng Tail của Wave.
3.Khóa Node hiện tại từ 1 Node khác.
4.Gắn biến Frontal, và đợi kết quả trả về.
5.Mở khóa cho Node hiện tại để sử dụng bới Wave khác.
6.Gửi Wave tới SNR Node, và gắn biến Frontal bởi Head của Wave.
7.Kích hoạt các Wave nhận được trong tất cả SNR Node bằng cách cho chúng vào hàng đợi.
8.Đưa quyền điều khiển tới Wave trong SNR.
Create
Nếu Head của Wave được sử dụng bởi luật CREATE:
1.Tách biền Frontal từ Wave
2.Lấy Wave từ Head và cho tạm dừng phần Tail của Wave.
3.Cung cấp trạng thái lan tỏa “Create”.
4.Kích hoạt Head của Wave bằng cách cho vào trong hàng đợi ở máy tính hiện tại.
Ởđây Head có thể tạo ra Node mới, Link mới và đợi kết quả trả về.
5.Phân chia Tail của Wave thành các trạng thái như: create, navigation…
6.Gửi Tail của Wave tới tất cả các SNR Node. Sau đó gắn thêm các biến Frontal (được lấy từ các Node này). Kích hoạt Wave mới bằng cách cho vào hàng đợi.
- 36 -
4. 3 Hệ thống Track
Hệ thống điều khiển của Track có thể tự nhân bản, sao chép hoặc được tạo trong suốt quá trình Wave thực thi và di chuyển. Tín hiệu echo sẽđược trả lại cho các Track