Bài 1 : 1.1 :Sau khi chạy chương trình và ta có được kết quả chạy trên các máy trạm như hình vẽ 1.2: Chương trình sử dụng 2 loại Event là: Arrival và Departure, tương ứng với 3 loại nhi
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐÀO TẠO SAU ĐẠI HỌC
──────── * ────────
Bài Tập :
CÁC KỸ THUẬT HIỆN ĐẠI TRONG CNNT
Giảng Viên : GVC-TS Phạm Đăng Hải
Học Viên thực hiện : Nguyễn Văn Vơn – CB160546
Lớp : CNTT-2016B
Hà Nội 09/2017
Trang 2Mục Lục
Bài 1 : 3 Bài 2 : 8 Bài 3 : 10 Bài 4 : 11
Trang 3Bài 1 :
1.1 :Sau khi chạy chương trình và ta có được kết quả chạy trên
các máy trạm như hình vẽ
1.2:
Chương trình sử dụng 2 loại Event là: Arrival và Departure, tương ứng với 3 loại nhiệm vụ: A, B, C
Sử dụng lớp Event với các thuộc tính sau:
Tên lớp: Event
Thuộc tính:
TaskType task_type: loại nhiệm vụ (A/B/C) EventType event_type: loại sự kiện (Arrival/Departure) int time: thời gian sự kiện
public class Event implements Comparator<Event>{
@Override
Trang 4public int compare(Event o1, Event o2) {
return o1.time - o2.time;
public static enum TaskType {
A, B, C
public static enum EventType{
Arrival, Departure
private TaskType task_type;
private int time;
private EventType event_type;
Project Ex1_CNTT là một chương trình java bao gồm 3 lớp:
- Agent: Các trạm 1, 2, 3 , 4
- Event: Các sự kiện Arrival/Departure cần xử lý với loại nhiệm vụ A/B/C và
thời gian tương ứng
- Main: Chương trình chính, mô phỏng quá trình hoạt động.
Do chiều của các sự kiện không tạo thành chu trình nên trong bài tập này, em đã giải quyết bằng cách lần lượt xử lý tất cả các sự kiện trên từng trạm theo thứ tự
2, 3, 4, xử lý xong trạm này mới chuyển sang trạm tiếp theo Dưới đây là hàm
xử lý các sự kiện trên một trạm
Agent.java
public void process(){
System.out.println("[Agent "+name+"]: Inital tasks");
System.out.println();
for (Iterator<Event> iterator = initial_queue.iterator();
iterator.hasNext();) {
Event next = iterator.next();
Trang 5System.out.print("\t<"+next.getTime()+", "+next.getTask_type() +">");
}
//take first event from intial queue
Event firstEvent = initial_queue.poll();
if(firstEvent != null){
time = firstEvent.getTime();
this.insertToProcessingQueue(firstEvent);
while(true){
System.out.println("\n -");
//process event from processing_queue
Event pE = processing_queue.poll();
if(pE != null){
//if it is arrival event, check busy status then forward it to waiting queue or create departure event
//take next event from initial event
if(pE.isArrivalEvent()){
time = pE.getTime();
//check busy status
if(this.takeWorker()){
//Dispatch a departure event
Event dE = new Event(pE.getTask_type(),
time+this.service_time,Event.EventType.Departure);
this.insertToProcessingQueue(dE);
}
else{//busy
this.insertToWaitingQueue(pE);
}
//take a new event from iniatial events
Event nE = initial_queue.poll();
if(nE != null)
Trang 6this.insertToProcessingQueue(nE);
}
else{//Departure event
//if it is departure event, forward it to forwarding queue, //if waiting queue is not empty, create departure event for first task of waiting queue
time = pE.getTime();
Event aE = new Event(pE.getTask_type(), time,
Event.EventType.Arrival);
this.forwarding_queue.add(aE);
this.releaseWorker();
this.trace_cpu += "\n[Agent "+name+"]: job
"+aE.getTask_type().toString()+": start: "+(time-service_time)+", finish:
"+time;
Event waitingEvent =
this.popElementFromWaitingQueue();
if(waitingEvent !=null){
this.takeWorker();
Event dE = new
Event(waitingEvent.getTask_type(),time+this.service_time,Event.EventTy pe.Departure);
this.insertToProcessingQueue(dE); }
}
this.trace();
}
else{
break;
}
}
Trang 7}
}
1
3: Xác định danh sách các thông điệp gửi qua lại giữa các
tiến trình logic tương ứng:
- Các thông điệp gửi từ trạm 1 sang trạm 2:
<1,A> <4,B> <7,B> <9,B> <13,A> <16,B>
<20,B>
- Các thông điệp gửi từ trạm 1 sang trạm 3:
<2,C> <8,C> <17,C>
- Các thông điệp gửi từ trạm 2 sang trạm 3:
<6,A> <26,A>
- Các thông điệp gửi từ trạm 2 sang trạm 4:
<11,B> <16,B> <21,B> <31,B> <36,B>
- Các thông điệp gửi từ trạm 3 sang trạm 4:
<10,C> <14,A> <18,C> <25,C> <34,A>
Trang 8Bài 2 :
2.1: số cuối mã số học viên là 6
6 Xn+1 = 314159269 Xn + 453806245 MOD 231 Với a: 314159269, b: 453806245, seed: 120, df: 100
10 số ngẫu nhiên đầu tiên là:
x: 1645696509
x: 1292494006
x: 590352883
x: 1677339204
x: 1534887545
x: 1580426402
x: 1148044559
x: 589159248
x: 1625416501
x: 1143302606
2.2 : Mã nguốn : ex2_prg-vonnv.py
2.3 : kết quả khi bậc tự do là 100 , seed là 120
Trang 9[ 89 100 113 101 119 85 109 105 94 103 99 86 108 88 101 97 87 124
99 108 111 87 97 102 88 100 99 105 119 98 93 86 108 88 91 96
92 84 94 82 105 88 103 112 104 95 119 91 109 89 100 101 107 97
103 87 79 89 94 111 96 101 90 111 103 115 98 102 81 89 106 110
105 97 80 121 101 120 119 99 105 92 106 103 106 108 89 87 91 96
113 102 91 82 101 90 90 96 95 89 106]
Chisquare resutl: Power_divergenceResult(statistic=106.24180000000001, pvalue=0.31581910878717373)
Trong đó 106.24180000000001 là chisquare test > 91,88
0.31581910878717373 là độ tin cậy
Trang 10LPA
Ts=18
29,38
Bài 3 : Null Message
Từ hình vẽ :
- LPA gửi cho LPB một Null Message có nhãn thời gian là: 20+2 = 22
- LPB gửi cho LPC một Null Message có nhãn thời gian là: 22+4 = 26
- LPC gửi cho LPA một Null Message có nhãn thời gian là: 26+3 = 29
- LPA gửi cho LPB một Null Message có nhãn thời gian là: 29+2 = 31
- LPB gửi cho LPC một Null Message có nhãn thời gian là: 31+4 = 35
- LPC gửi cho LPA một Null Message có nhãn thời gian là: 35+3 = 38
Kết luận: Nhãn thời gian null message phải được gửi đi cho tới khi tiến trình LPA xử lý được thông điệp có nhãn thời gian 32 là: 22, 26, 29, 31, 35, 38
Trang 12antiMsgQueue
Tw=0
OutputQueue
-6 OutputQueue
-3
Tw=1
Bài 4: Thuật toán TimeWarp
Sự thay đổi trạng thái của các tiến trình trong 7s được thể hiện như sau :
Trạng thái đầu, khi các tiến trình bắt đầu xử lý các thông điệp đứng đầu hàng đợi vào, Thời gian mô phỏng của các tiến trình đều bằng 0, hàng đợi cho các anti-message là rỗng Trạng thái của hệ thống tại thời điểm Tw được cho bên dưới
− Các LP tăng Ts của mình tới nhãn thời gian của thông điệp đứng đầu inputQueue và bắt đầu xử lý (trong 1.0 giây) Sau 1 giây (Tw=1), sau khi các tiến trình xử lý xong thông điệp đầu tiên, tiến trình 1 có thời gian mô
phỏng là, gửi tới LP2 thông điệp có nhãn thời gian là 3 (và lưu lại trong
outputQueue anti-message có nhãn thời gian 3) Tiến trình 2 có Ts=2 và
gửi thông điệp có nhãn thời gian 6 tới LP1 (và lưu lại trong outputQueue
until message có nhãn thời gian 6) Do thời gian gửi thông điệp = 0, nên
các thông điệp đã nằm trong hàng đợi của các tiến trình đích tương ứng Trạng thái hệ thống ở giây thứ 1 (tw=1) được cho bên dưới
− Các tiến trình tăng thời gian lên thông điệp đứng đầu hàng đợi và tiếp tục xử lý thông điệp này trong 1 giây Sau 1 giây (tw=2), tiến trình LP1 có thời gian mô phỏng là 3, gửi một thông điệp có nhãn thời gian là 5 đến LP2.Tiến trình 2 tăng thời gian mô phỏng lên và gửi thô,ng điệp có nhãn thời gian 10 đến LP1 Do thời gian gửi thông điệp bằng 0,
Trang 13-6 -10 OutputQueue
-3 -5
Tw=2
OutputQueue
-6 OutputQueue
-3 -5
Tw=2
antiMsgQueue
-6 -7 antiMsgQueue
-3 -5 -11
Tw=3
nên các thông điệp đều đã tới đích Trạng thái tại thời điểm Tw=2 được cho bên dưới
− Tại thời điểm Tw=2, khi bắt đầu xử lý sự kiện tiếp theo, tiến trình LP2 phát hiện ra một strangler massage (thông
điểm trước nhãn thời gian của strangler message Đó là khi thời gian mô phỏng của LP2 = 2 LP2 khôi phục trạng thái tại thời điểm có nhãn thời gian 2 (trước khi xử lý sự kiện 6) và gửi anti-message có nhãn thời gian là -10 Do thời gian cho việc quay lui, hủy bỏ thông điệp là 0, nên sau khi quay lui hệ thống vẫn tại thời điểm tw=2 Trạng thái hệ thống tại tw=2 sau khi quay lui cho bên dưới
Trang 14-6 -7 antiMsgQueue
-3 -5
Tw=3
antiMsgQueue
-6 -7 -9 antiMsgQueue
-3 -5 -8
Tw=4
antiMsgQueue
-6 -7 -9 -10 antiMsgQueue
-3 -5 -8 -9
Tw=5
InputQueue Ts=9 InputQueue Ts=8 Tw=6
Tw = 6 antiMsgQueue LP1 : -3, -5, -8, -9, -11
antiMsgQueue LP2 : -6, -7, -9, -10, -12
Trang 1513 12 10 LP1 11 11 LP2
InputQueue Ts=9 InputQueue Ts=9 Tw=7
Tw = 7 antiMsgQueue LP1 : -3, -5, -8, -9, -11, -11
antiMsgQueue LP2 : -6, -7, -9, -10, -12, -13