Nội dungGiải thuật Loại trừ tương hỗ 1 Giới thiệu Java và RMI 2 Các modules thực hiện 3 Chương trình demo 4... GT Loại trừ tương hỗ• Trạm i của mạng có thể gửi thông điệp cho các trạm k
Trang 1Mô phỏng quá trình hoạt động
của 3 loại thông điệp
cơ bản REQ, ACQ và REL
Bộ môn: Lập trình mạng
Báo cáo
Giảng viên : PGS.TS LÊ VĂN SƠN Học viên : VÕ VĂN THIÊN
Lớp : Khoa học Máy tính K24
Trang 2Nội dung
Giải thuật Loại trừ tương hỗ
1
Giới thiệu Java và RMI
2
Các modules thực hiện
3
Chương trình demo
4
Trang 3GT Loại trừ tương hỗ
• Trạm i của mạng có thể gửi thông điệp
cho các trạm khác thông điệp có dạng (T,
Hi, i), trong đó Hi là dấu của thông điệp
có nghĩa là đồng hồ logic của nó và T có
thể nhận một trong 3 giá trị REQ, REL, ACQ
• REQ: thông điệp yêu cầu đến các trạm
• REL : thông điệp giải phóng
• ACQ: thông điệp phản hồi
Trang 4GT Loại trừ tương hỗ
• Mỗi trạm quản lý một hàng đợi các thông
điệp được sắp xếp theo quan hệ <thời gian, số> của từng thông điệp
• Hàng đợi ban đầu chứa thông điệp:
Mi = (REL, Hinit, i) trong đó, Hinit là thời điểm khởi sự giống nhau cho tất cả các trạm
Trang 5GT Loại trừ tương hỗ
• Khi nhận thông điệp dạng (REQ, Hi, i) hay
(REL, Hi, i), thông điệp này thay thế thông điệp Mi bất chấp nó là gì.
• Khi nhận thông điệp loại (ACQ, Hi, i), thông
điệp này thay thế Mi ngoại trừ Mi là một yêu cầu mà trong trường hợp đó ACQ bị bỏ qua
• Do vậy, ta có thể tiết kiệm gửi thông điệp ACQ cho trạm i khi trạm này đã gửi một thông điệp REQ và không còn thông điệp REL
Trang 6GT Loại trừ tương hỗ
• Trạm i được quyền vào đoạn găng khi thông
điệp REQ của nó đến trước theo nghĩa của quan hệ <thời gian, số> của tất cả các thông điệp khác trong hàng đợi của nó
Trang 7GT Loại trừ tương hỗ
Đoạn găng của trạm 2
Đoạn găng
của trạm 1
ACQ,6,3
REL,10,1 ACQ,9,1
ACQ,6,2
ACQ,4,3 REQ,2,1
REQ,2,2 REQ,2,1 REQ,2,2
1
2
3
7
8
9
10
Trạm1
H 1
1 2 3
7 8 9 10 Trạm 2
H 2
1 2 3
7 8 9 10 Trạm3
H 3
REL,10,1
Trang 8Java và Kỹ thuật RMI
x86/Win32
x86/Linux
Source
Code Java
(*.java)
Bytecode
*.class
x86/Win32
SPARC/Solaris x86/Linux
x86/Win32
x86/Linux
Source
Code Java
(*.java)
Bytecode
*.class
x86/Win32
SPARC/Solaris x86/Linux
x86/Win32
x86/Linux
Source
Code Java
(*.java)
Bytecode
*.class
x86/Win32
SPARC/Solaris x86/Linux
Trang 9
Java và Kỹ thuật RMI
RMI Registry
RMI Client
RMI Server
Trang 10Cá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;
}
Trang 11Cá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]=""; }
Trang 12Cá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;
} }
Trang 13Cá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("==============================");
…
Trang 14Chương trình Demo
Trang 15HUỲNH ĐỨC VIỆT
Thank You !