b22bea84ec
kernel: Copy process name on fork()
continuous-integration/drone/push Build is passing
2023-04-07 14:02:36 +02:00
b6c35124d6
libluna: OwnedStringView -> String
...
Also with inline storage!
2023-03-29 17:28:22 +02:00
0de41410c6
kernel: Use path as the new process name instead of argv[0]
2023-03-24 21:26:45 +01:00
36e48b2ad2
kernel: Do not attempt to close non-existent FDs on exec()
2023-03-24 21:21:13 +01:00
374a9ff7b8
kernel+libc: Implement O_CLOEXEC
2023-03-24 21:19:24 +01:00
d48d0efb07
kernel: Add names to threads
continuous-integration/drone/push Build is passing
2023-03-24 21:05:38 +01:00
7efcc06090
kernel+init+sh: Implement parent processes and waitpid(-1, ...)
continuous-integration/drone/push Build is passing
2023-03-24 17:37:04 +01:00
54f2d35416
kernel: Add the fork() system call
2023-03-18 23:45:48 +01:00
a4ac3c85ed
kernel+libc: Copy argv to userspace
continuous-integration/drone/push Build is passing
2023-03-18 22:25:19 +01:00
0b00dc3fe4
kernel/exec: Rename item to string_addr
continuous-integration/drone/push Build is passing
2023-03-18 21:56:34 +01:00
7f50893786
kernel/exec: Copy argv from userspace
continuous-integration/drone/push Build is passing
2023-03-18 21:55:16 +01:00
8c72e9a49a
kernel: Add an exec() system call
...
continuous-integration/drone/push Build is passing
Doesn't support arguments or environment for now.
2023-03-16 22:44:58 +01:00
cf758fdfdc
Initial commit :)
2022-11-13 10:09:09 +01:00
42efc21110
Start implementing read and write support in tmpfs
...
write seems to work fine, read just hangs there, waiting.
2022-11-12 20:11:26 +01:00
58fb422161
Kernel: Return a Result in MemoryManager and strdup_from_user
2022-11-12 11:56:40 +01:00
1ea216dfd1
Kernel: Rename assert.h to ensure.h
...
The macro is named "ensure", the header file should reflect that.
2022-11-09 15:28:35 +01:00
033c41cbd7
Kernel: Rework the uid/gid system to make it compliant
2022-11-09 09:54:07 +01:00
ffcaac0ca3
Kernel: Add validate_user_write() and validate_user_read()
...
Not at copy_from_user and copy_to_user yet, but an improvement over blindly using physical memory.
2022-11-04 22:46:48 +01:00
c604c074a1
Kernel: Rename ASSERT() to ensure()
...
Doesn't get stripped on release builds, so it shouldn't be named assert.
2022-11-02 19:38:15 +01:00
e5cf32c7b3
Kernel: Introduce page ownership
...
Some pages, such as framebuffer pages, are not physical memory frames reserved for the current process.
Some, such as the framebuffer, may be shared between all processes.
Yet, on exit() or on exec(), a process frees all frames mapped into its address spaces.
And on fork(), it copies all data between frames. So how could we map framebuffers.
Simple: we use one of the bits in page table entries which are available to the OS, and mark whether that page is owned by the current process.
If it is owned, it will be:
- Freed on address space destruction
- Its data will be copied to a new page owned by the child process on fork()
If it is not owned, it will be:
- Left alone on address space destruction
- On fork(), the child's virtual page will be mapped to the same physical frame as the parent
This still needs a bit more work, such as keeping a reference of how many processes use a page to free it when all processes using it exit/exec.
This should be done for MAP_SHARED mappings, for example, since they are not permanent forever,
unlike the framebuffer for example.
2022-11-02 19:32:28 +01:00
0115cce750
Kernel/VFS: Add file owners and file modes, and check those in system calls
2022-10-28 17:10:28 +02:00
16dc227a05
Kernel: Add UID and GID fields to Task
2022-10-28 17:06:13 +02:00
a4e430d35e
Kernel: count the null byte while calculating how much stack space argv will use
2022-10-26 20:05:24 +02:00
7d20c507b1
Kernel, libc, userspace: Implement command-line arguments (argv)
...
The only thing missing now is for sh to pass them on.
2022-10-26 18:57:06 +02:00
0faabe02e5
Kernel, libc: Implement O_CLOEXEC
2022-10-22 10:28:02 +02:00
b035795eb3
Kernel: Move errno.h and (k)assert.h out of the main include directory
...
This is mostly so IDEs don't pick them up instead of the userspace headers :)
2022-10-19 17:41:23 +02:00
48d4a5910a
Kernel: Add a few convenience functions to manipulate userland memory
2022-10-19 17:13:16 +02:00
a9d3bdba6f
Kernel: Keep track of a task's PPID
2022-10-18 17:18:37 +02:00
87ef210759
Kernel, libc: Remove spawn()
...
Now, fork() and exec() are both implemented. More POSIX-y, thus spawn can be removed.
2022-10-17 19:55:01 +02:00
ea8a42b8c0
Kernel: Add a name field to the Task structure
2022-10-17 19:12:47 +02:00
64f5078494
Kernel, libc: Implement fork()
...
This time for real.
Also, add a new per-user-task virtual address allocator (UserHeap), so that mmap'ed pages are in user range and can be copied.
2022-10-17 18:43:35 +02:00
966fdc76d7
Move userspace task to userspace memory
2022-10-17 17:30:05 +02:00
682be58d97
AddressSpace: copy instead of linking
2022-10-17 17:24:33 +02:00
c2fa4f380d
Kernel: Use the new Task member functions
2022-10-17 17:07:25 +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
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
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
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
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
69a9f7f06a
Kernel: Move VMM from a class to a namespace
...
Also, rename the ugly Paging::VirtualMemoryManager name to just 'VMM'. Which is now used instead of kernelVMM.
2022-10-12 20:02:25 +02:00
5f8376409d
Kernel, libc: Implement EFAULT
2022-10-12 19:25:35 +02:00
e37ff67da2
Make exec return an error if the loaded executable would use more memory than is currently available
2022-10-12 19:22:08 +02:00
4091799701
Kernel, libc: Add ENOEXEC (Exec format error)
2022-10-12 19:15:44 +02:00
8a7ddfca80
exec: Use check_elf_image()
...
This allows exec to recover if an error should occur when loading the executable.
Thus, the calling process will be notified instead of killed.
2022-10-12 18:43:48 +02:00
e9df5fd663
exec: Copy pathname into kernel memory, since the user memory where it resides is going to be freed
2022-10-12 18:04:20 +02:00