BarryServer : Git

All the code for all my projects
// BarryServer : Git / Orion / commit / d41a53cbc7d055b1c00cf0a339dbed6925f4f02c / task / task.h

// Related

Orion

Barry Importing existing Orion kernel d41a53c (2 years, 4 months ago)
diff --git a/task/task.h b/task/task.h
new file mode 100644
index 0000000..228c3d8
--- /dev/null
+++ b/task/task.h
@@ -0,0 +1,128 @@
+#ifndef KERNEL_TASK_H
+#define KERNEL_TASK_H
+
+#include <stdint.h>
+#include <sys/ipc.h>
+#include <sys/times.h>
+#include <time.h>
+#include <signal.h>
+#include "../mem/paging.h"
+#include "../mem/vm.h"
+#include "../proc/proc.h"
+#include "../vfs/vfs.h"
+#include "../spinlock.h"
+
+typedef struct Task Task;
+typedef struct TaskQueue TaskQueue;
+
+/* Process priorities */
+enum Priority {
+	NONE,
+	LOWEST,
+	LOW,
+	NORMAL,
+	HIGH,
+	HIGHEST,
+};
+
+/* Task states */
+enum States {
+	RUNNING,
+	READY,
+	TERMINATED,
+	WAITING_FOR_CHILD,
+	WAITING_FOR_READ,
+	SLEEP,
+};
+
+/* Structure for a Task Queue */
+struct TaskQueue {
+	Task *start, *end;
+	Spinlock lock;
+};
+
+/* Structure of a Task */
+struct Task {
+	pid_t tid, tgid;
+	uid_t uid, euid, suid;
+	gid_t gid, egid, sgid;
+	uint8_t priority;
+	char *name;
+	uint32_t usertime, systime;
+	int state;
+	uint64_t sleepExpiry;
+	int status;
+	uintptr_t esp, ebp, eip;
+	Task *next, *tnext, *parent;
+	pid_t ppid;
+	page_dir_t pageDir;
+	Spinlock lock;
+	uint8_t inSyscall;
+	File *executable;
+	VMRegion *stack, *tls;
+	TaskQueue waiting;
+	sigset_t sigset;
+	sigset_t blockedSignals;
+	void (*sig_handler[32])(int);
+
+	/* Messages */
+	Message *msgQueue;
+
+	/* Namespaces */
+	FileSystem *fs;
+	Files *files;
+	VirtualMemory *vm;
+//	Messages *ipc;
+//	Signals *signals;
+};
+
+extern Task *currentTask[];
+#define current currentTask[CPUID]
+
+/* Check if a routine is running as a syscall */
+static inline uint8_t
+in_syscall(void)
+{
+	if (!current)
+		return 0;
+	return (current->inSyscall);
+}
+
+/* Check if super-user */
+static inline int
+super_user(void)
+{
+	return (current->euid == 0);
+}
+
+void init_tasking(void);
+void syscall_handler(InterruptFrame *frame);
+Task *find_task(pid_t tid);
+void add_to_queue(TaskQueue *queue, Task *task);
+void remove_from_queue(TaskQueue *queue, Task *task);
+Task *pop_from_queue(TaskQueue *queue);
+void timer_handler(InterruptFrame *frame);
+void block_task(int reason);
+void unblock_task(Task *task);
+void schedule(void);
+pid_t fork(void);
+pid_t clone(int flags);
+void terminate(void);
+void exit(int status);
+pid_t waitpid(pid_t pid, int *wstatus, int options);
+pid_t getpid(void);
+uid_t getuid(void);
+int setuid(uid_t uid);
+uid_t geteuid(void);
+int seteuid(uid_t euid);
+gid_t getgid(void);
+int setgid(gid_t gid);
+gid_t getegid(void);
+int setegid(gid_t egid);
+int isatty(int fd);
+int execve(const char *file, char *argv[], char *envp[]);
+
+int tgkill(pid_t tgid, pid_t tid, int sig);
+int kill(pid_t pid, int sig);
+
+#endif