summaryrefslogtreecommitdiff
path: root/src/kernel/proc.c
AgeCommit message (Collapse)Author
2024-08-03kernel: send user interrupt on page faultdzwdz
I really should just rename interrupts to something else. This is inspired by Plan9 and meant to make debugging easier, as the dying process can take a stacktrace etc. It kinda sucks that the default handler now depends on fprintf, which is quite a bit of code, but whatever.
2024-08-02*: use a generic UserRegs type everywhere I'm storing registersdzwdz
mostly inspired by Plan 9's Ureg, probably obvious from the name
2024-07-27kernel: don't use pointer types for registers, add proc_savereturndzwdz
2024-07-26kernel: implement _sys_intr_returndzwdz
2024-07-25kernel: pass more information to user on interruptdzwdz
This is meant to facilitate a syscall for returning from interrupts, which will actually work in the general case as opposed to the current hack, which only works if the interrupt occured during a syscall (which is correct... for now).
2024-07-22kernel: explicitly store process RIP and RFLAGSdzwdz
Once again, needed for the interrupt return syscall. Seems to have made the kernel slower in timebench?
2024-07-17kernel: make kmalloc accept a numeric "tag" instead of a freeform descriptiondzwdz
This will both let me save space in the allocation header, and make the debugprint more readable.
2024-07-14kernel: make the adhoc VfsQueue queues use ReqQueue insteaddzwdz
I'm still not sure if I should use sys/queue.h for this. But yeah, this is more consistent, and it will also let me switch over to O(1) insertions later on.
2024-07-12kernel: don't reuse VfsReq allocations for a single processdzwdz
To use the same testing methodology as when I've introduced request slots: before: / $ iostress 1 1000000 0 > /dev/vtty run 0: 2585203 1000000 calls, 0 bytes. avg 2585203 after: / $ iostress 1 1000000 0 > /dev/vtty run 0: 2783171 1000000 calls, 0 bytes. avg 2783171 This is around a 7.7% slowdown - that I hope to fix with a better malloc. While this doesn't really make the code that much simpler, it doesn't feel like the right approach in the first place
2024-07-07kernel/vfs: split vfs_backend_refdown into two functionsdzwdz
2024-05-11kernel: refactor handle management out of proc.cdzwdz
2024-03-13kernel/malloc: slight rework (it's still bad), store more metadatadzwdz
2024-02-21kernel: integrate the proc_ns_next fixes into proc_nextdzwdz
2023-09-25kernel/intr: accept a message, allow killing processes via intrsdzwdz
2023-09-24kernel: delay removing processes from treedzwdz
2023-09-17kernel/proc: inline proc_switch into proc_switch_anydzwdz
2023-09-15kern: fix GDT order for 64bit sysretdzwdz
2023-09-13cmd/init: remove /initctl, use intr insteaddzwdz
2023-08-31kernel: add _sys_getprocfs in place of HANDLE_PROCFSdzwdz
This makes the side-effects more explicit, and feels less hacky than `HANDLE_PROCFS`. I don't think accessing a handle alone should have side-effects, even if it's a "special" one.
2023-08-29kernel: remove _sys_await, emulate it in libcdzwdz
2023-08-27ports: qbe, cproc :^)dzwdz
2023-06-11kernel: replace await with wait2, roughly compatible with POSIXdzwdz
dash works now :^)))
2023-06-10kernel: implement DUP_SEARCH (like unix's F_DUPFD)dzwdz
2023-06-04kernel: rework /proc/ and process IDsdzwdz
I'm yet to write proper docs but the TL;DR is: Mounting /proc/ creates a new pid namespace. You're still visible in the old namespace with your old pid, but your children won't be. You see your own pid as 1. Current pids of children will be preserved, pids will be allocated starting from the highest one of your children.
2023-01-25kernel: move /mem/alloc to /malloc and linker.ld to arch/amd64/dzwdz
2023-01-25kernel: consolidate some header filesdzwdz
2023-01-25kernel: remove accidental executable bit on proc.cdzwdz
how.
2023-01-25style: typedef structs, shorter namespacesdzwdz
I've wanted to do this for a while, and since I've just had a relatively large refactor commit (pcpy), this is as good of a time as any. Typedefing structs was mostly inspired by Plan 9's coding style. It makes some lines of code much shorter at basically no expense. Everything related to userland kept old-style struct definitions, so as not to force that style onto other people. I also considered changing SCREAMING_ENUM_FIELDS to NicerLookingCamelcase, but I didn't, just in case that'd be confusing.
2023-01-25kernel/virt: replace the virt_cpy api with a more foolproof onedzwdz
2023-01-24kernel/procfs: allow interrupting processesdzwdz
2023-01-19kernel: user interruptsdzwdz
2023-01-19kernel: delay freeing reaped processes, slightly more strict statesdzwdz
2023-01-18kernel: add a root argument to process_nextdzwdz
2023-01-11kernel: return EPIPE when fs_waiting on a dead filesystemdzwdz
2023-01-08kernel: let parents kill their children againdzwdz
2023-01-08kernel/proc: don't kill children when parent diesdzwdz
2023-01-06kernel: basic procfsdzwdz
2023-01-06kernel: turn the NULLFS into an always present special handledzwdz
preparing for HANDLE_PROCFS
2022-09-02kernel/proc: introduce child ids for telling children apartdzwdz
2022-08-30set up the stack in user/bootstrap instead of the kerneldzwdz
2022-08-28kernel/vfs: minor vfs_request / vfs_root_register reworkdzwdz
* changed vfs_root_register's name because the _mount didn't add anything * removed the old pointless vfs_backend_tryaccept calls from drivers * because of that, i could remove the vfs_backend globals * replaced the horrible BACKEND_KERN macro * all vfs_backends are now stored on the heap
2022-08-19syscall/fs_wait: return a handle for each requestdzwdz
2022-08-19syscall/fork: allow sharing handles between threadsdzwdz
2022-08-19kernel: kzallocdzwdz
2022-08-19kernel/proc: abstract away managing handlesdzwdz
2022-08-18syscall/fork: FORK_SHAREMEM for primitive "threads"dzwdz
2022-08-12kernel/proc: don't expose internal fuctions, clean up apidzwdz
2022-08-06kernel/mem: make the page bitmap cover everything after bssdzwdz
2022-08-04do some simple TODOs, organize the rest; general code maintainancedzwdz
2022-08-04syscalls: add _syscall_sleep()dzwdz