aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeer <himbeer@disroot.org>2024-05-12 20:41:38 +0200
committerHimbeer <himbeer@disroot.org>2024-05-12 20:41:38 +0200
commit95f2d9ac91a9c35dc7b13899520fd6facc614769 (patch)
tree17ec2f21415776581834f95e44b4512090da8899
parent8eeb18004cb062be47d5e1cd39d4a5a9a91c38a8 (diff)
process: Add basic scheduler
-rw-r--r--src/process.zig13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/process.zig b/src/process.zig
index 7070ff2..a343cd6 100644
--- a/src/process.zig
+++ b/src/process.zig
@@ -10,6 +10,8 @@ const paging = @import("paging.zig");
const num_stack_pages = 2;
var next_pid = 1;
+var previous_scheduled = 1;
+var list = std.mem.zeroInit(std.DoublyLinkedList(Info));
pub const State = enum {
waiting,
@@ -33,7 +35,7 @@ pub const Info = extern struct {
}
};
-pub fn new(entry: *fn() void) !Info {
+fn new(entry: *fn() void) !Info {
const stack = try paging.alloc(num_stack_pages);
errdefer paging.free(stack);
@@ -61,3 +63,12 @@ pub fn new(entry: *fn() void) !Info {
try procmem.map(vaddr, paddr, paging.EntryFlags.userReadWrite, 0);
}
}
+
+pub fn nextScheduled() ?Info {
+ if (list.popFirst()) |next| {
+ list.append(next);
+ return next.data;
+ }
+
+ return null;
+}