Commit Graph

1313 Commits

Author SHA1 Message Date
Bananymous 9781cc5d16 Kernel: Remove obsolete Scheduler::is_valid_tid()
This function was used when processes could die at any point in time.
Now that processes can only die in known spots, we can be sure they
are not holding any locks. This allows much more performant locking.
2023-12-07 13:26:42 +02:00
Bananymous 6ed6fb6f78 Kernel: Make Inodes use the new lock
Also remove old lock from TTY since it can just use the one Inode
already has.
2023-12-07 13:19:12 +02:00
Bananymous 39170a437e Kernel: Implement RecursivePrioritySpinLock
This locks won't allow locking from userspace thread if there is
kernel thread waiting to lock this.
2023-12-07 13:18:21 +02:00
Bananymous d824449ddb AOC2023: Use quick sort in solution 2023-12-07 11:55:28 +02:00
Bananymous 8aa137bdfe BAN: implement quick sort and test for it 2023-12-07 11:55:28 +02:00
Bananymous d37b59b2df BAN: Fix simple iterator operator--() 2023-12-07 11:55:28 +02:00
Bananymous 412aa05feb BAN: implement exchange sort and test for it 2023-12-07 11:55:28 +02:00
Bananymous 44358a9182 BAN: add value_type to iterators 2023-12-07 10:15:18 +02:00
Bananymous 8516f04467 AOC2023: optimize hand score calculation 2023-12-07 09:26:17 +02:00
Bananymous 045a96009e BAN: implement basic swap
This will be improved, currently just works on general type T and
moves values between arguments.
2023-12-07 09:26:17 +02:00
Bananymous d79703063f AOC2023: implement day7 2023-12-07 07:56:56 +02:00
Bananymous e811fc0be5 Userspace: Implement barebones sudo
This doesn't do any password checking or anything. Just sets uid and
gid before execvp()
2023-12-06 18:15:42 +02:00
Bananymous 0389fbe88d Kernel: Appreciate setuid and setgid bits executables 2023-12-06 18:14:27 +02:00
Bananymous d7e362aef8 LibC: Implement basic execvp 2023-12-06 18:14:00 +02:00
Bananymous 32be14fdb0 LibC: Implement and fix some string.h functions 2023-12-06 18:13:34 +02:00
Bananymous 91ee80ea86 Kernel: Make sys_nanosleep interruptable by signals 2023-12-06 16:22:24 +02:00
Bananymous 5b8adb8418 Kernel: Cleanup sys_sleep() and TTY::read_impl 2023-12-06 16:21:22 +02:00
Bananymous fee9ee0f16 Kernel: Add API to block on semaphore until unblock or EINTR 2023-12-06 16:13:07 +02:00
Bananymous 4a5b38ca07 Kernel: Scheduler::unblock_thread() wakes sleeping threads 2023-12-06 16:12:37 +02:00
Bananymous 094978b8d1 LibC: make sleep() set errno if sleep woke up early 2023-12-06 13:13:43 +02:00
Bananymous d48839cf75 Kernel: Make sleep syscall interruptable 2023-12-06 13:13:37 +02:00
Bananymous 56b6b1685d Userspace: implement basic sleep command 2023-12-06 13:05:53 +02:00
Bananymous e3d15ca905 Shell: Handle keyboard input that was interrupted by signal 2023-12-06 13:04:33 +02:00
Bananymous b334904427 Kernel: Rework all signal code
Signal handling code was way too complex. Now everything is
simplified and there is no need for ThreadBlockers.

Only complication that this patch includes is that blocking syscalls
have to manually be made interruptable by signal. There might be some
clever solution to combat this is make this happen automatically.
2023-12-06 13:02:17 +02:00
Bananymous afa1f07fd2 Kernel: Remove unnecessary raise syscall 2023-12-06 13:00:45 +02:00
Bananymous bb831bcdaa Kernel: Add helper for checking whether segment is from userspace 2023-12-06 12:57:13 +02:00
Bananymous acee6af98d AOC2023: implement day6 2023-12-06 07:27:25 +02:00
Bananymous e63820ba7b LibC: cleanup and fix fgets
My quick fix for fgets wrote non-nullterminated newline if size was
one.

POSIX doesn't specify what happens if size == 0, so I do the same as
glibc and return NULL without setting errno.
2023-12-05 10:00:43 +02:00
Bananymous 80cbb56878 AOC2023: implement day5 2023-12-05 09:13:13 +02:00
Bananymous ab44c60d7e LibC: fix fgets when reading empty line 2023-12-05 07:46:14 +02:00
Bananymous 52309413af Shell: Verify that command exists before executing it
This prevents page fault somewhere when executing non-existing
commands.
2023-12-04 22:57:27 +02:00
Bananymous 657debc8c0 AOC2023: remove unnecessary loop 2023-12-04 17:54:10 +02:00
Bananymous 35999a5ecc AOC2023: implement day4 2023-12-04 17:51:27 +02:00
Bananymous b0ac571abe AOC2023: implement day3
Solution to second puzzle is not optimal, it definately should be
O(1) space, but I didn't want to think about it.
2023-12-03 17:07:09 +02:00
Bananymous ba0981c0e3 AOC2023: implement day2 2023-12-02 16:10:37 +02:00
Bananymous 24c79d72cd AOC2023: Cleanup day1 code 2023-12-01 13:31:55 +02:00
Bananymous 6dcab1491e AOC2023: implement day1 2023-12-01 12:38:01 +02:00
Bananymous 8f3659dcb9 AOC2023: update buildsystem 2023-12-01 12:38:01 +02:00
Bananymous f1c2284512 Kernel: Fix keyboard layout for underscore 2023-12-01 12:31:16 +02:00
Bananymous 2188dc2e1c Userspace: Prepare aoc2023 environment :) 2023-12-01 01:22:53 +02:00
Bananymous ff83c52c89 init: set default termios on every username prompt
Before if e.g. Shell crashed init would have broken termios
2023-12-01 01:22:53 +02:00
Bananymous 1cfab4ae04 BuildSystem/Kernel: Enable -Wextra and -Werror in kernel
Only needed to fix some unused variable bugs
2023-12-01 01:22:53 +02:00
Bananymous 2ac28cba6e BuildSystem: Don't build lai with -Wstack-usage
Lai has two functions that trigger warnings on gcc. There isn't
really anything I can do about it, so just disable the warning
2023-12-01 01:22:53 +02:00
Bananymous 547aeb0170 image: Remove inheritance from Netbpm
This inheritance made no sense
2023-11-29 20:56:05 +02:00
Bananymous ebe465e81e Kernel: cast between inheritance with static_cast
using reinterpret_cast is not a good idea. preferably we would use
dynamic_cast, but that is not possible since kernel is compiled with
-fno-rtti.
2023-11-29 20:50:57 +02:00
Bananymous c10dffd719 Kernel: Make internal framebuffer bpp constexpr defined in libc 2023-11-29 20:07:33 +02:00
Bananymous 21392e34cb cp: allow copying all files except directories
The old condition seemed odd. This allows taking screen shots by
copying the /dev/fb0.
2023-11-29 16:13:40 +02:00
Bananymous ea4a45aef2 Userspace: Implement basic image rendering for Netbpm
You can now render Netbpm (P6) format image to framebuffer using
`image` command. I added basic test image to
/usr/share/images/sample.ppm
2023-11-29 16:11:35 +02:00
Bananymous 45d8d76e87 Kernel: Use the correct bpp when writing to framebuffer 2023-11-29 00:31:24 +02:00
Bananymous e3890fa7c4 Shell: make clear use \e[2J instead of \e[J
This makes kernel to actually clear the full screen. If framebuffer
did not fit font exactly last row would be left partially uncleared
2023-11-28 23:55:37 +02:00