Advertisement
Guest User

Untitled

a guest
Oct 28th, 2016
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.00 KB | None | 0 0
  1. zadanie 3
  2.  
  3. Celem tego projektu bedzie zaimplementowanie prostego "garbage collectora" (GC). Jego algorytm zostanie opisany w pozniejszym terminie.
  4. Jako ze testowanie GC musi miec generator obiektow i referencji miedzy nimi
  5. najpierw zdefiniujemy prosty jezyk. Napisanie parsera i interpretera tego jezyka
  6. jest czescia tego projektu.
  7.  
  8. NASZ PROSTY JEZYK (NPJ)
  9.  
  10. Skladnia:
  11.  
  12. <PROGRAM> ::= <STATEMENTS>
  13. <STATEMENTS> ::= <STATEMENT> | <STATEMENTS> <STATEMENT>
  14. <STATEMENT> = epsilon|<VARIABLE-DECLARATION>;|<ASSIGNMENT>;|Print "string message";|Print <string-constant>;HeapAnalyze;|Collect;
  15. <VARIABLE-DECLARATION> ::= VarDeclT <string-constant>;|VarDeclS <string-constant> "<string-constant>";|VarDeclS <string-constant> NULL;
  16. <ASSIGNMENT> ::= <LVALUE> = <RVALUE>
  17. <LVALUE> ::= <DEREF>
  18. <RVALUE> ::= <DEREF>|NULL|<integer-constant>;|"<string-constant>";
  19. <DEREF> ::= <string-constant>;|<DEREF>.<string-constant>;
  20. <DEREF> ::= <string-constant>;|<string-constant>.<string-constant>;
  21.  
  22. <string-constant> to ciag malych liter i liczb zaczynajacy sie od litery.
  23. <integer-constant> to ciag cyfr oznaczalacych nieujemna stala calkowita.
  24.  
  25. W pierwszym kroku nalezy zbudowac z powyzszego opisu poprawna gramatyke.
  26.  
  27. Semantyka NPJ:
  28. W jezyku NPJ sa dwa typy obiektow: T oraz S - lancuchy znakow.
  29.  
  30. Typ T sklada sie z dwoch pol: f1 i f2, takze typu T, oraz pola data typu int. Rozmiar obiektow typu T jest wiec zawsze taki sam.
  31.  
  32. Zadeklarowane obiekty sa jednoczesnie alokowane na stercie a ich pola ustawiane na domyslne poczatkowe wartosci (NULL oraz 0, zaleznie od typu).
  33.  
  34. Przed uzyciem danej zmiennej musi byc ona zadeklarowana.
  35.  
  36. Slowo kluczowe VarDeclT sluzy do zadeklarowania zmiennej typu T.
  37. Slowo kluczowe VarDeclS sluzy do zadeklarowania zmiennej typu S - lancuch znakow.
  38.  
  39.  
  40. Przykladowe programy:
  41.  
  42. 1)
  43.  
  44. VarDeclT treetop;
  45. VarDeclT t1;
  46. VarDeclT t2;
  47. treetop.f1 = t1;
  48. treetop.f2 = t2;
  49. treetop.data = 1;
  50. treetop.f1.data = 2;
  51. treetop.f2.data = 3;
  52. t1 = NULL;
  53.  
  54. 2)
  55. VarDeclT cycle;
  56. cycle.f1 = cycle;
  57. cycle.data = 23;
  58. VarDeclS s1 "testMessage";
  59. VarDeclS s2 "test2";
  60. VarDeclS s3 "test3";
  61. Print "stringMessage";
  62. Print s1;
  63. Print s2;
  64. HeapAnalyze;
  65. Collect;
  66. HeapAnalyze;
  67.  
  68.  
  69.  
  70. NPJ sam zarzadza swoja sterta. Jest to tablica zadeklarowana w Javie jako int[].
  71. Kazdy obiekt T ma zajmowac cztery elementy w tablicy: naglowek, pola f1 i f2 (NULL jest reprezentowany przez 0, wskazniki do obiektow przez ich indeksy w stercie) oraz pole data.
  72.  
  73. Rozmiar obiektow typu S jest zmienny i rowny 2 + N slow: naglowek, dlugosc lancucha znakow, tablica z poszczegolnymi znakami.
  74.  
  75. Rozmiar tablicy (sterty) jest definiowany przy uruchamianiu interpretera NPJ za pomoca -Dnpj.heap.size=<size>, gdzie size jest iloscia SLOW.
  76.  
  77.  
  78. Print wypisuje na standardowe wyjscie wartosc lancucha znakow (podanego albo bezposrednio albo jako nazwa zmiennej typu S) zakonczone znakiem nowej lini lub ciag znakow NULL np:
  79. VarDeclS s1 "testMessage";
  80. VarDeclS s2 "test2";
  81.  
  82. Print "stringMessage";
  83. Print s1;
  84. Print s2;
  85.  
  86. wypisze na ekranie:
  87. stringMessage
  88. testMessage
  89. test2
  90.  
  91. UWAGA: lancuchy znakow przekazane jako bezposredni argument wywolania instrukcji Print nie wymagaja wolnego miejsca na stercie. Np. Print "stringMessage" nie alokuje nic na stercie.
  92.  
  93. UwAGA: dla ulatwienia przyjmijmy, ze nawet gdy dwie zmienne typu S maja taka sama wartosc to kazda z nich zajmuje tyle samo miejsca na stercie:
  94.  
  95. Program:
  96. VarDeclS s1 "tekst1";
  97. VarDeclS s2 "tekst1";
  98.  
  99. potrzebuje stery o rozmiarze 16 slow.
  100.  
  101. HeapAnalyze sluzy przekazaniu sterty do analizy - dokladniejsze informacje zostana podane pozniej.
  102.  
  103. Collect sluzy uruchomieniu GC.
  104.  
  105.  
  106. Komendy HeapAnalyze oraz Collect wolaja odpowiednie metody w klasie NPJ (nie trzeba jej implementowac - za jej implementacje bede odpowiedzialny ja),
  107. ktora dziala troche jak java.lang.System. A zatem interpretacja HeapAnalyze wywola NPJ.heapAnalyze(odpowiednie parametry) a interpretacja Collect wywola
  108. NPJ.collect(int[], Collector, Map<Object, Object>). Collector implementuje interfejs:
  109.  
  110. public interface Collector {
  111. public void collect(int[], Map<Object, Object>);
  112. }
  113.  
  114. Konkretne implementacje kolektora beda implementowane przez panstwa (stad parametr Map<Object, Object>, ktory mozecie uzyc do przekazania do waszego kolektora specyficznych struktur danych).
  115.  
  116. Uwaga: kazda zadeklarowana zmienna staje sie 'garbage collection root'.
  117.  
  118. Struktura katalogow
  119.  
  120. Rozwiazanie nalezy nadeslac korzystajac z systemu moodle (prosze zwrócic uwage na ostateczny temin nadsylania rozwiazan) w postaci pliku .zip o nazwie:
  121.  
  122. imie_nazwisko.zip - prosze nie stosowac polskich znakow
  123.  
  124.  
  125. Zzipowany plik powinien zawierac katalog:
  126. imie_nazwisko
  127. w nim podkatalog:
  128. zadanie3
  129.  
  130. zawierajacy:
  131. • katalog src a w nim plik Interpreter.java (rozwiazanie zadania) oraz wszystkie uzywane przez Panstwa klasy. Choc jest to rozwiazanie troche nieeleganckie to prosze jednak, abyscie Panstwo te jedna klase wrzucili do pakietu default (pakietyzacja pozostalych klas nie ma dla mnie znaczenia)
  132.  
  133. • katalog classes
  134.  
  135. • katalog lib z wszystkimi potrzebnymi jarami
  136.  
  137. • plik build.xml, który uruchomi ant’a w taki sposób, zeby skompilowal on plik Interpreter.java i umiescil wynik w katalogu classes
  138.  
  139. uruchomienie Panstwa interpretera bedzie wygladac w nastepujacy sposob:
  140.  
  141. java -cp .:$LIBS -Dnpj.heap.size=<size> Interpreter <program_npj>
  142.  
  143. gdzie:
  144.  
  145. LIBS - classpath do wszystkich wykorzystywanych przez Panstwa bibliotek
  146.  
  147. size - rozmiar sterty
  148.  
  149. program_npj - plik z programem napisanym w jezyku NPJ
  150.  
  151. Program bedzie uruchomiony z poziomu katalogu "classes" i wszystkie pliki npj (programy w jezyku NPJ) beda w nim sie znadowac.
  152.  
  153. Implementowanym przez Panstwa kolektoroem ma byc 'semi-space copying collector' - sterta wejsciowa jest dzielona na dwie polowy jednakowego rozmiary, zalozmy ze NULL jest wspolny dla obu polowek
  154. Inaczej mowiac rozmiar sterty podany jako parametr do interpertera spelniac bedzie warunek: heapsize % 8 = 1
  155.  
  156.  
  157. Szesc najszybszych i poprawnych rozwiazan (mierzony bedzie tylko czas spedzony wewnatrz garbage collectora) uzyska podwojna ilosc punktow.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement