tasks.cpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #include "tasks.h"
  2. #include "stdlib.h"
  3. #include <algorithm>
  4. using namespace std;
  5. void TaskCPU(int pid, vector<int> params) { // params: n
  6. uso_CPU(pid, params[0] - 1); // Uso el CPU n milisegundos.
  7. }
  8. void TaskIO(int pid, vector<int> params) { // params: ms_pid, ms_io,
  9. uso_CPU(pid, params[0]); // Uso el CPU ms_pid milisegundos.
  10. uso_IO(pid, params[1]); // Uso IO ms_io milisegundos.
  11. }
  12. void TaskAlterno(int pid, vector<int> params) { // params: ms_pid, ms_io, ms_pid, ...
  13. for(int i = 0; i < (int)params.size(); i++) {
  14. if (i % 2 == 0) uso_CPU(pid, params[i] - 1);
  15. else uso_IO(pid, params[i]);
  16. }
  17. }
  18. void TaskConsola(int pid, vector<int> params) {
  19. uint calls = params[0];
  20. uint bmin = params[1];
  21. uint bmax = params[2];
  22. for (uint i = 0; i < calls; i++) {
  23. uso_IO(pid, rand() %(bmax-bmin+1) + bmin);
  24. uso_CPU(pid, 1);
  25. }
  26. }
  27. void TaskBatch(int pid, vector<int> params ) {
  28. //Tengo que bloquear CPU total_cpu unidades;
  29. //esto incluye 1 por cada vez que llamo a uso_IO
  30. //Entonces debo bloquear cpu total_cpu - cant_bloqueos
  31. //Y si cant_bloqueos > total_cpu ?
  32. uint total_cpu = params[0];
  33. uint cant_bloqueos = params[1];
  34. if (cant_bloqueos>total_cpu)// ???????
  35. return;
  36. vector<int> arr;
  37. total_cpu = total_cpu - cant_bloqueos;
  38. uint i;
  39. for(i=0;i<total_cpu;i++)
  40. arr.insert(arr.end(),0);
  41. for(i=0;i<cant_bloqueos;i++)
  42. arr.insert(arr.end(),1);
  43. std::random_shuffle(arr.begin(),arr.end());
  44. for(i=0; i<arr.size();i++){
  45. if(arr[i]==1){
  46. uso_IO(pid, 2);
  47. } else {
  48. uso_CPU(pid, 1); //1 ciclo?
  49. }
  50. }
  51. }
  52. void tasks_init(void) {
  53. /* Todos los tipos de tareas se deben registrar acá para poder ser usadas.
  54. * El segundo parámetro indica la cantidad de parámetros que recibe la tarea
  55. * como un vector de enteros, o -1 para una cantidad de parámetros variable. */
  56. register_task(TaskCPU, 1);
  57. register_task(TaskIO, 2);
  58. register_task(TaskConsola, 3);
  59. register_task(TaskBatch, 2);
  60. register_task(TaskAlterno, -1);
  61. }