Alıstırmalar 2 - Da˘gıtık Sistemler Alıstırma 1 Alıstırma 2

advertisement
1
Prof. Dr. Th. Letschert
Çeviri: Turgay Akbaş
FB MNI
16. Mai 2013
Alıştırmalar 2 - Dağıtık Sistemler
Alıştırma 1
1. Neden dağıtık algoritmalar ardışık algoritmaların aksine her zaman literatürde bir modelin açıkça tanımı olarak
tanımlanırlar?
2. Javada soket-gerçekleştirim modelinin aşağıdaki özelliklerini tanımlayınız.
• Aktif birimler nelerdir?
• İletişim senkronmudur yoksa asenkron mu?
• İletişim kanalları nelerdir? FIFO özelliğini varmıdır? Kapasiteleri nedir?
• Kanallarda hangi hata davranışları bulunmaktadır?
• İşlemlerde hangi hata davranışları bulunmaktadır?
• İşlemler(Activities) bir programlama dilinde(örn: Java) olaya-dayalı mı yoksa kontrole-dayalı olarak mı
tanımlanırlar?
• Deterministik olmayan yapılar varmıdır?
3. Asenkron iletişim kanallarına sahip dağıtık bir sistem semafor gibi davranmaktadır. Açıklayınız!
4. Aşağıda verilen özelliklere sahip programlar dağıtık programlarmıdır:
• Bir makine üzerinde başlatılan ve soketler üzerinden iletişim kuran birden fazla java programı.
• Bir makine üzerinde başlatılan ve RMI üzerinden iletişim kuran birden fazla java programı.
• Bir makine üzerinde birden çok JVM tarafından çalıştırılan ve soketler üzerinden iletişim kuran programlar.
• Bir makine üzerinde birden çok JVM tarafından çalıştırılan ve diğerleriyle RMI üzerinden iletişim kuran aynı
java programı.
• Bir makine üzerinde bir JVM tarafından birbirleriyle sadece soketler üzerinden iletişim kuran birden fazla
Thread ile başlatılan bir program.
• Bir makine üzerinde bir JVM tarafından birbirleriyle sadece Queue’lar üzerinden iletişim kuran birden fazla
Thread ile başlatılan program.
Alıştırma 2
Kontrole-dayalı gösterimde tanımlanmış:
MAXLINE = 5
channel input(char), output(char[0..MAXLINE]);
process CharToLine:
char[] line; int i=0;
do
true : receive input( line[i] ) -> {
do
line[i] != CR && i < MAXLINE -> {
i++;
receive input( line[i] );
}
od
2
send output(line);
i = 0;
}
od
process Source:
int i = 0
char[] c = "a\n bcd\n efgh\n ijklmn\n opqrstu\n vw\n 123456789\n0"
do
true : send input(c[(i++) % c.size])
od
process Sink:
do
line = receive output
println(line)
od
1. Bu gösterim dağıtık sistem, dağıtık uygulama, dağıtık program,dağıtık algoritma,... tanımlarından hangisidir?
2. Psedocode ile verilen tanımlamayı kolay bir yoldan java’da gerçekleştiriniz. Gerçekleştiriminizi test ediniz.
3. Gerçekleştirimin doğruluğu ve yeterliliğini tartışınız: Tanımlandığı gibi mi çalışıyor? Dil özelliklerinin
gerçekleştirimini ve programın, özelliklerini dolaylı olarak kabul ettiği JRE’nin tutarlılığını düşününüz.
İpucu
Bir producer:
package aufgabe_2;
public class Source implements Runnable {
Channel<Character> channel;
protected Source(Channel<Character> channel) {
this.channel = channel;
}
@Override
public void run() {
int i = 0;
char[] c = {’a’,’\n’,’ ’,’b’,’c’,’d’,’\n’,’ ’,’e’,’f’,’g’,’h’,’\n’,’ ’,
’i’,’j’,’k’,’l’,’m’,’n’,’\n’,’ ’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’\n’,’ ’,
’v’,’w’,’\n’,’ ’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’\n’,’0’};
while (true) {
channel.send(c[(i++) % c.length]);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// ignore
}
}
}
}
Daha basit bir kanal aşağıda gösterildiği gibi gerçekleştirilebilir:
package aufgabe_2;
import java.util.concurrent.LinkedBlockingDeque;
3
public class Channel<T> {
private LinkedBlockingDeque<T> mailbox = new LinkedBlockingDeque<>();
public void send(T v) {
try {
mailbox.put(v);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public T receive() {
try {
return mailbox.take();
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
}
Alıştırma 3
Aşağıda pseudocode olarak verilen süreç tanımı hakkında düşününüz:
channel in1(int), in2(int), out(int)
process Merge:
int v1, int v2
receive in1(v1)
receive in2(v2)
do
v1 != EOF && v2 != EOF -> {
if
v1 <= v2 -> {
send out(v1)
receive in1(v1)
}
v2 <= v1 -> {
send out(v2)
receive in2(v2)
}
fi
}
v1 != EOF && v2 == EOF -> {
send out(v1)
receive in1(v1)
}
v1 == EOF && v2 != EOF -> {
send out(v2)
receive in2(v2)
}
od
send out(EOF)
1. Gösterim olaya-dayalı ya da kontrole-dayalı bir gösterim midir?
4
2. Süreç ilişkileri nasıl tanımlanmıştır,kullanılmıştır: İletişim partnerlerinin doğrudan yönlendirildikleri port / kanal
vb. unsurlar varmıdır? ...
3. Bu süreç tanımı bir dağıtık sistemin tanımlanmasında nasıl kullanılabilir?
4. Buna benzer bir sistemi kolay yoldan java’ da gerçekleştiriniz.
İpucu
Burada değerlerin iki sonlu dizileri karıştırılmalıdır. Bunun için bir sıranın sonunda iletişim mümkün olmalıdır. Bu işlem
tipik olarak, kanal kapatılarak ve veriyi taşıyarak yapılır. Kapatılabilen kanalların gerçekleştirimi, kapatılamayan kanallara
göre daha karmaşıktır. Verilen kod kapatılabilen bir kanal olarak kullanılabilir:
package aufgabe_3;
import
import
import
import
java.util.NoSuchElementException;
java.util.concurrent.locks.Condition;
java.util.concurrent.locks.Lock;
java.util.concurrent.locks.ReentrantLock;
/**
* Closable blocking Channel.
*
* @author TLE
*
* @param <T> Type of elements.
*/
public class Channel<T> {
// max capacity of a channel
private static final int queueSize = 10;
// global lock: lock for all channels
private static final Lock globalLock = new ReentrantLock();
// condition: await that a message is available on any channel
private static final Condition globalNotEmpty = globalLock.newCondition();
// condition:
private final
// condition:
private final
channel not full
Condition notFull = globalLock.newCondition();
channel not empty
Condition notEmpty = globalLock.newCondition();
@SuppressWarnings("unchecked")
private final T[] items = (T[]) new Object[queueSize];// channel queue
private int putptr;
// channel management: where to put
private int takeptr; // where to take
private int count;
// number of messages stored
private boolean closed;// channel is closed
/**
* Send message to channel.
* Blocking operation. Waits for storage if channel is full.
* Writing to a closed channel is forbidden.
* @param x the message
* @throws InterruptedException
IllegalStateException if the channel is closed
*
*/
public void send(T x) throws InterruptedException {
globalLock.lock();
if (closed) { throw new IllegalStateException("put on closed channel"); }
try {
5
while (count == items.length) {
notFull.await(); // wait for not full
}
if (closed) { throw new IllegalStateException("put on closed channel"); }
items[putptr] = x;
if (++putptr == items.length) putptr = 0;
++count;
notEmpty.signal();
globalNotEmpty.signalAll();
} finally {
globalLock.unlock();
}
}
/**
* Get message from channel.
* Blocking operations. Waits for message if none is available.
* @return a message from channel
* @throws InterruptedException
NoSuchElementException if the channel has no elements and is closed
*
*/
public T receive() throws InterruptedException {
globalLock.lock();
try {
while (count == 0) {
if (closed) {
throw new NoSuchElementException("take on closed channel");
}
notEmpty.await();
}
T x = items[takeptr];
if (++takeptr == items.length) takeptr = 0;
--count;
notFull.signal();
return x;
} finally {
globalLock.unlock();
}
}
/**
* Close the channel.
* Channels should be closed by the producer.
* All receivers blocked on the channel will be informed.
* Closed channels may not be reopened.
*/
public void close() {
globalLock.lock();
try {
closed = true;
notFull.signalAll();
notEmpty.signalAll();
globalNotEmpty.signalAll();
} finally {
globalLock.unlock();
}
}
public boolean eof() {
return closed;
}
6
}
Alıştırma 4
Aşağıda verilen Dijkstra’nın pseudocode gösterimlerini açıklayınız ve java’da doğru gerçekleştirimlerini yapınız.
1. guarded if
if
guard1
-> Aktion1
guard2
-> Aktion2
....
fi
2. guarded do
do
guard1
-> Aktion1
guard2
-> Aktion2
....
od
3. guarded communication
do
guard1 : Comm1
-> Aktion1
guard2 : Comm2
-> Aktion2
....
od
Alıştırma 5
1. Deterministik olmayan algoritmadan ne anlıyorsunuz?
2. Non-deterministlik, deterministik olmayan otomatalarda hangi amaca hizmet eder?
3. Deterministik olmayan bir otomatayı deterministik olmayan bir algoritmayla gerçekeştirmek gerekli, kullanışlı yoksa anlamsızmıdır?
4. Bir deterministik olmayan (mesaj) alma işlemini deterministik olmayan bir algoritmayla gerçekleştirmek gerekli,
kullanışlı yoksa anlamsızmıdır?
5. asenkron modeldeki bir kontrole-dayalı süreç tanımında neden deterministik olmayan receive işlemi varken deterministik olmayan broadcasting işlemi yoktur?
6. Senkron modelde kontrole-dayalı süreç tanımı için kullanılan gösterimde neden deterministik olmayan receive
işlemleri bulunmalıdır?
Download