Bananymous
75fdf4c3c6
Kernel: Add Timer::ns_since_boot()
2023-10-12 21:16:39 +03:00
Bananymous
b723ed5fd2
Kernel: Add vaddr/paddr conversion functions to DMARegion
2023-10-12 15:20:05 +03:00
Bananymous
89c975350d
Kernel: PCI can now get interrupts for devices
2023-10-11 22:18:58 +03:00
Bananymous
f27974dd3c
Kernel: PCI cleanup PCI::Device API
2023-10-11 21:52:08 +03:00
Bananymous
d4c9f371a6
Kernel: make DMARegion::create static and fix mapping
2023-10-08 18:18:36 +03:00
Bananymous
2aabf43ace
Kernel: fix some math in physical ranges
...
I allocated 1 bitmap page per 8 data pages. Bitmap page can actually
store 8*PAGE_SIZE data pages.
Also properly set last bits in bitmap. I did not care about endianness
but now we set the bits on unsigned long longs instead of bytes.
2023-10-08 13:25:34 +03:00
Bananymous
a6ca9fd453
Kernel: Implement bare boness DMA Region
...
This does nothing but allocate contiguous physical and virtual memory
and map it as CacheDisable. Also memory is automatically freed RAII style.
2023-10-08 02:57:22 +03:00
Bananymous
799aab02f5
Kernel: Add API for getting contiguous physcial pages
...
This will be used to create DMA regions.
2023-10-08 02:57:22 +03:00
Bananymous
0fae2c7309
Kernel: Rework physical memory allocation
...
PhysicalRange is now much simpler bitmap. This makes expanding
PhysicalRange API much easier.
2023-10-08 02:50:23 +03:00
Bananymous
7ba72b1507
Kernel: Fix PCI BarRegion offsets
...
Calculations accidentally assumed bar registers are 8 byte instead
of 4.
2023-10-08 02:50:23 +03:00
Bananymous
f21d4e794c
Kernel: Rework whole ATA driver structure
...
Make ATA driver more compatible when we are adding SATA support
2023-10-08 02:50:23 +03:00
Bananymous
27eb5af6f0
Kernel: Rework interrupt mechanism
...
All interruptrable classes now inherit from Interruptable which
has methdo handle_irq which is called on a interrupt.
2023-10-05 18:53:45 +03:00
Bananymous
68a913c838
BuildSystem: Don't strip kernel
2023-10-05 18:52:44 +03:00
Bananymous
39bc6c43dc
Kernel: Expose command line and environment to /proc
2023-09-30 23:01:33 +03:00
Bananymous
5ee3506474
Kernel: Add physical memory info to /proc/{pid}/meminfo
2023-09-30 22:11:45 +03:00
Bananymous
785de5f9b9
Kernel: /proc/{pid}/meminfo now reports per process memory usage
2023-09-30 21:20:18 +03:00
Bananymous
8f630a97df
Kernel: Add procfs that contains only pids
2023-09-30 21:19:36 +03:00
Bananymous
56bb419884
Kernel: All process' memory areas can report their virtual mem usage
2023-09-30 21:15:46 +03:00
Bananymous
9f0797047f
Kernel/LibC: dirent now contains file type
2023-09-30 20:46:57 +03:00
Bananymous
e8a0eeb0b4
Kernel: RamInode verifies that you have not specified mode type
...
This is kinda weird behaviour, but it ensures the user cannot
create e.g. CharacterDevice with mode having IFLNK.
The Inode overrider is the only one setting the mode.
2023-09-30 20:46:57 +03:00
Bananymous
3e5645d453
Kernel: Add API for RamDirectoryInodes to delete containing inodes
2023-09-30 19:22:30 +03:00
Bananymous
2301654c4e
Kernel: Rework RamInode API
...
RamInode is now a general RamInode with no data. RamFileInode is now
a inode for regular files. This is much cleaner and more intuitive
since there is no reason for most non-regular inodes to hold data
Vector.
2023-09-30 19:22:30 +03:00
Bananymous
43c23db4a6
Kernel: Implement MAP_SHARED for regular files
...
Every inode holds a weak pointer to shared file data. This contains
physical addresses of pages for inode file data. Physical addresses
are allocated and read on demand.
When last shared mapping is unmapped. The inodes shared data is freed
and written to the inode.
2023-09-29 18:59:20 +03:00
Bananymous
8ff4e1f8c8
Kernel: Don't write to stat_loc on SYS_WAIT if it is null
2023-09-29 18:31:44 +03:00
Bananymous
7b1c573ad0
Kernel: Implement MAP_PRIVATE file mappings
...
mmap() now supports mapping files with MAP_PRIVATE.
2023-09-29 17:23:42 +03:00
Bananymous
4ee759aa3b
Kernel: Implement new abstract MemoryRegion
...
MemoryBackedRegion now inherits from this and is used for private
anonymous mappigs. This will make shared mappings and file backed
mappings much easier to implement.
2023-09-29 16:18:23 +03:00
Bananymous
16eb055737
Kernel: Add some sanity assertions/functions
2023-09-29 02:03:19 +03:00
Bananymous
a34f2e6e0d
Kernel: Use the new on demand ELF structure
...
All executable files are now read from disk and paged on demand.
This was a big rewrite of the old ELF library but in the end
everything seems much cleaner, since all the old functionality was
not actually needed for execution.
I have to do some measurements, but I feel like memory usage dropped
quite a bit after this change.
2023-09-29 02:00:10 +03:00
Bananymous
5b6569f2c9
Kernel: Fix off by one error when calculating pages in range
2023-09-29 01:56:15 +03:00
Bananymous
58f4ed22c4
Kernel: Don't map interrupt stack as userspace accessable
2023-09-28 21:58:24 +03:00
Bananymous
245f58cc3a
Kernel: mmap regions are now demand paged
...
mmap will not actually take any memory unless you use the given
memory.
2023-09-28 21:07:14 +03:00
Bananymous
d9a5e471f5
Kernel: Remove duplicate code in VirtualRange::create_to_vaddr_range
2023-09-28 13:59:49 +03:00
Bananymous
d7ecf94347
Kernel: Reboot will now always succeed
...
If acpi reset fails, we forcefully trigger a triple fault to restart
the system.
2023-09-28 13:53:03 +03:00
Bananymous
6eda65eea6
Kernel/LibC/Userspace: Add SYS_POWEROFF + cli tool
...
You can now shutdown/reboot banan-os with the poweroff cli tool.
Reboot doesn't seem to work on qemu.
2023-09-28 12:36:47 +03:00
Bananymous
d45bf363f1
Kernel: Enter ACPI mode with lai
2023-09-28 12:30:27 +03:00
Bananymous
3b283cb860
Kernel: Make tty overload correct has_data() function
...
This allows snake game to work again :)
2023-09-28 11:54:12 +03:00
Bananymous
cb76f1ea75
Kernel: Add some functionality to disable TTY input/output
...
Userspace programs can call tty_ctrl() to disable/enable tty from
handling input and displaying output.
This API is probably going to change in the future to ioctl calls
but I'm not sure how ioctl is used and what functionality should it
have. I decided to create whole new function and syscall for now.
Next I will expose framebuffer in /dev/fb0 and then I can start work
on graphical environment! :D
2023-09-27 15:44:05 +03:00
Bananymous
459afef89e
Kernel: Disable DiskCache sync messages
2023-09-27 14:12:21 +03:00
Bananymous
1c26a402b0
Kernel: Add missing TRY() to font loading
2023-09-27 00:49:53 +03:00
Bananymous
1e6930a3bc
Kernel: SYS_SYNC now schedules sync to happen soon
...
You can pass non-zero argument to the syscall to block until the
sync has finished.
2023-09-27 00:34:00 +03:00
Bananymous
11db49e2d3
Kernel: DiskCache now requires sync to be called from kernel thread
...
This disables the scenario where user interrupts sync operation
possibly leaving the syncing in invalid state.
2023-09-27 00:32:13 +03:00
Bananymous
c33e658f98
Kernel: Allow creationg of empty processes and manual registration
...
You can now create kernel processes without any threads, add the
needed threads and only then register the process and its threads
to the scheduler.
2023-09-27 00:29:45 +03:00
Bananymous
22252cfcf0
Kernel: All syscalls now validate users pointers
...
We now validate pointers passed by the user, to forbid arbitary
memory read/write. Now the user is only allowed to pass in pointers
in their own mapped memory space (or null).
2023-09-25 22:07:12 +03:00
Bananymous
976114fde1
Kernel: Print more detailed output on ISR
2023-09-25 20:33:07 +03:00
Bananymous
9d55cf1d80
Kernel: Ext2 inodes are now stored in cache
...
This allows faster inode access and ensures working inodes when
opened in multiple places.
2023-09-25 20:31:40 +03:00
Bananymous
669b2ace4e
Kernel: Ext2 filesystem now holds 10 preallocated block buffers
...
Inodes can query blocks from this buffer. This allows allocation of
blocks to not fail during normal operations. Also less stress on
kmalloc.
2023-09-25 14:32:25 +03:00
Bananymous
0e67c6318b
Kernel: Fix ext2 block allocation
...
Redo ext2 block allocation. This is now much "cleaner" although
I'm not too fond of the macros.
2023-09-25 13:17:44 +03:00
Bananymous
ffa80d0466
Kernel: Hacky kmalloc quick fix
...
Remove GeneralAllocator from kmalloc as it is not CriticalScope safe.
This requires increasing kmalloc memory.
2023-09-25 13:13:57 +03:00
Bananymous
e7ca83ecb2
Kernel: VirtualRange doesn't store physical addresses of pages
...
This was unnecessarry allocation, since the page table allready
contains virtual address -> physical address mappings.
2023-09-24 01:29:34 +03:00
Bananymous
f6261e5dc9
Kernel: all mapped ranges are now stored in one container
...
We just now have a flag if a mapping is unmappable
2023-09-23 23:45:26 +03:00
Bananymous
d1bbbf48f6
Kernel: Fully remove sys_alloc and sys_free
...
I could delete the whole FixedWidthAllocator as it was now obsolete.
GeneralAllocator is still used by kmalloc. Kmalloc cannot actually
use it since, GeneralAllocator depends on SpinLock and kmalloc runs
without interrupts.
2023-09-23 03:53:30 +03:00
Bananymous
3ba15b41a3
Kernel/LibC: remove PATH resoltion from kernel
...
I have no idea why I had made PATH environment variable parsing
to be part of the kernel. Now the shell does the parsing and
environment syscall is no longer needed.
2023-09-23 03:08:14 +03:00
Bananymous
7a7c5e433e
Kernel/LibC: add flag to enable/disable sse support
...
SSE support is very experimental and causes GP. I decided to make
SSE not default until I get to fixing it :)
2023-09-23 02:28:25 +03:00
Bananymous
6bb2c80bdd
Kernel/LibC: userspace malloc now uses mmap to get memory
...
We could remove syscalls to allocate more memory. This was not
something the kernel should have done.
2023-09-23 02:26:23 +03:00
Bananymous
af4af1cae9
Kernel/LibC: add mmap for private anonymous mappings
...
This will be used by the userspace to get more memory. Currently
kernel handles all allocations, which is not preferable.
2023-09-22 23:01:14 +03:00
Bananymous
83b165ebb0
Kernel: Add constexpr conditional debug prints
2023-09-22 17:20:35 +03:00
Bananymous
c5f9f0c307
Kernel: Add LAI as a dependency
...
I did not feel like implementing AML interpreter now, and wanted
everything AML has to offer. I will be writing my own AML interperter
at some point.
2023-09-22 17:20:35 +03:00
Bananymous
9d827037ca
Kernel: Fix timer includes
2023-09-22 17:20:35 +03:00
Bananymous
58506c5bd1
Kernel: Add config read/write api to PCI
2023-09-22 17:20:35 +03:00
Bananymous
dd0b8c4140
Kernel: Add pointer validation API to page table
2023-09-22 17:20:35 +03:00
Bananymous
11717f90c1
Kernel: PCI devices can now create region for BAR
...
This creates either MEM or IO region for read/write access to PCI
device.
2023-09-22 17:20:35 +03:00
Bananymous
a740bf8df4
1000th COMMIT: Kernel: Add basic E1000 driver
...
This driver is only capable to read mac address and enable and read
link status
2023-09-22 17:20:28 +03:00
Bananymous
63dc2b6aa6
Kernel: Implement SYS_SYNC and add sync executable to userspace
...
You can (and have to) manually sync disk after writes to it.
2023-09-11 01:26:27 +03:00
Bananymous
eee0537053
Kernel: Writes to disk are not synchronous anymore
...
Implement "proper" DiskCache syncing
2023-09-11 01:25:16 +03:00
Bananymous
7ec860a3d4
Kernel: Print stack trace on isr
2023-09-11 01:20:55 +03:00
Bananymous
9b9a6b2cfc
Kernel: Fix ext2 file write
2023-09-11 01:20:39 +03:00
Bananymous
8fb5f97a18
Kernel: Improve open() POSIX compatability
...
Also rename Process::sys_creat -> create_file since it is not
actually a syscall and only used by open as a healper.
2023-09-10 00:31:42 +03:00
Bananymous
921d95d18f
All: Clear lines with only whitspace in them
2023-09-10 00:31:42 +03:00
Bananymous
1fcf122c50
Kernel: Add basic ZeroDevice to /dev/zero
2023-09-10 00:31:42 +03:00
Bananymous
dd9af56e21
Kernel: Start work on making inodes more thread safe
...
All inode operations are now locked and thread blocked
2023-09-10 00:31:42 +03:00
Bananymous
39a5c52088
Kernel: Fix directory permissions
...
We did not care about X bit in directories and instead used only the
R bit for search/read.
2023-09-08 11:46:53 +03:00
Bananymous
660f7cbfeb
Kernel: Ext2 directories can allocate new blocks if needed
2023-09-08 10:29:26 +03:00
Bananymous
1abf54d652
Kernel: Fix bug in disk writing
...
I have used two weeks in locating a bug in my ext2 implementation
while the bug was actually in disk write. If you called write_sectors
on disk it would write the first sector_size bytes repeatedly to all
asked sectors and this corrupted the disk...
2023-09-08 02:43:08 +03:00
Bananymous
3750d29b2b
Kernel: Fix possible out-of-bounds disk access in ext2
2023-09-08 02:42:53 +03:00
Bananymous
4648f6718e
Kernel: Cleanup TTY::read()
2023-09-07 15:27:21 +03:00
Bananymous
b30af0edca
Kernel: TTY now reads input byte by byte
...
This allows correct behaviour for character streams / keyboard
handling. Serial input can now send working ^C :D
2023-09-07 15:06:27 +03:00
Bananymous
5e1725abb2
Kernel: Remove bitmap debug printing from ext2 inode allocation
2023-09-06 01:25:09 +03:00
Bananymous
6ad2f23259
Kernel: Correct inode links count
2023-09-05 14:46:56 +03:00
Bananymous
ba7e1b9ca5
Kernel: Add /dev/tty symlink that targets the current tty
2023-09-05 01:07:52 +03:00
Bananymous
f0772e385c
Kernel: Implement basic RamSymlinkInode
2023-09-05 01:07:52 +03:00
Bananymous
3fd94b1acb
Kernel: You can now read serial output from the /dev/ttyS*
2023-09-05 01:07:52 +03:00
Bananymous
93c5755012
Kernel: Receive interrupts for COM1 and COM2 input
...
The input has to still be attached to terminal
2023-09-04 22:07:40 +03:00
Bananymous
323de3c866
Kernel: Rework whole Terminal structure
...
Serial monitors can now be used as a output. This requires editing
init code for the stdio opening. Serial input is not supported, so qemu
still needs graphical window for ps/2 keyboard.
2023-09-04 19:34:18 +03:00
Bananymous
52b9fddfd7
Kernel: Make serial devices to their own class
2023-09-04 14:57:05 +03:00
Bananymous
04cfbca336
Kernel: Add ANSI support for hiding/showing cursor to TTY
2023-09-04 14:30:09 +03:00
Bananymous
9901f95d78
Kernel: Add basic nanosleep, only millisecond percision
2023-09-04 12:59:50 +03:00
Bananymous
b2139c0b1e
Kernel: Add basic support for O_NONBLOCK (only for tty)
2023-09-04 12:57:52 +03:00
Bananymous
6f002c926a
Kernel: add basic fcntl() with couple of commands and no validation
2023-09-04 12:57:09 +03:00
Bananymous
a711462ef4
Kernel: Split ext2 implementation to multiple files
2023-09-01 15:10:23 +03:00
Bananymous
f31c6b847f
Kernel: Start work on writable ext2 filesystem
2023-08-31 23:40:31 +03:00
Bananymous
195ccf4f53
Kernel: Add missing ififo() to Inode::Mode
2023-08-31 21:38:31 +03:00
Bananymous
073edd0b8e
Kernel: Stack trace dumping validates pointers before using them
2023-08-31 21:36:23 +03:00
Bananymous
250789aa20
Kernel: better handle kernel errors
2023-08-29 00:13:21 +03:00
Bananymous
8032824054
BuildSystem: use -a with rsync
...
This allows cmake to not rebuild whole project every time
2023-08-28 11:38:17 +03:00
Bananymous
80e7a89f67
BuildSystem: Base sysroot is now distributed as a tar ball
...
This allows file and directory permissions work as intended.
cmake is now filled with 'sudo' but with sudo timeout this should be
fine.
2023-08-23 10:38:21 +03:00
Bananymous
38e72019c7
Kernel: kill() with negative pid actually matches pgid
2023-08-22 14:54:15 +03:00
Bananymous
d745fca86a
Kernel: Process keeps track if forked process has called exec*()
2023-08-22 14:53:46 +03:00
Bananymous
60a2185ee6
Kernel/LibC: implement proper getpgid and setpgid
2023-08-22 14:53:12 +03:00
Bananymous
d634fec8dc
Kernel: Add function to enumerate processes in session
2023-08-22 14:52:28 +03:00
Bananymous
c9243f0d1e
Kernel/LibC: Add {get,set}pgrp()
2023-08-22 11:36:33 +03:00
Bananymous
0f6c19a1b7
Kernel: Barebones implementation sessions and process groups
2023-08-22 11:35:40 +03:00
Bananymous
79f3aa5419
Kernel/LibC: add dup() syscall and function
2023-08-17 12:03:29 +03:00
Bananymous
871c792976
Kernel: O_SEARCH doesn't require any permissions
...
Except read permissions for all directories in the path
This allows us to stat e.g. device files for which we don't have
the permissions.
2023-08-11 12:26:07 +03:00
Bananymous
8480ffe108
Kernel: open() now validates file access mode
2023-08-11 11:53:38 +03:00
Bananymous
e1400f9680
Kernel: Remove unused syscall
2023-08-11 11:43:48 +03:00
Bananymous
6e5bce3c57
Kernel: Zero initialize threads sse_storage
2023-08-11 00:26:43 +03:00
Bananymous
f75adab9d8
Kernel: Move structures in boot.S to .data section
2023-08-11 00:26:12 +03:00
Bananymous
5d0a6e7b08
Kernel: HPET is now used in legacy mode when PIC is forced
2023-08-10 22:01:30 +03:00
Bananymous
b0c8a9cdc4
Kernel: Fix slave PIC
...
we dont mask interrupt 2 in PIC since it corresponds to the
slave PIC. Also cleanup PIC code :)
2023-08-10 21:52:31 +03:00
Bananymous
ebe0adb3b5
Kernel: HPET doesn't use the legacy mapping anymore
2023-08-10 21:08:32 +03:00
Bananymous
4842d5e2b9
Kernel: APIC now uses MMIO namespace functions for mmio
2023-08-10 21:07:23 +03:00
Bananymous
0b8396b1a6
Kernel: IDT now sends EOI for every interrupt
...
EOI is sent before calling the interrupt handler. This should be fine
since all interrupts are processed with interrupts disabled
2023-08-09 09:57:02 +03:00
Bananymous
55ef793a74
Kernel: Validate HPET tick period
2023-08-09 09:50:38 +03:00
Bananymous
96c0ad0d3d
Kernel: Remove get_unix_timestamp from SystemTimer
...
Kernel now uses the percise real_time() and time_since_boot()
2023-08-09 08:57:50 +03:00
Bananymous
6fcb191ca0
Kernel: Add PageTable::Flags::CacheDisable
...
Also fix multiple places where we were using uint8_t as page table
flags instead of PageTable::flags_t which we promoted to uint16_t
while back.
2023-08-06 23:59:30 +03:00
Bananymous
3df97c36e6
Kerne: SystemTimer can now output the current real time
2023-08-04 16:06:47 +03:00
Bananymous
c732297623
Kernel: Rename TimerHandler to SystemTimer
...
I changed SystemTimer to only handle the "best" supported timer
it can initialize.
2023-08-04 16:06:47 +03:00
Bananymous
ca5a097ef5
Kernel: Add function to retrieve boot time as timespec
2023-08-04 16:06:47 +03:00
Bananymous
1f8a5f0ce5
Kernel: F11 now prints current time to debug output
...
This allows better timer percision and system freeze checks
2023-08-04 15:22:51 +03:00
Bananymous
1fa7a1cac4
Kernel: Add basic HPET support to replace PIT if exists
...
This works same way as the PIT implementation; calls Scheduler every
milli second.
2023-08-04 15:22:51 +03:00
Bananymous
ea4a70c3b3
Kernel: Move sleep() implementation to TimerHandler
2023-08-04 15:15:00 +03:00
Bananymous
aa0929614a
Kernel: Add more structures to ACPI
2023-08-04 15:13:47 +03:00
Bananymous
3c31fc9c4b
Kernel: Implement basic MMIO functions
...
This is equivalent to IO.h except for memory mapped io instead of
IO ports
2023-08-04 15:12:29 +03:00
Bananymous
7eb2c140fe
Kernel: Move RTC to Timer directory
...
PIT ms counter seems to be off by multiple seconds/minute. I will
be probably changing to HPET for system time
2023-08-04 11:12:16 +03:00
Bananymous
659adb89a6
Kernel: Start work on abstracting Timers
2023-08-04 10:29:42 +03:00
Bananymous
dd17124c77
Kernel: Remove unnecessary timer check from Scheduler
2023-08-04 10:29:42 +03:00
Bananymous
643e87a076
Kernel: Threads are deleted sooner and cleaner
...
We now delete threads when
1. it is marked as Terminated and is the current thread
2. it tries to start execution in Terminated state
This allows us to never have thread executing in Terminated state
2023-08-04 10:29:42 +03:00
Bananymous
20eafb4cc4
Kernel: align userspace stacks
...
I was getting #GP on sse instructions
2023-08-03 18:09:48 +03:00
Bananymous
3139391e06
Kernel: Change PageTable API
...
Getting free pages not reserves them, so you don't have to hold
the page table lock :)
2023-08-02 22:09:14 +03:00
Bananymous
64ad752e73
Kernel: PageTable now supports reserved pages
...
You can now map pages as reserved, so that they will not be given
from get_free_page() or get_free_contiguous_pages().
2023-08-01 16:35:54 +03:00
Bananymous
a78a7ed156
Kernel: Cleanup returns from any kind on interrupts
2023-08-01 14:23:50 +03:00
Bananymous
2a851b52f1
BuildSystem: Edit build flags regarding sse and warnings
2023-07-31 22:31:17 +03:00
Bananymous
b245a55ea0
Kernel: store/load sse/mmx/fpu state on isr/irq/syscall
...
I haven't tested this yet but should be fine. This will be optimized
to only save state from threads that are using it
2023-07-31 22:28:57 +03:00
Bananymous
c4f6c859c1
Kernel: Generally improve signals
2023-07-31 22:28:18 +03:00
Bananymous
1a6100f083
Kernel: Cleanup signal trampoline
2023-07-30 15:58:35 +03:00
Bananymous
de927b6b05
Kernel: Remove is_in_syscall from Thread
2023-07-30 14:49:51 +03:00
Bananymous
1d7795e22c
Kernel: Hardware exceptions now sends signals to userspace
2023-07-30 14:34:15 +03:00
Bananymous
abe8810d47
Kernel: raise() now force sends signal
2023-07-30 14:17:07 +03:00
Bananymous
acf125c853
Kernel: Signals are not queued anymore
...
Posix doesn't require signal queing if you don't use sigqueue() which
we don't support. Process also has its own pending signal mask.
2023-07-29 16:54:31 +03:00
Bananymous
9279bbbd19
Kernel: TTY now sends SIGINT on ^C to foreground process
2023-07-28 18:10:09 +03:00
Bananymous
9fd9a8b5b1
Kernel: Mark reading section from StorageDevice as terminate critical
2023-07-28 18:09:35 +03:00
Bananymous
3c6be319b1
Kernel: Restructure process and thread termination
...
When we want to kill a process, we mark its threads as Terminating
or Terminated. If the thread is in critical section that has to be
finished, it will be in Terminating state until done. Once Scheduler
is trying to execute Terminated thread it will instead delete it.
Once processes last thread is marked Terminated, the processes will
turn it into a cleanup thread, that will allow blocks and memory
cleanup to be done.
2023-07-28 18:06:20 +03:00
Bananymous
104894c0c7
Kernel: Rewrite DiskCache
...
We now cache only clean pages since I don't want to think about
syncing the disk later.
2023-07-27 22:22:39 +03:00
Bananymous
2f52001c6d
Kernel: Locks allow locking after locker is invalid
...
SpinLock and RecursiveSpinLock will now allow locking after the initial
locker is invalid. This allows us to kill threads even if they are holding
internal locks
2023-07-27 18:52:51 +03:00
Bananymous
f609170a6a
Kernel: DiskCache uses are now done without interrupts
...
This allows disk cache to not be invalid state after partial read/write
2023-07-27 18:52:51 +03:00
Bananymous
9f75b04714
Kernel: Scheduler can now check if tid is valid
...
Tid can become invalid if the thread is already terminated
2023-07-27 18:34:06 +03:00
Bananymous
7b4a2fe3d1
Kernel: Process::exit() unblocks the whole lock before blocking
2023-07-24 22:29:59 +03:00
Bananymous
f6ee4b3496
Kernel: Implement SYS_GET_PID and SYS_TCSETPGID
...
we don't have consept of process groups yet
2023-07-24 22:29:59 +03:00
Bananymous
1ef0534b69
Kernel: TTY now stores foreground process pid
...
this will be process pgid when we have process groups
2023-07-24 22:29:59 +03:00
Bananymous
b9dd1895bb
Kernel: add Thread::queue_signal()
2023-07-24 22:26:10 +03:00
Bananymous
be47743dfa
Kernel: Scheduler can now block threads based on tid
2023-07-24 22:24:21 +03:00
Bananymous
57798e5d76
Kernel: remove Semaphore::is_blocked
...
this will not mean anything after semaphores can spuriously wake up
2023-07-24 22:23:13 +03:00
Bananymous
cd64c1cfec
Kernel: add is_tty() to inode
2023-07-24 22:19:59 +03:00
Bananymous
f76d921e25
Kernel: you can now ask process if it is userspace process
2023-07-23 18:54:10 +03:00
Bananymous
a2bf474013
Kernel: OpenFileDesctiptor can now return inode of fd
2023-07-23 18:52:33 +03:00
Bananymous
9729e5a05b
Kernel: Change signal kernel API
...
return rsp and rip are now stored per thread
2023-07-23 18:33:10 +03:00
Bananymous
2dce0a0415
Kernel: Userspace signal handlers are now called one at a time
...
I added a syscall for telling the kernel when signal execution has
finished. We should send a random hash or id to the signal trampoline
that we would include in the syscall, so validity of signal exit can
be confirmed.
2023-07-23 13:34:53 +03:00
Bananymous
d560137ae6
Kernel/LibC: add SYS_SIGNAL/signal()
2023-07-21 20:08:13 +03:00
Bananymous
c12f4fb40f
Kernel: Make signals more POSIX
2023-07-21 20:01:12 +03:00
Bananymous
10169d773d
Kernel/LibC: Add SYS_KILL/kill()
2023-07-21 19:27:38 +03:00
Bananymous
b78596dcf4
Kernel: Scheduler now sends queued signals
2023-07-21 19:27:10 +03:00
Bananymous
40f7c6b8fa
Kernel: Make signals thread specific
2023-07-21 19:00:59 +03:00
Bananymous
8063700d7b
Kernel: add default signal actions
2023-07-21 18:02:35 +03:00
Bananymous
70f89ed1fc
BuildSystem: Strip kernel. We will add the map once we use it
2023-07-21 15:47:31 +03:00
Bananymous
c2cf98e32f
Kernel/LibC: Add bareboness signals
...
You can now call raise() to raise a signal. Signal handlers are
not yet supported, but the handling works :)
2023-07-21 15:45:02 +03:00
Bananymous
a1db032ba9
Kernel: kernel memory takes now full pml4e
...
This allows flags to work properly
2023-07-21 13:47:05 +03:00
Bananymous
5babd7b4f2
Kernel: remove PAGE_FLAGS_MASK as that was not correct anymore
...
After I added NXE bit, the flags mask is no longer valid
2023-07-21 12:01:50 +03:00
Bananymous
c0029a2fa2
Kernel: Don't map kernel executable memory as writable
2023-07-21 11:17:39 +03:00
Bananymous
4e35b8b49d
Kernel: Syscalls now get the interrupt stack
2023-07-21 11:04:16 +03:00
Bananymous
b02c486ad0
Kernel: add NullDevice to /dev/null
2023-07-20 00:06:22 +03:00
Bananymous
08cd285ca6
Kernel: move Device.h to its own directory
2023-07-19 23:55:38 +03:00
Bananymous
94af856db0
Kernel: cleanup sys_exec()
...
We now scope everyting so desctructors get called
2023-07-19 23:20:39 +03:00
Bananymous
bf5d74b8bc
Kernel: fix memory leak in PageTable
...
PageTable used to leak 2 pages on creation and other two on deletion
2023-07-19 23:17:39 +03:00
Bananymous
fd9210ba9e
Kernel: FixedWidthAllocator creation can now fail
2023-07-19 18:07:24 +03:00
Bananymous
66d9260257
Kernel: VirtualRange creation can fail
2023-07-19 17:56:26 +03:00
Bananymous
5d2bfc858e
Kernel: SYS_FORK can now fail instead of panicing on error
2023-07-19 17:47:12 +03:00
Bananymous
8b34880064
Kernel: Fix bug which made bochs unbootable
...
We could not boot if ATABus did not have valid primary device.
2023-07-13 15:53:09 +03:00
Bananymous
98c698d9ec
Kernel: Enable global bit on kernel pages
2023-07-13 15:23:25 +03:00
Bananymous
9ea2c1d932
Kernel: Support execute disable bit
...
We will now map executable memory explicitly as executable.
2023-07-13 14:28:53 +03:00
Bananymous
297e65f19a
Kernel: CPUID can detect wether cpu supports nxe bit
2023-07-13 14:24:58 +03:00
Bananymous
65559a3e44
Kernel: Fix multiple bugs with terminal
2023-07-13 13:09:52 +03:00
Bananymous
c3a71e94a9
Kernel: Fix ATA disk and partition numbering
2023-07-13 12:12:47 +03:00
Bananymous
00409ffa60
Kernel: Ext2Inode::create_file actually sets the inode data
...
We used to just create inode without touching its memory.
2023-07-13 10:20:56 +03:00
Bananymous
9bcfb34524
Kernel: Rewrite whole device structure
...
We now have DevFileSystem which is derived from RamFileSystem. All
devices are RamInodes. We don't have separate DeviceManager anymore.
To iterate over devices, you can loop througn every inode in devfs.
2023-07-10 23:17:14 +03:00
Bananymous
ee4ef6638c
Kenrel: RamInode now implements truncate()
2023-07-10 16:07:09 +03:00
Bananymous
0910958c04
Kernel: OpenFileDescriptors can now store more than 8 bits of flags
2023-07-10 16:06:36 +03:00
Bananymous
d6408bcf17
Kernel: add O_TRUNC
...
this is not supported by anything yet
2023-07-10 15:48:18 +03:00
Bananymous
178fc00905
Kernel: creat() mode now has to be access mode
...
We provide the S_IFREG in creat
2023-07-10 15:34:41 +03:00
Bananymous
89d4fa4d9b
Kernel: Ext2 fill now return ENOTSUP on write
...
We used to crash the kernel
2023-07-10 15:34:25 +03:00
Bananymous
46e1419e70
Kernel: O_APPEND is now supported
2023-07-10 15:11:27 +03:00
Bananymous
f7c4bc908e
Kernel: open() and openat() now take mode as parameter
...
O_CREAT now tries to create file if O_CREAT is specified
2023-07-10 15:08:54 +03:00
Bananymous
a0ecbed726
Kernel: You can now read/write to RamInodes
...
RamFS should be stored on physical pages and not in kmalloc, but
that will be implemented later :)
2023-07-10 14:09:35 +03:00
Bananymous
74fc0aa308
Kernel: Inode::create_file() now takes uid and gid as parameters
2023-07-10 13:32:10 +03:00
Bananymous
d5f0448e48
Kernel: start work on ram file system
2023-07-10 13:26:14 +03:00
Bananymous
d713f252aa
Kenrel: Fix inode comparison
...
We should not compare rdevs
2023-07-10 11:48:11 +03:00
Bananymous
5ec2d85081
Kernel: Inode rename directory functions
2023-07-10 11:48:11 +03:00
Bananymous
0d132ee518
Kernel: Mark Ext2 classes final
2023-07-10 11:48:11 +03:00
Bananymous
80c8d52dc5
Kernel: add more functionality to PCI
2023-07-09 23:04:11 +03:00
Bananymous
b6c4a2dbf1
Kernel: Edit lock scopes and make string copy able to fail
2023-07-07 23:12:19 +03:00
Bananymous
a2f5ad7bed
Kernel: Move open file descriptors to their own class
...
This simplifies code a lot :)
2023-07-07 23:11:37 +03:00
Bananymous
07fec6e211
Kernel/LibC: add basic dup2
2023-07-06 23:17:54 +03:00
Bananymous
4cd72992c8
Kernel/LibC: Add basic pipe() syscall and command
...
You can now create pipes :)
2023-07-06 22:16:26 +03:00
Bananymous
5a8eb51968
Kernel: TTY now unblocks semaphore after read
...
This allows concurrent reads not fully reading the buffer not block
indefinately.
2023-07-06 21:32:34 +03:00
Bananymous
a74422281f
Kernel: Add O_CLOEXEC
2023-07-06 20:00:33 +03:00
Bananymous
a45f9ee76b
Kernel: Remove spammy process/thread exit printing
2023-07-06 10:34:46 +03:00
Bananymous
1fb305fa45
Kernel/LibC: add clock_gettime() for CLOCK_MONOTONIC
...
This gets the number of milliseconds since boot
2023-07-06 00:38:29 +03:00
Bananymous
4086d7c3be
Kernel: rework the whole PageTable structure
...
We now have page table structure for kernel memory which is shared
between all processes.
2023-07-05 23:41:35 +03:00
Bananymous
7d254c26bc
Kernel: Rewrite and optimize DiskCache
...
DiskCache now consists of PageCaches which are caches of contiguous
sectors. This allows the disk cache to be ordered and faster traversal.
We seem to have a problem somewhere during reading. The stack gets
corrupted.
2023-06-19 10:31:47 +03:00
Bananymous
9a7b2587af
Kernel: kmalloc has now somewhat dynamic storage
...
Allocations bigger than PAGE_SIZE and those not forced to be identity
mapped are now done on a GeneralAllocator. This allows us to use kmalloc
for big allocations; bigger than the fixed 1 MiB storage.
This is still a hack and the whole kmalloc will have to be rewritten at
some point, but for now this does the job :D
2023-06-18 23:27:00 +03:00
Bananymous
09c824b90e
Kernel: Add GeneralAllocator::paddr_of
...
Yoy can now query physical address of a virtual address for general
allocator allocation
2023-06-18 23:25:51 +03:00
Bananymous
57e59d998f
Kernel: Add enum for ISR name to number
2023-06-18 23:24:27 +03:00
Bananymous
44fb3945df
Kernel: General allocator takes first valid vaddr as parameter
2023-06-17 22:23:34 +03:00
Bananymous
95c4e608de
Kernel: Move print during boot
2023-06-12 23:45:36 +03:00
Bananymous
5dcc53bcf2
Kernel: Make disk IO blocking thread safe
...
This was causing a lot of deadlocks on vms without kvm accel
2023-06-12 18:57:47 +03:00
Bananymous
23543b15ca
Kernel: Rework syscall calling
...
I removed the intermediate function when calling syscalls. Now syscall
handler calls the current process automatically. Only exception is
sys_fork, since it needs a assembly trampoline for the new thread.
2023-06-12 14:16:48 +03:00
Bananymous
2253c45feb
Kernel: Remove Shell from kernel
...
This is now obsolete since we have a userspace Shell.
2023-06-12 02:04:52 +03:00
Bananymous
f09b82c4b5
Kernel/LibC: add SYS_{SET,GET}_PWD and chdir, getpwd
2023-06-12 02:02:52 +03:00
Bananymous
7aeb8e4d36
Kernel: allocate thread stacks from 0x300000 onwards
...
I had a problem where thread stack was overlapping with elf loading
2023-06-12 01:02:19 +03:00
Bananymous
58ec4d6a31
Kernel: Fix bug in elf loading
...
We were allocating one extra page
2023-06-12 00:59:19 +03:00
Bananymous
11b68f6a53
Kernel: Add SYS_GET_{,E}{UID,GID}
2023-06-11 22:37:00 +03:00
Bananymous
3fe67e4882
Kernel: Add syscalls for set{,e,re}{uid,gid}
2023-06-11 22:37:00 +03:00
Bananymous
78536f9678
Kernel/Userspace: Add basic init process
...
This process parses /etc/passwd and promps login screen.
When an username is entered, it will launch that users shell
2023-06-11 22:37:00 +03:00
Bananymous
c7ec19c25c
Kernel: Add basic Credentials for the system
...
Now filesystem access/open, etc confirm that you have access for rwxs
2023-06-11 20:06:06 +03:00
Bananymous
3181ea7b4d
Kernel: GeneralAllocator and FixedWidth allocator invalidate TLB caches
...
We were getting random exceptions when reallocating same addressess and
this fixes that problem :)
2023-06-11 15:57:48 +03:00
Bananymous
83a6e6f637
LibC: Reorder some syscalls
2023-06-11 03:29:22 +03:00
Bananymous
64890bb640
Kernel: Add SYS_OPENAT
2023-06-11 03:29:22 +03:00
Bananymous
caca6dc701
Kernel: Exceptions will now enable interrupts before calling exit()
...
this allows scheduler verification on reschedule() not panic
2023-06-11 03:29:22 +03:00
Bananymous
aa86125f2b
Kernel: Implement SYS_FSTAT
2023-06-11 03:29:22 +03:00
Bananymous
14aeb8de10
Kernel: we don't panic anymore on unrecognized syscall
2023-06-11 00:18:48 +03:00
Bananymous
691b17e0cc
Kernel: allow open() call with O_SEARCH
2023-06-11 00:18:34 +03:00
Bananymous
eae6119039
Kernel: Add syscall for reading directory entries
2023-06-11 00:18:08 +03:00
Bananymous
01311b470f
Kernel: Rewrite directory listing so it can be integrated to libc
2023-06-11 00:17:18 +03:00
Bananymous
4cdeb98897
Kernel: We now store the processes exit code
2023-06-10 17:31:56 +03:00
Bananymous
c0fe4756cb
Kernel: SpinLocks now reschedule if they cannot aquire the lock
...
This allows us to not actually spin doing nothing while waiting for
another (not executing) to release the lock. This api won't probably
work when we get to SMP
2023-06-09 00:53:32 +03:00
Bananymous
5032e79be3
Kernel: Process::exit() now uses the new Scheduler::reschedule()
...
We use this new function while waiting for all blocking threads to
resume execution
2023-06-09 00:49:19 +03:00
Bananymous
1aec3fcedd
Kernel: Scheduler now has reschedule()
...
This can be called from anywhere and just causes the scheduler to
schedule the next thread. This is more efficient and verbose version
of Scheduler::set_current_thread_sleeping(0), since we don't have
to wake other threads or do other verifications.
2023-06-09 00:47:17 +03:00
Bananymous
aec63081e2
Kenrel: Rename Scheduler::reschedule -> Scheduler::timer_reschedule
2023-06-09 00:41:43 +03:00
Bananymous
801025ad7b
Kernel: Big commit. Rewrite ELF loading code
...
We now load ELF files to VirtualRanges instead of using kmalloc.
We have only a fixed 1 MiB kmalloc for big allocations and this
allows loading files even when they don't fit in there.
This caused me to rewrite the whole ELF loading process since the
loaded ELF is not in memory mapped by every process.
Virtual ranges allow you to zero out the memory and to copy into
them from arbitary byte buffers.
2023-06-09 00:37:43 +03:00
Bananymous
59b10c4d25
Kernel: PageTableScope locks the PageTable before disabling interrupts
...
This allows replacing some PageTableScopes with PageTable::lock()
2023-06-09 00:34:41 +03:00
Bananymous
841584ccbd
Kernel: get_free_contiguous_pages works with non-page aligned addresses
...
also fix bug in ordering
2023-06-06 02:03:23 +03:00
Bananymous
24993f6020
LibC: implement setenv, unsetenv, putenv
2023-06-05 22:51:02 +03:00
Bananymous
55ea5c5488
Kernel: add basic support for environment variables
...
exec functions will search files from PATH
2023-06-05 22:51:02 +03:00
Bananymous
c6b5cc1e07
Kernel: exec now has better posix errors
2023-06-05 21:12:08 +03:00
Bananymous
896b919c9d
Kernel/LibC: pass environ pointer to process
2023-06-05 21:12:08 +03:00
Bananymous
6b73f4d187
Kernel: TTY now actually flushes on ^D
2023-06-05 20:21:46 +03:00
Bananymous
08a806e75d
Kernel: verify that loaded elfs are executable
2023-06-05 19:29:32 +03:00
Bananymous
cf88142856
Kernel: TTY now supports CSI s and u
...
These are commonly supported values to save and load cursor
position
2023-06-05 18:19:13 +03:00
Bananymous
d1ad38c8d4
Kernel/LibC: add SYS_STAT and stat(), lstat()
2023-06-05 14:37:14 +03:00
Bananymous
9fbb2b9369
Kernel: Add SYS_WAIT
...
This syscall waits for a given pid.
2023-06-04 18:00:52 +03:00
Bananymous
a3aca67eef
Kernel: fork() now clones current thread
...
This is how posix specifies thread cloning during fork
2023-06-04 17:40:37 +03:00
Bananymous
977652ad57
Kernel: Process FixedWidthAllocators come now in 4 sizes
2023-06-04 01:26:43 +03:00
Bananymous
5bf7ca1c80
Kernel: Allocators are now stored in UniqPtr
...
This allows proper memory management, we had some memory leak
2023-06-04 01:25:57 +03:00
Bananymous
1b1f22c35e
Kernel: make load_elf() its own function
2023-06-04 01:24:11 +03:00
Bananymous
479817231a
Kernel: PhysicalRange maps its nodes to kernel vaddr space
...
This keeps the lower half of address space cleaner
2023-06-04 01:20:47 +03:00
Bananymous
e3c5477df4
Kernel: reorder process exit steps
2023-06-04 01:19:04 +03:00
Bananymous
b403155ca9
Kernel: You can specify first vaddr for getting free pages
2023-06-04 01:15:48 +03:00
Bananymous
5f339d585c
Kernel: PAGE_FLAG_MASK is now only 0xF
...
We don't care currenly about anything but the last few bits
2023-06-03 20:08:13 +03:00
Bananymous
b168462b43
Kernel: PageTable now has debug_dump
...
This dumps all the mapped pages and their flags
2023-06-03 20:08:13 +03:00
Bananymous
68691faca1
Kernel: boot.S is back to 2 MiB pages
...
bochs doesn't seem to support 1 GiB pages
2023-06-03 18:53:36 +03:00
Bananymous
9228df0f23
Kernel: Inode/Device detection is done with overridden bool functions
2023-06-03 13:28:15 +03:00
Bananymous
402ad85583
Kernel: Heap will return 0 if no free page is available
2023-06-03 02:55:31 +03:00
Bananymous
53e91ba98a
Kernel: DiskCache will try to shrink_to_fit after cache cleanup
2023-06-03 02:55:22 +03:00
Bananymous
fd153f3762
Kernel: DiskCache won't crash when running out of kmalloc memory
2023-06-03 02:36:20 +03:00
Bananymous
813d0f1b5f
Kernel: add basic disk cache
...
ATADevices now add disk cache to themselves
2023-06-03 02:23:14 +03:00
Bananymous
2b901abfb1
Kernel: Shell 'memory' now prints heap memory usage
2023-06-03 02:22:18 +03:00
Bananymous
8645c4c653
Kernel: Shell ls and stat now properly show symlinks
2023-06-02 18:22:56 +03:00
Bananymous
7aea8c45f7
Kernel: VFS now has max link depth of 100
2023-06-02 12:50:40 +03:00
Bananymous
7bbdee6cc4
Kernel: Symlinks are now working
...
We still have to implement loop or depth detection
2023-06-02 11:43:46 +03:00
Bananymous
ff548bd898
Kernel: Shell can now list symlinks
2023-06-01 00:25:53 +03:00
Bananymous
835d32814d
Kernel: add basic support for symlinks
2023-06-01 00:24:45 +03:00
Bananymous
79d1f665f2
Kernel: Shell opens standard files
2023-05-31 23:14:15 +03:00
Bananymous
1daa1f5611
Kernel: Cleanup exec code
2023-05-31 22:36:05 +03:00
Bananymous
24a190d1f7
Kernel: Add SYS_EXEC syscall
2023-05-31 20:57:33 +03:00
Bananymous
b48b239882
Kernel: Implement Process::exec()
2023-05-31 20:56:29 +03:00
Bananymous
5fb69300ca
Kernel: Move userspace entry functions to Process instead of Thread
2023-05-31 19:31:10 +03:00
Bananymous
dcb23f686f
Kernel: boot.S maps GiB as single pdpte
2023-05-31 00:51:15 +03:00
Bananymous
650570e57d
Kernel: Fix comment
2023-05-31 00:51:15 +03:00
Bananymous
1f5a36f074
Kernel: PageTable destructor works now
...
we are successfully booting higher half kernel now :)
2023-05-31 00:44:14 +03:00
Bananymous
aeaf2cd3f1
Kernel: PageTable::create_userspace() now works
2023-05-31 00:44:14 +03:00
Bananymous
959c0fc572
Kernel: kmalloc free error prints the pointer
2023-05-31 00:34:56 +03:00
Bananymous
e3d3788f28
Kernel: RSDP location is now done with virtual addresses
2023-05-31 00:34:21 +03:00
Bananymous
850b7f27a2
Kernel: Physical range now calculates RAM with physical addresses
2023-05-31 00:33:44 +03:00
Bananymous
0939f23b04
Kernel: Heap gets multiboot pointer with P2V
2023-05-30 23:57:44 +03:00
Bananymous
67886b0c5a
Kernel: Move V2P and P2V to Memory/Types.h
2023-05-30 23:57:03 +03:00
Bananymous
56eb6fb4ce
Kernel: PageTable::map_range_at maps correctly the last page
2023-05-30 23:56:07 +03:00
Bananymous
81cf389754
Kernel: Booting with higher half kernel gets to Heap initialization
2023-05-30 22:21:12 +03:00
Bananymous
0907965dc5
Kernel: start work on higher half kernel
2023-05-30 08:00:17 +03:00
Bananymous
210d90ec79
Kernel: We now identity map full GiB in boot.S
...
The paging structure is pre-built so no unnecessary calculations are done
2023-05-30 00:08:52 +03:00
Bananymous
8bea18a6f2
Kernel: Remove unused includes of CriticalScope
2023-05-29 21:15:55 +03:00
Bananymous
861966eed6
Kernel: Remove unnecessary usages of PageTableScope
...
This should be used as few times as possible since it calls 'cli'
2023-05-29 21:11:29 +03:00
Bananymous
5bb1f2a48c
Kernel: Rename MMU to PageTable
...
This is more descriptive name for what it actually represents
2023-05-29 21:06:09 +03:00
Bananymous
fb17af4844
Kernel/LibC: opening standard files is done in libc
2023-05-29 20:21:19 +03:00
Bananymous
b8ec8918b7
Kernel: We can't lock the MMU lock in load()
...
It needs to be callable always by scheduler
2023-05-29 19:39:35 +03:00
Bananymous
ff83f967d8
Kernel: Make RecursiveSpinLock thread safe
...
also SpinLock is now implemented with gcc builtins
2023-05-29 19:38:09 +03:00
Bananymous
998999a755
Kernel: Add SYS_SLEEP
2023-05-28 22:34:48 +03:00
Bananymous
09666adc53
Kernel: fork() now copies allocations through FixedWidthAllocator
2023-05-28 21:34:35 +03:00
Bananymous
ec73db0057
Kernel: Move page macros to Types.h
2023-05-28 21:03:08 +03:00
Bananymous
833642d405
Kernel: ISR will now crash userspace process instead of panicing kernel
2023-05-28 20:53:10 +03:00
Bananymous
f04399c3a0
Kernel: fork() now copies allocation done through GeneralAllocator
2023-05-28 20:37:39 +03:00
Bananymous
f2d767b799
Kernel: Add bareboness fork() function
2023-05-28 18:08:49 +03:00
Bananymous
3e93dae53c
Kernel: Add invalidate() to MMU
2023-05-28 18:05:49 +03:00
Bananymous
187bb046aa
Kernel: fix MMU::map_page_at()
...
We used to only reassign if flags changed
2023-05-28 17:57:05 +03:00
Bananymous
b021d3eebd
Kernel: Processes and Threads use VirtualRange memory allocations
2023-05-28 17:48:34 +03:00
Bananymous
15842db83e
Kernel: Move PhysicalRange to its own file and add VirtualRange
2023-05-28 17:48:34 +03:00
Bananymous
869de7283f
Kernel: MMU::get() is now MMU::kernel
...
MMU is can now be locked with RecursiveSpinLock.
Scheduler now has get_current_tid() that works before the Scheduler
is initialized. This allows RecursiveSpinLock usage early on.
2023-05-28 16:18:18 +03:00
Bananymous
eb24d32383
Kernel: Directory listing is working again
2023-05-26 22:31:21 +03:00
Bananymous
565e3db22d
Kernel: kmalloc debug_dump is marked [[maybe_unused]]
2023-05-26 22:31:21 +03:00
Bananymous
faf14b880e
LibC: Rewrite all the headers.
...
We now have more or less posix issue 2018 conforming libc headers.
This was a really time consuming and boring operation but it had to
be done.
Now we get to actually start implementing libc :)
2023-05-26 22:31:21 +03:00
Bananymous
27147790fd
Userspace: Start work on shell
2023-05-26 22:31:21 +03:00
Bananymous
1658e925f2
Kernel: Add bareboness possibility to set termios
2023-05-26 22:31:21 +03:00
Bananymous
80d9f6131b
Kernel/LibC: move file offset back to kernel
...
This makes keeping track of offsets easier and more proper
2023-05-26 22:31:21 +03:00
Bananymous
e0a72defa2
Kernel: Add argc and argv to process entry
2023-05-16 00:27:49 +03:00
Bananymous
e0a7e242f8
Kernel: Add MMUScope
...
This disables interrupts and loads specified mmu for the
scope it lives in
2023-05-16 00:26:39 +03:00
Bananymous
6acb86c14b
Kernel: MMU keeps track of the current
2023-05-16 00:26:39 +03:00
Bananymous
ec316391c5
Kernel: argc is passed as zero to userspace
2023-05-11 18:28:32 +03:00
Bananymous
177b205c48
BuildSystem: userspace has cmake target
2023-05-11 16:19:53 +03:00
Bananymous
729ff267d7
LibC: add function declarations to sys/stat.h
2023-05-11 15:11:33 +03:00
Bananymous
ff2e2937a5
Kernel: Remove offset from OpenFileDescriptor
...
This is now handled on the libc side. There might be reasons to
have it in kernel side, but for simplicity's sake I'm moving it
to libc for now :)
2023-05-09 20:31:22 +03:00
Bananymous
512be884ed
Kernel: Add barebones GeneralAllocator for >4096B
2023-05-08 22:10:49 +03:00
Bananymous
f1667b398a
Kernel: FixedWidthAllocator operates on MMU
...
Instead of Process* we use MMU& in FixedWidthAllocator since it is
everything it actually needs :)
2023-05-08 00:06:56 +03:00
Bananymous
b0ec0f1a1a
Kernel: We add FixedWidthAllocators on demand
...
On SYS_ALLOC we will add a new FixedWidthAllocator if the old ones
are already full or we don't have one with proper size. This allows
arbitary number of allocations as long as you have enough memory
available :)
Next I will be writing a general allocator for allocations larger
than 4096 bytes which should make SYS_ALLOC syscall complete :)
2023-05-07 23:57:01 +03:00
Bananymous
12e42f40c5
Kernel/LibC: add free function for FixedWidthAllocator
...
I have to rework the syscall API and allocators in process. For
now this works well enough :)
2023-05-07 01:21:50 +03:00
Bananymous
890aa9aa15
BuildSystem: linker -O2 doesn't do anything? hopefully
2023-05-06 19:58:08 +03:00
Bananymous
bcfd838131
Kernel: Add basic fixed width allocator for userspace
...
We have to move process stacks to the general heap and maybe map
kernel to higher half.
2023-05-06 19:58:08 +03:00
Bananymous
9c07add00f
Kernel: Invalid physical addresses from heap are specified now by 0
2023-05-06 17:34:22 +03:00
Bananymous
ab8aac7dcf
Kernel: GDT tss selector is now 16 bit value
2023-05-06 17:34:22 +03:00
Bananymous
f36b94d039
Kernel: MMU can now provide info about virtual address space
2023-05-06 17:34:22 +03:00
Bananymous
92daa831d1
Kernel: ISRs now print pid and tid
2023-05-06 00:10:15 +03:00
Bananymous
e7a170c89f
Kernel: 64 bit MMU now properly identity maps kernel
2023-05-05 14:19:28 +03:00
Bananymous
3c5d3eb8ad
Kernel: TTY input process is now single instance
...
Process sends key events to the active (currently only) tty
2023-04-30 16:11:14 +03:00
Bananymous
55bb0084aa
Kernel: namespace and function renames
...
MMU moved to namespace kernel
Kernel::Memory::Heap moved to just Kernel
MMU::map_{page,range} renamed to identity_map_{page,range}
Add MMU::get_page_flags
2023-04-28 14:48:38 +03:00
Bananymous
acf5660090
Kernel: Add set_tss_stack() to 32 bit
2023-04-28 14:44:23 +03:00
Bananymous
9d7530662f
Kernel: dprintln file name is now relative
...
This makes file names much shorter
2023-04-28 14:43:19 +03:00
Bananymous
a22caa38d2
Kernel: Scheduler updates tss stack on thread execution
2023-04-25 14:49:50 +03:00
Bananymous
dc0f8b383f
Kernel: Usespace threads now have an interrupt stack
2023-04-25 14:49:18 +03:00
Bananymous
f1a0625b61
Kernel: TSS stack can be set after initialization
2023-04-25 14:48:12 +03:00
Bananymous
02b961fd7e
Kernel: Stack pointer out of bounds now panics with a message
2023-04-25 13:40:55 +03:00
Bananymous
6e01e04922
Kernel: Fix bug in Process::create_userspace()
...
We used to write more than we needed to. This could lead to unwanted
page faults
2023-04-25 13:21:28 +03:00
Bananymous
b7c2ea8d46
Kernel: Fix possible dead lock in Process::read()
2023-04-23 14:46:18 +03:00
Bananymous
cd74b2167d
LibC: Write mostly functioning stdio
2023-04-23 14:32:37 +03:00
Bananymous
9b2a577fc3
Kernel: Add ASSERTion to Process::exit()
...
This is just so I don't forget that exit can currently only
be called on the executing thread itself
2023-04-22 19:05:27 +03:00
Bananymous
2dd09163e6
Kernel: Process can now load 32 bit elf files on i386
...
We are page faulting on process exit but I'm investigating
the reason.
2023-04-22 19:03:30 +03:00
Bananymous
fb6add2b4a
Kernel: Fix 32 bit MMU
2023-04-22 18:22:39 +03:00
Bananymous
48445f12ac
Kernel: More proper paging in Elf loading
2023-04-22 18:17:44 +03:00
Bananymous
792fad2a03
Kernel: d{print,warn,error}ln(...) now has a spinlock
2023-04-22 17:58:51 +03:00
Bananymous
cc04990ce3
Kernel: Process now frees up its pages on destruction
2023-04-22 16:54:46 +03:00
Bananymous
7530482cc2
Kernel: Cleanup process creation for userspace
2023-04-22 16:51:50 +03:00
Bananymous
33d8c518e9
Kernel: Fix some deadlocks in the Process
2023-04-22 16:19:57 +03:00
Bananymous
e0ce2394fe
Kernel: Remove obsolete userspace stuff from kernel
2023-04-22 15:38:45 +03:00
Bananymous
fadce063a7
Kernel: Usespace programs are now ran through ELF files
...
only 64 bit elf files are supported for now.
2023-04-22 15:35:32 +03:00
Bananymous
26fe6ad898
Kernel: kmalloc does not dump stack trace
...
dump_stack_trace() page faults and i dont feel like debugging this
now :)
2023-04-21 13:45:13 +03:00
Bananymous
fc71d2f7c4
Kernel: Don't call 'cli' on interrupt
...
This is automatically done because we are using interrupt gates
in the IDT
2023-04-21 11:18:08 +03:00
Bananymous
35e949ef5e
Kernel: Fix syscall return value in 32 bit
2023-04-21 11:08:02 +03:00
Bananymous
9c506ef85b
Kernel: Stack pointer is validated when updated
...
This allows us not to fail stack pointer when in syscall since
interrupts use their own stack
2023-04-21 10:40:24 +03:00
Bananymous
b1c7af38d0
Kernel: Add barebones per process virtual addresses
...
We now assign every (userspace) process its own MMU which we load
in scheduler. This allows every process to have separate virtual
address space.
This is very hackish implementations but it works for now
2023-04-20 00:45:41 +03:00
Bananymous
ea0c9b639f
Kernel: Add some bareboness functionality to map virtual addresses
2023-04-19 23:51:36 +03:00
Bananymous
0030f035be
Kernel: Rename MMU::{un,}allocate... to MMU::{un,}map
...
This is more appropriate name for the behaviour :D
2023-04-19 21:50:30 +03:00
Bananymous
c26529ae86
Kernel: kmalloc will always print debug on failed alloc
2023-04-19 18:05:01 +03:00
Bananymous
e8a0df54b1
Kernel: ATAController will fail to initialize in native mode
2023-04-19 17:29:36 +03:00
Bananymous
33393335c8
Kernel: PCI devices now report their prog_if
2023-04-19 16:43:05 +03:00
Bananymous
c5b02bb9f5
Kernel: Shell fix file reading
...
We were reading 8 bytes at a time instead of the 1024 we were
supposed to :DD
2023-04-19 14:09:23 +03:00
Bananymous
a1047918d2
Kernel: Shell now has exit() command
2023-04-19 12:53:09 +03:00
Bananymous
fd81e31050
Kernel: Fix Process::exit() and where it is called from
...
cksum doesn't seem to work anymore on big files. I have to look
into this. It locks up after couple of seconds...
2023-04-19 12:52:21 +03:00
Bananymous
dcce18799f
Kernel: We now launch Shell again on boot
...
Adding this just before push :D
2023-04-19 00:41:24 +03:00
Bananymous
a9a15ea2c0
Kernel: init2 is now launched as a process instead of thread
...
Also only process can now add threads to scheduler. Nobody should
have raw access to scheduler and everything should be through
Process::current() or irqs (reschedules)
2023-04-19 00:39:06 +03:00
Bananymous
d63716db96
Kernel: Process is not reference counted any more
...
This was not necessary and it made things needlessly complicated
2023-04-19 00:34:18 +03:00
Bananymous
96ac072166
Kernel: Heap allows us to take free pages.
...
The API is kinda weird and will probably be reworked in near future
but this will work for now :)
2023-04-18 10:18:15 +03:00
Bananymous
295a27f16a
Kernel: Panic wont print stacktrace if it has already paniced
...
This prevents stack trace dump to panic and loop
2023-04-18 10:18:15 +03:00
Bananymous
88f60b5e41
Kernel: Map all ACPI tables on initialization
...
This makes their usage much easier and less error prone
They won't mapped be processes when we get to there, so this won't be
a problem
2023-04-18 10:18:15 +03:00
Bananymous
d23604b0d5
Kernel: Handle some Heap edge cases
2023-04-18 10:18:15 +03:00
Bananymous
c5347e6707
Kernel: Reorder boot initialization
...
We now create the TTY as soon as possible so we can show console
output without serial port.
2023-04-18 10:18:15 +03:00
Bananymous
bf0c7b9ae8
Kernel: Heap implementation can now give free pages from all of RAM
2023-04-18 10:18:15 +03:00
Bananymous
0374b68fa1
Kernel: Remove unused file
2023-04-18 10:18:15 +03:00
Bananymous
633929629c
Kernel: Start working on heap
2023-04-18 10:18:15 +03:00
Bananymous
6a3b3213cf
Kernel: Kmalloc now has its memory statically allocated
...
We don't use the memory map given by bootloader since this automatically
maps the memory to a available space.
2023-04-18 10:18:15 +03:00
Bananymous
fdb4eb6042
Kernel: Move kmalloc and MMU to Memory directory
2023-04-18 10:18:15 +03:00
Bananymous
998ae511a3
LibELF: Start implementing elf library
2023-04-18 10:18:15 +03:00
Bananymous
3f9d6f0311
LibC: add needed stubs to build executables with our compiler
2023-04-12 17:53:02 +03:00
Bananymous
8ee63f8264
Kernel: We can create basic userspace processes
...
These are still allocated on the kernel memory
2023-04-12 17:52:36 +03:00
Bananymous
34358b8471
Kernel: Scheduler can now terminate processes threads
2023-04-12 17:49:04 +03:00
Bananymous
5b1af4ec47
Kernel: Debug::dump_stack_trace now 'detects' repeating function
2023-04-12 01:32:41 +03:00
Bananymous
071d7af58a
Kernel: kmalloc does not check for corruptiong unless it cannot allocate
...
We 'don't care' if kmalloc is corrupted unless it prevents us from
allocating memory. Scheduler should be catching stack overflows either
way and is much more efficient
2023-04-12 00:24:02 +03:00
Bananymous
3201c3654e
Kernel: Threads now use only 4 KiB stack :)
2023-04-12 00:22:08 +03:00
Bananymous
6ed3023725
Kernel: Fix TTY spinlock usage
2023-04-12 00:20:04 +03:00
Bananymous
892a63aec5
Kernel: Shell TTY_PRINT is now function instead of macro
...
This makes functions uses way less stack
2023-04-12 00:18:58 +03:00
Bananymous
3fe889d4a4
BuildSystem: GCC will now complain on functions with 1 KiB stack
2023-04-12 00:18:06 +03:00
Bananymous
cafd546ce8
Kernel: kmalloc now detects corruption
...
Kmalloc checks if its nodes have corrupted. This was happening
because of stack overflow.
2023-04-11 23:36:46 +03:00
Bananymous
5810a77cbf
Kernel: Mark Scheduler::start() as noreturn as appropriate
2023-04-11 23:33:20 +03:00
Bananymous
6f7045ead2
Kernel: kernel doesn't allocate large blocks of data on stack
...
We used to allocate 1 KiB blocks on multiple places on stack. This
is a problem, since kernel stack shouldn't have to be too big
2023-04-11 23:31:58 +03:00
Bananymous
40f9a42c00
Kernel: Scheduler will panic if it encounters stack overflow
2023-04-11 23:29:21 +03:00
Bananymous
9abe1f27bb
Kernel: Process now locks the mutex while modifying open files
...
This allows processes to be actually removed from the list instead
of dead locking
2023-04-11 23:28:16 +03:00
Bananymous
aa2aee684b
Kernel: remove message from BAN::Error
...
We don't store the error message anymore in BAN::Error.
Instead we store a error code that can be mapped into a string.
This allows BAN::Error to only take 4 bytes instead of 128.
We should also make some kernel initialization just panic instead
of returning errors since they are required for succesfull boot
anyway.
2023-04-11 23:25:21 +03:00
Bananymous
cfa025acae
BAN: Move RefPtr to its own file and create New.h
...
New.h contains definitions for placement new operators and
BAN::allocator and BAN::dealloctor
2023-04-10 21:07:25 +03:00
Bananymous
781cc78a1f
BuildSystem: Fix header copying to sysroot
...
We used to copy all headers everytime to sysroot which caused
rebuild of the whole os. Now we use the cmake command
'copy_directory_if_different' which seemed to fix this issue :)
2023-04-10 21:07:25 +03:00
Bananymous
f924ac9265
Kernel: Threads can now be terminated mid execution
2023-04-10 21:07:25 +03:00
Bananymous
df6e8a6562
Kernel: Add small wait in ATA driver before reading/writing
...
This allows bochs to boot again
2023-04-10 21:07:25 +03:00
Bananymous
3f01f936a1
Kernel: Fix framepointers on started threads
2023-04-10 21:07:25 +03:00
Bananymous
25ddc24754
BuildSystem: cmake can now build out libc
...
I can't seem to get libc++ build to work...
2023-04-10 21:07:25 +03:00
Bananymous
3fbee2c835
BuildSystem: remove now obsolete include directories from kernel build
2023-04-07 02:25:47 +03:00
Bananymous
2a8dc58b6a
BuildSystem: Cleanup cmake code
...
The buildsystem is kind of a mess. I will be writingn build
instructions soon.
2023-04-06 20:31:10 +03:00
Bananymous
8a8793fd2d
BuildSystem: you can now build the toolchain with cmake
2023-04-06 00:23:02 +03:00
Bananymous
9e0b4132ee
Kernel: Shell now somewhat functions again
...
I will not be fixing the shell implementation until I get to
userspace
2023-04-05 11:37:41 +03:00
Bananymous
68158324f4
Kernel: Fix TTY echo and canonical flag behaviour
2023-04-05 11:35:19 +03:00
Bananymous
a420be6b20
Kernel: Fix ansi control sequence cursor movement
2023-04-05 03:07:52 +03:00
Bananymous
f281543255
Kernel: Add tty to process and make termios modifiable
2023-04-05 02:53:28 +03:00
Bananymous
dcf0969e2d
Kernel: TTY now supports clearing
2023-04-05 02:04:18 +03:00
Bananymous
4f522d337a
Kernel: Add partial support for shell
...
We don't handle arrow keys, and the tty does not know how to clear
the screeen :D
2023-04-05 01:30:58 +03:00
Bananymous
af0979ec32
Kernel: Process can now initialize stdio
...
This allows the use of the fds STD{IN,OUT,ERR}_FILENO
2023-04-05 01:10:25 +03:00
Bananymous
7f95444bb5
Kernel: Start work on making tty a file
...
TTY is now a file that you can read from/write to. I still have
to port shell to use this new interface
2023-04-05 00:56:09 +03:00
Bananymous
783842bac2
Kernel: add virtual write function to inode
2023-04-03 20:29:07 +03:00
Bananymous
e1534ad25b
Kernel: Fix keys in PS2Keymap
2023-04-03 20:25:23 +03:00
Bananymous
ee1f3623ce
Kernel: Fix typo
2023-04-03 19:56:55 +03:00
Bananymous
dffdb51713
BuildSystem: remove non-existent file from kernel CMakeLists.txt
2023-04-03 19:02:25 +03:00
Bananymous
b87dae7e7c
Kernel: Device dev and rdev number is done more properly
...
Also hd* partitions are now 1 indexed instead of 0
2023-04-03 11:43:16 +03:00
Bananymous
2ffee63889
Kernel: Cleaner partition parsing errors
2023-04-03 09:55:49 +03:00
Bananymous
c936aac777
Kernel: Optimize scheduler idling
...
Now after each interrupt we will ask the scheduler to reschedule
if the current thread is the idle thread. This allows semaphore
unblocking to be practically instant when there is only one thread
executing.
Now disk reading is back to ~3 MB/s for single threaded process
2023-04-03 01:51:05 +03:00
Bananymous
46d65471d9
Kernel: ATA now uses irqs instead of polling
...
Reading is now much slower at ~500 kB/s it was around 3 MB/s.
This is probably mostly due semaphore blocking taking atleast
until next reschedule (1 ms itervals). This will be a problem
as long as we are using only single processor.
I could try to use {READ/WRITE}_MULTIPLE commands, but since
most of the disk reads are 2 sectors (inode block size) this
will at most double the speed.
Most efficient speed up would of course be caching disk access
data and inodes overall.
2023-04-03 00:03:38 +03:00
Bananymous
dcc174b62e
Kernel: Move ATADevice to its own file from ATAController
...
The API is kinda weird since device reads/writes go from
ATADevice -> ATAController -> ATADevice
but this is for now atleast necessary since ATAController has(?)
to keep all devices from using the disks at the same time
2023-04-02 18:26:19 +03:00
Bananymous
bdc7a99c59
Kernel: ATA controller waits now before read/write until disk is ready
...
Qemu used to freeze on disk writes but now it seems fine
2023-04-02 05:37:17 +03:00
Bananymous
2aad357c18
BuildSystem: building for 32-bit works now
2023-04-02 05:03:17 +03:00
Bananymous
4c5176f751
BuildSystem: We are now using cmake instead of plain make
...
I have been annoyed for a while since I had to build everything
when running the os since the buildsystem was really bad.
I wanted to rewrite the whole build system and changed to using cmake
:)
2023-04-02 04:07:27 +03:00
Bananymous
cbb0f6be9a
Kernel: cleanup includes
...
I went quickly went through all files since I found some weird
includes :D
2023-04-01 02:14:49 +03:00
Bananymous
a60f8098ee
Kernel: Fix traversing back from mount points
2023-04-01 01:54:35 +03:00
Bananymous
8bffbf64b9
Kernel: Add inodes '.' and '..' to device manager
2023-04-01 01:33:04 +03:00
Bananymous
d91a5bccf4
Kernel: Reads return 0 bytes read at the end of device
...
We used to not have any idea if we where already at the end of device.
Also fixed couple of copy-paste errors from read->write
2023-04-01 00:55:07 +03:00
Bananymous
1ca0d3a3c1
Kernel: Shell cleanup cat command
2023-04-01 00:54:39 +03:00
Bananymous
653f688567
Kernel: Shell 'time' prints the time even if command fails
2023-04-01 00:30:33 +03:00
Bananymous
8b5d8d9f8a
Kernel: Process gets absolute paths for mount
2023-04-01 00:30:11 +03:00
Bananymous
c45ada6ccb
Kernel: fix ext2 failed creation memory leak
2023-04-01 00:22:03 +03:00
Bananymous
db65cfeb8a
Kernel: Cleanup ATA device initialization
2023-03-31 00:58:57 +03:00
Bananymous
a3ba6da6f3
Kernel: Move DeviceManager to its own file
2023-03-30 22:39:45 +03:00
Bananymous
b048630e5b
Kernel: Improve locking in Process, VFS and ATAController
...
We used to block on all process access. This meant that shell
reading the keyboard input would block all VFS access making disk
accesses practically impossible. We now block only when it is
necessary :)
2023-03-30 22:02:16 +03:00
Bananymous
dcee92a6bc
Kernel: Thread is no longer RefCounted
...
This makes developement with Scheduler much easier against compiler
optimizations. I could now remove the pragma GCC optimize stuff.
2023-03-30 19:16:51 +03:00
Bananymous
c2e3b422cc
Kernel: Add Semaphore to block threads
2023-03-30 18:46:33 +03:00
Bananymous
d4c03d3939
Kernel: root partition is now passed from the commandline
2023-03-30 18:46:19 +03:00
Bananymous
8e68d2e3ea
Kernel: Shell can now mount partitions
2023-03-30 15:06:41 +03:00
Bananymous
30c33b55e3
Kernel: Inode::Mode is now a struct so we can have functions in it
2023-03-30 14:41:15 +03:00
Bananymous
e2791e5260
Kernel: StorageDevices and Controllers are now devices
2023-03-30 14:22:15 +03:00
Bananymous
88a8bd659d
Kernel: Add IFBLK, IFLNK, IFSOCK to Inode::Mode
2023-03-30 13:15:46 +03:00
Bananymous
f9cc114907
Kernel: All devices have atime, mtime, ctime at their creation
2023-03-30 13:15:46 +03:00
Bananymous
9a4d603a62
Kernel: Remove the mount test from VFS
2023-03-30 11:43:24 +03:00
Bananymous
78ea4b2207
Kernel: fix stat command and device numbers
2023-03-30 10:43:08 +03:00
Bananymous
ab3cdea548
Kernel: Rewrite mounting code
2023-03-29 21:34:48 +03:00
Bananymous
dd84a2175f
Kernel: Move Partition out of StorageDevice and rename functions
2023-03-29 13:23:01 +03:00
Bananymous
ae05ad3f38
Kernel: Shell commands 'ls' and 'stat' recognize character devices
2023-03-29 11:56:33 +03:00
Bananymous
62fb233eb1
Kernel: DeviceManager is now a 'FileSystem' so it can expose devices
...
Shell reads keyboard through /dev/input :)
2023-03-29 11:50:46 +03:00
Bananymous
426b1482dd
Kernel: Fix keymap numlock behaviour
2023-03-29 03:18:22 +03:00
Bananymous
16d9d29971
Kernel: Remove obsolete KeyboardLayout/
...
This was used by the old input system. Currently keyboard layout is
hardcoded to finnish. But it will be reworked as something read from
the filesystem
2023-03-29 03:09:14 +03:00
Bananymous
fa8e921ee8
Kernel: Rework the whole input system
...
We now use Device abstraction that will allow us to provide devices
to userspace through /dev. Currently Shell reads from first and only
device (it being PS/2 Keyboard).
2023-03-29 03:05:16 +03:00
Bananymous
ea900ad744
Kernel: ACPI unmap_header does not do anything
...
We have to work with MMU mapping/unmapping to be user friendly
2023-03-28 02:56:44 +03:00