summaryrefslogtreecommitdiff
path: root/kernel/sched/scheduler.h
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2023-10-30 22:12:14 +0100
committerAnton Kling <anton@kling.gg>2023-10-31 00:18:38 +0100
commit8a9208612eec8ddae4c418485d848ecfa0613699 (patch)
tree2f4b29200c2f0c19ae52f45bdb9b38a41b356e30 /kernel/sched/scheduler.h
parentca76600acc8bf7a02346efa5bd8f17072210ec01 (diff)
Meta: Move kernel and userland to their own folders.
This is to allow both the kernel and the userland to share certain header files and to make the folder structure a bit more clear.
Diffstat (limited to 'kernel/sched/scheduler.h')
-rw-r--r--kernel/sched/scheduler.h65
1 files changed, 65 insertions, 0 deletions
diff --git a/kernel/sched/scheduler.h b/kernel/sched/scheduler.h
new file mode 100644
index 0000000..fc92ff3
--- /dev/null
+++ b/kernel/sched/scheduler.h
@@ -0,0 +1,65 @@
+#ifndef SCHEDULER_H
+#define SCHEDULER_H
+#include <fs/ext2.h>
+#include <fs/vfs.h>
+#include <halts.h>
+#include <mmu.h>
+#include <signal.h>
+
+#define MAX_PATH 256
+#define KEYBOARD_HALT 0
+#define WAIT_CHILD_HALT 1
+
+int fork(void);
+int exec(const char *filename, char **argv);
+void switch_task();
+void tasking_init(void);
+void exit(int status);
+
+void *mmap(void *addr, size_t length, int prot, int flags, int fd,
+ size_t offset);
+int munmap(void *addr, size_t length);
+int msync(void *addr, size_t length, int flags);
+int kill(pid_t pid, int sig);
+void set_signal_handler(int sig, void (*handler)(int));
+
+typedef struct {
+ void *u_address;
+ void *k_address;
+ uint32_t length;
+ int fd;
+} MemoryMap;
+
+typedef struct Process process_t;
+
+struct Process {
+ uint32_t pid;
+ char program_name[100];
+ char current_working_directory[MAX_PATH];
+ uint32_t eip, esp, ebp;
+ uint8_t incoming_signal;
+ uint32_t signal_handler_stack;
+ void *signal_handlers[20];
+ PageDirectory *cr3;
+ vfs_fd_t *file_descriptors[100];
+ vfs_inode_t *read_halt_inode[100];
+ vfs_inode_t *write_halt_inode[100];
+ vfs_inode_t *disconnect_halt_inode[100];
+ uint32_t halts[2];
+ struct Halt *halt_list;
+ void *data_segment_end;
+ process_t *next;
+ process_t *parent;
+ // TODO: Create a linkedlist of childs so that the parent process
+ // can do stuff such as reap zombies and get status.
+ process_t *child;
+ MemoryMap *maps[100];
+ uint32_t sleep_until;
+ int child_rc;
+ int dead;
+};
+
+process_t *get_current_task(void);
+int get_free_fd(process_t *p, int allocate);
+void free_process(void);
+#endif