Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2018
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.01 KB | None | 0 0
  1. package processorManager;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Arrays;
  5.  
  6.  
  7. import Interpreter.Interpreter;
  8. import processManagement.lista_procesow;
  9. import processManagement.process_control_block;
  10. import processManagement.ProcessManagment;
  11.  
  12. public class ProcessorManager {
  13.  
  14. private process_control_block processesManagement;
  15.  
  16. private Interpreter interpreter;
  17. private ProcessManagment ProcessManagement1;
  18. boolean arr[] = new boolean[16];
  19.  
  20. public static process_control_block idleProcess;//proces bezczynnosci;
  21. lista_procesow listaS;
  22. public process_control_block Running;//aktualnie dzialajacy proces
  23. public process_control_block NextRunningProcess;//kolejny proces do uruchomienia
  24.  
  25. public ArrayList<ArrayList<process_control_block>> lista;//stworzenie kolejki priorytetowej
  26.  
  27.  
  28.  
  29.  
  30. public ProcessorManager(Interpreter interpreter,ProcessManagment ProcessManagement1)
  31. {
  32. this.ProcessManagement1=ProcessManagement1;
  33. this.listaS=ProcessManagement1.getIstniejaceProcesy();
  34. this.interpreter=interpreter;
  35. lista = new ArrayList<ArrayList<process_control_block>>();
  36. for (int i=0;i<16;i++) {
  37. lista.add(new ArrayList<process_control_block>());
  38. }
  39. idleProcess=listaS.getPCB(0);
  40. Running=idleProcess;
  41.  
  42. }
  43.  
  44. public void FindReadyThread()//zrzekanie sie albo uplyniecie kwantu czasu
  45. {
  46. CheckBiggest();
  47. changerunningProcess();
  48. }
  49.  
  50. public void ReadyThread(process_control_block Temp)//decyduje o przysz�osci procesu w momencie zwiekszenia sie jego kwantu czasu
  51. {
  52. lista.get(Temp.getPriorytet_dynamiczny()).remove(Temp);
  53. if(lista.get(Temp.getPriorytet_dynamiczny()).size()==0)
  54. {
  55. arr[Temp.getPriorytet_dynamiczny()]=false;
  56. }
  57. if(Temp.getPriorytet_dynamiczny()<6)
  58. {
  59. Temp.INCPriorytet_Dynamiczny();
  60. }
  61.  
  62. Temp.INCPriorytet_Dynamiczny();
  63.  
  64. AddProcess(Temp);
  65.  
  66. }
  67.  
  68. public void Starving()//zwiekszanie priorytetow w po uplynieciu kwantu czasu
  69. {
  70.  
  71. for(int i=6;i>0;i--)//sprawdzanie tylko dla priorytetow 1-6
  72. {
  73.  
  74. if(lista.get(i).size()>0)
  75. {
  76.  
  77. for(int b=lista.get(i).size()-1;b>=0;b--)
  78. {
  79.  
  80. if(lista.get(i).get(b).getLicznik_wykonanych_rozkazow()>2)//decydowanie co ile rozkazow wykonanych ma zmienic sie priorytet
  81. {
  82. lista.get(i).get(b).SetLicznik_wykonanych_rozkazow(0);//resetowanie licznika
  83.  
  84. process_control_block temp;//zmienna pomocnicza do przelozenia procesu w liscie na nowe nale�ne jej miejsce
  85. temp=lista.get(i).get(b);
  86.  
  87. ReadyThread(temp);
  88. }
  89.  
  90. }
  91.  
  92.  
  93. }
  94. }
  95. }
  96.  
  97. public boolean CheckBiggest()//sprawdza czy znajduje sie proces wiekszy od aktualnie wykonywanego, jesli tak ustawia go na jako NextRunningProcess
  98. {
  99. if(Running.getStan()==2)
  100. {
  101. Running=idleProcess;
  102. }
  103.  
  104. int temp=Running.getPriorytet_dynamiczny();
  105.  
  106.  
  107. if(temp>7)
  108. {
  109.  
  110. for(int i=15;i>7;i--)//sprawdzanie jesli Running jest czasu rzeczywistego
  111. {
  112. if(lista.get(i).size()>0)//ZMIANAA NOWE
  113. {
  114. NextRunningProcess=lista.get(i).get(0);
  115.  
  116.  
  117. if(lista.get(i).isEmpty()==true)
  118.  
  119. {
  120. arr[i]=false;
  121. }
  122.  
  123. return true;
  124. }
  125.  
  126. }
  127. NextRunningProcess=idleProcess;
  128. return false;
  129.  
  130. }
  131. else
  132. {
  133.  
  134. for(int i=15;i>temp;i--)//sprawdzanie czy sa wieksze ktore powinny wywlaszczyc
  135. {
  136.  
  137. if(lista.get(i).size()>0)
  138. {
  139.  
  140. NextRunningProcess=lista.get(i).get(0);//sprawdzanie tylko 1 poniwaz reszta nie ma sensu
  141.  
  142.  
  143. if(lista.get(i).isEmpty()==true)//kontrolowanie arr
  144.  
  145. {
  146. arr[i]=false;
  147. }
  148.  
  149. return true;
  150. }
  151.  
  152. }
  153. for(int i=6;i>0;i--)//znalezienie innego zamiennika na przyszlosc
  154. {
  155.  
  156. if(lista.get(i).size()>0)
  157. {
  158.  
  159. NextRunningProcess=lista.get(i).get(0);
  160.  
  161. return false;
  162. }
  163.  
  164. }
  165.  
  166. NextRunningProcess=idleProcess;
  167. return false;
  168. }
  169.  
  170. }
  171.  
  172. public void Clear()
  173. {
  174.  
  175. for(int i=8;i>=0;i--)//sprawdzanie tylko dla priorytetow 1-7
  176. {
  177.  
  178. if(lista.get(i).size()>0)//ZMIANA
  179. {
  180. for(int b=lista.get(i).size()-1;b>=0;b--)
  181. {
  182.  
  183. if(lista.get(i).get(b).getStan()==2)
  184. {
  185.  
  186. lista.get(i).remove(b);
  187. if(lista.get(i).size()==0)
  188. {
  189. arr[Running.getPriorytet_dynamiczny()]=false;
  190. }
  191. }
  192.  
  193. }
  194.  
  195.  
  196. }
  197. }
  198. }
  199.  
  200. public void IncreaseCounter()
  201. {
  202.  
  203. for(int i=6;i>0;i--)//sprawdzanie tylko dla priorytetow 1-6 ZMIANAA
  204. {
  205.  
  206. if(lista.get(i).size()>0)
  207. {
  208.  
  209. for(int b=0;b<lista.get(i).size();b++)
  210. {
  211.  
  212. lista.get(i).get(b).INCLicznik_wykonanych_rozkazow();
  213.  
  214.  
  215. }
  216.  
  217.  
  218. }
  219. }
  220. }
  221.  
  222. public void AddProcess(process_control_block Temp)//dodawanie procesu do kolejki priorytetowej
  223. {
  224. if(Temp!=Running)
  225. {
  226. lista.get(Temp.getPriorytet_dynamiczny()).add(Temp);
  227.  
  228. if(lista.get(Temp.getPriorytet_dynamiczny()).size()>0)
  229. {
  230. arr[Temp.getPriorytet_dynamiczny()]=true;
  231. }
  232.  
  233.  
  234. if(CheckBiggest()==true)
  235. {
  236.  
  237. changerunningProcess();
  238.  
  239. }
  240. }
  241.  
  242.  
  243. }
  244.  
  245. public void GetReady()// dodawanie procesow gotowych do kolejki priorytetowej
  246. {
  247. int i=0;
  248. do
  249. {
  250. process_control_block temp1;
  251. temp1=listaS.getPCB(i);
  252.  
  253. if(temp1==Running)
  254. {
  255. break;
  256. }
  257. if(temp1.getStan()==2)
  258. {
  259. break;
  260. }
  261.  
  262. if(arr[temp1.getPriorytet_dynamiczny()]==false)
  263. {
  264. if(temp1.getPriorytet_bazowy()==0)
  265. {
  266. AddProcess(temp1);
  267. break;
  268. }
  269.  
  270. AddProcess(temp1);
  271. i++;
  272. }
  273. else
  274. {
  275. if(temp1.getPriorytet_bazowy()==0)
  276. {
  277. if(lista.get(temp1.getPriorytet_dynamiczny()).contains(temp1)==true)//sprawdzenie czy znajduje sie w liscie oraz dodac i
  278. {
  279. break;
  280. }
  281. else
  282. {
  283.  
  284. AddProcess(temp1);
  285.  
  286. }
  287.  
  288. break;
  289. }
  290.  
  291. if(lista.get(temp1.getPriorytet_dynamiczny()).contains(temp1)==true)//sprawdzenie czy znajduje sie w liscie oraz dodac i
  292. {
  293. break;
  294. }
  295. else
  296. {
  297.  
  298. AddProcess(temp1);
  299. i++;
  300. }
  301. }
  302. }while(true);
  303. }
  304.  
  305. public void changerunningProcess()//bierze aktualnie dzialajacy proces, umieszcza go na poczatku kolejki oraz zmienia aktualnie wykonywany proces
  306. {
  307. if(Running.getStan()==0)
  308. {
  309. if(Running.getPriorytet_bazowy()>0) {
  310.  
  311. lista.get(Running.getPriorytet_dynamiczny()).add(0,Running);//zmienic arr dodawanie true
  312. if(lista.get(Running.getPriorytet_dynamiczny()).size()>0)
  313. {
  314. arr[Running.getPriorytet_dynamiczny()]=true;
  315. }
  316.  
  317. }
  318. }
  319.  
  320. Running=NextRunningProcess;
  321. if(lista.get(Running.getPriorytet_dynamiczny()).contains(Running))
  322. {
  323. lista.get(Running.getPriorytet_dynamiczny()).remove(Running);
  324. }
  325.  
  326.  
  327.  
  328. if(lista.get(Running.getPriorytet_dynamiczny()).size()==0)
  329. {
  330. arr[Running.getPriorytet_dynamiczny()]=false;
  331. }
  332.  
  333. NextRunningProcess=idleProcess;
  334. }
  335.  
  336. public void Scheduler()//tu sie wszystko dzieje, z tego miejsca wszystko jest wywo�ywane
  337. {
  338. //ProcessManagement1.uporzadkuj_procesy();
  339.  
  340. GetReady();
  341.  
  342. Starving();
  343.  
  344. if(Running.getStan()==1)//sprawdzanie czy aktualnie dzialajacy procesor nie jest w stanie oczekujacym
  345. {
  346. FindReadyThread();
  347.  
  348. //interpreter.RUN(Running);//odpalanie interpretera
  349. }
  350. else
  351. {
  352.  
  353.  
  354. // CheckBiggest();
  355.  
  356. if(CheckBiggest()) {
  357.  
  358. changerunningProcess();
  359. }
  360.  
  361.  
  362. //interpreter.RUN(Running);//odpalanie interpretera
  363. }
  364. showQueue();
  365. if(Running.getStan()==2)
  366. {
  367. Clear();
  368. Running=idleProcess;
  369. NextRunningProcess=idleProcess;
  370. }
  371.  
  372.  
  373. IncreaseCounter();
  374. if(Running.getPriorytet_dynamiczny()>Running.getPriorytet_bazowy()) {
  375. Running.DECPriorytet_Dynamiczny();
  376. }
  377.  
  378.  
  379.  
  380.  
  381. }
  382.  
  383. public void showQueue() //metoda pomocnicza do testowania projektu
  384. {
  385. System.out.println("\n");
  386. System.out.println("Running:");
  387. System.out.println("ID procesu: "+Running.getID());
  388. System.out.println("Kwant procesu : "+Running.getLicznik_wykonanych_rozkazow());
  389. System.out.println("Priorytet procesu: "+Running.getPriorytet_dynamiczny());
  390. for(int i=15;i>=0;i--)
  391. {
  392.  
  393. if(lista.get(i).size()>0)
  394. {
  395. for(int b=lista.get(i).size()-1;b>=0;b--)
  396. {
  397.  
  398.  
  399. System.out.println("\n");
  400. System.out.println("ID procesu: "+lista.get(i).get(b).getID());
  401. System.out.println("Kwant procesu : "+lista.get(i).get(b).getLicznik_wykonanych_rozkazow());
  402. System.out.println("Priorytet procesu: "+lista.get(i).get(b).getPriorytet_dynamiczny());
  403.  
  404.  
  405.  
  406. }
  407.  
  408.  
  409. }
  410. }
  411. }
  412.  
  413. public void showRunning() //pokazywanie aktualnie wykonywanego procesu
  414. {
  415. if(Running!=idleProcess)
  416. {
  417. System.out.println("\n\nAktualnie jest wykonywany proces, jego informacje to: \n\n");
  418. Running.print();
  419. }
  420. else
  421. {
  422. System.out.println("\n\nAktualnie nie ma procesu wykonywanego \n\n");
  423. }
  424. }
  425.  
  426. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement