Commit Graph

50 Commits

Author SHA1 Message Date
Justin C. Miller
67b9f45004 Offset-map the entire offset region with 1G pages
Instead of building nested page tables for the offset region, just
offset map the entire thing into kernel memory with one PDP mapping
1GiB large pages. This is more efficient and avoids the "need a
page table to map in a page table" dependency loop.
2019-03-09 14:55:48 -08:00
Justin C. Miller
2035fffa1c Fix loading large process images.
2MiB large pages were being used for any large page mapping, but the
page manager doesn't correctly handle them everywhere yet. Now only
allow them for offset pointers (eg MMIO space) that will never be
unmapped.
2019-03-09 13:10:10 -08:00
Justin C. Miller
97ac3c09fa Implement initial fork syscall 2019-03-09 12:18:21 -08:00
Justin C. Miller
8cdc39fdee Switch page_manager to use frame_allocator.
Removed the frame allocation logic from page_manager and replaced it
with using an instance of frame_allocator instead. This had several
major ripple effects:

- memory_initalize() had to change to support this new world
  - Where to map used blocks is now passed as a flag, since blocks don't
    track their virtual address anymore
  - Instead of the complicated "find N contiguous pages that can be
    mapped in with one page table", we now just have the bootloader give
    us some (currently 64) pages to use both for tables and scratch
    space.
  - frame_allocator initialization was split into two steps to allow
    mapping used blocks before std::move()ing them over
2019-02-28 00:37:00 -08:00
Justin C. Miller
579f6f64e6 First step of moving bootloader to C++ 2019-02-03 01:38:12 -08:00
Justin C. Miller
523d0b3b8c sysroot and cross-compiler based build WIP 2019-01-17 00:51:45 -08:00
Justin C. Miller
cef0a71bce Use uintptr_t instead of addr_t
They're never actually going to change independently, and it's also
brining in kutil headers more places than they should be.
2018-09-20 09:37:30 -07:00
Justin C. Miller
5e6769036c APIC timer calibration
Now the APIC timer is calibrated against the PIT, and the interval for
timer_enable takes a number of microseconds instead of raw ticks and a
divisor.
2018-09-16 18:56:01 -07:00
Justin C. Miller
1308864061 MSR and syscall changes
- Moved MSR code to separate files with an enum class
- Implemented syscall_enable in C++ using new MSR calls
2018-09-15 00:37:49 -07:00
Justin C. Miller
5808599005 Getting rid of 'boogity!'.. end of an era.
Since I'm doing a lot of work on task scheduling, 'boogity!' simply
isn't the "we're all good and we're done!" message that it used to be.
2018-09-12 20:51:50 -07:00
Justin C. Miller
593cda3ee8 Convert page_block to use kutil::linked_list
- Created a new linked_list-based slab allocator
- Simplified memory bootstrap code by using the slab allocator and
  linked_lists
2018-09-11 20:46:48 -07:00
Justin C. Miller
e7a509176d Move makerd to TOML-based manifest
Added the cpptoml library (and license), and moved to using that for
the initrd manifest. It's now possible to specify the `executable`
flag for files, and the kernel correctly only launches new processes
for the initrd files marked `executable`.
2018-09-08 12:54:35 -07:00
Justin C. Miller
585abe9a18 Simple ELF program loader
Now any initrd file is treated like a program image and passed to the
loader to load as a process. Very rudimentary elf loading just allocates
pages, copies sections, and sets the ELF's entrypoint as the RIP to
iretq to.
2018-09-06 01:35:56 -07:00
Justin C. Miller
1758ee4215 Initial ramdisk support
- Create initrd library to support definitions and loading
- Allow tools compiled for the host machine to be built by wscript
- Create makerd tool to build initrd from manifest
- Move screenfont to initrd, so don't load framebuffer initially
2018-09-05 22:45:30 -07:00
Justin C. Miller
d5b8902d8f Moving the rest (except ACPI tables) to high mem
Also the debug messaging to verify it.
2018-09-03 15:15:19 -07:00
Justin C. Miller
799fbbdd10 _Actually_ move the kernel to the last TiB.
More work on process page tables, including only mapping the last 2 pml4
entries (the highest 1TiB of the address space, ie, kernel space) into a
new table.

Includes the work of actually moving the kernel there, which I had
apparently done in name only previously. Oops.
2018-09-01 14:54:12 -07:00
Justin C. Miller
cd09c17d71 Commented out CPUID log messages, they're never differnet under qemu 2018-08-27 06:41:09 -07:00
Justin C. Miller
24ccf65aba WIP ring3 2018-05-21 09:07:52 -07:00
Justin C. Miller
bfaab294e6 Set up initial task switching (ring0 only) 2018-05-21 09:07:52 -07:00
Justin C. Miller
4005e9e791 Split gdt.* from interrupts.* 2018-05-21 09:07:52 -07:00
Justin C. Miller
0d75cc999c Add GPT partition handling as virtual block devices 2018-05-16 10:14:40 -07:00
Justin C. Miller
93e60cc136 Give kassert its own vector instead of DBZ 2018-05-15 21:38:44 -07:00
Justin C. Miller
716109bab5 Add block device management to device manager 2018-05-12 20:27:46 -07:00
Justin C. Miller
0684fcf7e9 Separate read function into blocking and async portions 2018-05-12 20:16:25 -07:00
Justin C. Miller
289104cde0 Enable AHCI interrupts.
* Implement MSI style interrupts
* Move interrupt handling to device_manager for IRQs
* Give device_manager the ability to allocate IRQs
* Move achi::port to an interrupt-based scheme
2018-05-12 18:38:47 -07:00
Justin C. Miller
b389e75d33 Move PCI classes to separate files 2018-05-09 01:21:30 -07:00
Justin C. Miller
9128bfc5f1 Switch to clang and improve cpprt 2018-05-09 01:17:18 -07:00
Justin C. Miller
0f54630725 Move memory_manager and assert into kutil. 2018-05-08 01:11:03 -07:00
Justin C. Miller
ff3bd640f0 Add simple vector implementation to kutil for device_manager 2018-05-07 09:47:34 -07:00
Justin C. Miller
abb347e1a8 Implement free() to finish buddy allocator 2018-05-07 00:59:45 -07:00
Justin C. Miller
cce892e92f Load ELF file by sections to get addresses right 2018-05-06 22:03:44 -07:00
Justin C. Miller
20edb87505 Move block list dump to separate method in page manager 2018-05-06 01:37:39 -07:00
Justin C. Miller
34156c55ae Add simple stack trace to exception handler 2018-05-05 17:12:02 -07:00
Justin C. Miller
569bc243f1 Fix bug in log::enable 2018-05-05 15:33:56 -07:00
Justin C. Miller
d7506b6aaf Rename intr log to apic, remove debug defaults 2018-05-05 11:02:41 -07:00
Justin C. Miller
33012f35ef Re-integrate framebuffer console 2018-05-03 22:01:33 -07:00
Justin C. Miller
d9fe457b44 Add beginning basic serial driver 2018-05-03 00:08:22 -07:00
Justin C. Miller
59700b07db Add initial IO APIC support
- IO APIC vector mapping
- Legacy PIC disable
- Real interrupts happening
2018-05-02 16:46:37 -07:00
Justin C. Miller
428e4563d0 Add initial classes representing APIC 2018-05-01 01:03:19 -07:00
Justin C. Miller
2d4e7cfdee Check CPUID info, switch cpu flag to Broadwell 2018-04-30 08:25:35 -07:00
Justin C. Miller
a845fee689 Remove test kalloc from main 2018-04-29 18:09:19 -07:00
Justin C. Miller
b3e49590a7 Add logging framework 2018-04-28 19:18:53 -07:00
Justin C. Miller
358837ed69 Implement first-pass simple virtual memory manager 2018-04-28 02:17:17 -07:00
Justin C. Miller
25b9625635 paging finally works 2018-04-25 19:53:22 -07:00
Justin C. Miller
bed882f41c Enable paging WIP 2018-04-25 10:48:14 -07:00
Justin C. Miller
94de87ef86 Refactor screen ouput from main console code 2018-04-24 09:32:57 -07:00
Justin C. Miller
57abb03deb Rearrange memory manager into two classes.
page_manager and memory_manager are now separate, and are also pre
allocated in the kernel so they don't have to allocate themselves.
2018-04-21 17:34:33 -07:00
Justin C. Miller
da404f520d Rearrange memory bootstrapping code.
Move EFI-related code and initial memory manager bootstrap code
to memory_bootstrap.cpp, move memory page structs to their own
memory_page.h/cpp files.
2018-04-21 02:52:52 -07:00
Justin C. Miller
e8866abc7a Bootstrap in-kernel memory management 2018-04-20 02:15:56 -07:00
Justin C. Miller
2050b89334 Move src/modules/main -> src/kernel 2018-04-17 09:45:05 -07:00