Commit Graph

323 Commits

Author SHA1 Message Date
b334e1cd50 VMM: check if the entry is already present 2022-10-17 17:26:16 +02:00
682be58d97 AddressSpace: copy instead of linking 2022-10-17 17:24:33 +02:00
250db2c90f Scheduler: add an append_task() function 2022-10-17 17:14:22 +02:00
c2fa4f380d Kernel: Use the new Task member functions 2022-10-17 17:07:25 +02:00
ce10fb5743 fcntl(F_DUPFD): Allocate any file descriptor greater than or equal to arg 2022-10-17 17:01:22 +02:00
891651f2d6 Task: Move functions operating on Task to member functions
Also, add an alloc_fd_greater_than_or_equal() function, for use in fcntl(F_DUPFD)
2022-10-17 17:00:07 +02:00
e34045a78c Kernel: on stack smashing detection, do not trigger a normal panic
That triggers stack traces, which we do not want in a stack smash fail situation
2022-10-16 19:04:24 +02:00
9b39d618de Kernel, libc: Implement spawn()
This function is a Luna alternative to fork() and exec().

Why? Simply because I can't figure out for the life of me how to implement a working fork().

So meanwhile, we have spawn() as a replacement. exec() still exists, though.
2022-10-16 18:48:35 +02:00
a1146a5ce2 Panic: show panic message on screen 2022-10-16 18:23:33 +02:00
d2e2883a79 Kernel: Make mkdir() accessible to userspace 2022-10-16 17:22:12 +02:00
18fbccafb7 VFS: add an exists() function 2022-10-16 16:58:18 +02:00
d62eb6c791 Tests: Add test framework 2022-10-16 15:31:58 +02:00
f8154ce230 Kernel: Implement mkdir() from a single path
This is done using dirname() and basename() :)
2022-10-16 14:45:25 +02:00
8c0a57f0c2 Kernel: Copy strrchr, dirname and basename over from libc 2022-10-16 14:36:25 +02:00
1624f0360d exec: More logging 2022-10-15 17:47:57 +02:00
68403dc029 Kernel: Make AddressSpaces reference-counted 2022-10-15 17:40:33 +02:00
eca7227fda StackTracer: Stop when instruction is at nullptr 2022-10-15 17:31:57 +02:00
aca1367158 Kernel: Switch to strlcpy() as well
Surprisingly, most uses of strncpy() are in places where strncpy() is actually a better choice.
For example, copying to a fixed-length char array in a structure.
2022-10-15 17:30:34 +02:00
4bad782aad Kernel: Increment the maximum number of file descriptors a task can have
Doesn't use up more space in the Task structure, and now we are above the Minimum Acceptable Value as defined by POSIX (20), I think.
2022-10-15 14:20:29 +02:00
62a2bcf2ff Kernel: Add a clock() system call 2022-10-15 13:17:26 +02:00
3a9dddaa57 Kernel, libc: Remove the rand() system call
That's why we now have a VFS and a /dev pseudo-filesystem. To provide that kind of things.

Remember, everything is a file!!

The new way to ask the kernel for random numbers is to read from /dev/random.
2022-10-15 13:04:48 +02:00
613f8170b6 Kernel, libc: Implement mprotect() and use proper PROT_* values 2022-10-15 12:57:14 +02:00
62d631f1b4 Kernel: Rename assert.h to kassert.h so IDEs pickup the kernel header instead of the userspace one 2022-10-15 12:56:48 +02:00
1e86acd4c0 libc: Implement fcntl(F_DUPFD) and dup() 2022-10-15 11:16:34 +02:00
36bb1cab5c FileDescriptor: add operator=() so that the fcntl(F_DUPFD syscall compiles :) 2022-10-15 11:16:18 +02:00
5c61252061 Kernel: Add a new fcntl() system call 2022-10-15 10:56:06 +02:00
3eb1bff2e9 Task: add an alloc_fd() function 2022-10-15 10:45:12 +02:00
91d76a2ee4 Devices: Add a new RandomDevice :)
This new device uses the seeded Mersenne PRNG we use in the kernel.
This device is not meant for regular userspace use, but more for userspace to seed their own PRNGs from.

If the DeviceFS is mounted at /dev, this device can be found at /dev/random.
2022-10-14 20:14:49 +02:00
faaf930a14 Moon 0.12-dev 2022-10-14 19:55:29 +02:00
97461c7c1f Prepare for moon 0.11 2022-10-14 19:49:52 +02:00
e0aa552fae Kernel: Add a move() function
The standard C++ move() function.
2022-10-14 19:04:56 +02:00
f82fbbe60c Make address spaces not cloned by default 2022-10-14 18:23:04 +02:00
c8a92af4d2 Whoops! bugfix 2022-10-14 18:21:09 +02:00
1c3377fc98 Prepare for cloning address spaces, not there yet 2022-10-14 18:17:57 +02:00
e43777bd31 Apparently, it just works now. 2022-10-14 18:00:33 +02:00
97a8a4a4a2 Solve rebase 2022-10-14 17:39:24 +02:00
81f56083c5 Almost there! 2022-10-14 17:38:29 +02:00
cdb73836b0 Some more multiple address space stuff
This page-faults. This is because the memory where the ELF should be is all zeroes, which the CPU tries to interpret.
2022-10-14 17:37:51 +02:00
bb7887a29d Add basic address space infrastructure 2022-10-14 17:34:29 +02:00
177282d79c Use the more appropriate size_t 2022-10-14 17:33:06 +02:00
5abd8814e3 Kernel: Continue moving utilities to a separate subdirectory 2022-10-14 17:33:06 +02:00
e21b608af4 Utilities: Start moving utilities into specific headers in a utils/ subdirectory 2022-10-14 17:31:47 +02:00
9b3c7816a3 Scheduler: pop the interrupt state when returning early from load_user_task() 2022-10-14 16:54:52 +02:00
26211bd49f It (almost) works now
The only thing doing weird stuff is exec(), so that's commented out and throws ENOSYS right now.

But we have two user tasks running in parallel, isolated from each other!
2022-10-14 16:46:00 +02:00
0c7c249935 exec is still doing some weird stuff, totally corrupting the page tables 2022-10-13 22:20:24 +02:00
5d41b4b113 Almost there...
exec() is not working yet. But the rest are!!
2022-10-13 22:13:04 +02:00
24272c57ef Almost there! 2022-10-13 21:55:51 +02:00
83982a24e2 add a comment 2022-10-13 21:21:02 +02:00
ee712432bd Some more multiple address space stuff
This page-faults. This is because the memory where the ELF should be is all zeroes, which the CPU tries to interpret.
2022-10-13 21:14:39 +02:00
229b06c63b Add basic address space infrastructure 2022-10-13 19:19:51 +02:00