Andreas Kling
2f74c2f430
Add basic PTY support.
...
For now, there are four hard-coded PTYs: /dev/pt{m,s}[0123]
Use this in the Terminal to open a pty pair and spawn a shell.
2019-01-15 06:30:19 +01:00
Andreas Kling
6d8043767e
Start working on a graphical Terminal program.
2019-01-15 04:30:55 +01:00
Andreas Kling
b0e3f73375
Start refactoring the windowing system to use an event loop.
...
Userspace programs can now open /dev/gui_events and read a stream of GUI_Event
structs one at a time.
I was stuck on a stupid problem where we'd reenter Scheduler::yield() due to
having one of the has_data_available_for_reading() implementations using locks.
2019-01-14 14:42:49 +01:00
Andreas Kling
8f8c8d1ca3
Start working on a GUI kernel API.
2019-01-13 02:02:34 +01:00
Andreas Kling
edc827077e
Optimize WindowManager::flush() with fast_dword_copy().
2019-01-12 21:45:45 +01:00
Andreas Kling
e740f1195a
Add a simple PS/2 mouse device.
...
It's not hooked up to anything just yet, but it does read movement deltas.
2019-01-11 02:28:53 +01:00
Andreas Kling
659c54e32b
Switch into 1024x768x32bpp VESA LFB mode at boot.
...
This is going to be pretty cool once I can hook up the Widgets/ code to it.
2019-01-09 02:29:11 +01:00
Andreas Kling
355201f34d
Vector<String>() -> { }
2019-01-08 22:28:11 +01:00
Andreas Kling
4b6a8f8a08
Unbreak ksym loading and make reading /proc/PID/stack not crash.
2019-01-01 02:20:01 +01:00
Andreas Kling
3f3535213b
Fix some issues uncovered by the spawn stress test.
2018-12-26 22:02:24 +01:00
Andreas Kling
f6179ad9f9
Add slightly better kmalloc_aligned() and kfree_aligned().
...
Process page directories can now actually be freed. This could definitely
be implemented in a nicer, less wasteful way, but this works for now.
The spawn stress test can now run for a lot longer but eventually dies
due to kmalloc running out of memory.
2018-12-26 21:47:15 +01:00
Andreas Kling
2f010e941c
Unbreak the spawn stress test.
2018-12-26 20:57:51 +01:00
Andreas Kling
033a42b580
The syncd loop can just be a lambda.
2018-12-24 23:10:48 +01:00
Andreas Kling
503e32552c
Move kernel symbolication code out of init.cpp and into its own KSym files.
...
Also use a simple array of { dword, const char* } for the KSyms and put the
whole shebang in kmalloc_eternal() memory. This was a fugly source of
kmalloc perma-frag.
2018-12-24 23:01:09 +01:00
Andreas Kling
ec1c487dcd
Yet another pass of style fixes.
2018-12-21 02:10:45 +01:00
Andreas Kling
89040cdc99
Add a "syncd" kernel process that periodically calls sync().
2018-12-20 02:41:55 +01:00
Andreas Kling
f31e1ceab0
Move InlineLinkedList to AK.
2018-12-03 01:18:54 +01:00
Andreas Kling
f6e27c2abe
More coding style changes.
2018-12-03 00:39:25 +01:00
Andreas Kling
44036f32bc
Move ELFLoader code into Kernel/.
2018-12-02 20:27:08 +01:00
Andreas Kling
9d05f6b7a7
Make bash-2.05b build with minimal changes.
...
This is really neat. :^)
2018-11-17 00:14:07 +01:00
Andreas Kling
2529925fe9
Some more renaming:
...
FileSystem -> FS
SyntheticFileSystem -> SynthFS
ProcFileSystem -> ProcFS
Ext2FileSystem -> Ext2FS
Ext2Inode -> Ext2FSInode
2018-11-15 17:13:10 +01:00
Andreas Kling
396a32835b
A pass of style/naming cleanup in VFS.
2018-11-15 15:10:30 +01:00
Andreas Kling
457a5df7d5
Rename:
...
VirtualFileSystem -> VFS
VirtualFileSystem::Node -> Vnode
2018-11-15 14:43:10 +01:00
Andreas Kling
26852a8363
Add metadata to CoreInode.
2018-11-13 13:32:16 +01:00
Andreas Kling
19b9401487
Reduce kmalloc() traffic in directory iteration.
...
Pass the file name in a stack-allocated buffer instead of using an AK::String
when iterating directories. This dramatically reduces the amount of cycles
spent traversing the filesystem.
2018-11-13 00:17:30 +01:00
Andreas Kling
d5d45d1088
Rage hacking to get bash to run. It finally runs. So cool! :^)
2018-11-11 15:38:07 +01:00
Andreas Kling
2ac5e14c08
Merge VGA into VirtualConsole.
2018-11-10 16:26:18 +01:00
Andreas Kling
b8264e7d47
Merge Disk namespace into the IDEDiskDevice class.
2018-11-10 15:15:31 +01:00
Andreas Kling
8a865c11ec
Pre-size the ksyms vector for speedier loading.
...
Also show loading progress on the screen because it looks neat.
2018-11-09 20:40:39 +01:00
Andreas Kling
47b7eeda44
Fix all current build warnings in the kernel.
2018-11-09 10:03:21 +01:00
Andreas Kling
e71cb1c56b
Fix some paging related bugs exposed by the spawn stress test.
...
- Process::exec() needs to restore the original paging scope when called
on a non-current process.
- Add missing InterruptDisabler guards around g_processes access.
- Only flush the TLB when modifying the active page tables.
2018-11-09 01:25:31 +01:00
Andreas Kling
3b2dcd5929
Add a VMO pointer to VNode.
...
This way, if anyone tries to map an already mapped file, we share the VMO.
2018-11-08 15:39:26 +01:00
Andreas Kling
1dbc340da8
Get rid of the undertaker and have waitpid() be the reaper.
...
For dead orphans, the scheduler calls reap().
2018-11-07 23:59:49 +01:00
Andreas Kling
43f40a3050
Finally unbreak the colonel process and make it the true idle process.
2018-11-07 23:14:56 +01:00
Andreas Kling
39d2fcbbee
Move the scheduler code to its own class.
...
This is very mechanical.
2018-11-07 22:15:02 +01:00
Andreas Kling
6304c771dd
Some refactor and style tweaks.
2018-11-07 21:38:18 +01:00
Andreas Kling
83172e6a4b
Rename FileHandle to FileDescriptor.
2018-11-07 11:37:54 +01:00
Andreas Kling
3024167cbd
Change syscall naming scheme.
2018-11-06 13:33:54 +01:00
Andreas Kling
2d045d2a64
Implement COW pages! :^)
...
sys$fork() now clones all writable regions with per-page COW bits.
The pages are then mapped read-only and we handle a PF by COWing the pages.
This is quite delightful. Obviously there's lots of work to do still,
and it needs better data structures, but the general concept works.
2018-11-05 13:48:07 +01:00
Andreas Kling
422b5403e5
Merge ExecSpace into ELFLoader.
2018-11-04 13:52:53 +01:00
Andreas Kling
dd060d0fa8
Share code between spawn() and exec() implementations.
...
Okay, now there's only one ELF loading client in the process launch code.
2018-11-03 10:55:02 +01:00
Andreas Kling
90ddbca127
Free physical pages allocated for a process's page directory on exit.
...
Also use a ProcessPagingScope instead of region aliasing to implement
create-process ELF loading.
2018-11-01 23:08:10 +01:00
Andreas Kling
c70afd045e
Use a freelist for GDT entries.
...
Tweak the kmalloc space layout a bit. Get the spawn stress test up
and running again.
2018-11-01 16:23:12 +01:00
Andreas Kling
3a901ae36d
Way tighter locking in process creation.
...
We no longer disable interrupts around the whole affair.
Since MM manages per-process data structures, this works quite smoothly now.
Only procfs had to be tweaked with an InterruptDisabler.
2018-11-01 14:41:49 +01:00
Andreas Kling
dfaa2b6b02
Convert VirtualConsole to the new coding style.
...
I'm still playing around with finding a style that I like.
This is starting to feel pleasing to the eye. I guess this is how long
it took me to break free from the habit of my previous Qt/WK coding style.
2018-11-01 14:11:22 +01:00
Andreas Kling
3e532ac7b6
Process now maps regions immediately when they are allocated.
...
This avoids having to do a separate MM.mapRegionsForTask() pass.
Also, more Task => Process renaming that I apparently hadn't saved yet.
2018-11-01 13:15:46 +01:00
Andreas Kling
c45f166c63
More work on per-process page directories. It basically works now!
...
I spent some time stuck on a problem where processes would clobber each
other's stacks. Took me a moment to figure out that their stacks
were allocated in the sub-4MB linear address range which is shared
between all processes. Oops!
2018-11-01 11:36:25 +01:00
Andreas Kling
9a086b2d35
Add a kmalloc_eternal() for things that will never be destroyed.
2018-10-31 23:19:15 +01:00
Andreas Kling
dec5683e9c
Snazz up the kprintf() output a bit by giving it its own color.
2018-10-31 20:14:23 +01:00
Andreas Kling
511ed4c4de
Snazz up the sh prompt a bit. Add the current tty to it.
2018-10-31 01:21:56 +01:00