Hìn h 14: Mảnh B chọn liên kết ngoài có trọng số 1 (mới đƣợc thêm vào)
Vì vậy, giải thuật OMST đƣa ra phƣơng án giải quyết thông qua thủ tục ALERT. Khi một nút nào đó phát hiện thấy cấu hình mạng thay đổi, nó sẽ gửi
thông báo Alert tới cho gốc. Điều này cho phép gốc của cây biết rằng, cạnh ngoài có trọng số nhỏ nhất có thể đã bị thay đổi.
- Nếu gốc chƣa gửi thông báo Request, nó sẽ thực hiện lại việc tìm kiếm
cạnh ngoài nhỏ nhất từ đầu.
- Nếu gốc đã gửi thông báo Request và đã nhận đƣợc Accept, thông báo
Alert bị bỏ qua. Vì sau khi ghép 2 cây, gốc của cây sẽ tự động thực hiện Update.
- Nếu gốc đã gửi thông báo Request (và chƣa nhận đƣợc Accept), nó sẽ gửi
một thông báo Cancel cho mảnh kia.
o Nếu mảnh này đã gửi thông báo Accept, thì nó sẽ bỏ qua thông báo
Cancel, khi đó 2 mảnh sẽ vẫn đƣợc kết hợp lại làm một (Tƣơng tự trƣờng hợp đã nhận đƣợc Accept bên trên).
o Nếu mảnh này chƣa gửi Accept, nó sẽ gửi một thông báo Canceled,
chấp nhận việc hủy bỏ thông báo Request đã nhận đƣợc, nút gốc nhận đƣợc Canceled sẽ tiến hành tìm kiếm lại liên kết ngoài tối thiểu.
3.4.3 Chi tiết giải thuật OMST
Cũng giống nhƣ giải thuật GHS-83, các mảnh MST trong quá trình thực hiện giải thuật cũng liên tục tìm kiếm liên kết ngoài có trọng số tối thiểu qua thủ tục FIND. Sau đó tiến hành ghép các mảnh lại với nhau qua các liên kết đó. Quá trình này đƣợc lặp đi lặp lại cho tới khi chỉ còn một mảnh duy nhất, chính là cây khung của hệ thống.
Trong giải thuật chính, ngoài việc tìm kiếm các liên kết ngoài tối thiểu qua thủ tục FIND, các nút còn phải thực hiện thủ tục UPDATE để cập nhật lại cấu trúc dữ liệu của mình. Thủ tục UPDATE đƣợc gọi khi có thay đổi trong topo mạng hoặc trƣớc khi chúng ta tiến hành ghép mảnh. Lƣu ý, thủ tục UPDATE luôn đƣợc thực hiện trƣớc thủ tục FIND nhằm đảm bảo quá trình tìm kiếm diễn ra chính xác.
a) Thủ tục UPDATE
Thủ tục UPDATE là một trong hai thủ tục quan trọng nhất trong thuật toán. Nhiệm vụ của thủ tục này là cập nhật lại cấu trúc dữ liệu “rừng ảo” tại mỗi nút sao cho “rừng ảo” giống “rừng thật” (cây khung hiện tại) nhất có thể. Chúng ta có thể chứng minh đƣợc, sau khi thực hiện thủ tục UPDATE, ít nhất “cây ảo” của một nút sẽ giống hệt nhƣ mảnh MST chứa nút đó. Nhờ vậy, thủ tục FIND có thể tìm đƣợc liên kết ngoài tối thiểu của mảnh.
Để giảm độ phức tạp thông báo trong thủ tục UPDATE, mỗi nút không chỉ lƣu “rừng ảo” của nút mình, mà còn lƣu một tập “rừng ảo” của tất cả các nút
khác trong hệ thống. Cụ thể, mỗi nút sẽ lƣu lại một mảng Forest[] bao gồm toàn
bộ các “rừng ảo” của các nút khác mà nó biết trong mạng. Forest[u] là một bản
sao “rừng ảo” của nút u. Để tránh nhầm lẫn, chúng ta dùng ký hiệu Forestv[u] là
bản sao “rừng ảo” của nút u đƣợc lƣu tại nút v. Nhƣ vậy, một “rừng ảo” của nút nào đó có thể đƣợc lƣu ở toàn bộ các nút khác trên mạng. Các bản sao cục bộ này sẽ đƣợc điểu chỉnh cho khớp với nhau thông qua thủ tục UPDATE.
Thủ tục UPDATE đƣợc xử dụng để thay đổi “rừng ảo” tại mỗi nút cho khớp với “rừng thật”. Trong thủ tục này, mỗi nút sẽ tìm cách gửi các thông tin về “rừng thật” cho các nút lân cận của nó. Ví dụ, một nút thấy liên kết kề với mình vừa bị đứt, nó sẽ gửi một thông tin báo cho các nút lân cận về thay đổi
- Khi một liên kết trong cây khung bị mất:
o Thực hiện thủ tục loại bỏ liên kết này tại hai đầu của liên kết.
- Khi hai mảnh kết hợp với nhau hoặc topo mạng thay đổi:
o Gọi thủ tục UPDATE, sau đó gọi thủ tục FIND.
- Khi hai mảnh chọn chung một liên kết ngoài:
o Hai mảnh thực hiện thủ tục UPDATE riêng rẽ.
o Kết hợp hai mảnh lại làm một qua liên kết ngoài đó.
này. Các thông tin này sẽ đƣợc tính dựa vào các phiên bản “rừng ảo” lƣu tại nút đó.
Tuy nhiên, vấn đề phức tạp ở đây là: khi hai nút kề nhau không “đồng ý” về thông tin của “rừng ảo”, hay hai nút không biết thông tin của nút nào là chính xác hơn. Vấn đề này có thể giải quyết dựa vào khái niệm “phía” của một nút nhƣ sau:
- Xét một liên kết (u, v) trong một mảnh MST. Khi bỏ đi liên kết này, sẽ
đƣợc hai mảnh MST phân biệt, một mảnh chứa u và một mảnh chứa v. Ta định nghĩa một nút hay một liên kết trong mảnh là “phía u” nếu nút hay liên kết này thuộc mảnh MST chứa u. Ngƣợc lại, nó sẽ là “phía v”.
Khi hai nút u, v gửi thông tin về “rừng ảo” cho nhau, chúng sẽ dựa vào “phía” để xác định xem thông tin nào là chính xác hơn. Các thông tin về liên kết phía u lƣu tại u sẽ chính xác hơn những thông tin này khi lƣu tại v. Hay những thông tin phía u bao giờ cũng đến u trƣớc rồi mới đến v. Vì vậy, trong thủ tục UPDATE, một nút chỉ cần gửi thông tin về phía mỉnh cho các nút lân cận để cập nhật.
Thủ tục UPDATE sẽ đƣợc gọi tại nút gốc, khi đó nút gốc sẽ gửi các yêu cầu UPDATE đến lần lƣợt các nút khác trong mạng. Mỗi nút khi nhận đƣợc yêu cầu UPDATE từ nút cha, ngoài việc gửi yêu cầu này cho nút con, chúng sẽ gọi một thủ tục LOCAL_UPDATE để cập nhật thông tin cho các nút lân cận. Thủ tục này còn đƣợc gọi khi một nút nhận đƣợc các thông tin có ích từ nút khác.
Chi tiết thủ tục LOCAL_UPDATE nhƣ sau:
Với mọi k: (v, k) thuộc cây và Forestv(k) khác rỗng:
- Gửi thông báo DIFF(diff(k)) cho nút k
- Forestv(k) = Forestv(k) + diff(k)
Khi nhận đƣợc một thông báo DIFF (Add, Del) từ nút k
Forestv(v) = Forestv(v) + Add – Del
Bảng 2: Thủ tục LOCAL-UPDATE
Thủ tục LOCAL-UPDATE có sử dụng một số hàm và thủ tục hỗ trợ:
- Thủ tục diff(k)
(Tham số k: nút kề cần được cập nhật, trả lại 2 thông tin Add, Del)
(Trả về Add: các liên kết cần phải được thêm vào “rừng ảo” của nút k, theo ý kiến của nút v. Del: các liên kết cần phải được xóa khỏi “rừng ảo” của nút k, theo ý kiến của nút v)
Add = (Forestv(v) – Forestv(k)) proj my-side(k)
Del = (Forestv(k) – Forestv(v)) proj my-side(k)
return(Add, Del)
- Thủ tục my-side(k)
return treev(Forestv(v) – {v, k})
(treei(k): cây thuộc rừng ảo của k có chứa nút i)
Minh họa thực hiện các thủ tục này nhƣ trong hình 15, nút left gửi thông
báo yêu cầu chèn thêm liên kết (u, s) vào “rừng ảo” của nút right. Trong hình
16, nút left gửi thông báo yêu cầu chèn thêm liên kết (u, s) và xóa bỏ liên kết (u,
t) trong “rừng ảo” của nút right. Các thông báo này đƣợc nút right chấp nhận vì
Hình 15: Gửi thông báo thêm cạnh u-s cho nút right
Hình 16: Gửi thông báo thêm cạnh u-t và xóa cạnh u-s
- Thủ tục phát hiện kết thúc:
Quá trình UPDATE dọc theo mảnh MST cần đƣợc phát hiện kết thúc ở nút gốc. Cơ chế phát hiện kết thúc dùng trong giải thuật OMST đƣợc áp dụng từ cơ chế phát hiện kết thúc do Dijkstra và Scholten [16] đề xuất. Tƣ tƣởng của giải thuật này là: Khi một nút gửi thông điệp UPDATE cho các nút con, nó sẽ chờ
đợi tất cả các nút con gửi UPDATE_ACK, sau đó nó gửi UPDATE_ACK lên cho nút cha. Quá trình lặp lại và sự kết thúc đƣợc phát hiện tại nút gốc.
Thông điệp UPDATE_ACK đƣợc khởi phát từ nút lá, khi nút lá nhận đƣợc thông điệp UPDATE từ mảnh MST. Sau khi thực hiện LOCAL-UPDATE, nút lá sẽ đồng thời gửi UPDATE_ACK cho nút cha.
Nút cha nhận đƣợc UPDATE_ACK sẽ đánh dấu ACK cho nút lá đó. Nút cha đợi nhận đủ số thông điệp UPDATE_ACK từ tất cả các con, rồi gửi UPDATE_ACK lên cho nút cha.
Qui trình này đƣợc lặp lại cho tới khi nút gốc nhận đƣợc đủ số ACK từ tất cả các con của nút gốc. Thủ tục UPDATE kết thúc.
b) Thủ tục FIND
Thủ tục FIND đƣợc nút gốc gọi nhằm tìm kiếm liên kết ngoài tối thiểu trong mảnh. Mỗi nút sau khi nhận đƣợc yêu cầu tìm kiếm, nó sẽ gửi yêu cầu này cho các nút con và thực hiện việc tìm kiếm liên kết ngoài cục bộ của mình. Quá trình tìm kiếm sẽ sử dụng dữ liệu “rừng ảo”, vì vậy nút tìm kiếm không cần phải gửi thông báo cho các nút khác. Các liên kết ngoài tối thiểu tìm kiếm đƣợc sẽ đƣợc tập hợp từ dƣới lên trên theo cây khung. Một nút cha chỉ khi nhận đƣợc hết thông báo trả lời của các nút con mới lọc ra liên kết ngoài tốt nhất và gửi lên nút bên trên.
- Gửi yêu cầu tìm kiếm cho tất cả các nút con
- Thực hiện việc tìm kiếm liên kết ngoài tối thiểu cục bộ
- Đợi thông báo trả lời của các nút con
- Khi nhận đủ thông báo, lọc ra liên kết ngoài tối thiểu và gửi lại nút
cha
Bảng 3: Thủ tục FIND
Sau khi thực hiện xong thủ tục FIND và tìm đƣợc liên kết ngoài có trọng số tối thiểu, nút gốc sẽ tiến hành thủ tục CHANGE_ROOT để chuyển gốc về nút kề với liên kết này.
c) Thủ tục CHANGE_ROOT
- Khi nhận đƣợc yêu cầu chuyển gốc, tự đánh dấu mình là nút gốc
- Nếu là nút kề với liên kết ngoài tối thiểu, thủ tục dừng lại
- Tìm nút con trên đƣờng đến liên kết ngoài tối thiểu, gửi yêu cầu
chuyển gốc cho nút này
- Bỏ đánh đấu mình là gốc
Bảng 4: Thủ tục CHANGE_ROOT
d) Thủ tục MERGE
Thủ tục MERGE đƣợc sử dụng để kết hợp hai mảnh thông qua liên kết ngoài tối thiểu. Thủ tục đƣợc nút gốc của mảnh có ID nhỏ hơn thực hiện trƣớc. Nút gốc sẽ yêu cầu kết hợp mảnh qua thông báo Request, khi nhận đƣợc thông báo Accept từ mảnh bên kia, quá trình kết hợp mảnh sẽ đƣợc thực hiện.
- Nếu chƣa nhận đƣợc thông báo Request:
Gửi thông báo Request cho mảnh bên kia qua liên kết ngoài tối thiểu
Đợi thông báo Accept
Khi nhận đƣợc thông báo Alert (có thay đổi trong topo mạng), xét
các trƣờng hợp sau:
o Nếu đã nhận đƣợc Accept, bỏ qua Alert và kết hợp mảnh bình
thƣờng
o Chƣa nhận đƣợc Accept, gửi thông báo Cancel sang bên mảnh
kia, nếu nhận đƣợc Canceled thì hủy bỏ quá trình kết hợp mảnh
- Nếu đã nhận đƣợc thông báo Request từ mảnh bên kia qua cùng liên
kết ngoài tối thiểu:
Gửi thông báo Accept qua liên kết này
Khi nhận đƣợc thông báo Cancel:
o Chƣa gửi Accept, gửi lại thông báo Canceled và hủy bỏ quá
trình kết hợp mảnh.
o Nếu đã gửi Accpet, bỏ qua thông báo Cancel.
Bảng 5: Thủ tục MERGE
3.4.4Tính đúng đắn của giải thuật OMST
Để chứng minh tính đúng đắn của giải thuật OMST, chúng ta trƣớc hết xem xét một số định nghĩa sau:
Định nghĩa 3.2: Xét một mảnh MST tại một thực hiện nào đó
- Đặt Un là hợp của tất cả “cây ảo” của các nút ở trong mảnh MST này
- Đặt Um là hợp của các liên kết trong thông báo DIFF đang di chuyển trên
các liên kết trong mảnh.
Thì “tập cây ảo” của mảnh MST đó đƣợc định nghĩa là hợp của Un và Um
Định nghĩa 3.3: “Tập cây ảo” đƣợc gọi là có “tính bất biến không vòng
lặp” nếu với mọi mảnh trên cây MST thật, “tập cây ảo” của nó không chứa chu trình.
a) Định lý 3.5: Chừng nào thuật toán còn đảm bảo đƣợc “tính bất biến không vòng lặp”, thì các mảnh MST hiện thời sẽ không có chu trình
Chứng minh: Các liên kết trên các mảnh MST luôn luôn xuất hiện trên “cây ảo” của các nút kề với liên kết đó. Vì vậy, tập các liên kết trong mảnh MST sẽ là tập con của “tập cây ảo” của mảnh. Nếu “tập cây ảo” không có chu trình thì mảnh MST tƣơng ứng cũng không có chu trình. Định lý đƣợc chứng minh.
b) Định lý 3.6: Chừng nào thuật toán còn đảm bảo đƣợc “tính bất biến
không vòng lặp”, thì thủ tục FIND luôn kết thúc, và nút gốc sẽ biết sự kết thúc này.
Chứng minh. Với mọi nút u trong mảnh, nếu u không bị ngắt khỏi mảnh (do thay đổi topo mạng), thì sẽ đảm bảo những điều sau đây:
Nếu u không phải là gốc, sau khi u nhận đƣợc phản hồi của các nút con, u
sẽ gửi phản hồi của nó cho nút cha
Nếu u là gốc, sau khi u nhận đƣợc phản hồi của các nút con, thủ tục FIND
sẽ kết thúc tại u
Khi u nhận đƣợc tất cả các phản hồi của nút con, thì thủ tục FIND đã kết
thúc tại tất cả các nút con của nút u.
Các sự thay đổi trong mạng không ảnh hƣởng đến những chứng minh trên. Chúng ta xét 2 trƣờng hợp:
Một liên kết đƣợc phục hồi, thủ tục FIND không bị ảnh hƣởng vì liên kết
này không thuộc mảnh
Nếu liên kết giữa u và một nút con bị mất, u sẽ không đợi phản hồi từ nút
con này, vì vậy các chứng minh trên vẫn chính xác. Đồng thời, nút con của u sẽ trở thành gốc của một cây mới và tiến hành lại các thủ tục UPDATE và FIND.
c) Định lý 3.7: Thủ tục UPDATE không làm thay đổi “tính bất biến
không vòng lặp” trong “tập cây ảo”.
Chi tiết chứng minh định lí này đƣợc trình bày trong [12].
Các thủ tục khác trong thuật toán không làm thay đổi “cây ảo” tại các nút. Kết hợp với định lý trên, “tính bất biến không vòng lặp” luôn đƣợc đảm bảo
trong quá trình thực hiện giải thuật. Tính đúng đắn của giải thuật đƣợc chứng minh.
3.5 Kết luận
Chƣơng 3 đã đi sâu vào trình bày chi tiết 2 giải thuật hiệu quả nhất trong việc xây dựng cây khung trong mạng tĩnh và bảo trì cây khung trong mạng động. Các khái niệm, tƣ tƣởng và các định lí đƣợc chứng minh ở chƣơng này đóng vai trò quan trọng, là cơ sở để luận văn đƣa ra đề xuất đóng góp của riêng luận văn, cải tiến giải thuật để đơn giản quá trình thực thi, đồng thời đƣa ra giải pháp mới dựa trên giải thuật OMST để giải pháp mới có thể vận hành tối ƣu hơn trong mạng đa phát và mạng MANET.
CHƢƠNG 4 - CẢI TIẾN GIẢI THUẬT BẢO TRÌ TỐI ƢU CÂY KHUNG TRONG MẠNG ĐỘNG
4.1 Đặt vấn đề
Đóng góp lớn nhất của giải thuật OMST là tƣ tƣởng tối thiểu hóa chi phí điều khiển mỗi lần đáp ứng thay đổi về hình trạng mạng của cây khung, bằng cách lƣu trạng thái hiện thời của toàn mạng trong “cây ảo” và “rừng ảo”. Do đó với mỗi thay đổi của hình trạng mạng, các nút không tốn chi phí cập nhật lại toàn bộ hình trạng mới, mà dựa vào trạng thái cũ đƣợc lƣu trong cây ảo và rừng ảo để sửa lại trạng thái ứng với sự thay đổi đó. Sự sửa đổi này thực hiện ở bộ nhớ của mỗi nút, làm giảm đáng kể chi phí gửi qua mạng từ O(E) thành O(V).
Tuy nhiên việc tổ chức dữ liệu và lƣu trữ cục bộ của từng nút là không tối ƣu, dẫn tới kích thƣớc gói tin điều khiển gửi đi để cập nhật trạng thái của nút hiện tại cũng không tối ƣu, thể hiện rõ ở các điểm sau:
- Lƣu trữ danh sách cạnh thay vì danh sách nút: Mỗi cạnh có 2 nút, nên
không gian bộ nhớ để lƣu một cây khung nếu lƣu theo danh sách cạnh sẽ nhiều gấp đôi không gian nhớ của cây khung lƣu theo danh sách nút. Trong cây khung, “cây ảo” sẽ có số cạnh xấp xỉ bằng số nút (thực tế số cạnh của cây khung bằng số nút trừ đi 1, nhƣng đều có độ phức tạp là O(V)), nhƣng số cạnh của “rừng ảo” sẽ lớn hơn số cạnh của “cây ảo” rất nhiều, trong trƣờng hợp mạng liên kết dày đặc hoặc đầy đủ,