tiểu luận môn lập trình mạng đồng bộ hóa và gắn bó dữ liệu thông qua một bài toán cụ thể - Pdf 25

Lập Trình Mạng
ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC BÁCH KHOA

TIỂU LUẬN MÔN
LẬP TRÌNH MẠNG
LẬP TRÌNH MẠNG
Đề tài :
ĐỒNG BỘ HÓA VÀ GẮN BÓ DỮ LIỆU THÔNG
QUA MỘT BÀI TOÁN CỤ THỂGV hướng dẫn : PGS TS. LÊ VĂN SƠN
Chuyên ngành : Khoa Học Máy Tính
Khóa : K24
Học viên : Lê Quang VũHVTH: Lê Quang Vũ
1
ĐÀ NẴNG, 05/2012
Lập Trình Mạng
LỜI MỞ ĐẦU
Sự bùng nổ của mạng Internet toàn cầu cùng với các ứng dụng của nó đã đem lại
cho xã hội một cuộc sống tiện nghi và hiện đại. Mạng internet đã giúp cho con người
bước vào một kỷ nguyên công nghệ thông tin và tri thức, mang lại khả năng kết nối
gần nhau hơn và giải quyết các vấn đề lớn một cách gọn gàng và có hợp tác.
Trong thời điểm này lĩnh vực hệ phân tán trong tin học đóng một vai trò hết sức
quan trọng. Vận dụng các kiến thức của hệ phân tán ta có thể giải quyết các bài toán
lớn một cách dễ dàng bằng cách chia sẻ cách thức giải quyết thông qua các máy con
nhằm tiết kiệm thời gian và công sức hơn khi giải quyết trên hệ tập trung.

 Chia xẻ các tài nguyên.
(Theo Andrew Tanenbanum)
HVTH: Lê Quang Vũ
4
Lập Trình Mạng
Hình 2. Một phần của mạng Internet
Nói chung, một định nghĩa phổ biến và khá đầy đủ về hệ phân tán được trình bày
như sau:
“Hệ tin học phân tán hay nói ngắn gọn là hệ phân tán (Distributed System) là hệ
thống xử lý thông tin bao gồm nhiều bộ xử lý hoặc bộ vi xử lý nằm các tại các vị trí
khác nhau và được liên kết với nhau thông qua phương tiện viễn thông dưới sự điều
khiển thống nhất của một hệ điều hành.”
Mục tiêu của hệ phân tán:
 Tăng tốc độ bình quân trong tính toán, xử lý.
 Cải thiện tình trạng luôn luôn sẵn sàng của các loại tài nguyên.
 Tăng độ an toàn cho dữ liệu.
 Đa dạng hóa các loại hình dịch vụ tin học
 Đảm bảo tính toàn vẹn của thông tin.
HVTH: Lê Quang Vũ
5
Lập Trình Mạng
2. Các mô hình hệ phân tán và ứng dụng mạng:
Các lớp phần mềm:
Kiến trúc phần mềm: cấu trúc của phần mềm như là các lớp và các module trong
các thuật ngữ của các dịch vụ đưa ra và yêu cầu giữa các tiến trình trên cùng hoặc
trên các máy tính khác nhau.
Platform (hệ nền): phần cứng mức thấp nhất và các lớp phần mềm (hệ điều hành).
Middleware: một lớp của phần mềm mà mục đích của nó là đánh dấu
heterogeneity và để cung cấp một mô hình lập trình cho các ứng dụng, như: CORBA,
RMI (Remote Method Invocation), DCOM (Distributed Component Object

tiên và bit sau cùng của một thông điệp.
 Sự trì hoãn xử lý: là thời gian cần để hệ điều hành xử lý/gửi/nhận
thông điệp.
 Sự trì hoãn xếp hàng: thời gian cần để một thông điệp xếp hàng
ở cuối máy chủ hoặc ở các node trung gian đợi để truyền đi.
o Băng thông (bandwidth): Tổng số thông tin có thể được truyền đi trong
một thời gian đã cho.
o Sự biến đống tạp (Jitter): thời gian khác nhau giữa các sự trì hoãn ảnh
hưởng bởi các thông điệp khác nhau.
 Đồng hồ và thứ tự các sự kiện:
o Không có khái niệm toàn cục của thời gian.
o Nhịp độ đồng hồ trôi: nhịp độ tương đối ở một đồng hồ máy tính trôi
dạt ra khỏi từ một đồng hồ tham chiếu hoàn hảo.
 Đồng bộ hóa đồng hồ:
o Hệ thống định vị toàn cầu (GPS): một ít máy tính có thể sử dụng máy
thu radio để nhận thời gian đọc từ GPS với độ chính xác là 1 micro-
giây. Chúng có thể gửi các thông điệp thời gian đến các máy tính khác
trong mạng tương ứng của chúng.
o Các đồng hồ logic: mỗi thông điệp là thời gian đóng dấu lên với một số
nối tiếp mà phản chiếu thứ tự lôgic của chúng.
HVTH: Lê Quang Vũ
8
Lập Trình Mạng
CHƯƠNG II: CÁC VẤN ĐỀ ĐẶT RA VÀ CÁCH GIẢI QUYẾT
1. Đặt vấn đề
Xét bài tóan quen thuộc người sản xuất – người tiêu thụ, trong đó khả năng tiêu
thụ là nguyên nhân chính hạn chế số lượng hàng hóa sản xuất để nó không vượt qúa
số lượng tiêu thụ một giá trị lớn hơn N. Người sản xuất P và người tiêu thụ C là hai
người nằm trên hai trạm cách xa nhau.
Giả sử rằng NP là số lượng sản xuất ra và NC là số lượng tiêu thụ tại thời

C
i
: Tiêu thụ thứ i
Lập Trình Mạng
Trong hệ thống phân tán, người ta có thể vận dụng hợp lực này theo kiểu như sau:
1. Ta đưa vào:
STT Diễn giải
1 Trên trạm P một biến NP thể hiện số lượng chính xác sản xuất đã có
2 Trên trạm C một biến NC thể hiện số lượng chính xác tiêu thụ đã thực
hiện
2. Ta đưa vào
STT Diễn giải
1 Trên trạm P một biến NC’ ảnh của NC mà P gia tăng mỗi một lần
nó nhận được thông điệp từ C báo cho nó biết là tiêu thụ mới đã
diển ra.
2 Trên trạm C một biến NP’ ảnh của NP mà C gia tăng mỗi một lần
nó nhận thông điệp từ P báo cho nó biết một sản xuất mới đã diễn
ra.
Một sự đồng bộ hóa chính xác được đảm bảo bằng việc xác nhận trên mỗi trạm
các điều kiện sau đây:
1. Trên trạm sản xuất: NP’-NC > 0 (3)
2. Trên trạm tiêu thụ: NP-NC’ < N (4)
Thực tế ta có thể viết
NP=NP’+np, với np ≥ 0, (5)
Trong đó, np số lượng thông tin đã sản xuất bởi P mà C không biết,
NC = NC’ + nc, với nc ≥ 0 (6)
Trong đó nc số lượng thông tin đã tiêu thụ bởi C mà P không biết.
Không cần tính đến (5) và (6), các điều kiện (3) và (4) bao hàm các điều kiện
ban đầu nêu trong (1) và (2).
* Ta có thể khái quát hóa phương pháp này cho điều kiện đồng bộ hóa bằng công

Trong bài tóan người sản xuất – người tiêu thụ vấn đề sử dụng các biến trạng thái
không lùi cho phép sử dụng các bản sao gần đúng của các biến loại này. Cơ chế đồng
bộ gọi là các công tơ sự kiện thích hợp với các vấn đề đặt ra.
Mỗi một công tơ, biến nguyên không lùi, được kết hợp với một nhóm đặc biệt các
sự kiện.
Trên một công tơ sự kiện nào đó có phối hợp với nhóm E được xác định bởi ba
hàm nguyên thủy.
STT Tên hàm Giải thích
1 Tang_len(E) Tăng nội dung công tơ lên một đơn vị có nghĩa
là một sự kiện nhóm E đến.
2 Truy_van(E) Cung cấp giá trị hiện hành của công tơ phối
hợp với E.
3 Cho(E,n) Theo tiến trình gọi chừng nào giá trị công tơ
còn nhỏ hơn n.
Mỗi công tơ được khởi động ngay khi thành lập nó.
Để thể hiện bài tóan người sản xuất – người tiêu thụ, với cùng các tên của biến, ta
định nghĩa:
1. Hai công tơ sự kiện NP’ và NC’, được khởi động bằng giá trị 0.
2. Hai biến nguyên NP và NC, khởi sự là 0, là cục bộ đối với tiến trình người sản
xuất P và người tiêu thụ C.
Trong trường hợp này, ta viết các tiến trình như sau:
HVTH: Lê Quang Vũ
11
Lập Trình Mạng
Người sản xuất
Vòng lặp
Cho (NC’,NP-N+1)
{chuyển khi NP-NC’<N}
San_xuat
Tang(NP’)

(5): Thông tin về thông điệp
(6): Hiển thị giá trị số gia của công tơ sự kiện.
Chương trình dùng để cài đặt Server
// Môi trường làm việc của Java
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import java.util.*;
public class SetServer extends JFrame{
// Variables declaration - GEN-BEGIN:variables
//tao cac nut giao dien
private JPanel pnLookupServer;
private JLabel lblHost;
private JComboBox cboHost;
private JLabel lblPort;
private JComboBox cboPort;
private JButton btnLookup;
private JButton btnReset;
private JButton btnAbout;
HVTH: Lê Quang Vũ
14
3
1
2
5
4
6

Socket client;
//con chua cac ket noi tu cac may client trong mang (ket noi den)
Congto con[] = new Congto[10];
//conMaster dung de chua mot ket noi tu mot server trong he den tren
ServerSocket (Ket noi den)
Congto conMaster;
//Da co conMaster trong he ket noi chua
boolean bConMaster = false;
//conSlave dung de chua ket noi voi mot server trong he (ket noi di)
Congto conSlave;
// Phương thức khởi dựng server sử dụng intLocalPort
HVTH: Lê Quang Vũ
15
Lập Trình Mạng
public SetServer(int port) {
try{
intLocalPort = port;
initialize();
}catch(Exception e){
}
}
//Gắn thuộc tính cho các đối tượng trên form
private void initialize() throws Exception{
pnLookupServer = new JPanel();
lblHost = new JLabel();
cboHost = new JComboBox();
lblPort = new JLabel();
cboPort = new JComboBox();
btnLookup = new JButton();
btnReset = new JButton();

label3 = new JLabel();
cboSendto = new JComboBox();
// this
this.setTitle("Server");
this.setSize(new Dimension(600, 400));
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = getContentPane();
contentPane.setLayout(new BorderLayout());
// pnLookupServer
{
pnLookupServer.setBorder(new TitledBorder(null, "Ket noi servers",
TitledBorder.LEADING, TitledBorder.TOP, null, Color.blue));
pnLookupServer.setLayout(new FlowLayout(FlowLayout.LEFT));
// lblHost
lblHost.setText("Hostname: ");
pnLookupServer.add(lblHost);
// cboHost
cboHost.setEditable(true);
cboHost.setModel(new DefaultComboBoxModel(new String[] {
"localhost",
"127.0.0.1", //mặc định
"172.16.0.1",
"172.16.0.2", //giả lập
"172.16.0.3"
}));
pnLookupServer.add(cboHost);
// lblPort
lblPort.setText("Port :");
pnLookupServer.add(lblPort);
// cboPort

{
srpListServer.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_S
CROLLBAR_ALWAYS);
srpListServer.setViewportBorder(new TitledBorder("List Servers :"));
srpListServer.setMinimumSize(new Dimension(50, 51));
srpListServer.setPreferredSize(new Dimension(200, 392));
// lstServers
lstServers.setFont(new Font("Dialog", Font.BOLD, 14));
lstServers.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
lstServers.setBackground(new Color(247, 247, 214));
srpListServer.setViewportView(lstServers);
}
contentPane.add(srpListServer, BorderLayout.WEST);
// pnServerInfo
{
pnServerInfo.setBorder(new TitledBorder(null, "Server info",
TitledBorder.LEADING, TitledBorder.TOP, null, Color.blue));
pnServerInfo.setLayout(new FlowLayout());
// lblAddress
lblAddress.setText("IP Address :");
pnServerInfo.add(lblAddress);
// txtAddress
HVTH: Lê Quang Vũ
18
Lập Trình Mạng
txtAddress.setColumns(10);
txtAddress.setEditable(false);
txtAddress.setForeground(new Color(153, 0, 153));
txtAddress.setFont(new Font("Dialog", Font.BOLD, 12));
pnServerInfo.add(txtAddress);

txtReceive.setText("");
txtReceive.setFont(new Font("Dialog", Font.BOLD, 12));
srpReceive.setViewportView(txtReceive);
}
pnMessage.add(srpReceive, BorderLayout.CENTER);
}
HVTH: Lê Quang Vũ
19
Lập Trình Mạng
// Cong to su kien
{
pnClock.setLayout(new FlowLayout());
// lblClock
lblClock.setText("0");
pnClock.add(new JLabel("So gia: "));
pnClock.add(lblClock);
}
tabPaneInfo.addTab("Messages", pnMessage);
tabPaneInfo.addTab("Cong to su kien", pnClock);
}
splitMain.setTopComponent(tabPaneInfo);
// pnDeliverMessage
{
pnDeliverMessage.setBorder(new TitledBorder("Deliver message:"));
pnDeliverMessage.setLayout(new GridBagLayout());
((GridBagLayout)pnDeliverMessage.getLayout()).columnWidths = new
int[] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
((GridBagLayout)pnDeliverMessage.getLayout()).rowHeights =
new int[] {0, 0, 0, 0};
((GridBagLayout)pnDeliverMessage.getLayout()).columnWeights

new Insets(0, 0, 5, 5), 0, 0));
// label3
label3.setText("Send to :");
pnDeliverMessage.add(label3, new GridBagConstraints(0, 2,
1, 1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 0, 5), 0, 0));
// cboSendto
cboSendto.setModel(new DefaultComboBoxModel(new String[] {
"All servers",
"Selected"
}));
pnDeliverMessage.add(cboSendto, new GridBagConstraints(1, 2, 1,
1, 0.0, 0.0,
GridBagConstraints.CENTER, GridBagConstraints.BOTH,
new Insets(0, 0, 0, 5), 0, 0));
}
splitMain.setBottomComponent(pnDeliverMessage);
}
contentPane.add(splitMain, BorderLayout.CENTER);
// End of initialization //GEN-END:initialize
//Show frame
this.show();
// Information about host
inetAddr = InetAddress.getByName("localhost");
strLocalHost = inetAddr.getHostName();
txtHostname.setText(strLocalHost);
txtAddress.setText(inetAddr.getHostAddress());
txtLocalPort.setText(Integer.toString(intLocalPort));
//nghe ket noi tu cac server khac

//Cac client tren mang ket noi toi
intNumOfClientConnected = intNumOfClientConnected +1;
con[intNumOfClientConnected] = new
Congto(skConnect,0,txtReceive,lblClock);
con[intNumOfClientConnected].start();
}
} //end While
}
//Click chuot va nhan nut Ket noi
private void btnLookupActionPerformed(ActionEvent e) {
try{
intRemotePort =
Integer.parseInt(cboPort.getSelectedItem().toString());
strRemoteHost = cboHost.getSelectedItem().toString();
JOptionPane.showMessageDialog(null,"Lookup and connect to: " +
strRemoteHost + " on port: " + Integer.toString(intRemotePort));
//Slave ket noi voi server trong he
HVTH: Lê Quang Vũ
22
Lập Trình Mạng
client = new
Socket(strRemoteHost,intRemotePort,inetAddr,intLocalPort+1);
conSlave = new Congto(client,0,txtReceive,lblClock);
conSlave.start();
vtServers.addElement(conSlave.getInfoClient());
lstServers.setListData(vtServers);
JOptionPane.showMessageDialog(null,"Connect successfully !");
cboHost.setEnabled(false);
cboPort.setEnabled(false);
btnLookup.setEnabled(false);

HVTH: Lê Quang Vũ
23
Lập Trình Mạng
addTextArea(Integer.toString(intClock),strContent,str
To);
}
break;
case 1:
break; //"All Clients": dự phòng
case 2: //"Selected" - Gui cho server duoc chon trong danh sach
String item = (String)lstServers.getSelectedValue();
if(lstServers.getSelectedIndex()==0){
JOptionPane.showMessageDialog(null,"Can't send to yourself !");
break;
}
if(item.equals(strMaster)){
if(conMaster!=null){
conMaster.sendMessage(strMes);
addTextArea(Integer.toString(intClock),strContent,item);
}
}else{
if(conSlave!=null){
conSlave.sendMessage(strMes);
addTextArea(Integer.toString(intClock),strContent,item);
}
}
break;
}
}catch(Exception ex){
JOptionPane.showMessageDialog(null,"Error ! " + ex.getMessage());


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status