Bananymous
6b180da4e8
Kernel: Separate scheduler execution and stack loading
...
Not sure if this is actually needed, but this allows actual
executing function to be in clean environment
2023-10-13 16:17:27 +03:00
Bananymous
cf4f5f64a5
Kernel: add NEVER_INLINE and make Interruptable not constructable
2023-10-13 16:17:27 +03:00
Bananymous
5630f64175
Kernel: Add 16 more irq handlers
...
IDT will now panic if trying to assing handler for non supported
irq.
2023-10-13 16:17:27 +03:00
Bananymous
1d61bccfc3
Kernel: Debug temporary debug print just to beginning when full
2023-10-13 12:43:52 +03:00
Bananymous
f842a9255f
Kernel: Allow getting ACPI headers with same signature
2023-10-13 11:24:21 +03:00
Bananymous
72f3c378dd
Kernel: Fix PhysicalRange mapping size
2023-10-13 03:45:01 +03:00
Bananymous
39be6ab099
Kernel: Add temporary terminal output before controlling terminal
...
Starting work on getting this boot on real hardware.
2023-10-13 03:31:36 +03:00
Bananymous
773dcdd3a2
Kernel: Check whether ELF address space can be loaded
...
Before reserving address space in SYS_EXEC verify that ELF address
space is actually loadable. For example when trying to execute the
kernel binary in userspace, binarys address space would overlap with
current kernel address space. Now kernel won't crash anymore and
will just send SIGKILL to the process calling exec*().
2023-10-12 22:59:36 +03:00
Bananymous
f0820e6f24
Shell: Fix parsing $ with unknown character
2023-10-12 22:24:27 +03:00
Bananymous
a2b5e71654
Kernel: Implement AHCI driver
...
SATA drives can now be used with banan-os. This allows much faster
disk access (writing 10 MiB from 30s to 1.5s). This can definitely
be optimized but the main slow down is probably the whole disk
structure in the os.
AHCI drive is now the default when running qemu.
2023-10-12 21:53:48 +03:00
Bananymous
d3e5c8e0aa
Kernel: Generalize ATA device and cleanup code
2023-10-12 21:35:25 +03:00
Bananymous
f4b901a646
Kernel: Add Timer::ns_since_boot()
2023-10-12 21:16:39 +03:00
Bananymous
790064d248
Kernel: Add vaddr/paddr conversion functions to DMARegion
2023-10-12 15:20:05 +03:00
Bananymous
ab8b77406d
Kernel: PCI can now get interrupts for devices
2023-10-11 22:18:58 +03:00
Bananymous
1b9e14a53b
Kernel: PCI cleanup PCI::Device API
2023-10-11 21:52:08 +03:00
Bananymous
d2cfc843e4
BAN: Optional can now be constructed from another Optional
...
Also fix bug in release_value() where we did not call the
destructor.
2023-10-11 20:10:06 +03:00
Bananymous
521513bed2
Kernel: make DMARegion::create static and fix mapping
2023-10-08 18:18:36 +03:00
Bananymous
400db176d1
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
211cad03ff
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
8a9816d6e0
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
03d2bf4002
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
f071240b33
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
27364f64a6
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
bcf62c5f2e
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
4d6322ff9c
BuildSystem: Don't strip kernel
2023-10-05 18:52:44 +03:00
Bananymous
2eef581737
BuildSystem: Try to set compiler only if it exists
2023-10-05 18:52:05 +03:00
Bananymous
7ce8e2d57b
cat: Use write() instead of puts to print file contents
...
This allows printing files that contain null bytes behave more like
you would expect
2023-10-04 22:16:19 +03:00
Bananymous
e780eaa45f
meminfo: Print allocated physical memory percentage
2023-10-03 10:39:27 +03:00
Bananymous
44cb0af64f
Shell: source $HOME/.shellrc if found on Shell startup
2023-10-03 10:39:27 +03:00
Bananymous
bb0989fdef
Shell: Implement sourcing scripts
2023-10-03 10:24:10 +03:00
Bananymous
f0b6844feb
meminfo: Add process command line to the output
2023-09-30 23:17:31 +03:00
Bananymous
b712c70c75
Kernel: Expose command line and environment to /proc
2023-09-30 23:01:33 +03:00
Bananymous
797ca65c66
Kernel: Add physical memory info to /proc/{pid}/meminfo
2023-09-30 22:11:45 +03:00
Bananymous
762b7a4276
Userspace: Add meminfo command that parses /proc/{pid}/meminfo
2023-09-30 21:20:53 +03:00
Bananymous
a511441f7e
Kernel: /proc/{pid}/meminfo now reports per process memory usage
2023-09-30 21:20:18 +03:00
Bananymous
cd61d710df
Kernel: Add procfs that contains only pids
2023-09-30 21:19:36 +03:00
Bananymous
f88ad7efcd
Kernel: All process' memory areas can report their virtual mem usage
2023-09-30 21:15:46 +03:00
Bananymous
38320018dc
LibC: Implement stpcpy since gcc seems to need it
...
gcc seems to optimize some calls to strcpy to stpcpy
2023-09-30 20:58:19 +03:00
Bananymous
d883d212b1
Kernel/LibC: dirent now contains file type
2023-09-30 20:46:57 +03:00
Bananymous
dedb2a2399
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
8604c55de8
Kernel: Add API for RamDirectoryInodes to delete containing inodes
2023-09-30 19:22:30 +03:00
Bananymous
e949e8550c
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
eb5c6cf736
BAN: Remove endianness functions from Math
...
There is now a Endianness.h for these. The functions were super slow.
2023-09-29 19:38:07 +03:00
Bananymous
94ce2c97be
Shell: Quick fix to not freeze for multiple seconds
...
When sync is writing to disk, it reserves whole disk to itself.
This commit makes Shell to read username only once from getpwuid().
We used to get username every time prompt was printed.
2023-09-29 19:20:48 +03:00
Bananymous
3f164c6b82
Userspace: Implement basic test for MAP_SHARED
2023-09-29 18:59:37 +03:00
Bananymous
f953f3d3ff
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
9fc75fe445
Kernel: Don't write to stat_loc on SYS_WAIT if it is null
2023-09-29 18:31:44 +03:00
Bananymous
7a5bb6a56b
Userspace: Implement cat-mmap
...
This behaves exactly as cat, but uses mmap to read the file.
2023-09-29 17:24:55 +03:00
Bananymous
d54c6b7f6b
LibC: Fix mmap()
...
mmap() did not pass fildes to the syscall structure.
2023-09-29 17:24:21 +03:00
Bananymous
db5d6a7f80
Kernel: Implement MAP_PRIVATE file mappings
...
mmap() now supports mapping files with MAP_PRIVATE.
2023-09-29 17:23:42 +03:00