Andreas Kling
8f91a47aeb
Add some basic field width support to printf().
...
Use it to make "ls" output a bit better. Also sys$spawn now fails with EACCES
if the path is not a file that's executable by the current uid/gid.
2018-10-27 16:43:03 +02:00
Andreas Kling
de2fb183cc
Rename "kernel map" concept to just "ksyms"
2018-10-27 15:02:39 +02:00
Andreas Kling
9a71c7759a
Implement loading of linked ELF executables.
...
This took me a couple hours. :^)
The ELF loading code now allocates a single region for the entire
file and creates virtual memory mappings for the sections as needed.
Very nice!
2018-10-27 14:56:52 +02:00
Andreas Kling
99ee6acd69
Enable A20 line at boot.
2018-10-27 14:09:33 +02:00
Andreas Kling
601d0d1739
Better int hashing. This was going to bite me sooner or later.
2018-10-27 09:33:24 +02:00
Andreas Kling
ec07761d0f
Implement waitpid() support for getting the waitee's exit code.
2018-10-27 01:24:22 +02:00
Andreas Kling
5cfeeede7c
Remove the obsolete "Userspace" stuff.
2018-10-27 00:41:23 +02:00
Andreas Kling
42c88b5f2d
Turn off the floppy drive after the boot loader is finished.
2018-10-27 00:40:42 +02:00
Andreas Kling
3db8d7ae1a
Use Unix::stat for sys$lstat().
2018-10-27 00:29:31 +02:00
Andreas Kling
509e5f9952
Add some basic address validation to syscalls.
...
This is extremely ineffcient, but it doesn't really matter yet.
2018-10-27 00:29:24 +02:00
Andreas Kling
2716a9e2d7
Greatly improve /proc/PID/stack by tracing the ebp frame chain.
...
I also added a generator cache to FileHandle. This way, multiple
reads to a generated file (i.e in a synthfs) can transparently
handle multiple calls to read() without the contents changing
between calls.
The cache is discarded at EOF (or when the FileHandle is destroyed.)
2018-10-27 00:14:24 +02:00
Andreas Kling
c928b06218
Add a very hackish /proc/PID/stack.
...
It walks the stack and identifies anything that looks like a kernel symbol.
This could be a lot more sophisticated.
2018-10-26 22:33:15 +02:00
Andreas Kling
81627cf7d5
Add a simple /proc/mounts that enumerates the current VFS mounts.
2018-10-26 18:43:25 +02:00
Andreas Kling
a447359916
Add a /proc/kmalloc stats file.
2018-10-26 18:28:25 +02:00
Andreas Kling
edb81a635c
Fix bug where you couldn't "cd .." into the root of a mounted fs.
2018-10-26 18:19:31 +02:00
Andreas Kling
a32b3a3ddf
Implement /proc/PID/vm.
...
Refactored SyntheticFileSystem to maintain an arbitrary directory structure.
ProcFileSystem creates a directory entry in /proc for each new process.
2018-10-26 17:44:19 +02:00
Andreas Kling
10347b9ae8
Add ASSERT_INTERRUPTS_DISABLED in Task::fromPID().
2018-10-26 15:11:29 +02:00
Andreas Kling
63e5583c18
Properly null-terminate the argv list created by sh.
2018-10-26 15:04:20 +02:00
Andreas Kling
1c45b28da6
Add sys$uname() and a /bin/uname utility.
2018-10-26 14:57:26 +02:00
Andreas Kling
384e2f24d4
Add per-task limit for open fd's. Hard-coded at 16 for now.
2018-10-26 14:30:38 +02:00
Andreas Kling
2749e7f1c2
Implement sys$chdir() and teach sh+ls to cd around and browse different dirs.
2018-10-26 14:24:11 +02:00
Andreas Kling
ac738b03d6
Add memcpy() and strcmp() to LibC.
2018-10-26 13:32:13 +02:00
Andreas Kling
0af9254812
If spawning a task fails after we did a partial ELF load, remap current.
...
This is an annoying issue. It'd be nice if this code didn't have to worry
about preserving the calling task's mappings.
2018-10-26 12:22:22 +02:00
Andreas Kling
546ddd7de0
Remove logspam in /dev/{full,null,zero} now that they work just fine.
...
Also don't echo anything to console when putch'ing '\0'.
2018-10-26 11:27:42 +02:00
Andreas Kling
6312c3f253
Fix mixup between /dev/null and /dev/zero device registration.
2018-10-26 11:25:46 +02:00
Andreas Kling
df87dda63c
Implement argc/argv support for spawned tasks.
...
Celebrate the new functionality with a simple /bin/cat implementation. :^)
2018-10-26 11:16:56 +02:00
Andreas Kling
53abfa7ea1
Add sys$gethostname and /bin/hostname
2018-10-26 09:54:29 +02:00
Andreas Kling
3faaa3e04a
Add /bin/false and /bin/true for fun. :^)
2018-10-25 21:39:37 +02:00
Andreas Kling
dc6f57f19c
Add gettimeofday() syscall and LibC wrappers gettimeofday() and time().
...
This only has second accuracy right now, I'll work out subseconds later.
2018-10-25 17:36:18 +02:00
Andreas Kling
5978185242
Add a "sleep" syscall that sleeps for N seconds.
2018-10-25 13:56:03 +02:00
Andreas Kling
c6f2890d8e
Implement a basic way for read() to block.
...
FileHandle gets a hasDataAvailableForRead() getter.
If this returns true in sys$read(), the task will block(BlockedRead) + yield.
The fd blocked on is stored in Task::m_fdBlockedOnRead.
The scheduler then looks at the state of that fd during the unblock phase.
This makes "sh" restful. :^)
There's still some problem with the kernel not surviving the colonel task
getting scheduled. I need to figure that out and fix it.
2018-10-25 13:09:56 +02:00
Andreas Kling
ba56f4afde
If no context switch occurs, add 1 to the timesScheduled() for current.
...
This seems like more accurate accounting.
2018-10-25 12:45:29 +02:00
Andreas Kling
571dc8234f
Make the stage2 init task sleep dreamily when finished.
...
Something is off about scheduling, I don't think the kernel is handing
out all the available time to processes that are available to run.
2018-10-25 12:40:17 +02:00
Andreas Kling
fdc782c1d1
Add a very naive block cache to the DiskBackedFileSystem.
...
This would be a lot better as an LRU. Right now it's a 32-slot
hash table with random eviction.
2018-10-25 12:36:50 +02:00
Andreas Kling
82bbfa8496
Keyboard should support the space character (jeez!)
2018-10-25 12:10:25 +02:00
Andreas Kling
260b14e505
Implement errno in LibC.
...
This also meant I had to implement BSS (SHT_NOBITS) sections in ELFLoader.
I also added an strerror() so we can print out what the errors are.
2018-10-25 12:06:50 +02:00
Andreas Kling
434b6a8688
Unify the Task constructors.
...
There's now Task::create() and Task::createKernelTask().
2018-10-25 11:17:47 +02:00
Andreas Kling
dff516f6d0
Remove unused Task states.
2018-10-25 10:51:51 +02:00
Andreas Kling
4bd69d4352
Remove old DatBuffer class.
...
(also increase the number of sectors loaded by the bootloader in the
since I just noticed we were at the limit. This is not the ideal way
of doing this.)
2018-10-25 10:50:30 +02:00
Andreas Kling
de7c54545a
Remove age-old IPC stuff that wasn't working anyway.
...
I'll make a fresh start with IPC code when I get there.
2018-10-25 10:39:39 +02:00
Andreas Kling
ce126120d1
Add a few more InterruptDisablers.
2018-10-25 10:33:10 +02:00
Andreas Kling
1c49b34b93
Selectively disable interrupts in MM.
...
Also added an ASSERT_INTERRUPTS_DISABLED() macro.
2018-10-25 10:15:28 +02:00
Andreas Kling
86a547dcac
Add parent PIDs to /proc/summary
2018-10-25 10:15:13 +02:00
Andreas Kling
16f318408d
ELFLoader should fail with an error message for unresolved symbols.
2018-10-25 10:02:04 +02:00
Andreas Kling
ec1d16b307
Add a "pwd" utility to userland.
...
It's implemented as a separate process. How cute is that.
Tasks now have a current working directory. Spawned tasks inherit their
parent task's working directory.
Currently everyone just uses "/" as there's no way to chdir().
2018-10-24 14:28:22 +02:00
Andreas Kling
eb4074bb9d
Put more logspam behind EXT2_DEBUG.
2018-10-24 13:38:53 +02:00
Andreas Kling
5f36a5f22e
Add an lstat() syscall and use it to make "ls" nicer.
2018-10-24 13:19:36 +02:00
Andreas Kling
bca4b71bfa
Lots of hacking to make a very simple "ls" utility.
...
I added a dead-simple malloc that only allows allocations < 4096 bytes.
It just forwards the request to mmap() every time.
I also added simplified versions of opendir() and readdir().
2018-10-24 12:50:07 +02:00
Andreas Kling
0c5bbac86e
Add an InterruptDisabler helper class and use that for kmalloc.
...
The naive spinlock was not nearly enough to protect kmalloc from
reentrancy problems.
I don't want to deal with coming up with a fancy lock for kmalloc
right now, so I made an InterruptDisabler thingy instead.
It does CLI and then STI iff interrupts were previously enabled.
2018-10-24 11:07:53 +02:00
Andreas Kling
9a296d63f3
Add simplified mmap() and munmap() syscalls.
2018-10-24 09:48:41 +02:00