<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="laboratoare.xsl"?>

<!DOCTYPE radacina [
  <!ENTITY a "&#259;">
  <!ENTITY i "&#238;">
  <!ENTITY s "&#351;">
  <!ENTITY t "&#355;">
  <!ENTITY e "&#226;"> 
]>

<laboratoare an="Master" disciplina="Algoritmic&a; distribuit&a;">

<laborator tema="Introducere">
  <problema>
Simulati, folosind fire de executie, o aplicatie de tip <i>load-balancing</i>. Procesoarele p1,...,pn vor fi dispuse intr-o topologie de
tip inel, fiecare procesor pi fiind capabil de a procesa un numar maxim de ni mesaje. Numarul de mesaje aflate in curs de procesare
la un moment dat pentru un procesor pi este t(pi) &lt;= ni.
Descrieti un algoritm distribuit care sa asigneze mesaje procesoarelor in asa fel incat daca sistemul este intr-o
stare in care (*) |t(pi) - t(pj)| &lt;= 1 pentru orice i,j atunci dupa asignarea unui mesaj conditia (*) va fi in continuare respectata.
(Particularizati pentru situatia ni=1, pentru orice i)
<br/>Se acorda <b>bonus</b> pentru crearea unui applet demonstrativ care sa simuleze interactiv, folosind fire de executie, algoritmul de mai sus.
  </problema>
</laborator>


<laborator tema="Memorie partajata">
<problema>
Consideram un sistem format din n procesoare p1,...,pn. 
Fiecare procesor poate primi mesaje succesive dar este capabil sa proceseze, la un moment dat, cel mult un singur mesaj, durata procesarii fiind finita.
Procesoarele pot comunica prin intermediul unei memorii partajate.
Implementati un algoritm care sa permita procesarea eficienta a mesajelor in cadrul sistemului.
Accesul la memorie se va face prin intermediul unui <b>servlet</b> responsabil cu scrierea/citirea informatiilor.
</problema>
</laborator>


<laborator tema="Broadcast, Convergecast - RMI">
<problema>
  <problema>
  Implementati un algoritm de tip <i>Convergecast</i> pentru procesoare dispuse intr-o topologie de tip arbore, <b>folosind RMI</b>.<br/>
Initial, fiecare procesor detine o valoare reala. Se doreste ca, la terminarea algoritmului, in
radacina sa se obtina valoarea maxima dintre toate valorile din retea.
  </problema>
</problema>
</laborator>


<laborator tema="Flooding">
<problema>
Implementati un algoritm de tip <i>Flooding</i> pentru procesoare conectate sub forma unui graf conex folosind RMI,
in asa fel incat sistemul sa poata fi distribuit in mod real - fiecare procesor trebuie sa-si gestioneze securitatea
prin intermediul unui fisier de permisiuni.
<br/>
Parametrizati acest algoritm astfel incat acesta sa poata determina un arbore partial:
<ul>
<li>oarecare</li>
<li>DFS (cu radacina fixata)</li>
<li>DFS (fara radacina fixata)</li>
<li>...</li>
</ul>
</problema>
</laborator>


<laborator tema="Alegerea liderului in inele">
  <problema>
  Implementati un algoritm distribuit care sa rezolve problema alegerii liderului intr-un inel, avand complexitatea
<ul>
<li><tt>MC=O(n^2)</tt></li>
<li><tt>MC=O(n log(n))</tt></li>
</ul>
  </problema>
</laborator>


<laborator tema="CSP"/>

<laborator tema="CSP"/>

<laborator tema="CSP"/>

<!--
<laborator tema="Problema consensului - CAJO">
<problema>
Folosind frameworkul Cajo (https://cajo.dev.java.net/)
<ul>
<li>Scrieti un algoritm care sa rezolve problema consensului intr-un sistem sincron cu caderi, 
in situatia in care procesoarele defecte se comporta "corect"</li>
<li>Implementati algoritmul EIG (Exponential Information Gathering with Recursive Majority Voting) penttru rezolvarea problemei
consensului intr-un sistem 	bizantin.</li>
</ul>    
</problema>
</laborator>



<laborator tema="Programare retea, SOA, RPC">
  <problema>
Descrieti si implementati un model simplu client-server care sa permita apelul de metode prin retea intre obiecte aflate pe masini diferite.
Fiecare calculator care participa in acest sistem va avea un server ce ruleaza la un anumit port si la care vor fi inregistrate
clasele locale care ofera metode ce pot fi apelate prin retea precum si adresele IP ale celorlalte masini.
In cazul in care este solicitata o metoda a unei anumite clase, sistemul trebuie sa identifice clasa local sau in retea si sa execute
metoda.
  </problema>
<problema>
  Implementati un algoritm de tip <i>Broadcast</i> folosind sistemul creat.
</problema>
</laborator>


<laborator tema="RMI - Convergecast">
  <problema>
  Implementati un algoritm de tip <i>Convergecast</i> pentru procesoare conectate sub forma unui arbore, folosind RMI.<br/>
Initial, fiecare procesor detine o valoare reala. Se doreste ca, la terminarea algoritmului, in
radacina sa se obtina valoarea maxima dintre toate valorile din retea.
  </problema>
</laborator>


<laborator tema="Memorie partajata">
<problema>
Implementati o solutie de sincronizare a accesului unor fire de executie la o resursa comuna (memoria partajata)
<ul>
<li>folosind algoritmul <i>"brutariei"</i> (Lamport)</li>
<li>folosind algoritmul <i>"competitiei"</i> cu variabile R/W.</li>
</ul>    
</problema>
</laborator>



<laborator tema="Problema consensului">
<problema>
<ul>
<li>Scrieti un algoritm care sa rezolve problema consensului intr-un sistem sincron cu caderi, 
in situatia in care procesoarele defecte se comporta "corect"</li>
<li>Implementati algoritmul EIG (Exponential Information Gathering with Recursive Majority Voting) penttru rezolvarea problemei
consensului intr-un sistem 	bizantin.</li>
</ul>    
</problema>
</laborator>

<laborator tema="Cauzalitate si timp">
<problema>
<ul>
<li>Scrieti un algoritm care sa determine ordinea relativa in care au loc o serie de evenimente pe baza relatiilor de cauzalitate
dintre ele. Sistemul va fi format din <i>n</i> procesoare ce comunica asincron prin transmiterea de mesaje, un <i>eveniment</i> fiind
transmiterea, respectiv receptionarea unui mesaj.
</li>
</ul>    
</problema>
</laborator>



<laborator tema="Document-Driven Programming">
  <problema>
  Scrieti o clasa care sa permita crearea meniurilor unei aplicatii dintr-un fisier XML.
  </problema>
</laborator>

<laborator tema="XML si BD relationale">
  <problema>
   Descrieti o maniera de a serializare a unei baze de date in format XML. <br/>
   Creati clasa <tt>DBInputSource</tt> care sa extinda clasa <tt>InputSource</tt> 
   pentru a implementa un mecanism de furnizare a unei baze de date relationale ca sursa a unui parser SAX.
  </problema>
</laborator>

<laborator tema="XML si formatul binar">
  <problema>
  Scrieti o aplicatie care sa permita codificarea fisierelor binare folosind caractere Unicode, astfel incat acestea
  sa poata fi incluse in documente XML. Folositi cel putin doua metode de codificare (hexa, Base64).
  Inaintea codificarii, fisiereul binar va fi arhivat in format .zip.
  </problema>
</laborator>

<laborator tema="Securitate">
  <problema>
  Implementati o modalitate de a lansa aplicatii Java intr-o maniera controlata. <br/>
  Specificarea permisiunilor aplicatiei ce va fi lansata se va face prin intermediul unui gestionar de securitate.
  </problema>
</laborator>

<laborator tema="RMI - Introducere">
  <problema>
  <b>"Mini SETI"</b> <br/>
  Scrieti un sistem RMI compus din urmatoarele doua componente:
  <ul>
  <li> <b>Serverul</b> contine o metoda care cauta intr-o lista de siruri o anumita expresie regulata. </li>
  <li> <b>Clientul</b> are o lista de servere, genereaza aleator siruri de caractere si le trimite  spre procesare serverelor.</li>
  </ul>
  Raspunsul trimis de server va fi de forma: <i>(nr. de aparitii, contexul fiecarei aparitii)</i>
  </problema>
</laborator>
-->
   
</laboratoare> 