Advertisement
Guest User

Untitled

a guest
Jan 14th, 2018
1,487
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.71 KB | None | 0 0
  1. (25 поени) UNIX командни процедури
  2. Дадена е една текстуална датотека во TSV формат. Податоците кои се дадени се следни:
  3.  
  4. Indeks Predmet Prezime Ime e-mail
  5.  
  6. Датотеката се проследува како прв аргумент на скриптата.
  7.  
  8. Ваша задача е да се обработи секоја линија од датотеката, така што за секој Predmet ќе се креира соодветен именик на локација (изворен именик) која што е дадена како втор аргумент на скриптата. Во именикот да се креираат подименици именувани со индексите на оние студенти кои го имаат запишано соодветниот предмет. Во секој подименик на студент да се креира датотека со екстензија .dat со генералиите за студентот. Името на датотеката ќе биде Indeks на студентот, а содржината на датотеката информациите за студентот испечатени секоја во нов ред.
  9.  
  10. На почеток на скриптата направете проверка дали се проследени сите аргументи. Доколку не се, прикажете упатство за употреба и излезете неуспешно. Доколку датотеката не постои или не е од tsv тип, скриптата треба да го извести корисникот за тоа и да заврши неуспешно. Доколку изворниот именик не постои, скриптата треба да го извести корисникот за тоа и да заврши неуспешно. Изворниот именик не мора да биде иницијално празен, може во него да има веќе креирани именици.
  11.  
  12. Командната процедура зачувајте ја во домашниот именик под името zad4-t2.sh.
  13.  
  14. Пример:
  15.  
  16. 123456 OS Jankovski Janko janko@finki.ukim.mk
  17. 111111 OS Petkovski Petko petko@finki.ukim.mk
  18. 123456 SP Jankovski Janko janko@finki.ukim.mk
  19. 123444 OS Trajkovski Trajko trajko@finki.ukim.mk
  20. 222111 SP Stojkoski Stojko stojko@finki.ukim.mk
  21. . . .
  22. Излез:
  23.  
  24. OS\
  25. 123456\
  26. 123456.dat
  27. 111111\
  28. 111111.dat
  29. 123444\
  30. 123444.dat
  31. SP\
  32. 123456\
  33. 123456.dat
  34. 222111\
  35. 222111.dat
  36. Содржина на датотеката 123456.dat
  37.  
  38. Jankovski
  39. Janko
  40. janko@finki.ukim.mk
  41.  
  42.  
  43.  
  44. (15 поени) UNIX команди
  45. UNIX команди
  46. Со користење на концептите на цевки, редирекција и / или командите за филтрирање на текст, напишете ги следниве команди во UNIX:
  47.  
  48. а) (7 поени) Да се напише една команда во која со користење на листата на тековно најавени корисници на ОС серверот, ќе се отпечати вашата IP адреса. Командата да се зачува како командна процедура под името zad3а-t2.sh.
  49.  
  50. б) (8 поени) Да се напише една команда која ќе отпечати листа на процеси (нивни ID-а) од целиот оперативен систем кои се директно стартувани / контролирани од страна на init процесот (PID = 1). Командата да се зачува како командна процедура под името zad3b-t2.sh.
  51.  
  52.  
  53. (35 поени) Нитки и синхронизација
  54. Event Processing Simulation
  55. Потребно е да извршите симулација за процесирање на настани со дефининираните класи EventGenerator и Processor кои треба да функционираат како thread-ови.
  56.  
  57. Главниот метод Processor.main да го стартува Processor thread-от и потоа треба да стартува 100 нови EventGenerator thread-ови, да ги регистрира со Processor.register(EventGenerator p) методот. Потоа main методот треба да го чека Processor thread-от да заврши најмногу 20000ms. Доколку не заврши за ова време, треба да се прекине и да се испише порака Terminated scheduling, а во спротивен случај да се испише Finished scheduling.
  58.  
  59. Секој од EventGenerator thread-овите веднаш по стартувањето во позадина треба да заспие рандом време со Thread.sleep(this.duration), по што треба да го генерира настанот со методот generate() кој не смее да се извршува паралелно кај повеќе од 5 генератори. Потоа треба да се извести Processor thread-от дека има нов настан за процесирање.
  60.  
  61. Класата Processor е Thread, кој во позадина извршува бесконечен циклус, во кој чека да биде известен за новиот настан, по што го процесира со користење на методот process(), кој **не смее да се повика паралелно со извршување на generate() методот**.
  62.  
  63. Вашата задача е да го дополните дадениот код според барањата на задачата, при што треба да внимавате не настане Race Condition и Deadlock.
  64.  
  65. import java.util.ArrayList;
  66. import java.util.List;
  67. import java.util.Random;
  68.  
  69. public class Processor {
  70.  
  71. public static Random random = new Random();
  72. static List<EventGenerator> scheduled = new ArrayList<>();
  73.  
  74. public static void main(String[] args) throws InterruptedException {
  75. // TODO: kreirajte Processor i startuvajte go negovoto pozadinsko izvrsuvanje
  76.  
  77.  
  78. for (int i = 0; i < 100; i++) {
  79. EventGenerator eventGenerator = new EventGenerator();
  80. register(eventGenerator);
  81. //TODO: startuvajte go eventGenerator-ot
  82.  
  83. }
  84.  
  85.  
  86. // TODO: Cekajte 20000ms za Processor-ot da zavrsi
  87.  
  88. // TODO: ispisete go statusot od izvrsuvanjeto
  89. }
  90.  
  91. public static void register(EventGenerator generator) {
  92. scheduled.add(generator);
  93. }
  94.  
  95. /**
  96. * Ne smee da bide izvrsuva paralelno so generate() metodot
  97. */
  98. public static void process() {
  99. System.out.println("processing event");
  100. try {
  101. Thread.sleep(random.nextInt(100));
  102. } catch (InterruptedException e) {
  103. e.printStackTrace();
  104. }
  105. scheduled.remove(0);
  106. }
  107.  
  108.  
  109. public void run() {
  110.  
  111. while (!scheduled.isEmpty()) {
  112. try {
  113. // TODO: cekanje na nov generiran event
  114.  
  115. // TODO: povikajte go negoviot process() metod
  116. process();
  117. } catch(Exception e) { e.printStackTrace(); }
  118. }
  119.  
  120. System.out.println("Done scheduling!");
  121. }
  122. }
  123.  
  124.  
  125. class EventGenerator {
  126.  
  127. public Integer duration;
  128.  
  129. public EventGenerator() throws InterruptedException {
  130. this.duration = Processor.random.nextInt(1000);
  131. }
  132.  
  133.  
  134. /**
  135. * Ne smee da bide povikan paralelno kaj poveke od 5 generatori
  136. */
  137. public static void generate() {
  138. System.out.println("Generating event: ");
  139. }
  140. }
  141.  
  142.  
  143. (25 поени) Java I/O
  144. Имплементирајте го методот void bigFiles(String in, String out) кој ќе го изминува рекурзивно директориумот претставен преку in. Доколку наиде на датотека со екстензија .dat поголема од 100 килобајти, да се испише линија во out/files.txt од типот <parent>, <size>, <writable>. Притоа:
  145.  
  146. на местото на <parent> треба да стои директориумот во кој се наоѓа датотеката
  147. на местото на <size> треба да стои големината во килобајти
  148. на местото на <writable> треба да стои True или False во зависност од пермисијата за пишување во датотеката.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement