Bananymous
dbba9128a4
Ports: Add ncurses and vim port!
...
vim is kind of buggy because my virtual tty {insert,delete} line ansi
codes don't really work.
2024-08-05 15:20:18 +03:00
Bananymous
352c1ddc16
BuildSystem: Rewrite port compilation system
...
Now ports define some environment variables, and call a unified bash
script that handles configuration, recompilation and installation.
If a port uses non-configure buildsystem, port script can also specify
custom build and install step.
2024-08-05 15:20:18 +03:00
Bananymous
4d96ae56ac
LibC: Add stubs for ungetc(), tcflush() and symlink()
2024-08-05 01:48:24 +03:00
Bananymous
adadb10b15
LibC: Fix strsignal() and implement psignal()
2024-08-05 00:59:03 +03:00
Bananymous
a749b9806e
LibC: Add definition for h_errno
...
Nothing uses this yet, but linking will succeed
2024-08-05 00:58:06 +03:00
Bananymous
615d9d4abe
LibC: Add INADDR_LOOPBACK
...
Some port was using this. Loopback addresses are not supported, but they
will be 127.0.0.1.
2024-08-05 00:56:42 +03:00
Bananymous
aa03274093
LibC: Remove O_DIRECTORY from opendir()
...
opendir() did not work on symlinks after with this flag...
2024-08-05 00:55:03 +03:00
Bananymous
e7a06979ec
LibC: Implement usleep()
...
This is not a POSIX function, but some ports seem to be using it either
way
2024-08-05 00:54:17 +03:00
Bananymous
3651306f57
LibC: Implement strto{u,i}max()
2024-08-05 00:53:27 +03:00
Bananymous
5dce4e6aea
LibC: Implement strftime()
...
I did not test this at all, this might very well be broken
2024-08-05 00:49:44 +03:00
Bananymous
1d9041f2aa
LibC: make opendir() fail if path is not a directory
2024-08-01 22:57:46 +03:00
Bananymous
a578527012
Kernel/LibC: Implement ioctl(TIOCGWINSZ)
...
This allows ncurses to get the window size!
2024-08-01 22:56:26 +03:00
Bananymous
af78a2d080
Kernel: Implement ANSI CSI L for TTY
...
vim seems to be using this, so I decided its needed
2024-08-01 22:08:46 +03:00
Bananymous
840000d02b
Kernel: Make sure null signal is not send with kill()
2024-08-01 21:41:54 +03:00
Bananymous
9ea4c777ad
Kernel: TTY now handles ESC key presses
...
This allows exiting vim :D
2024-08-01 21:41:11 +03:00
Bananymous
a33b63d066
Kernel/LibC: Implement alarm() and setitimer()
...
This makes vim able to start!
2024-08-01 21:09:56 +03:00
Bananymous
da3b30cd94
Kernel: Add macro to dump all syscalls and their return values
2024-08-01 18:21:49 +03:00
Bananymous
4599e1dec5
Kernel: Make schedler not crash when unblocking active thread
...
This was happening when sending signals to processes that were currently
running.
2024-08-01 18:21:49 +03:00
Bananymous
6de350ce9d
Kernel/LibC: Cleanup, fix and implement a lot of signal code
...
This patch implements sigsets and some of their usages
2024-08-01 17:01:18 +03:00
Bananymous
838d31fa41
Kernel: Implement more POSIX compliant open() and openat() syscalls
2024-08-01 15:35:02 +03:00
Bananymous
401b460d75
LibC: Implement setbuf() and setvbuf()
2024-08-01 01:30:00 +03:00
Bananymous
c440204fa5
LibC: Implement dummy strcoll()
2024-07-31 23:58:10 +03:00
Bananymous
adf50dffd8
LibC: Implement uname()
2024-07-31 23:54:26 +03:00
Bananymous
20d38ed28c
LibC/Shell: Implement gethostname() and shell uses it for hostname
2024-07-31 23:53:55 +03:00
Bananymous
edc30cd71d
LibC: Compile without exceptions
...
This allows libc to not require __gxx_personality_v0. I can maybe add
C++ back to libc... :D I don't know why I did not research earlier what
this symbols was used for
2024-07-31 23:33:41 +03:00
Bananymous
10ce03a1e7
LibC: Implement ctime() and asctime()
2024-07-31 23:26:10 +03:00
Bananymous
5fca5c774a
LibC: Implement umask()
2024-07-31 23:26:10 +03:00
Bananymous
fc6c39e670
LibC: Implement gettimeofday()
2024-07-31 23:26:06 +03:00
Bananymous
7c3b6307d9
Kernel: Cleanup USB initialization code
2024-07-31 23:23:44 +03:00
Bananymous
e52dac3b25
LibC: Implement tmpnam()
...
This implementation is not really spec compliant as rand() does not
guarantee TMP_MAX different outputs + seeding
2024-07-30 12:02:30 +03:00
Bananymous
62db9a8ef3
LibC: Implement C++ static guards
2024-07-30 12:02:05 +03:00
Bananymous
f0be4f86a6
LibC/Kernel: Implement access
2024-07-30 11:51:07 +03:00
Bananymous
e5bb843059
LibC/Kernel: Implement ttyname
2024-07-30 11:41:18 +03:00
Bananymous
ca774dfeb5
LibC: Implement setlocale() for C locale
2024-07-30 11:33:02 +03:00
Bananymous
681d8327f5
LibC/Kernel: Cleanup termios code
...
This is still not correct, but much better than it used to be
2024-07-30 11:10:43 +03:00
Bananymous
9bc02c81f8
Kernel: Map DMA and PCI MMIO as uncached
2024-07-30 11:10:08 +03:00
Bananymous
bb1738db8c
Kernel: Make thread unblocking O(1)
...
This is still bit broken. VirtualBox seems to freeze sometimes, but I
could not recreate this on qemu (with and without kvm) or real hardware.
2024-07-24 00:31:01 +03:00
Bananymous
9548c592a3
Kernel: Always print basic info about xHCI controller
...
Its nice to see that the controller is getting initalized
2024-07-23 09:09:08 +03:00
Bananymous
cda0276d39
Kernel: Force PCI irq line usage when not using APIC
...
afaik PIC does not support MSI
2024-07-23 09:08:00 +03:00
Bananymous
539afb329a
Kernel: All processors use LAPIC timer when running with APIC
...
This makes scheduler preemption much cleaner as bsb does not have to
send smp messages to notify other processes about timer interrupt.
Also PIT percision is now "full" 0.8 us instead of 1 ms that I was using
before.
2024-07-23 02:28:52 +03:00
Bananymous
3e0150f847
Kernel: Pressing F1 now toggles rendering of CPU loads to the terminal
...
This can be nice for seeing the performance and problems on the load
balancing algorithm.
2024-07-22 00:43:13 +03:00
Bananymous
f8261c60c0
Kernel: Rewrite the whole scheduler and re-architecture SMP handling
...
Change Semaphore -> ThreadBlocker
This was not a semaphore, I just named it one because I didn't know
what semaphore was. I have meant to change this sooner, but it was in
no way urgent :D
Implement SMP events. Processors can now be sent SMP events through
IPIs. SMP events can be sent either to a single processor or broadcasted
to every processor.
PageTable::{map_page,map_range,unmap_page,unmap_range}() now send SMP
event to invalidate TLB caches for the changed pages.
Scheduler no longer uses a global run queue. Each processor has its own
scheduler that keeps track of the load on the processor. Once every
second schedulers do load balancing. Schedulers have no access to other
processors' schedulers, they just see approximate loads. If scheduler
decides that it has too much load, it will send a thread to another
processor through a SMP event.
Schedulers are currently run using the timer interrupt on BSB. This
should be not the case, and each processor should use its LAPIC timer
for interrupts. There is no reason to broadcast SMP event to all
processors when BSB gets timer interrupt.
Old scheduler only achieved 20% idle load on qemu. That was probably a
very inefficient implementation. This new scheduler seems to average
around 1% idle load. This is much closer to what I would expect. On my
own laptop idle load seems to be only around 0.5% on each processor.
2024-07-22 00:33:50 +03:00
Bananymous
9f90eeab05
Kernel: Fix stack pointer OOB check
...
i686 does not push the stack pointer on interrupt when no CPL change
happens.
2024-07-22 00:27:08 +03:00
Bananymous
1ee37cb671
Kernel: Make sure stack is aligned on interrupts for i686 target
...
I just realized that only x86_64 aligns stack pointer when interrupt is
triggered.
2024-07-22 00:10:42 +03:00
Bananymous
8fe798de6d
Kernel: Make PIT counter atomic with spinlock
2024-07-21 18:56:41 +03:00
Bananymous
e00efca170
Userspace: Pprogram template and loadfont mark install as optional
2024-07-21 17:41:40 +03:00
Bananymous
86b6714777
Kernel: Add command line option to boot without smp
2024-07-21 17:40:57 +03:00
Bananymous
77b5e6d44a
Kernel: Make ATABus use BAN::Atomic<> instead of gcc builtin atomics
2024-07-21 17:39:26 +03:00
Bananymous
ffe73165f9
Kernel: Fix PCI typo serail -> serial
2024-07-21 17:36:29 +03:00
Bananymous
96c7e9e29d
Kernel: Cleanup VirtualRange code
...
Virtual range does not need to look into the page table for mapped
physcial pages. It can (and should) just keep track of them itself.
2024-07-21 17:35:07 +03:00