diff options
author | Himbeer <himbeer@disroot.org> | 2024-05-12 20:41:38 +0200 |
---|---|---|
committer | Himbeer <himbeer@disroot.org> | 2024-05-12 20:41:38 +0200 |
commit | 95f2d9ac91a9c35dc7b13899520fd6facc614769 (patch) | |
tree | 17ec2f21415776581834f95e44b4512090da8899 | |
parent | 8eeb18004cb062be47d5e1cd39d4a5a9a91c38a8 (diff) |
process: Add basic scheduler
-rw-r--r-- | src/process.zig | 13 |
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; +} |