Tải bản đầy đủ (.ppt) (15 trang)

báo cáo tiểu luận môn lập trình mạng sử dụng thuật toán lomet để sắp xếp các giao dịch trong mạng phân tán

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (412.11 KB, 15 trang )

ĐẠI HỌC ĐÀ NẴNG
TIỂU LUẬN
LẬP TRÌNH MẠNG NÂNG CAO
GVHD : PGS.TS Lê Văn Sơn
HVTH : Nguyễn Thị Quỳnh Trang
Lớp : CH. Khoa học máy tính K24
THUẬT TOÁN LOMET
THUẬT TOÁN LOMET
SẮP XẾP CÁC GIAO DỊCH TRONG
SẮP XẾP CÁC GIAO DỊCH TRONG
HỆ PHÂN TÁN
HỆ PHÂN TÁN
Đề tài:
NỘI DUNG BÁO CÁO
Đặt vấn đề
1
Giải quyết vấn đề
2
Các modules thực hiện
3
Chương trình demo
4
1
2
3
4
Đặt vấn đề

Dùng phương pháp sắp xếp các giao dịch của
Lomet hãy xác định cho trạm i thuật toán cập
nhật đồ thị cục bộ khi nhận thông điệp mới có


đóng dấu H(AN
j
) đến từ trạm j.

Ta cần phải đảm bảo rằng một thông điệp AN
k

nào đó như H(AN
j
)>H(AN
k
) được xếp trước AN
j

ngay cả khi nó chỉ đến trạm i sau AN
j
.

Ngoài ra, ta còn giả sử rằng mỗi trạm j có thể
gửi cho chính trạm i nhiều thông điệp AN'
j
,
AN''
j
, AN'''
j
, liên quan đến các giao dịch khác
nhau
Giải quyết vấn đề


Trước khi có thông điệp gửi tới từ trạm j, tại trạm i lúc
này duy trì đồ thị cục bộ với nhiệm vụ hình thành trật tự
cho các giao dịch.

Các giao dịch trên trạm i tại thời điểm trước khi có thông điệp
H(AN
j
) được sắp xếp trong hàng đợi, tiêu chí sắp xếp là dấu
của các thông điệp.

Trạm phát được gắn một giá trị gọi là dấu. Giá trị này có tính
chất thời điểm cho trạm phát thông tin và dựa vào đồng hồ
lôgíc cục bộ của chính trạm đó.

Các đồng hồ được lấy thông qua hộp thoại giữa các trạm.

Trạm i của mạng có thể gửi cho các trạm khác thông điệp có
dạng (T,H
i
,i) trong đó H
i
là dấu của thông điệp tức là đồng hồ
lôgíc của nó và T có thể nhận một trong ba giá trị REQ, REL
và ACQ.

REQ : được phát đi cho tất cả các trạm khi trạm i
muốn vào trong đoạn găng

REL: được phát đi cho tất cả các trạm khi trạm i đã
rời khỏi đoạn găng


ACQ: được gửi bởi trạm j cho trạm i khi trạm j đã
nhận được từ trạm i thông điệp REQ

Giả sử rằng, tại thời điểm thông cáo của trạm j gửi
tới, đồng hồ thời gian lôgic của trạm i sẽ thực hiện
phép toán:
Nếu H
i
thì
H
i
:= H
j
+1;
Kết thúc nếu

Và thông điệp H(AN
j
) được xếp vào hàng đợi.
Giải quyết vấn đề
Giải quyết vấn đề

Tại trạm i có tài nguyên e
i
, phương pháp Lomet
nhằm sắp xếp trật tự các giao dịch để chống xung
đột xảy ra chứ không áp dụng cho các tài nguyên.

Điều kiện cung cấp tài nguyên là duy trì tình trạng không

vòng lặp cho các đồ thị G
i

Căn cứ theo cấu trúc, điều kiện này có thể được kiểm tra
cục bộ trên từng trạm.

Ta sẽ chỉ ra G có được tình trạng không vòng lặp như
thế nào.

Để làm việc đó, ta bắt đầu chỉ ra sự tồn tại của vòng
trong G kéo theo sự tồn tại của vòng trong ít nhất một G’
i

Giải quyết vấn đề

Để đảm bảo rằng một thông điệp AN
k
nào đó như
H(AN
j
)>H(AN
k
) được xếp trước AN
j
ngay cả khi nó
chỉ đến trạm i sau AN
j
. Ngoài ra, ta còn giả sử rằng
mỗi trạm j có thể gửi cho chính trạm i nhiều thông
điệp AN'

j
, AN''
j
, AN'''
j
, liên quan đến các giao dịch
khác nhau:

Do sử dụng đồng hồ logic và mỗi G
i
là hình ảnh thu nhỏ
của G nên mặc dù thông điệp AN
k
đã phát đi và được
đóng dấu H(AN
k
), nhưng còn lang thang trên đường và
đến trạm i sau thì trạm i vẫn có hình ảnh về thông điệp
của AN
k
. Vì vậy trạm i vẫn sắp xếp AN
k
vào hàng đợi dựa
trên dấu H(AN
k
).

Để đảm bảo được như vậy thì phải đảm bảo tính gắn bó
dữ liệu mạnh. Tại mọi lúc mọi nơi thì hình ảnh thu nhỏ
của G trên i là tức thời, nếu không đảm bảo được tinh

gắn bó mạnh thì thông điệp AN
k
sẽ đến sau AN
j
hoặc mất
thông điệp mặc dù AN
k
phát thông điệp trước.
CÁC MODULES THỰC HIỆN

Mô tả giao diện
public interface Server1 extends java.rmi.Remote
{
public abstract void printQueue()
throws java.rmi.RemoteException;

public abstract void sendMess()
throws java.rmi.RemoteException;


public abstract void receiveMess(String R, int H, int I)
throws java.rmi.RemoteException;

public abstract void setStart(boolean start)
throws java.rmi.RemoteException;
}
CÁC MODULES THỰC HIỆN

Khai báo hàng đợi
public class Queue

{
private boolean start;
int max=0;
private String Q[];
public boolean change=false;
private boolean ready=true;
public Queue()
{
start = false;
max=40;
Q=new String [max];
for (int i=0;i<max;i++) Q[i]="";
}
CÁC MODULES THỰC HIỆN

Thêm vào hàng đợi
public void setQueue(String R, int H, int I)
{
deleteQueue(R, I);
int i=0;
while (i<max-4 && Q[i].compareToIgnoreCase("")!=0 &&
H >Integer.parseInt(Q[i+1])) i+=4;
if (i<max-4)
{
for(int j=max-1; j>=i+4; j ) Q[j]=Q[j-4];
Q[i]=R;
Q[i+1]=H +"";
Q[i+2]=I +"";
Q[i+3]=0 +"";
change=true;

}
}
CÁC MODULES THỰC HIỆN

Kiểm tra quyền vào đoạn găng
public int checkAccess(int idx)
{
try
{
int i=0;
while (i<max-4 && Q[i] !="")
{
if (Q[i].compareToIgnoreCase("REQ")==0)
{
if (Q[i+2].compareToIgnoreCase(idx +"")==0)
{
System.out.println("==============================");
System.out.println("==============================");
System.out.println("======= ACCESSING =======");
System.out.println("==============================");
System.out.println("==============================");
CÁC MODULES THỰC HIỆN

Kiểm tra quyền vào đoạn găng(tt)
Thread.sleep(5000);
return 5;
}
else
{
return 0;

}
}
i=i+4;
}
return 0;
}
catch(java.lang.Exception exception)
{
System.out.println(exception.getMessage());
System.exit(0);
return 0;
}
}
CHƯƠNG TRÌNH DEMO
CHƯƠNG TRÌNH DEMO
XIN CHÂN THÀNH CẢM ƠN!

×