basesched.h 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #ifndef __BASESCHED_H__
  2. #define __BASESCHED_H__
  3. #define IDLE_TASK -1
  4. #include <vector>
  5. enum Motivo { TICK, BLOCK, EXIT };
  6. class SchedBase {
  7. public:
  8. virtual ~SchedBase() {};
  9. /* Constructor, recibe los parámetros pasados al scheduler como una lista de enteros. */
  10. /* load(pid) será llamada cuando una tarea nueva (pid) es creada.
  11. si deadline > 0, significa que la tarea debe terminarse antes de deadline
  12. */
  13. virtual void load(int pid, int deadline);
  14. virtual void load(int pid) = 0;
  15. /* unblock(pid) será llamada cuando OTRA tarea (pid), previamente bloqueda,
  16. * haya terminado la operación de I/O (pasa de BLOCKED a READY). */
  17. virtual void unblock(int pid) = 0;
  18. /* tick() será llamada con cada "tick" del reloj de la máquina (1 ms).
  19. * El parámetro m indica si en la ejecución del último ms, la tarea:
  20. * - BLOCK: Ejecutó una syscall bloqueante
  21. * - EXIT: Terminó (return)
  22. * - TICL: Consumió el CPU todo el milisegundo.
  23. * Esta función devuelve qué pid utilizará el CPU ahora, o IDLE_TASK. */
  24. virtual int tick(int cpu, const enum Motivo m) = 0;
  25. };
  26. /* Getters */
  27. //int current_pid();
  28. int current_pid(int cpu);
  29. unsigned int current_time();
  30. /* Factory (ignorar) */
  31. template<typename T>
  32. SchedBase& create_sched(const std::vector<int>& argn) { return ( new T(argn) ); }
  33. #endif