Advertisement
evitanasevska

OS ispit

Jun 21st, 2018
1,235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.64 KB | None | 0 0
  1. Java IO
  2.  
  3. (25 поени) Потребно е да направите апликација која пребарува Open Document датотеки кои се многу големи. За таа потреба имплементирајте метод findOdf(String in, String out) кој ќе го изминува рекурзивно директориумот претставен преку “in”. Доколку наиде на .odt или .ods кои се поголеми од 1 мегабајт, тогаш треба да ги ископира во “out”\brisenje, а доколку наиде на .ods или .odt кои се помали или еднакви на 1 мегабајти, тогаш треба да додаде линија во “out”\mali.txt од типот “Datotekata ima _in_kilobytes>”. На местото <filename> ставете го името на датотеката и на местото на <site_in_kilobytes> ставете ја големината на датотеката во килобајти. Внимавајте дека може да има многу вакви документи во “in”.
  4.  
  5. ///////////////////////////////////////////////
  6.  
  7. Нитки и синхронизација
  8.  
  9. (35 поени) За потребите на ФИНКИ, потребно е да се имплементира софтвер кој ќе менаџира распоред за полагање на студенти во текот на еден ден во зависност од бројот на лаборатории и испити кои треба да бидат извршени истиот ден. При тоа, треба да се земе во предвид дека во една лабораторија може да се полага само еден испит едновремено. Исто така, во секоја лабораторија бројот на компјутери е 20, што значи само 20 студенти може да полагаат истовремено. Штом се ослободи компјутер, веднаш влегува друг студент да полага. Секој испит се состои од два дела, теоретски и практичен. Прво се полага теоретскиот испит, па потоа практичниот. Практичниот дел не може да започне се додека сите студенти не завршат со теоретскиот дел од испитот. На крај, по завршување на сите студенти со полагање на практичниот дел, се објавуваат резултати од полагањето за студентите кои полагале во таа лабораторија.
  10.  
  11. За време на теоретскиот испит важат следните правила:
  12.  
  13. -Студентот влегува во лабораторија со повик на методата enterLaboratory()
  14. -Го решава тестот на компјутер со повик на методата solveTheory()
  15. -Излегува од лабораторијата кога ќе заврши со повик на методата exitLaboratory()
  16.  
  17. За време на практичниот испит важат следните правила:
  18.  
  19. -Студентот влегува во лабораторија со повик на методата enterLaboratory()
  20. -Го решава тестот на компјутер со повик на методата solvePractical()
  21. -Излегува од лабораторијата кога ќе заврши со повик на методата exitLaboratory()
  22.  
  23. Ваша задача е да ги доимплементирате методите во кои стои TODO коментар од класите Exam, Student, Laboratory и ExamSchedule, кои се наоѓаат во Starter датотеката. При решавањето можете да користите семафори и монитори по ваша желба и нивната иницијализација треба да ја направите во init() методите на класите Exam и ЕxamSchedule.
  24.  
  25. Синхронизацијата треба да ја направете со користење на следните методи:
  26.  
  27. state.enterLaboratory() – Кажува дека студентот може да влезе на испит
  28. state.solveTheory() – Кажува дека студент може да полага теорија
  29. state.solvePractical() – Кажува дека студент може да полага практичен дел
  30. state.exitLaboratory() - Кажува дека студентот моќе да излезе од испит
  31. state.showReport() – Метод за приказ на резултати од испитите
  32. За класата Laboratory, потребно е да ги согледате критичните региони и за следните методи:
  33.  
  34. checkNumActiveStudents() – проверка колку студенти се останати во лабораторијата
  35. getFreeComputers() – проверка на број на слободни компјутери
  36. studentEnters() –влез на студенти во лабораторија
  37. studentExits() – излез на студенти од лабораторија
  38. Во класата Exam, потребно е да направите синхронизација на startExam() методот во кој се дефинира однесувањето на студентите во рамките на еден испит. Во класата ExamSchedule, потребно е да направите синхронизација на методот startExams() во кој се дефинира бројот на испити кои може да се полагаат истовремено имајќи го во предвид бројот на слободни лаборатории
  39.  
  40. //Ima starter file
  41.  
  42. STARTER FILES:
  43.  
  44. 1: ExamSchedule
  45.  
  46. package mk.ukim.finki.os;
  47.  
  48. import java.util.ArrayList;
  49. import java.util.List;
  50.  
  51. public class ExamSchedule {
  52.  
  53. private int numExams;
  54.  
  55. private int numLabs;
  56.  
  57. public ExamSchedule(int numExams, int numLabs) {
  58. this.numExams = numExams;
  59. this.numLabs = numLabs;
  60. init();
  61. }
  62.  
  63. public void init() {
  64. //TODO: add initialization here
  65. }
  66.  
  67. public void startExams() {
  68. //TODO: add synchronization in this block
  69. List<Exam> examList = new ArrayList<Exam>();
  70. for (int i = 0;i<numExams;i++) {
  71. Exam exam = new Exam((int)(Math.random()*100));
  72. examList.add(exam);
  73. }
  74. for (Exam exam:examList) {
  75. exam.start();
  76. }
  77.  
  78. }
  79.  
  80. public static void main(String[] args) {
  81. ExamSchedule examSchedule = new ExamSchedule(10,3);
  82. examSchedule.startExams();
  83. }
  84. }
  85.  
  86.  
  87. 2. Exam
  88.  
  89. package mk.ukim.finki.os;
  90.  
  91. import java.util.ArrayList;
  92. import java.util.List;
  93.  
  94. public class Exam extends Thread{
  95.  
  96.  
  97. Laboratory lab = new Laboratory(Exam.this);
  98.  
  99. private int numStudents;
  100.  
  101. public Exam(int numStudents) {
  102. this.numStudents = numStudents;
  103. init();
  104. }
  105.  
  106. public void enterLaboratory() {
  107. lab.studentEnters();
  108. System.out.println("The student enters in laboratory.");
  109. }
  110.  
  111. public void solveTheory() {
  112. System.out.println("The student solves theory.");
  113. }
  114.  
  115. public void solvePractical() {
  116. System.out.println("The student solves practical.");
  117. }
  118.  
  119. public void exitLaboratory() {
  120. lab.studentExits();
  121. System.out.println("The student exits practical.");
  122. }
  123.  
  124. public void showReport() {
  125. System.out.println("The computer systems shows results.");
  126. }
  127.  
  128. public void init() {
  129. //TODO: add initialization here
  130. }
  131.  
  132. public void startExam() {
  133. //TODO: add synchronization in this block
  134. List<Student> studentList = new ArrayList<Student>();
  135. for (int i=0;i<numStudents;i++) {
  136. Student s = new Student(Exam.this);
  137. studentList.add(s);
  138. }
  139. for (Student s:studentList) {
  140. s.start();
  141. }
  142. this.showReport();
  143. }
  144.  
  145. @Override
  146. public void run() {
  147. startExam();
  148. }
  149. }
  150.  
  151. 3. Laboratory
  152.  
  153. package mk.ukim.finki.os;
  154.  
  155. public class Laboratory {
  156.  
  157. private final static int CAPACITY = 20;
  158.  
  159. private int numActiveStudents;
  160.  
  161. private Exam state;
  162.  
  163. public Laboratory(Exam state) {
  164. this.numActiveStudents = 0;
  165. this.state = state;
  166. }
  167.  
  168. public int checkNumActiveStudents() {
  169. //TODO: add synchronization in this block
  170. return numActiveStudents;
  171. }
  172.  
  173. public int getFreeComputers() {
  174. //TODO: add synchronization in this block
  175. return CAPACITY - numActiveStudents;
  176. }
  177.  
  178.  
  179.  
  180. public void studentEnters() {
  181. //TODO: implement this method
  182. }
  183.  
  184. public void studentExits() {
  185. //TODO: implement this method
  186. }
  187. }
  188.  
  189.  
  190. 4. Student
  191.  
  192. package mk.ukim.finki.os;
  193.  
  194. public class Student extends Thread{
  195.  
  196. private Exam state;
  197.  
  198. public Student(Exam state) {
  199. this.state = state;
  200. }
  201.  
  202. @Override
  203. public void run() {
  204. //TODO: add synchronization in this block
  205. //theoretical part execution
  206. this.state.enterLaboratory();
  207. this.state.solveTheory();
  208. this.state.exitLaboratory();
  209.  
  210. //practical part execution
  211. this.state.enterLaboratory();
  212. this.state.solvePractical();
  213. this.state.exitLaboratory();
  214. }
  215. }
  216.  
  217. ////////////////////////////////
  218.  
  219. UNIX команди
  220.  
  221. (15 поени) Со користење на концептите на цевки, редирекција и / или командите за филтрирање на текст, напишете кратка командна процедура во UNIX која ќе направи преименување на сите датотеки од тековниот именик кои се зачувани со различни варијации на екстензијата .txt во правилни датотеки чија екстензија ќе биде точно .txt. (Пример: zad1.TxT -> zad1.txt, zad2.TXT -> zad2.txt, итн.)
  222.  
  223. Кратката командна процедура да се зачува под името zad3-t1.sh.
  224.  
  225.  
  226. /////////////////////////
  227.  
  228.  
  229. UNIX командна процедура
  230.  
  231.  
  232. (25 поени) Да се напише командна процедура која ќе ги најде сите студенти кои се логирале од лабораториите на ФИНКИ во периодот од X до Y часот на 20.06.2018. X и Y се цели броеви кои означуваат час и се даваат како прв и втор аргумент на скриптата. За сите логирани студенти ќе се креираат посебни именици (името на именикот е всушност корисничкото име од студентот) во именикот destination даден како трет аргумент на скриптата. Потоа за секој логиран студент ќе се ископираат сите датотеки од неговиот домашен именик (пр. /home/112345) од форматот zadA-tB.sh (каде A и B се цифри) во новокреираниот именик за студентот во именикот destination. Внимавајте, во домашниот именик на еден студент можно е да има подименици и подименици на подимениците, итн. Ваша задача е да ги пронајдете рекурзивно сите барани датотеки и да ги ископирате. Доколку се случи две датотеки да имаат исто име, тогаш се споредува нивната содржина. Доколку се исти се копира само едната, доколку се различни се остава во дестинацискиот именик онаа која е поголема. На крај во дестинацискиот именик треба да имате само по една копија од датотеките во бараниот формат.
  233.  
  234. На почеток на скриптата направете проверка за тоа дали се проследени сите аргументи. Доколку не се, прикажете соодветно упатство за употреба и излезете неуспешно. Да се внимава, доколку дестинацискиот именик не постои, да се креира нов, а ако постоел истиот да се избрише.
  235.  
  236. Командната процедура треба да се зачува како zad4-t1.sh.
  237.  
  238. Помош: Форматот на IP адресите на лабораториите од ФИНКИ е 10.10.X.Y
  239.  
  240. Пример:
  241.  
  242. ./zad4-t1.sh 10 14 /home/user/destination/
  243.  
  244. Излез: /home/user/destination/ 112233: zad3-t1.sh zad4-t1.sh
  245.  
  246. 222222: zad4-t2.sh
  247.  
  248. 111111: zad3-t2.sh zad4-t2.sh
  249.  
  250. 222111: zad3-t1.sh
  251.  
  252. 555555: zad4-t2.sh
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement