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
Andreas Kling
a5caf7ca99
Make the kmalloc global stats variable volatile.
...
I know I'm praying for cargo here, but this does fix a weird issue
where logging the sum_alloc and sum_free globals wouldn't display
symmetric values all the time.
2018-10-24 01:04:06 +02:00
Andreas Kling
82dae8fc90
Add a kmalloc lock. This definitely reduces flakiness.
2018-10-24 00:51:19 +02:00
Andreas Kling
8e27cf2428
Cleanup.
2018-10-24 00:51:09 +02:00
Andreas Kling
57136ad87e
synthfs: generated files should have size=0.
...
This way we don't need to generate the file just to see how big it would get.
2018-10-24 00:50:23 +02:00
Andreas Kling
b40c851fce
Unbreak crashy user process test.
2018-10-24 00:35:07 +02:00
Andreas Kling
3253a23b91
Add a simplified waitpid() so that sh can wait on spawned commands.
2018-10-24 00:20:34 +02:00
Andreas Kling
018da1be11
Generalize the SpinLock and move it to AK.
...
Add a separate lock to protect the VFS. I think this might be a good idea.
I'm not sure it's a good approach though. I'll fiddle with it as I go along.
It's really fun to figure out all these things on my own.
2018-10-23 23:34:05 +02:00
Andreas Kling
e4bfcd2346
Add "times scheduled" field to /proc/summary
2018-10-23 15:59:38 +02:00
Andreas Kling
44045b258c
Teach MM to flush individual TLB entries only.
2018-10-23 15:53:11 +02:00