Crescent is my fifth attempt at making an x86-64 kernel, though I have tried to made it be as platform-independent as possible so it should be easy to port it to a new platform in the future. Currently it has virtual memory allocation using vmem, tsc/apic timers using hpet for calibration, io-apic for interrupts, ps2 keyboard support, smp support, multilevel feedback queue scheduler, and a tty that I am currently working on.
As for the design I am not completely sure yet, but I am pretty sure its going to be a mix of traditional unixy-things and some custom approaches (sometimes inspired by windows).
I feel like the scheduler might need a bit more explaining, so Ill try to explain it here. It has an adjustable amount of levels where each lower level has lower timeslice than the one after it (the min and max timeslices are adjustable). The scheduler always runs tasks in a round-robin fashion starting from the topmost level going down if there are no more tasks. The tasks initially begin at the topmost level which has the shortest timeslice and if they keep on running for the whole slice then they are being put on the level below and that continues until it either reaches the deepest level or it blocks eg. waiting for something. After it wakes up again after being blocked its level is going to be bumped one level up so short tasks that block often are preferred over long-running tasks. In my implementation I also added a manually chosen task-priority which currently is only used when deciding whether to pre-empt the currently running task when waking a task up or not, but I plan on using it in some other places too.
And finally here is the github link 😛 https://github.com/Qwinci/crescent

now I just have to properly disconnect the sockets if either side of it dies as right now it would just access some freed memory and die





reaction for more information.

I have been making an api for vmx in the past few days and now I am trying to make seabios work in a "vm" using it

its not even that much slower than the old ci, like 1min 20s for x86_64 and then probably around the same time for aarch64 (for reference previously it was 1min for both)