BarryServer : Git

All the code for all my projects
// BarryServer : Git / Nucleus / blob / 843a5201164f3cff1b57989ec7625ccf8bd05d5b / include / nucleus / task.h

// Related

Nucleus

Barry Private TaskQueue structure 843a520 (3 years, 3 months ago)
#ifndef _NUCLEUS_TASK_H
#define _NUCLEUS_TASK_H

#include <stdint.h>
#include <sys/types.h>
#include <nucleus/cpu.h>
#include <nucleus/object.h>
#include <nucleus/memory.h>

typedef struct Task Task;
typedef struct TaskQueue TaskQueue;

/* Task priorities */
enum Priority {
	NONE,
	LOWEST,
	LOW,
	NORMAL,
	HIGH,
	HIGHEST,
};

/* Task states */
enum State {
	RUNNING,
	READY,
	TERMINATED,
};

/* Structure for a Task */
struct Task {
	Object obj;
	pid_t tid;
	enum Priority priority;
	enum State state;

	uintptr_t esp, ebp, eip;
	page_dir_t pageDir;
	Task *next;
};

extern ObjectType taskType;
extern ObjectType taskQueueType;

extern Task *currentTask[];
#define current currentTask[CPUID]

void init_tasking(void);
void schedule(void);
pid_t clone(int flags);

void add_to_queue(TaskQueue *queue, Task *task);
void remove_from_queue(TaskQueue *queue, Task *task);
Task *pop_from_queue(TaskQueue *queue);
size_t tasks_in_queue(TaskQueue *queue);

#endif