ce6ec3585c
Kernel, libc: Add ENOSYS
...
This error is returned by the kernel/C Library when an attempt is made to use a system call that doesn't exist.
2022-10-08 14:18:25 +02:00
a086ec514b
Remove the Superblock.h file which has never been used.
...
This file was included for a future Ext2 implementation. It should be included when said Ext2 implementation is actually started.
2022-10-08 13:28:30 +02:00
71e15e94af
Kernel, libc and userspace: Add basic errno support.
...
Kernel: Add an errno.h header with definitions for each header,
and return those, negated, from syscalls when there is an error.
mmap() returns an invalid address with errno encoded, instead of
returning a negated errno; this address is encoded as ffffffffffffffEE
where EE is errno in hex.
libc: make syscall() return -1 and set errno on error, instead of
returning the raw return value of the system call. Also, add mmap()
and munmap() wrappers in sys/mman.h :).
userspace: make the memeater program show the value of errno
when allocating memory fails.
Things to improve: add perror() and strerror() to make the errno
experience even better! >.<
2022-10-08 12:06:09 +02:00
dc389da74e
Implement an ELFImage struct
...
This struct allows us to keep track of what memory is used by the loaded executable. For some reason, freeing this memory when the task exits triggers a kernel page fault, so I'm not doing that right now.
2022-10-07 17:54:05 +02:00
594d79143e
Kernel: enable -Wconversion
2022-10-06 17:13:34 +02:00
952d8fa294
Be more strict with warnings
2022-10-05 17:34:22 +02:00
8f310dd307
PMM: Map the page bitmap to kernel heap once the PMM and VMM are both initialized
2022-10-04 18:36:09 +02:00
dae2ff8d50
Add mmap and munmap syscalls, and thus, add malloc and free to libc!! (yet again, thanks to the wonderful liballoc)
2022-10-02 20:45:04 +02:00
1ecd24f5d6
Kernel: Add SSE support (enable SSE on boot and save context (user tasks only) on task switch)
2022-10-02 18:53:54 +02:00
8e6741ebd6
Rename SYS_version to SYS_getversion
2022-10-02 17:25:56 +02:00
ac6fdce737
Add 2 new syscalls (sys_version, sys_gettid)
2022-10-01 17:30:31 +02:00
87cb41e549
Separate the logging stack into toggleable backends, to disable console logging once boot finishes.
2022-10-01 15:35:11 +02:00
0e46ea8ada
Finally, a text renderer that actually works. We can now see the kernel messages without a serial port :)
2022-10-01 14:27:45 +02:00
30411b4b78
Fix hackiness in converting a uint32_t to a Color, by providing a function to do so
2022-10-01 13:08:47 +02:00
66bee86a8b
Scheduler: add a load_user_task function that directly loads a file from the initrd
2022-10-01 12:28:32 +02:00
6e6cf5b2b0
Add an ELF Loader!!
2022-10-01 12:15:56 +02:00
53d36be339
Add a much-needed get_blocks_from_size function
2022-10-01 12:13:38 +02:00
e769cb45a7
MemoryManager: add get_page_at and get_pages_at functions to map any physical memory at a fixed virtual address (inverse of get_mapping and get_mappings)
2022-10-01 12:12:50 +02:00
ef5994e389
Proper userspace program
2022-09-29 20:06:18 +02:00
522d74b65d
Add is_user_address and is_kernel_address functions
2022-09-29 19:30:42 +02:00
f25014a8ed
refine syscalls
2022-09-29 19:17:43 +02:00
46f459337c
Interrupts: Remove ensure_handler and use a more reliable way of detecting if we are in a handler
2022-09-29 18:35:51 +02:00
07d6fe388d
Fix naming
2022-09-25 21:43:28 +02:00
f1a7138568
User mode (with a few syscalls)
...
IT ACTUALLY WORKS NOW.
Why wasn't it working? Oh, because I was not setting already present page tables's permissions to user mode. Just a little bug. THAT I SPENT DAYS TRYING TO FIND
Anyways, it works now. Such a relief...
2022-09-25 20:35:05 +02:00
19dff40ee2
Scheduler: track total CPU time of tasks
2022-09-25 17:49:51 +02:00
3fd1b6773d
Panic: Only dump stack trace if InitRD is initialized
2022-09-25 17:41:34 +02:00
a078a11dde
Move PMM and VMM initialization into MemoryManager::init
2022-09-25 17:38:17 +02:00
4e62566c48
Add with_value_of and with_value to MSR
2022-09-25 17:28:38 +02:00
aee4e55fdd
add a proper kernel panic
2022-09-25 16:56:00 +02:00
704a23d0ad
Sanity checks
2022-09-24 23:09:39 +02:00
6bd3529f32
Port liballoc to get proper kmalloc/kcalloc/krealloc/kfree functions.
...
Yes, that's not completely-from-scratch.
But let's be honest, am I going to do everything from scratch? Probably not. I'm not making my own bootloader.
And making a proper smaller-than-4-KB allocator is not something I want to do.
Plus, liballoc works perfectly in this rewrite, seeing as the MM code actually works, instead of leaking all your poor memory
And liballoc_{lock, unlock} can be actually defined, since we have spinlocks here!
2022-09-24 22:40:59 +02:00
3891d0c52e
Rename KernelMemoryManager to MemoryManager
...
Kind of a more catchy name, isn't it?
2022-09-24 21:45:13 +02:00
46b7dab847
Remove RangeAllocator and make a PMM namespace
2022-09-24 21:27:45 +02:00
198f4196c4
Add an MSR utility struct
2022-09-24 20:48:27 +02:00
7b8d30aacd
Add a Device class to PCI and a PCITypes file for string names for PCI device types
2022-09-23 18:01:07 +02:00
8a93c53277
Add a Device class to PCI
2022-09-23 17:24:45 +02:00
c3e5251687
Some more userland and font failing
2022-09-23 16:41:43 +02:00
11dd165a8e
Scheduler: add proper support for user tasks (still faults though)
2022-09-22 08:14:04 +02:00
543fe2885f
Add support for user pages
2022-09-22 07:57:30 +02:00
ec01dc2927
Scheduler: Change fixed Task array for (highly inefficient) memory allocation, add userspace task support (which as memory is mapped kernel-only instantly crashes), and support for exiting a task (marking it as exited and reaping it later)
2022-09-21 21:06:00 +02:00
ee49caa6d3
Interrupts: ensure is_in_handler is true if we know we are in a handler
2022-09-21 21:03:49 +02:00
4401b31440
Remove ds from context, no need for it in x86_64, use ss instead
2022-09-21 21:03:24 +02:00
d54ed0dc8b
Make ASSERT, PANIC and TODO show a backtrace and scheduler tid if initialized
2022-09-21 20:56:40 +02:00
af8e5aca64
Add basic PCI driver
2022-09-21 17:57:02 +02:00
49ddb47ad4
Reorganize structure
2022-09-21 17:56:53 +02:00
1c12cf016e
Add a Scheduler.
...
Finally.
Just Round Robin with sleeping, but it's still awesome. I think this can finish v0.3, with a few adjustments.
2022-09-20 19:58:04 +02:00
e6c6a1677a
Rename "SavedContext" to "Context"
...
Seemed like a more appropriate name.
2022-09-20 19:56:43 +02:00
d0d2d4381c
Add a is_in_handler function to validate being in an interrupt handler
2022-09-20 17:16:07 +02:00
1c1aa96293
Add a moon_version function that returns the full version string
2022-09-20 16:34:24 +02:00
6967fa9117
Update config.h to use a .cpp file that will be recompiled when it changes
2022-09-20 16:30:34 +02:00